diff -Nru ruby-ruby-parser-3.11.0/.autotest ruby-ruby-parser-3.15.1/.autotest --- ruby-ruby-parser-3.11.0/.autotest 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/.autotest 2021-01-18 16:48:25.000000000 +0000 @@ -7,20 +7,20 @@ Autotest.add_hook :initialize do |at| at.extra_files << "../../sexp_processor/dev/lib/pt_testcase.rb" at.libs << ":../../sexp_processor/dev/lib" - at.add_exception "unit" - at.add_exception "coverage" - at.add_exception "coverage.info" at.add_exception ".diff" + at.add_exception ".rdoc" + at.add_exception ".yml" + at.add_exception ".txt" at.add_exception ".output" - at.add_exception "lib/ruby18_parser.rb" - at.add_exception "lib/ruby19_parser.rb" - at.add_exception "lib/ruby20_parser.rb" - at.add_exception "lib/ruby21_parser.rb" - at.add_exception "lib/ruby22_parser.rb" - at.add_exception "lib/ruby20_parser.y" - at.add_exception "lib/ruby21_parser.y" - at.add_exception "lib/ruby22_parser.y" - at.add_exception "lib/ruby_lexer.rex.rb" + at.add_exception "bin" + at.add_exception "compare" + at.add_exception "coverage" + at.add_exception "coverage.info" + at.add_exception "misc" + + Dir["lib/ruby??_parser.{rb,y}"].each do |f| + at.add_exception f + end Dir["gauntlet*"].each do |f| at.add_exception f @@ -30,12 +30,12 @@ at.testlib = "minitest/autorun" at.add_mapping(/^lib\/.*\.y$/) do |f, _| - g = File.basename(f, ".y").gsub("_", "_?").gsub(/1[89]|2[012]/, '') + g = File.basename(f, ".y").gsub("_", "_?").gsub(/2\d/, '') at.files_matching %r%^test/.*#{g}.rb$% end at.add_mapping(/^lib\/.*\.yy$/) do |f, _| - g = File.basename(f, ".yy").gsub("_", "_?").gsub(/1[89]|2[012]/, '') + g = File.basename(f, ".yy").gsub("_", "_?") at.files_matching %r%^test/.*#{g}.rb$% end @@ -52,27 +52,16 @@ at.files_matching(/test_.*rb$/) end - %w(TestEnvironment TestStackState).each do |klass| + %w(TestEnvironment TestStackState TestValueExpr).each do |klass| at.extra_class_map[klass] = "test/test_ruby_parser_extras.rb" end - %w(TestRuby18Parser TestRuby19Parser TestRuby20Parser TestRuby21Parser TestRuby22Parser TestRuby23Parser TestParseTree).each do |klass| # HACK - at.extra_class_map[klass] = "test/test_ruby_parser.rb" + Dir["lib/ruby??_parser.rb"].each do |s| + n = s[/\d+/] + at.extra_class_map["TestRubyParserV#{n}"] = "test/test_ruby_parser.rb" end end Autotest.add_hook :run_command do |at, _| system "rake parser lexer DEBUG=1" end - -class Autotest - def ruby - File.expand_path "~/.multiruby/install/1.9.3-p194/bin/ruby" - end -end if ENV["R19"] - -class Autotest - def ruby - File.expand_path "~/.multiruby/install/2.0.0-p195/bin/ruby" - end -end if ENV["R20"] diff -Nru ruby-ruby-parser-3.11.0/bin/ruby_parse ruby-ruby-parser-3.15.1/bin/ruby_parse --- ruby-ruby-parser-3.11.0/bin/ruby_parse 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/bin/ruby_parse 2021-01-18 16:48:25.000000000 +0000 @@ -26,6 +26,8 @@ end begin + time = (ENV["RP_TIMEOUT"] || 10).to_i + ARGV.each do |file| rp = RubyParser.new loc = `wc -l #{file}`.strip.to_i @@ -45,7 +47,7 @@ begin begin rp.reset - r = rp.parse(File.binread(file), file) + r = rp.process(File.binread(file), file, time) pp r unless $q good += 1 rescue SyntaxError => e diff -Nru ruby-ruby-parser-3.11.0/bin/ruby_parse_extract_error ruby-ruby-parser-3.15.1/bin/ruby_parse_extract_error --- ruby-ruby-parser-3.11.0/bin/ruby_parse_extract_error 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/bin/ruby_parse_extract_error 2021-01-18 16:48:25.000000000 +0000 @@ -1,44 +1,20 @@ #!/usr/bin/ruby -ws -$d ||= false -$d ||= ENV["DELETE"] -$t ||= false -$t ||= ENV["DELETE_TIMEOUT"] -$m ||= false -$m ||= ENV["MOVE_TIMEOUT"] -$q ||= false -$q ||= ENV["QUIET"] -$v ||= ENV["V"] || "20" -$s ||= ENV["SPEED"] || false +$d ||= ENV["DELETE"] || false +$t ||= ENV["DELETE_TIMEOUT"] || false +$m ||= ENV["MOVE_TIMEOUT"] || false +$q ||= ENV["QUIET"] || false +$s ||= ENV["SPEED"] || false require 'rubygems' require 'ruby_parser' require 'fileutils' -$parser_class = case $v - when "18" then - Ruby18Parser - when "19" then - Ruby19Parser - when "20" then - Ruby20Parser - else - abort "Unknown version #{$v.inspect}. Needs to be 18, 19, or 20" - end - -class IO - RUBY19 = "<3".respond_to? :encoding - - class << self - alias :binread :read unless RUBY19 - end -end - ARGV.push "-" if ARGV.empty? -class Racc::Parser +class RubyParser def extract_defs - ss = lexer.ss + ss = current.lexer.ss raise "can't access source. possible encoding issue" unless ss @@ -106,6 +82,7 @@ end rescue RuntimeError, Racc::ParseError => e warn "# process error: #{e.message.strip}" + warn "# #{e.backtrace.first}" end def process file @@ -113,7 +90,7 @@ time = (ENV["RP_TIMEOUT"] || 10).to_i $stderr.print "# Validating #{file}: " - parser = $parser_class.new + parser = RubyParser.new t0 = Time.now if $s parser.process(ruby, file, time) if $s then @@ -127,9 +104,14 @@ warn "TIMEOUT parsing #{file}. Skipping." if $m then - dir = File.join $m, File.dirname(file) - FileUtils.mkdir_p dir - FileUtils.move file, dir + base_dir, *rest = file.split("/") + base_dir.sub!(/\.slow\.?.*/, "") + base_dir += ".slow.#{time}" + + new_file = File.join(base_dir, *rest) + + FileUtils.mkdir_p File.dirname(new_file) + FileUtils.move file, new_file, verbose:true elsif $t then File.unlink file end @@ -137,6 +119,7 @@ $exit = 1 warn "" warn "# error: #{e.message.strip}" unless $q + warn "# #{e.backtrace.first}" warn "" return if $q Binary files /tmp/tmp8Ab_wV/sd48PNxrJk/ruby-ruby-parser-3.11.0/checksums.yaml.gz.sig and /tmp/tmp8Ab_wV/SBdznxuA3e/ruby-ruby-parser-3.15.1/checksums.yaml.gz.sig differ diff -Nru ruby-ruby-parser-3.11.0/compare/normalize.rb ruby-ruby-parser-3.15.1/compare/normalize.rb --- ruby-ruby-parser-3.11.0/compare/normalize.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/compare/normalize.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,4 +1,4 @@ -#!/usr/bin/ruby -w +#!/usr/bin/env ruby -w good = false @@ -8,6 +8,10 @@ def munge s renames = [ + # unquote... wtf? + /`(.+?)'/, proc { $1 }, + /"'(.+?)'"/, proc { "\"#{$1}\"" }, + "'='", "tEQL", "'!'", "tBANG", "'%'", "tPERCENT", @@ -53,6 +57,7 @@ '"&"', "tAMPER", '"&&"', "tANDOP", + '"&."', "tLONELY", '"||"', "tOROP", '"..."', "tDOT3", @@ -81,6 +86,7 @@ "/* empty */", "none", /^\s*$/, "none", + "keyword_BEGIN", "klBEGIN", "keyword_END", "klEND", /keyword_(\w+)/, proc { "k#{$1.upcase}" }, @@ -88,7 +94,68 @@ /modifier_(\w+)/, proc { "k#{$1.upcase}_MOD" }, "kVARIABLE", "keyword_variable", # ugh - /@(\d+)\s+/, "", + # 2.6 collapses klBEGIN to kBEGIN + "klBEGIN", "kBEGIN", + "klEND", "kEND", + + /keyword_(\w+)/, proc { "k#{$1.upcase}" }, + /\bk_([^_][a-z_]+)/, proc { "k#{$1.upcase}" }, + /modifier_(\w+)/, proc { "k#{$1.upcase}_MOD" }, + + "kVARIABLE", "keyword_variable", # ugh: this is a rule name + + # 2.7 changes: + + '"global variable"', "tGVAR", + '"operator-assignment"', "tOP_ASGN", + '"back reference"', "tBACK_REF", + '"numbered reference"', "tNTH_REF", + '"local variable or method"', "tIDENTIFIER", + '"constant"', "tCONSTANT", + + '"(.."', "tBDOT2", + '"(..."', "tBDOT3", + '"char literal"', "tCHAR", + '"literal content"', "tSTRING_CONTENT", + '"string literal"', "tSTRING_BEG", + '"symbol literal"', "tSYMBEG", + '"backtick literal"', "tXSTRING_BEG", + '"regexp literal"', "tREGEXP_BEG", + '"word list"', "tWORDS_BEG", + '"verbatim word list"', "tQWORDS_BEG", + '"symbol list"', "tSYMBOLS_BEG", + '"verbatim symbol list"', "tQSYMBOLS_BEG", + + '"float literal"', "tFLOAT", + '"imaginary literal"', "tIMAGINARY", + '"integer literal"', "tINTEGER", + '"rational literal"', "tRATIONAL", + + '"instance variable"', "tIVAR", + '"class variable"', "tCVAR", + '"terminator"', "tSTRING_END", # TODO: switch this? + '"method"', "tFID", + '"}"', "tSTRING_DEND", + + '"do for block"', "kDO_BLOCK", + '"do for condition"', "kDO_COND", + '"do for lambda"', "kDO_LAMBDA", + + # UGH + "k_LINE__", "k__LINE__", + "k_FILE__", "k__FILE__", + "k_ENCODING__", "k__ENCODING__", + + '"defined?"', "kDEFINED", + + '"do (for condition)"', "kDO_COND", + '"do (for lambda)"', "kDO_LAMBDA", + '"do (for block)"', "kDO_BLOCK", + + /\"(\w+) \(?modifier\)?\"/, proc { |x| "k#{$1.upcase}_MOD" }, + /\"(\w+)\"/, proc { |x| "k#{$1.upcase}" }, + + /@(\d+)(\s+|$)/, "", ] renames.each_slice(2) do |(a, b)| Binary files /tmp/tmp8Ab_wV/sd48PNxrJk/ruby-ruby-parser-3.11.0/data.tar.gz.sig and /tmp/tmp8Ab_wV/SBdznxuA3e/ruby-ruby-parser-3.15.1/data.tar.gz.sig differ diff -Nru ruby-ruby-parser-3.11.0/debian/changelog ruby-ruby-parser-3.15.1/debian/changelog --- ruby-ruby-parser-3.11.0/debian/changelog 2020-04-08 10:52:53.000000000 +0000 +++ ruby-ruby-parser-3.15.1/debian/changelog 2021-01-19 10:09:37.000000000 +0000 @@ -1,3 +1,18 @@ +ruby-ruby-parser (3.15.1-1) unstable; urgency=medium + + [ Debian Janitor ] + * Trim trailing whitespace. + * Use secure copyright file specification URI. + * Set upstream metadata fields: Bug-Database, Bug-Submit, Repository, + Repository-Browse. + + [ Pirate Praveen ] + * Bump Standards-Version to 4.5.1 (no changes needed) + * New upstream version 3.15.1 + * Update minimum version of ruby-sex-processor to 4.15~ + + -- Pirate Praveen Tue, 19 Jan 2021 15:39:37 +0530 + ruby-ruby-parser (3.11.0-4) unstable; urgency=medium * Add Breaks, Replaces for ruby-parser (<= 3.11.0-1) @@ -77,14 +92,14 @@ ruby-parser (3.6.1-1) unstable; urgency=low * Team upload - * New upstream release + * New upstream release -- Nitesh A Jain Sat, 17 May 2014 11:19:12 +0530 ruby-parser (3.6.0-1) unstable; urgency=low * Team upload - * New upstream release + * New upstream release -- Nitesh A Jain Mon, 05 May 2014 22:33:26 +0530 @@ -127,7 +142,7 @@ ruby-parser (2.3.1-1) unstable; urgency=low - * New upstream release. + * New upstream release. * Update description to make lintian happy. -- Praveen Arimbrathodiyil Thu, 22 Sep 2011 15:48:42 +0530 @@ -135,7 +150,7 @@ ruby-parser (2.2.0-1) unstable; urgency=low * Initial release. (Closes: #640041) - * Ignore ruby 1.9.1 test failures. + * Ignore ruby 1.9.1 test failures. - Ref: https://github.com/seattlerb/ruby_parser/issues/8 * Ignore require-rubygems, patch out insane $LOAD_PATH manipulations. * Add manpage for ruby_parse. diff -Nru ruby-ruby-parser-3.11.0/debian/control ruby-ruby-parser-3.15.1/debian/control --- ruby-ruby-parser-3.11.0/debian/control 2020-04-08 10:52:53.000000000 +0000 +++ ruby-ruby-parser-3.15.1/debian/control 2021-01-19 10:09:37.000000000 +0000 @@ -1,15 +1,15 @@ Source: ruby-ruby-parser Section: ruby Priority: optional -Maintainer: Debian Ruby Extras Maintainers +Maintainer: Debian Ruby Team Uploaders: Pirate Praveen , Cédric Boutillier , Build-Depends: debhelper-compat (= 12), gem2deb, rake, ruby-minitest, - ruby-sexp-processor (>= 4.9) -Standards-Version: 4.5.0 + ruby-sexp-processor (>= 4.15~) +Standards-Version: 4.5.1 Vcs-Git: https://salsa.debian.org/ruby-team/ruby-ruby-parser.git Vcs-Browser: https://salsa.debian.org/ruby-team/ruby-ruby-parser Homepage: https://github.com/seattlerb/ruby_parser @@ -20,7 +20,7 @@ Architecture: all XB-Ruby-Versions: ${ruby:Versions} Depends: ruby | ruby-interpreter, - ruby-sexp-processor (>= 4.9), + ruby-sexp-processor (>= 4.15~), ${misc:Depends}, ${shlibs:Depends} Breaks: ruby-parser (<= 3.11.0-1) diff -Nru ruby-ruby-parser-3.11.0/debian/copyright ruby-ruby-parser-3.15.1/debian/copyright --- ruby-ruby-parser-3.11.0/debian/copyright 2020-04-08 10:52:53.000000000 +0000 +++ ruby-ruby-parser-3.15.1/debian/copyright 2021-01-19 10:09:37.000000000 +0000 @@ -1,4 +1,4 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: ruby_parser Source: https://github.com/seattlerb/ruby_parser diff -Nru ruby-ruby-parser-3.11.0/debian/rules ruby-ruby-parser-3.15.1/debian/rules --- ruby-ruby-parser-3.11.0/debian/rules 2020-04-08 10:52:53.000000000 +0000 +++ ruby-ruby-parser-3.15.1/debian/rules 2021-01-19 10:09:37.000000000 +0000 @@ -14,4 +14,3 @@ override_dh_install: dh_install rm -f debian/ruby-parser/usr/bin/ruby_parse_extract_error - diff -Nru ruby-ruby-parser-3.11.0/debian/salsa-ci.yml ruby-ruby-parser-3.15.1/debian/salsa-ci.yml --- ruby-ruby-parser-3.11.0/debian/salsa-ci.yml 2020-04-08 10:52:53.000000000 +0000 +++ ruby-ruby-parser-3.15.1/debian/salsa-ci.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ ---- -include: - - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml - - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml diff -Nru ruby-ruby-parser-3.11.0/debian/upstream/metadata ruby-ruby-parser-3.15.1/debian/upstream/metadata --- ruby-ruby-parser-3.11.0/debian/upstream/metadata 1970-01-01 00:00:00.000000000 +0000 +++ ruby-ruby-parser-3.15.1/debian/upstream/metadata 2021-01-19 10:09:37.000000000 +0000 @@ -0,0 +1,5 @@ +--- +Bug-Database: https://github.com/seattlerb/ruby_parser/issues +Bug-Submit: https://github.com/seattlerb/ruby_parser/issues/new +Repository: https://github.com/seattlerb/ruby_parser.git +Repository-Browse: https://github.com/seattlerb/ruby_parser diff -Nru ruby-ruby-parser-3.11.0/debugging.md ruby-ruby-parser-3.15.1/debugging.md --- ruby-ruby-parser-3.11.0/debugging.md 1970-01-01 00:00:00.000000000 +0000 +++ ruby-ruby-parser-3.15.1/debugging.md 2021-01-18 16:48:25.000000000 +0000 @@ -0,0 +1,57 @@ +# Quick Notes to Help with Debugging + +## Reducing + +One of the most important steps is reducing the code sample to a +minimal reproduction. For example, one thing I'm debugging right now +was reported as: + +```ruby +a, b, c, d, e, f, g, h, i, j = 1, *[p1, p2, p3], *[p1, p2, p3], *[p4, p5, p6] +``` + +This original sample has 10 items on the left-hand-side (LHS) and 1 + +3 groups of 3 (calls) on the RHS + 3 arrays + 3 splats. That's a lot. + +It's already been reported (perhaps incorrectly) that this has to do +with multiple splats on the RHS, so let's focus on that. At a minimum +the code can be reduced to 2 splats on the RHS and some +experimentation shows that it needs a non-splat item to fail: + +``` +_, _, _ = 1, *[2], *[3] +``` + +and some intuition further removed the arrays: + +``` +_, _, _ = 1, *2, *3 +``` + +the difference is huge and will make a ton of difference when +debugging. + +## Getting something to compare + +``` +% rake debug3 F=file.rb +``` + +TODO + +## Comparing against ruby / ripper: + +``` +% rake cmp3 F=file.rb +``` + +This compiles the parser & lexer and then parses file.rb using both +ruby, ripper, and ruby_parser in debug modes. The output is munged to +be as uniform as possible and diffable. I'm using emacs' +`ediff-files3` to compare these files (via `rake cmp3`) all at once, +but regular `diff -u tmp/{ruby,rp}` will suffice for most tasks. + +From there? Good luck. I'm currently trying to backtrack from rule +reductions to state change differences. I'd like to figure out a way +to go from this sort of diff to a reasonable test that checks state +changes but I don't have that set up at this point. diff -Nru ruby-ruby-parser-3.11.0/History.rdoc ruby-ruby-parser-3.15.1/History.rdoc --- ruby-ruby-parser-3.11.0/History.rdoc 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/History.rdoc 2021-01-18 16:48:25.000000000 +0000 @@ -1,3 +1,191 @@ +=== 3.15.1 / 2021-01-10 + +* 1 bug fix: + + * Bumped ruby version to include < 4 (trunk). + +=== 3.15.0 / 2020-08-31 + +* 1 major enhancement: + + * Added tentative 2.7 support. + +* 1 minor enhancement: + + * Improved ruby_parse_extract_error's handling of moving slow files out. + +* 22 bug fixes: + + * Bumped ruby version to include 3.0 (trunk). + * Fix an error related to empty ensure bodies. (presidentbeef) + * Fix handling of bad magic encoding comment. + * Fixed SystemStackError when parsing a huoooge hash, caused by a splat arg. + * Fixed a number of errors parsing do blocks in strange edge cases. + * Fixed a string backslash lexing bug when the string is an invalid encoding. (nijikon, gmcgibbon) + * Fixed bug assigning line number to some arg nodes. + * Fixed bug concatinating string literals with differing encodings. + * Fixed bug lexing heredoc w/ nasty mix of \r\n and \n. + * Fixed bug lexing multiple codepoints in \u{0000 1111 2222} forms. + * Fixed bug setting line numbers in empty xstrings in some contexts. + * Fixed edge case on call w/ begin + do block as an arg. + * Fixed handling of UTF BOM. + * Fixed handling of lexer state across string interpolation braces. + * Fixed infinite loop when lexing backslash+cr+newline (aka dos-files) + * Fixed lambda + do block edge case. + * Fixed lexing of some ?\M... and ?\C... edge cases. + * Fixed more do/brace block edge case failures. + * Fixed parsing bug where splat was used in the middle of a list. + * Fixed parsing of interpolation in heredoc-like strings. (presidentbeef) + * Fixed parsing some esoteric edge cases in op_asgn. + * Fixed unicode processing in ident chars so now they better mix. + +=== 3.14.2 / 2020-02-06 + +* 1 minor enhancement: + + * Cleaned up call_args and removed arg_blk_pass from ruby_parser_extras.rb! Yay! + +=== 3.14.1 / 2019-10-29 + +* 1 minor enhancement: + + * Declared that ruby_parser supports ruby 2.2 and up. + +* 3 bug fixes: + + * Fixed a problem with %W with a null-byte terminator. (wtf?) (spohlenz) + * Fixed line numbering for command (eg methods without parentheses) arguments. (mvz) + * Fixed lineno on new dxstrs. (presidentbeef) + +=== 3.14.0 / 2019-09-24 + +* 8 minor enhancements: + + * Added Sexp#line_min & new line number debugging feature. + * Allow bin/ruby_parse to use RP_TIMEOUT to tweak default timeout for large files & slow debugging modes. + * Did you know that custom inspect can't be > 65 chars? 65! Me neither. Fixed. + * For now, value_expr == remove_begin. + * Improved error messages for unterminated regexps. + * Moved all STR_* consts into State::Values and made them State instances. + * Overhauled RubyLexer::State + Values to allow for completely separate groups of States. + * RubyParserExtras#remove_begin removes nested begins and patches line numbers. + +* 22 bug fixes: + + * Changed EOF signaling to return [false, false] per doco. + * Changed RubyParserStuff#remove_begin to keep inner line number, if any. (mvz) + * Differentiated between lambda call and stabby proc. Added :lambda sexp. (whitequark) + * Extended State#== to check equal? first as an optimization. + * Fixed a bug in tab indent width. + * Fixed a line numbering bug for assignables. + * Fixed a line numbering bug for defns w/ nil bodies. + * Fixed another missing line number, driven out by ruby_to_ruby bootstrap. + * Fixed dedenting squiggle heredocs if interpolation is in the mix. (mvz) + * Fixed differentiation of `{ |a| ... }` vs `{ |a,| ... }`. Fixes #236 (whitequark). + * Fixed lex_state for symbols. + * Fixed lex_state for tSTRING_END and tREGEXP_END. + * Fixed line numbers for BEGIN block. (mvz) + * Fixed op_asgn1 w/ command_call having array instead of arglist. (mvz) + * Fixed parsing of () in a command-call (eg p). + * Fixed remaining missing line numbers by forcing extra checks during test and blowing up. They may still be wrong (esp after heredocs, ugh), but they're there! Special thank you to mvz for pushing on this and providing tests and PRs. + * Fixed some lex_state versioning issues with closing braces/bracket on ruby<25. + * Keep carriage return escapes in heredocs. (mvz) + * Massive overhaul of line number code. + * More line number fixes and extra tests from mvz. Thank you! + * Parsing BEGIN block when not at top level should raise an error. (mvz) + * Removed irb task from Rakefile as it has been pushed up to Hoe and doubles up here. + +=== 3.13.1 / 2019-03-25 + +* 1 major enhancement: + + * Overhauled RubyLexer#lex_state to allow for multi-state value. + +* 5 minor enhancements: + + * Added RubyParser#current so scripts can poke around inside. + * Cleaned up and modernized bin/ruby_parse_extract_error. + * Removed RubyLexer#in_lex_state? in favor of State#=~ and #==. + * Renamed RubyLexer#in_arg_state? to is_after_operator?. + * Replaced all use of :expr_<*> symbols w/ bitfields. + +* 15 bug fixes: + + * Added tests to show #233 already fixed. + * Fixed a lexer state bug dealing with complex edge case in hash key w/ interpolated symbol and an array value. Not a great fix. (presidentbeef) + * Fixed a number of lex_state check problems. + * Fixed alias and undef keyword data. + * Fixed bug normalizing to utf-8 on tail of dstr (post-interpolation). (mvz) + * Fixed handling of hex chars for bare unicode escape. (mvz) + * Fixed handling of invalid string octals more gracefully. Needs generalization. + * Fixed lexing of regexps w/ backslashed unicode. I hope. + * Fixed parse_percent for EXPR_FITEM edge cases. Fixed bug #125. + * Fixed parsing of op_asgn on constants (eg ::X ||= 1). + * Fixed precedence of rescue modifier on assignments. (mvz/whitequark) + * Fixed some EXPR_FNAME edge cases. + * Fixed using unicode in gvars. Fixed bug 202. (331299) + * Handle invalid string literals more gracefully. + * Minor fix lexing %s[] + +=== 3.13.0 / 2019-03-12 + +* 3 major enhancements: + + * Removed 1.8 and 1.9 support. Moved to ruby_parser-legacy gem. + * Added tentative 2.6 support. + * Updated ruby_parser.yy to ruby 2.4 architecture. + +* 22 minor enhancements: + + * Added debug3 and cmp3 rake tasks that use the above tools. + * Added tLONELY to compare/normalize.rb + * Added tools/munge.rb, tools/ripper.rb, and debugging.md + * 2.6: Added trailing .. and ... support. + * Extended StackState to log more state changes, making debugging easier. + * Extended StackState#store to take an initial value. + * Improved logging / debugging in StackState. + * Improved normalization and parser compare tasks. + * Improved tools/munge.rb output. + * In f_arglist, track in_kwarg if no parens. + * In process_newline_or_comment, handle NL if in_kwarg there vs normal. + * Refactored normalized values to WORDLIST. + * Refactored parser: push up to relop and rel_expr. + * Removed Keyword.keyword18. + * Removed RubyLexer version attr_accessors. + * Removed long dead deprecations internal to RubyParserStuff. + * Removed version arg to RubyLexer#initialize (default nil + no-op). + * Renamed Keyword.keyword19 to Keyword.keyword. + * Renamed process_bracing to process_brace_close + * Renamed process_curly_brace to process_brace_open + * Report first parse error message if all parser versions fail, not last. + * Updated parser to track against 2.6. + +* 11 bug fixes: + + * Fix some shift/reduce errors. + * Fixed BEGIN blocks having different arg value that END blocks. (mvz) + * Fixed all reported unused non-terminals/rules. + * Fixed bug 272. + * Fixed bug in interpolated symbol lists. (strviola) + * Fixed bug where block shadow arguments were not registered as lvars. (akimd) + * Fixed bug where kwsplat args weren't treated as lvars. (mvz) + * Fixed lex_state and other internals in many cases. + * Fixed shebang in compare/normalize.rb to use env. Avoids rubygems freaking. + * Fixed some more internal state bugs. + * Fixed tRCURLY -> tSTRING_DEND for interpolation brace closes. + +=== 3.12.0 / 2018-12-04 + +* 3 minor enhancements: + + * 2.5: Allow rescue/ensure/else in normal do blocks. (presidentbeef) + * Added stabby proc with do/end as block call argument. (presidentbeef) + * Holy cow levels of optimization from presidentbeef. I write slow bad code. + +* 1 bug fix: + + * Improve handling of single-quoted symbols and labels. (mvz) + === 3.11.0 / 2018-02-14 * 1 major enhancement: diff -Nru ruby-ruby-parser-3.11.0/lib/rp_extensions.rb ruby-ruby-parser-3.15.1/lib/rp_extensions.rb --- ruby-ruby-parser-3.11.0/lib/rp_extensions.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/rp_extensions.rb 2021-01-18 16:48:25.000000000 +0000 @@ -10,13 +10,6 @@ ENC_UTF8 = /x/u.options end end - -# I hate ruby 1.9 string changes -class Fixnum - def ord - self - end -end unless "a"[0] == "a" # :startdoc: ############################################################ @@ -40,7 +33,7 @@ attr_accessor :lineno def clean_caller - self.sub(File.dirname(__FILE__), ".").sub(/:in.*/, "") + self.sub(File.dirname(__FILE__), "./lib").sub(/:in.*/, "") end if $DEBUG end diff -Nru ruby-ruby-parser-3.11.0/lib/ruby18_parser.rb ruby-ruby-parser-3.15.1/lib/ruby18_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby18_parser.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby18_parser.rb 1970-01-01 00:00:00.000000000 +0000 @@ -1,5793 +0,0 @@ -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.4.14 -# from Racc grammer file "". -# - -require 'racc/parser.rb' -class Ruby18Parser < RubyParser::Parser - - -require "ruby_lexer" -require "ruby_parser_extras" - -# :stopdoc: - -# Local Variables: ** -# racc-token-length-max:14 ** -# End: ** -##### State transition tables begin ### - -clist = [ -'-281,494,198,199,683,198,199,-281,-281,-281,261,-83,218,-281,-281,648', -'-281,-89,-84,-85,-88,436,535,-64,639,-79,564,-90,640,564,-444,261,494', -'494,-86,-281,-281,-444,-281,-281,-281,-281,-281,494,215,-87,-76,593', -'217,216,-84,261,564,469,594,574,627,494,725,98,563,-72,710,563,-281', -'-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,627', -'627,-281,-281,-281,-501,554,534,563,102,-281,-79,294,-281,101,-366,260', -'294,-281,-500,-281,-89,-281,-281,-281,-281,-281,-281,-281,-79,-281,593', -'-281,190,102,-75,493,260,594,101,647,-81,-76,-77,-80,-281,-281,-504', -'-80,-79,-281,-82,-88,-79,-504,-504,-504,260,-78,102,-504,-504,-77,-504', -'101,102,102,493,493,-79,101,101,-504,218,564,102,102,626,493,294,101', -'101,-504,-504,191,-504,-504,-504,-504,-504,102,693,493,75,192,101,694', -'102,102,626,626,76,101,101,523,215,669,668,563,217,216,-504,-504,-504', -'-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,193,-77,-504', -'-504,-504,523,551,-451,523,237,-504,528,-85,-504,-498,-504,545,-87,-504', -'-77,-504,285,-504,-504,-504,-504,-504,-504,-504,523,-504,-504,-504,523', -'728,286,501,254,399,-77,525,524,523,-77,255,-504,-504,-275,-78,675,-504', -'546,-86,-83,-275,-275,-275,294,-77,-275,-275,-275,-85,-275,-442,-504', -'525,524,536,525,524,-442,-504,-275,-275,482,-498,-500,617,780,-442,-504', -'-275,-275,-90,-275,-275,-275,-275,-275,525,524,530,-79,525,524,521,-87', -'-498,-504,-448,-447,-445,525,524,526,321,-448,-447,-445,342,-275,-275', -'-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-84,-439', -'-275,-275,-275,-501,482,-275,-439,481,-275,-500,-442,-275,-275,345,-275', -'834,-275,-442,-275,365,-275,-275,-275,-275,-275,-275,-275,-449,-275', -'-504,-275,-283,518,-446,-449,-497,102,366,-283,519,-446,101,-520,-275', -'-275,-275,-275,-283,-275,-520,-520,-520,-504,-501,-520,-520,-520,834', -'-520,-500,-501,666,665,669,668,-501,-500,102,-520,-501,197,-500,101', -'482,398,-500,484,-520,-520,-504,-520,-520,-520,-520,-520,-439,-504,-501', -'500,-451,501,-500,-439,-500,362,-504,469,-497,364,363,400,-439,-504', -'666,665,669,668,198,199,-504,102,218,-82,-504,-500,101,-90,-520,-504', -'-497,482,102,401,484,-520,-274,101,232,233,263,-520,-75,-274,430,102', -'-83,-504,433,-81,101,436,-274,-89,215,441,221,263,217,216,213,214,662', -'-520,660,659,658,661,198,199,-63,-501,-501,-501,457,-501,-520,458,-520', -'-501,-501,-520,198,199,-501,459,-501,-501,-501,-501,-501,-501,-501,737', -'728,198,199,-501,-501,-501,-501,-501,-501,-501,737,728,287,288,666,665', -'669,668,465,-501,467,468,-501,-501,-501,-501,-501,-501,-501,-501,-501', -'-501,266,-501,-501,294,-501,-501,-501,218,-521,-521,-521,-521,224,226', -'263,463,-521,-521,-282,470,471,-450,464,232,233,-282,-501,554,-450,-501', -'-501,462,-501,-501,-282,218,-501,-450,-501,215,-501,221,-501,217,216', -'213,214,225,223,219,-501,220,294,486,-520,-501,-501,-501,-501,-501,-501', -'-520,-520,-520,-501,-501,-520,-520,-520,-281,-520,218,355,-88,505,-450', -'-281,506,529,533,-520,-501,-450,540,542,-281,-262,232,233,-520,-520', -'-450,-520,-520,-520,-520,-520,544,263,844,218,600,383,215,-274,601,845', -'217,216,213,214,-274,218,142,143,843,140,124,125,126,-274,129,131,218', -'218,127,574,472,-282,-520,144,145,132,133,473,-282,-520,590,294,595', -'237,263,-520,397,-282,596,597,137,136,-72,123,141,139,138,134,135,130', -'128,121,395,122,598,-282,146,-520,475,396,611,612,-282,294,619,-500', -'-500,-500,397,-500,-520,-282,-520,-500,-500,-520,622,501,-500,630,-500', -'-500,-500,-500,-500,-500,-500,677,679,441,441,-500,-500,-500,-500,-500', -'-500,-500,696,707,772,773,218,774,96,97,436,-500,436,246,-500,-500,-500', -'-500,-500,-500,-500,-500,-500,-500,712,-500,-500,714,-500,-500,-500', -'218,-521,-521,-521,-521,224,226,215,-283,-521,-521,217,216,213,214,-283', -'232,233,718,-500,695,719,-500,-500,-283,-500,-500,724,263,-500,263,-500', -'215,-500,221,-500,217,216,213,214,225,223,219,-500,220,218,218,728,-500', -'-500,-500,-500,-500,-500,733,195,728,-500,-500,65,66,67,196,54,741,742', -'-86,59,60,746,760,194,63,762,61,62,64,26,27,68,69,765,766,767,768,25', -'31,30,91,90,92,93,-263,781,20,789,574,574,574,541,801,44,263,263,95', -'94,85,53,87,86,88,89,96,97,237,83,84,806,41,42,40,218,222,227,228,229', -'224,226,234,235,230,231,-281,211,212,644,-262,232,233,-281,203,810,642', -'207,-501,813,55,56,-281,815,57,643,818,215,822,221,43,217,216,213,214', -'225,223,219,21,220,826,827,294,81,75,77,78,79,80,838,839,846,76,82,102', -'236,847,-218,-281,101,65,66,67,10,54,-281,848,849,59,60,-501,853,856', -'63,-281,61,62,64,26,27,68,69,858,859,860,865,25,31,30,91,90,92,93,866', -'870,20,873,218,874,765,765,9,44,11,12,95,94,85,53,87,86,88,89,96,97', -'766,83,84,887,41,42,40,218,222,227,228,229,224,226,215,503,230,231,217', -'216,213,214,504,232,233,890,39,574,574,33,906,502,55,56,907,908,57,912', -'35,215,611,221,43,217,216,213,214,225,223,219,21,220,916,917,765,81', -'75,77,78,79,80,919,-328,920,76,82,65,66,67,-328,54,355,574,574,59,60', -'3,,-328,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,104,105', -'106,107,108,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,662,283', -'660,659,658,661,104,105,106,107,108,104,105,106,107,108,,,,,,784,,,207', -',,55,56,,,57,,,,,,662,652,660,659,658,661,,,,666,665,669,668,81,75,77', -'78,79,80,,,,76,82,65,66,67,787,54,,,,59,60,,,,63,652,61,62,64,249,250', -'68,69,666,665,669,668,248,278,282,91,90,92,93,,,,,,,,541,,279,,,95,94', -'85,53,87,86,88,89,96,97,,83,84,,,,283,218,222,227,228,229,224,226,234', -'235,230,231,,211,212,,,232,233,,784,,,207,,,55,56,,,57,,,215,,221,,217', -'216,213,214,225,223,219,,220,,,,81,75,77,78,79,80,,,,76,82,,236,,881', -'8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91', -'90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,', -'41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,662,,660', -'659,658,661,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59', -'60,,,,63,,61,62,64,26,27,68,69,666,665,669,668,25,31,30,91,90,92,93', -',,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', -'218,222,227,228,229,224,226,234,235,230,231,,-521,-521,,,232,233,,39', -',,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214,225,223,219,21,220', -',,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62', -'64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85', -'53,87,86,88,89,96,97,,83,84,,41,42,40,218,,,,,,,,,,,,,,,,232,233,,39', -',,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214,,,219,21,220,,,,81', -'75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26', -'27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87', -'86,88,89,96,97,,83,84,,41,42,40,218,,,,,,,,,,,,,,,,232,233,,39,,,33', -',,55,56,,,57,,35,215,,221,43,217,216,213,214,,,219,21,220,,,,81,75,77', -'78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68', -'69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88', -'89,96,97,,83,84,,41,42,40,218,222,227,228,229,224,226,234,235,230,231', -',-521,-521,,,232,233,,39,,,33,,,55,56,,,57,,35,215,,221,43,217,216,213', -'214,225,223,219,21,220,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54', -',,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,', -',,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,218,-521', -'-521,-521,-521,224,226,,,-521,-521,,,,,,232,233,,39,,,33,,,55,56,,,57', -',35,215,,221,43,217,216,213,214,225,223,219,21,220,,,,81,75,77,78,79', -'80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,', -',,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89', -'96,97,,83,84,,41,42,40,218,-521,-521,-521,-521,224,226,,,-521,-521,', -',,,,232,233,,39,,,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214,225', -'223,219,21,220,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59', -'60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9', -'44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,218,,,,,,,,', -',,,,,,,232,233,,39,,,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214', -',,219,21,220,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60', -',,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44', -'11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,218,,,,,,,,,,,', -',,,,232,233,,39,,,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214,,', -'219,21,220,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,', -',,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11', -'12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,218,-521,-521,-521', -'-521,224,226,,,-521,-521,,,,,,232,233,,39,,,33,,,55,56,,,57,,35,215', -',221,43,217,216,213,214,225,223,219,21,220,,,,81,75,77,78,79,80,,,,76', -'82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30', -'91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84', -',41,42,40,218,-521,-521,-521,-521,224,226,,,-521,-521,,,,,,232,233,', -'39,,,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214,225,223,219,21', -'220,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61', -'62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94', -'85,53,87,86,88,89,96,97,,83,84,,41,42,40,218,222,227,228,229,224,226', -'234,,230,231,,,,,,232,233,,39,,,33,,,55,56,,,57,,35,215,,221,43,217', -'216,213,214,225,223,219,21,220,,,,81,75,77,78,79,80,,,,76,82,8,65,66', -'67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92', -'93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,218,,,,,,,,,,,,,,,,232,233,,39,,,268,,,55,56,,,57,,35,215,,221,43', -'217,216,213,214,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54', -',,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,', -',,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,', -',,,,,,,,,,,,,39,,,268,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77', -'78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68', -'69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88', -'89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35', -',,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59', -'60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9', -'44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,', -',,,,,,,39,,,268,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79', -'80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,', -',,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89', -'96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,', -',,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59', -'60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9', -'44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,', -',,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80', -',,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25', -'31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97', -',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,', -',,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,', -',63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11', -'12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,', -',39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', -'82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30', -'91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84', -',41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21', -',,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62', -'64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85', -'53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55', -'56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67', -'10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93', -',,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', -',,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75', -'77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27', -'68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86', -'88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57', -',35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54', -',,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,', -',,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,', -',,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78', -'79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69', -',,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89', -'96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,', -',,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59', -'60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9', -'44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,', -',,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80', -',,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25', -'31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97', -',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,', -',,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,', -',63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11', -'12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,', -',39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', -'82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', -'250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', -'88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', -'57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', -',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,', -',,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,', -',,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79', -'80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', -'248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', -',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,', -',,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26', -'27,68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88', -'89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57', -',,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', -'60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,', -',,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,', -',,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80', -',,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248', -'278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83', -'84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,', -',,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61', -'62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94', -'85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', -',,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66', -'67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90', -'92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,', -',,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75', -'77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68', -'69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89', -'96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,784,,,207,,,55,56,,,57,,,,,,', -',,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,', -'61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', -'250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', -'88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', -'57,,792,,246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67', -',54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92', -'93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,', -',,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77', -'78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69', -',,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,797,', -'246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', -'60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,', -',,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,', -',,,,,203,,,207,,,55,56,,,57,,799,,246,,43,,,,,,,,210,,,,,81,75,77,78', -'79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', -',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', -',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', -'250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', -'88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', -'57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', -',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,', -',,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,', -',,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79', -'80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', -'248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', -',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,', -',,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,156,167,157,180,153,173,163', -'162,183,184,178,161,160,155,181,185,186,165,154,168,172,174,166,159', -',,175,182,177,176,169,179,164,152,171,170,,,,,,151,158,149,150,147,148', -'112,114,111,,113,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,', -'144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128', -'121,,122,,,146,81,,,65,66,67,,54,,,82,59,60,,,,63,,61,62,64,249,250', -'68,69,,,,,248,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89', -'96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,244', -',246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', -'60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44', -',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', -'203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', -'82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', -'250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', -'88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', -'57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', -',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,', -',,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,', -',,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79', -'80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', -'248,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83', -'84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,244,,246,,43', -',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94', -'85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', -',,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66', -'67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91,90,92', -'93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,', -',,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,244,,246,,43,,,,,,,,210,,,,,81', -'75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250', -'68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88', -'89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57', -',,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', -'60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91,90,92,93,,,,,,,,,', -'44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,', -',,,203,,,207,,,445,56,,,57,,244,,246,,43,,,,,,,,210,,,,,81,75,77,78', -'79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', -',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', -',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,276,,,273', -',,55,56,,,57,,842,,841,,,,,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66', -'67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91,90,92', -'93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,', -',,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,244,,246,,43,,,,,,,,210,,,,,81', -'75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250', -'68,69,,,,,248,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89', -'96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,455,55,56,,,57', -',244,,246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54', -',,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,', -',,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,', -',,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', -'79,80,,,,76,82,-252,-252,-252,,-252,,,,-252,-252,,,,-252,,-252,-252', -'-252,-252,-252,-252,-252,,,,,-252,-252,-252,-252,-252,-252,-252,,,,', -',,,,,-252,,,-252,-252,-252,-252,-252,-252,-252,-252,-252,-252,,-252', -'-252,,-252,-252,-252,,,,,,,,,,,,,,,,,,,,-252,,,-252,263,,-252,-252,', -',-252,,-252,,-252,,-252,,,,,,,,-252,,,,,-252,-252,-252,-252,-252,-252', -',,,-252,-252,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,', -',248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', -',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,', -',,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,-252,-252,-252,,-252,,,,-252', -'-252,,,,-252,,-252,-252,-252,-252,-252,-252,-252,,,,,-252,-252,-252', -'-252,-252,-252,-252,,,,,,,,,,-252,,,-252,-252,-252,-252,-252,-252,-252', -'-252,-252,-252,,-252,-252,,-252,-252,-252,,,,,,,,,,,,,,,,,,,,-252,,', -'-252,266,,-252,-252,,,-252,,-252,,-252,,-252,,,,,,,,-252,,,,,-252,-252', -'-252,-252,-252,-252,,,,-252,-252,65,66,67,,54,,,,59,60,,,,63,,61,62', -'64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85', -'53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,', -',55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66', -'67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90', -'92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,,283,,,', -',,,,,,,,,,,,,,,,276,,,207,,,55,56,,,57,,,,,,,,,,,,,,,,,,,81,75,77,78', -'79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', -',,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,784,,,207,,,55,56,,,57,,,,,,,,,', -',,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61', -'62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94', -'85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', -',,55,56,,,57,,867,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65', -'66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91', -'90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,,283', -',,,,,,,,,,,,,,,,,,,276,,,273,,,55,56,,,57,,272,,,,,,,,,,,,,,,,,81,75', -'77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68', -'69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89', -'96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,276,,,207,,,55,56,,,57,,,,,,', -',,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,156,167,157,180,153,173,163,162', -'183,184,178,161,160,155,181,185,186,165,154,168,172,174,166,159,,,175', -'182,177,176,169,179,164,152,171,170,,,,,,151,158,149,150,147,148,112', -'114,,,113,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145', -'132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122', -',,146,81,,,65,66,67,,54,,,82,59,60,,,,63,,61,62,64,249,250,68,69,,,', -',248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97', -',83,84,,,,283,,,,,,,,,,,,,,,,,,,,784,,,207,,,55,56,,,57,,,,,,,,,,,,', -',,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62', -'64,249,250,68,69,,,,,248,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53', -'87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55', -'56,,,57,,301,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67', -',54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92', -'93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,,283,,,,,,', -',,,,,,,,,,,,,784,,,207,,,55,56,,,57,,,,,,,,,,,,,,,,,,,81,75,77,78,79', -'80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', -'248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', -',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,891,,246', -',43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60', -',,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44', -',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', -'203,,,207,,,55,56,,,57,,894,,246,,43,,,,,,,,210,,,,,81,75,77,78,79,80', -',,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248', -'278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83', -'84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,', -',,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61', -'62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94', -'85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', -',,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66', -'67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90', -'92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,', -',,,,,,,,,,,,,,,,,,203,,,207,475,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81', -'75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250', -'68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88', -'89,96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,784,,,207,,,55,56,,,57,,,', -',,,,,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', -'250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', -'88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', -'57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', -',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,', -',,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,', -',,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79', -'80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', -'248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', -',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,', -',,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,784,,,207', -',,55,56,,,57,,,,,,,,,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,', -'54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93', -',,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,', -',,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', -'79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', -',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,923,', -'246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', -'60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,', -',,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,,283,,,,,,,,,,,,,,,,', -',,,784,,,207,,,55,56,,,57,,,,,,,,,,,,,,,,,,,81,75,77,78,79,80,,,,76', -'82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26', -'27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86', -'88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', -'57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,', -'59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,', -',,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,', -',,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80', -',,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248', -'278,282,91,90,92,93,,,,,,,,,,279,,,95,94,507,53,87,86,508,89,96,97,', -'83,84,,,,283,,,,,,,,,,,,,,,,,,,,509,,,207,,,55,56,,,57,,,,,,,,,,,,,', -',,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64', -'249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,507,53', -'87,86,508,89,96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,509,,,207,,,55,56', -',,57,,,,,,,,,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', -'60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44', -',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', -'203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', -'82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,301,,,,43,,,,,,,,210,', -',,,81,75,77,78,79,80,,,,76,82,156,167,157,180,153,173,163,162,183,184', -'178,161,160,155,181,185,186,165,154,168,172,174,166,159,,,175,182,177', -'176,169,179,164,152,171,170,,,,,,151,158,149,150,147,148,112,114,,,113', -',,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145,132,133,', -',,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122,,,146', -'81,,,65,66,67,,54,,,82,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30', -'91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41', -'42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,', -',,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', -'250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', -'88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', -'57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', -',59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,', -',,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,', -',,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80', -',,,76,82,-252,-252,-252,,-252,,,,-252,-252,,,,-252,,-252,-252,-252,-252', -'-252,-252,-252,,,,,-252,-252,-252,-252,-252,-252,-252,,,,,,,,,,-252', -',,-252,-252,-252,-252,-252,-252,-252,-252,-252,-252,,-252,-252,,-252', -'-252,-252,,,,,,,,,,,,,,,,,,,,-252,,,-252,263,,-252,-252,,,-252,,-252', -',-252,,-252,,,,,,,,-252,,,,,-252,-252,-252,-252,-252,-252,,,,-252,-252', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,,283', -',,,,,,,,,,,,,,,,,,,315,,,33,,,55,56,,,57,,35,,,,,,,,,,,,,,,,,81,75,77', -'78,79,80,,,,76,82,-502,-502,-502,,-502,,,,-502,-502,,,,-502,,-502,-502', -'-502,-502,-502,-502,-502,,,,,-502,-502,-502,-502,-502,-502,-502,,,,', -',,,,,-502,,,-502,-502,-502,-502,-502,-502,-502,-502,-502,-502,,-502', -'-502,,-502,-502,-502,,,,,,,,,,,,,,,,,,,,-502,,,-502,-502,,-502,-502', -',,-502,,-502,,-502,,-502,,,,,,,,-502,,,,,-502,-502,-502,-502,-502,-502', -',,,-502,-502,-503,-503,-503,,-503,,,,-503,-503,,,,-503,,-503,-503,-503', -'-503,-503,-503,-503,,,,,-503,-503,-503,-503,-503,-503,-503,,,,,,,,,', -'-503,,,-503,-503,-503,-503,-503,-503,-503,-503,-503,-503,,-503,-503', -',-503,-503,-503,,,,,,,,,,,,,,,,,,,,-503,,,-503,-503,,-503,-503,,,-503', -',-503,,-503,,-503,,,,,,,,-503,,,,,-503,-503,-503,-503,-503,-503,,,,-503', -'-503,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31', -'30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41', -'42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,301,,,,43,,,,,,,,210', -',,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64', -'249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53', -'87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55', -'56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,', -'54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93', -',,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,', -',,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', -'79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', -',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', -',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,10,54,,,,59,60,,', -',63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11', -'12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,', -',39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', -'82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,566,,246,,43,,,,,,,,210', -',,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64', -'249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53', -'87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55', -'56,,,57,,570,,246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66', -'67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90', -'92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,', -',,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75', -'77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68', -'69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89', -'96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,584', -',246,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,-497,-497,-497,,-497', -',,,-497,-497,,,,-497,,-497,-497,-497,-497,-497,-497,-497,,-497,,,-497', -'-497,-497,-497,-497,-497,-497,,,,,,,,,,-497,,,-497,-497,-497,-497,-497', -'-497,-497,-497,-497,-497,,-497,-497,,-497,-497,-497,,,,,,,,,,,,,,,,', -',,,-497,,,-497,-497,,-497,-497,,,-497,,-497,,-497,,-497,,,,,,,,-497', -',-497,,,-497,-497,-497,-497,-497,-497,,,,-497,-497,-498,-498,-498,,-498', -',,,-498,-498,,,,-498,,-498,-498,-498,-498,-498,-498,-498,,-498,,,-498', -'-498,-498,-498,-498,-498,-498,,,,,,,,,,-498,,,-498,-498,-498,-498,-498', -'-498,-498,-498,-498,-498,,-498,-498,,-498,-498,-498,,,,,,,,,,,,,,,,', -',,,-498,,,-498,-498,,-498,-498,,,-498,,-498,,-498,,-498,,,,,,,,-498', -',-498,,,-498,-498,-498,-498,-498,-498,,,,-498,-498,65,66,67,,54,,,,59', -'60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44', -',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', -'203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', -'82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91', -'90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81', -'75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27', -'68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88', -'89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57', -',,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', -'60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44', -',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', -'203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', -'82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,301,,,,43,,,,,,,,210,', -',,,81,75,77,78,79,80,,,,76,82,65,66,67,10,54,,,,59,60,,,,63,,61,62,64', -'26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53', -'87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56', -',,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54', -',,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,', -',,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,', -',,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', -'79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', -',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', -',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90', -'92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', -',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75', -'77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68', -'69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89', -'96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,614', -',,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60', -',,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44', -',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', -'203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76', -'82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91', -'90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', -',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,373,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26', -'27,68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88', -'89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57', -',373,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', -',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91,90,92,93,,,,,', -',,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,', -',,,,,,,203,,,207,,,55,56,,,57,,301,,,,43,,,,,,,,210,,,,,81,75,77,78', -'79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,', -',25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', -',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,', -',,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94', -'85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', -',,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66', -'67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93', -',,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,', -',,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', -'79,80,,,,76,82,156,167,157,180,153,173,163,162,183,184,178,161,160,155', -'181,185,186,165,154,168,172,174,166,159,,,175,182,177,176,169,179,164', -'152,171,170,,,,,,151,158,149,150,147,148,112,114,,,113,,,,,,,,142,143', -',140,124,125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137', -'136,,123,141,139,138,134,135,130,128,121,,122,,,146,81,,,65,66,67,,54', -',,82,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91,90,92,93,', -',,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,', -',,,,,,,,,,,203,,,207,,,55,56,,,57,,301,,,,43,,,,,,,,210,,,,,81,75,77', -'78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69', -',,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', -',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,682,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76', -'82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91', -'90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', -',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81', -'75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27', -'68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89', -'96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,', -',,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60', -',,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26', -'27,68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88', -'89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57', -',,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', -'60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,', -',,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,', -',,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80', -',,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248', -'278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83', -'84,,,,283,,,,,,,,,,,,,,,,,,,,276,,,273,,,55,56,,,57,,700,,701,,,,,,', -',,702,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61', -'62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94', -'85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', -',,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66', -'67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93', -',,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,', -',,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77', -'78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69', -',,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', -',,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90', -'92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', -',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75', -'77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68', -'69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89', -'96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,', -',,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60', -',,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91', -'90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', -',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,566,,246,,43,,,,,,,,210,', -',,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64', -'249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53', -'87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55', -'56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,', -'54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93', -',,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,', -',,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', -'79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', -',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', -',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', -'250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', -'88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', -'57,,373,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54', -',,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,', -',,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,', -',,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', -'79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', -',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', -',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', -'250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', -'88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', -'57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', -',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,', -',,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,', -',,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79', -'80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', -'248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', -',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,745,,,,43', -',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', -',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', -'94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', -',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', -'65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90', -'92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', -',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75', -'77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68', -'69,,,,,248,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', -'97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,301,', -',,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60', -',,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44', -',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', -'203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76', -'82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', -'91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', -'40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', -'81,75,77,78,79,80,,,,76,82,156,167,157,180,153,173,163,162,183,184,178', -'161,160,155,181,185,186,165,154,168,172,174,166,159,,,175,182,177,329', -'328,330,327,152,171,170,,,,,,151,158,149,150,325,326,323,114,87,86,324', -'89,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145,132,133', -',,,,,335,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122,,', -'146,156,167,157,180,153,173,163,162,183,184,178,161,160,155,181,185', -'186,165,154,168,172,174,166,159,,,175,182,177,176,169,179,164,152,171', -'170,,,,,,151,158,149,150,147,148,112,114,,,113,,,,,,,,142,143,,140,124', -'125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123', -'141,139,138,134,135,130,128,121,,122,,,146,156,167,157,180,153,173,163', -'162,183,184,178,161,160,155,181,185,186,165,154,168,172,174,166,159', -',,175,182,177,176,169,179,164,152,171,170,,,,,,151,158,149,150,147,148', -'112,114,352,351,113,353,,,,,,,142,143,,140,124,125,126,,129,131,,,127', -',,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130', -'128,121,,122,885,389,146,,886,,,,,,,,142,143,,140,124,125,126,,129,131', -',,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134', -'135,130,128,121,,122,883,383,146,,884,,,,,,,,142,143,,140,124,125,126', -',129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139', -'138,134,135,130,128,121,,122,385,389,146,,387,,,,,,,,142,143,,140,124', -'125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123', -'141,139,138,134,135,130,128,121,,122,555,383,146,,556,,,,,,,,142,143', -',140,124,125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137', -'136,,123,141,139,138,134,135,130,128,121,,122,557,389,146,,558,,,,,', -',,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,', -',,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122,636,389,146', -',637,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145,132', -'133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122,634', -'383,146,,635,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144', -'145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121', -',122,748,389,146,,749,,,,,,,,142,143,,140,124,125,126,,129,131,,,127', -',,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130', -'128,121,,122,438,383,146,,439,,,,,,,,142,143,,140,124,125,126,,129,131', -',,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134', -'135,130,128,121,,122,,,146,218,222,227,228,229,224,226,234,235,230,231', -',211,212,,,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219', -',220,,,,,,,603,389,,,604,,,,,236,,574,142,143,,140,124,125,126,,129', -'131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138', -'134,135,130,128,121,,122,438,383,146,,439,,,,,,,,142,143,,140,124,125', -'126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141', -'139,138,134,135,130,128,121,,122,,,146,218,222,227,228,229,224,226,234', -'235,230,231,,211,212,,,232,233,,,,-218,,,,,,,,,,,215,,221,,217,216,213', -'214,225,223,219,,220,,,,,,,438,383,,,439,,,,,236,,-218,142,143,,140', -'124,125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136', -',123,141,139,138,134,135,130,128,121,,122,438,383,146,,439,,,,,,,,142', -'143,,140,124,125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,', -',137,136,,123,141,139,138,134,135,130,128,121,,122,555,383,146,,556', -',,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145,132,133,', -',,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122,557,389', -'146,,558,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145', -'132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122', -'380,383,146,,381,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,', -'144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128', -'121,,122,438,383,146,,439,,,,,,,,142,143,,140,124,125,126,,129,131,', -',127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135', -'130,128,121,,122,,,146,218,222,227,228,229,224,226,234,235,230,231,', -'211,212,,,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219', -',220,,218,222,227,228,229,224,226,234,235,230,231,,211,212,236,561,232', -'233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,218,222', -'227,228,229,224,226,234,235,230,231,,211,212,,236,232,233,,,,,,,,,,', -',,,,215,,221,,217,216,213,214,225,223,219,,220,218,222,227,228,229,224', -'226,234,235,230,231,,211,212,,236,232,233,,,,,,,,,,,,,,,215,,221,,217', -'216,213,214,225,223,219,,220,218,222,227,228,229,224,226,234,235,230', -'231,,211,212,,236,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225', -'223,219,,220,218,222,227,228,229,224,226,234,235,230,231,,211,212,,236', -'232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,218', -'222,227,228,229,224,226,234,235,230,231,,211,212,,236,232,233,,,,,,', -',,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,218,222,227,228,229', -'224,226,234,235,230,231,,211,212,,236,232,233,,,,,,,,,,,,,,,215,,221', -',217,216,213,214,225,223,219,,220,218,222,227,228,229,224,226,234,235', -'230,231,,211,212,,236,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214', -'225,223,219,,220,218,222,227,228,229,224,226,234,235,230,231,,211,212', -'294,236,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219', -',220,218,222,227,228,229,224,226,234,235,230,231,,211,212,,236,232,233', -',,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,218,222,227', -'228,229,224,226,234,235,230,231,,211,212,,236,232,233,,,,,,,,,,,,,,', -'215,,221,,217,216,213,214,225,223,219,,220,218,222,227,228,229,224,226', -'234,235,230,231,,211,212,294,236,232,233,,,,,,,,,,,,,,,215,,221,,217', -'216,213,214,225,223,219,,220,218,222,227,228,229,224,226,234,235,230', -'231,,211,212,,236,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225', -'223,219,,220,218,222,227,228,229,224,226,234,235,230,231,,211,212,,236', -'232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,218', -'222,227,228,229,224,226,234,235,230,231,,211,212,,236,232,233,,,,,,', -',,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,,,,,,,,,,,,,,,,236' ] - racc_action_table = arr = ::Array.new(25062, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -clist = [ -'387,809,672,672,544,609,609,387,387,387,280,313,405,387,387,513,387', -'505,746,634,637,582,346,597,509,601,447,316,509,580,328,29,306,814,636', -'387,387,328,387,387,387,387,387,307,405,635,544,451,405,405,544,58,448', -'398,451,926,496,744,609,3,447,597,582,580,387,387,387,387,387,387,387', -'387,387,387,387,387,387,387,497,747,387,387,387,637,387,346,448,653', -'387,601,672,387,653,29,280,451,387,636,387,398,387,387,387,387,387,387', -'387,601,387,722,387,12,809,313,809,29,722,809,513,505,746,634,637,387', -'387,385,387,601,387,316,387,601,385,385,385,58,636,513,385,385,600,385', -'513,306,814,306,814,635,306,814,385,404,428,496,307,496,307,722,496', -'307,385,385,13,385,385,385,385,385,744,555,744,73,14,744,556,497,747', -'497,747,73,497,747,531,404,765,765,428,404,404,385,385,385,385,385,385', -'385,385,385,385,385,385,385,385,15,600,385,385,385,348,385,202,341,23', -'385,341,555,385,508,603,380,556,385,600,385,37,385,385,385,385,385,385', -'385,343,385,385,385,337,868,39,868,28,204,600,531,531,339,600,28,385', -'385,53,385,531,385,381,385,202,53,53,53,44,380,53,53,53,380,53,508,603', -'348,348,348,341,341,508,603,53,53,487,508,603,487,696,508,603,53,53', -'204,53,53,53,53,53,343,343,343,381,337,337,337,381,508,603,326,327,329', -'339,339,339,65,326,327,329,79,53,53,53,53,53,53,53,53,53,53,53,53,53', -'53,696,323,53,53,53,884,299,53,323,299,53,883,324,53,53,80,53,874,53', -'324,53,187,53,53,53,53,53,53,53,325,53,748,53,908,332,330,325,507,310', -'189,908,332,330,310,437,53,53,53,53,908,53,437,437,437,885,884,437,437', -'437,762,437,883,884,874,874,874,874,884,883,5,437,884,17,883,5,300,203', -'883,300,437,437,748,437,437,437,437,437,507,748,884,311,38,311,748,507', -'883,111,748,286,507,111,111,205,507,885,762,762,762,762,649,649,885', -'755,411,17,748,885,755,17,437,885,507,490,824,206,490,437,277,824,411', -'411,437,437,38,277,242,648,38,885,243,286,648,247,277,286,411,256,411', -'259,411,411,411,411,652,437,652,652,652,652,18,18,267,558,558,558,269', -'558,437,270,437,558,558,437,305,305,558,271,558,558,558,558,558,558', -'558,897,897,296,296,558,558,558,558,558,558,558,621,621,40,40,652,652', -'652,652,276,558,283,283,558,558,558,558,558,558,558,558,558,558,278', -'558,558,279,558,558,558,421,421,421,421,421,421,421,282,275,421,421', -'846,287,288,274,275,421,421,846,558,558,274,558,558,275,558,558,846', -'291,558,274,558,421,558,421,558,421,421,421,421,421,421,421,558,421', -'298,302,440,558,558,558,558,558,558,440,440,440,558,558,440,440,440', -'604,440,412,312,558,315,782,604,317,342,345,440,604,782,367,372,604', -'375,412,412,440,440,782,440,440,440,440,440,379,386,783,406,463,463', -'412,785,463,783,412,412,412,412,785,407,463,463,783,463,463,463,463', -'785,463,463,408,409,463,434,289,465,440,463,463,463,463,289,465,440', -'449,450,452,453,440,440,289,465,454,456,463,463,457,463,463,463,463', -'463,463,463,463,463,201,463,461,640,463,440,466,201,476,477,640,478', -'488,557,557,557,201,557,440,640,440,557,557,440,492,498,557,499,557', -'557,557,557,557,557,557,535,539,547,552,557,557,557,557,557,557,557', -'559,567,673,673,423,673,673,673,569,557,572,574,557,557,557,557,557', -'557,557,557,557,557,583,557,557,586,557,557,557,419,419,419,419,419', -'419,419,423,724,419,419,423,423,423,423,724,419,419,591,557,557,592', -'557,557,724,557,557,599,602,557,605,557,419,557,419,557,419,419,419', -'419,419,419,419,557,419,607,608,610,557,557,557,557,557,557,613,16,623', -'557,557,63,63,63,16,63,629,631,557,63,63,633,654,16,63,655,63,63,63', -'63,63,63,63,656,662,667,670,63,63,63,63,63,63,63,681,699,63,703,705', -'708,713,370,715,63,720,721,63,63,63,63,63,63,63,63,63,63,723,63,63,726', -'63,63,63,370,370,370,370,370,370,370,370,370,370,370,886,370,370,511', -'729,370,370,886,63,730,511,63,886,735,63,63,886,738,63,511,743,370,751', -'370,63,370,370,370,370,370,370,370,63,370,756,757,758,63,63,63,63,63', -'63,770,776,784,63,63,63,370,786,370,749,63,100,100,100,100,100,749,787', -'790,100,100,749,795,798,100,749,100,100,100,100,100,100,100,802,803', -'804,816,100,100,100,100,100,100,100,817,823,100,828,424,829,830,833', -'100,100,100,100,100,100,100,100,100,100,100,100,100,100,834,100,100', -'847,100,100,100,425,425,425,425,425,425,425,424,314,425,425,424,424', -'424,424,314,425,425,851,100,854,857,100,880,314,100,100,881,882,100', -'892,100,425,896,425,100,425,425,425,425,425,425,425,100,425,902,903', -'904,100,100,100,100,100,100,905,45,906,100,100,700,700,700,45,700,100', -'910,913,700,700,1,,45,700,,700,700,700,700,700,700,700,,,,,700,700,700', -'700,700,700,700,109,109,109,109,109,,,,,700,,,700,700,700,700,700,700', -'700,700,700,700,,700,700,,,516,700,516,516,516,516,354,354,354,354,354', -'7,7,7,7,7,,,,,,700,,,700,,,700,700,,,700,,,,,,837,516,837,837,837,837', -',,,516,516,516,516,700,700,700,700,700,700,,,,700,700,842,842,842,700', -'842,,,,842,842,,,,842,837,842,842,842,842,842,842,842,837,837,837,837', -'842,842,842,842,842,842,842,,,,,,,,560,,842,,,842,842,842,842,842,842', -'842,842,842,842,,842,842,,,,842,560,560,560,560,560,560,560,560,560', -'560,560,,560,560,,,560,560,,842,,,842,,,842,842,,,842,,,560,,560,,560', -'560,560,560,560,560,560,,560,,,,842,842,842,842,842,842,,,,842,842,', -'560,,842,872,872,872,872,872,872,,,,872,872,,,,872,,872,872,872,872', -'872,872,872,,,,,872,872,872,872,872,872,872,,,872,,,,,,872,872,872,872', -'872,872,872,872,872,872,872,872,872,872,,872,872,,872,872,872,,,,,,', -',,,,,,,,,,,,,872,,,872,,,872,872,,,872,,872,,,,872,760,,760,760,760', -'760,,872,,,,,872,872,872,872,872,872,,,,872,872,869,869,869,869,869', -'869,,,,869,869,,,,869,,869,869,869,869,869,869,869,760,760,760,760,869', -'869,869,869,869,869,869,,,869,,,,,,869,869,869,869,869,869,869,869,869', -'869,869,869,869,869,,869,869,,869,869,869,402,402,402,402,402,402,402', -'402,402,402,402,,402,402,,,402,402,,869,,,869,,,869,869,,,869,,869,402', -',402,869,402,402,402,402,402,402,402,869,402,,,,869,869,869,869,869', -'869,,,,869,869,190,190,190,190,190,190,,,,190,190,,,,190,,190,190,190', -'190,190,190,190,,,,,190,190,190,190,190,190,190,,,190,,,,,,190,190,190', -'190,190,190,190,190,190,190,190,190,190,190,,190,190,,190,190,190,417', -',,,,,,,,,,,,,,,417,417,,190,,,190,,,190,190,,,190,,190,417,,417,190', -'417,417,417,417,,,417,190,417,,,,190,190,190,190,190,190,,,,190,190', -'864,864,864,864,864,864,,,,864,864,,,,864,,864,864,864,864,864,864,864', -',,,,864,864,864,864,864,864,864,,,864,,,,,,864,864,864,864,864,864,864', -'864,864,864,864,864,864,864,,864,864,,864,864,864,416,,,,,,,,,,,,,,', -',416,416,,864,,,864,,,864,864,,,864,,864,416,,416,864,416,416,416,416', -',,416,864,416,,,,864,864,864,864,864,864,,,,864,864,862,862,862,862', -'862,862,,,,862,862,,,,862,,862,862,862,862,862,862,862,,,,,862,862,862', -'862,862,862,862,,,862,,,,,,862,862,862,862,862,862,862,862,862,862,862', -'862,862,862,,862,862,,862,862,862,403,403,403,403,403,403,403,403,403', -'403,403,,403,403,,,403,403,,862,,,862,,,862,862,,,862,,862,403,,403', -'862,403,403,403,403,403,403,403,862,403,,,,862,862,862,862,862,862,', -',,862,862,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2,2,,,,,2,2,2,2,2,2,2,', -',2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,,2,2,2,413,413,413,413,413', -'413,413,,,413,413,,,,,,413,413,,2,,,2,,,2,2,,,2,,2,413,,413,2,413,413', -'413,413,413,413,413,2,413,,,,2,2,2,2,2,2,,,,2,2,716,716,716,716,716', -'716,,,,716,716,,,,716,,716,716,716,716,716,716,716,,,,,716,716,716,716', -'716,716,716,,,716,,,,,,716,716,716,716,716,716,716,716,716,716,716,716', -'716,716,,716,716,,716,716,716,418,418,418,418,418,418,418,,,418,418', -',,,,,418,418,,716,,,716,,,716,716,,,716,,716,418,,418,716,418,418,418', -'418,418,418,418,716,418,,,,716,716,716,716,716,716,,,,716,716,717,717', -'717,717,717,717,,,,717,717,,,,717,,717,717,717,717,717,717,717,,,,,717', -'717,717,717,717,717,717,,,717,,,,,,717,717,717,717,717,717,717,717,717', -'717,717,717,717,717,,717,717,,717,717,717,414,,,,,,,,,,,,,,,,414,414', -',717,,,717,,,717,717,,,717,,717,414,,414,717,414,414,414,414,,,414,717', -'414,,,,717,717,717,717,717,717,,,,717,717,819,819,819,819,819,819,,', -',819,819,,,,819,,819,819,819,819,819,819,819,,,,,819,819,819,819,819', -'819,819,,,819,,,,,,819,819,819,819,819,819,819,819,819,819,819,819,819', -'819,,819,819,,819,819,819,415,,,,,,,,,,,,,,,,415,415,,819,,,819,,,819', -'819,,,819,,819,415,,415,819,415,415,415,415,,,415,819,415,,,,819,819', -'819,819,819,819,,,,819,819,491,491,491,491,491,491,,,,491,491,,,,491', -',491,491,491,491,491,491,491,,,,,491,491,491,491,491,491,491,,,491,', -',,,,491,491,491,491,491,491,491,491,491,491,491,491,491,491,,491,491', -',491,491,491,420,420,420,420,420,420,420,,,420,420,,,,,,420,420,,491', -',,491,,,491,491,,,491,,491,420,,420,491,420,420,420,420,420,420,420', -'491,420,,,,491,491,491,491,491,491,,,,491,491,650,650,650,650,650,650', -',,,650,650,,,,650,,650,650,650,650,650,650,650,,,,,650,650,650,650,650', -'650,650,,,650,,,,,,650,650,650,650,650,650,650,650,650,650,650,650,650', -'650,,650,650,,650,650,650,422,422,422,422,422,422,422,,,422,422,,,,', -',422,422,,650,,,650,,,650,650,,,650,,650,422,,422,650,422,422,422,422', -'422,422,422,650,422,,,,650,650,650,650,650,650,,,,650,650,806,806,806', -'806,806,806,,,,806,806,,,,806,,806,806,806,806,806,806,806,,,,,806,806', -'806,806,806,806,806,,,806,,,,,,806,806,806,806,806,806,806,806,806,806', -'806,806,806,806,,806,806,,806,806,806,426,426,426,426,426,426,426,426', -',426,426,,,,,,426,426,,806,,,806,,,806,806,,,806,,806,426,,426,806,426', -'426,426,426,426,426,426,806,426,,,,806,806,806,806,806,806,,,,806,806', -'273,273,273,273,273,273,,,,273,273,,,,273,,273,273,273,273,273,273,273', -',,,,273,273,273,273,273,273,273,,,273,,,,,,273,273,273,273,273,273,273', -'273,273,273,273,273,273,273,,273,273,,273,273,273,410,,,,,,,,,,,,,,', -',410,410,,273,,,273,,,273,273,,,273,,273,410,,410,273,410,410,410,410', -',,,273,,,,,273,273,273,273,273,273,,,,273,273,33,33,33,33,33,33,,,,33', -'33,,,,33,,33,33,33,33,33,33,33,,,,,33,33,33,33,33,33,33,,,33,,,,,,33', -'33,33,33,33,33,33,33,33,33,33,33,33,33,,33,33,,33,33,33,,,,,,,,,,,,', -',,,,,,,33,,,33,,,33,33,,,33,,33,,,,33,,,,,,,,33,,,,,33,33,33,33,33,33', -',,,33,33,794,794,794,794,794,794,,,,794,794,,,,794,,794,794,794,794', -'794,794,794,,,,,794,794,794,794,794,794,794,,,794,,,,,,794,794,794,794', -'794,794,794,794,794,794,794,794,794,794,,794,794,,794,794,794,,,,,,', -',,,,,,,,,,,,,794,,,794,,,794,794,,,794,,794,,,,794,,,,,,,,794,,,,,794', -'794,794,794,794,794,,,,794,794,268,268,268,268,268,268,,,,268,268,,', -',268,,268,268,268,268,268,268,268,,,,,268,268,268,268,268,268,268,,', -'268,,,,,,268,268,268,268,268,268,268,268,268,268,268,268,268,268,,268', -'268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268,,,268,268,,,268,,268,', -',,268,,,,,,,,268,,,,,268,268,268,268,268,268,,,,268,268,728,728,728', -'728,728,728,,,,728,728,,,,728,,728,728,728,728,728,728,728,,,,,728,728', -'728,728,728,728,728,,,728,,,,,,728,728,728,728,728,728,728,728,728,728', -'728,728,728,728,,728,728,,728,728,728,,,,,,,,,,,,,,,,,,,,728,,,728,', -',728,728,,,728,,728,,,,728,,,,,,,,728,,,,,728,728,728,728,728,728,,', -',728,728,207,207,207,207,207,207,,,,207,207,,,,207,,207,207,207,207', -'207,207,207,,,,,207,207,207,207,207,207,207,,,207,,,,,,207,207,207,207', -'207,207,207,207,207,207,207,207,207,207,,207,207,,207,207,207,,,,,,', -',,,,,,,,,,,,,207,,,207,,,207,207,,,207,,207,,,,207,,,,,,,,207,,,,,207', -'207,207,207,207,207,,,,207,207,704,704,704,704,704,704,,,,704,704,,', -',704,,704,704,704,704,704,704,704,,,,,704,704,704,704,704,704,704,,', -'704,,,,,,704,704,704,704,704,704,704,704,704,704,704,704,704,704,,704', -'704,,704,704,704,,,,,,,,,,,,,,,,,,,,704,,,704,,,704,704,,,704,,704,', -',,704,,,,,,,,704,,,,,704,704,704,704,704,704,,,,704,704,500,500,500', -'500,500,500,,,,500,500,,,,500,,500,500,500,500,500,500,500,,,,,500,500', -'500,500,500,500,500,,,500,,,,,,500,500,500,500,500,500,500,500,500,500', -'500,500,500,500,,500,500,,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500,', -',500,500,,,500,,500,,,,500,,,,,,,,500,,,,,500,500,500,500,500,500,,', -',500,500,739,739,739,739,739,739,,,,739,739,,,,739,,739,739,739,739', -'739,739,739,,,,,739,739,739,739,739,739,739,,,739,,,,,,739,739,739,739', -'739,739,739,739,739,739,739,739,739,739,,739,739,,739,739,739,,,,,,', -',,,,,,,,,,,,,739,,,739,,,739,739,,,739,,739,,,,739,,,,,,,,739,,,,,739', -'739,739,739,739,739,,,,739,739,740,740,740,740,740,740,,,,740,740,,', -',740,,740,740,740,740,740,740,740,,,,,740,740,740,740,740,740,740,,', -'740,,,,,,740,740,740,740,740,740,740,740,740,740,740,740,740,740,,740', -'740,,740,740,740,,,,,,,,,,,,,,,,,,,,740,,,740,,,740,740,,,740,,740,', -',,740,,,,,,,,740,,,,,740,740,740,740,740,740,,,,740,740,495,495,495', -'495,495,495,,,,495,495,,,,495,,495,495,495,495,495,495,495,,,,,495,495', -'495,495,495,495,495,,,495,,,,,,495,495,495,495,495,495,495,495,495,495', -'495,495,495,495,,495,495,,495,495,495,,,,,,,,,,,,,,,,,,,,495,,,495,', -',495,495,,,495,,495,,,,495,,,,,,,,495,,,,,495,495,495,495,495,495,,', -',495,495,674,674,674,674,674,674,,,,674,674,,,,674,,674,674,674,674', -'674,674,674,,,,,674,674,674,674,674,674,674,,,674,,,,,,674,674,674,674', -'674,674,674,674,674,674,674,674,674,674,,674,674,,674,674,674,,,,,,', -',,,,,,,,,,,,,674,,,674,,,674,674,,,674,,674,,,,674,,,,,,,,674,,,,,674', -'674,674,674,674,674,,,,674,674,366,366,366,366,366,366,,,,366,366,,', -',366,,366,366,366,366,366,366,366,,,,,366,366,366,366,366,366,366,,', -'366,,,,,,366,366,366,366,366,366,366,366,366,366,366,366,366,366,,366', -'366,,366,366,366,,,,,,,,,,,,,,,,,,,,366,,,366,,,366,366,,,366,,366,', -',,366,,,,,,,,366,,,,,366,366,366,366,366,366,,,,366,366,295,295,295', -'295,295,295,,,,295,295,,,,295,,295,295,295,295,295,295,295,,,,,295,295', -'295,295,295,295,295,,,295,,,,,,295,295,295,295,295,295,295,295,295,295', -'295,295,295,295,,295,295,,295,295,295,,,,,,,,,,,,,,,,,,,,295,,,295,', -',295,295,,,295,,295,,,,295,,,,,,,,295,,,,,295,295,295,295,295,295,,', -',295,295,752,752,752,752,752,752,,,,752,752,,,,752,,752,752,752,752', -'752,752,752,,,,,752,752,752,752,752,752,752,,,752,,,,,,752,752,752,752', -'752,752,752,752,752,752,752,752,752,752,,752,752,,752,752,752,,,,,,', -',,,,,,,,,,,,,752,,,752,,,752,752,,,752,,752,,,,752,,,,,,,,752,,,,,752', -'752,752,752,752,752,,,,752,752,651,651,651,651,651,651,,,,651,651,,', -',651,,651,651,651,651,651,651,651,,,,,651,651,651,651,651,651,651,,', -'651,,,,,,651,651,651,651,651,651,651,651,651,651,651,651,651,651,,651', -'651,,651,651,651,,,,,,,,,,,,,,,,,,,,651,,,651,,,651,651,,,651,,651,', -',,651,,,,,,,,651,,,,,651,651,651,651,651,651,,,,651,651,878,878,878', -'878,878,878,,,,878,878,,,,878,,878,878,878,878,878,878,878,,,,,878,878', -'878,878,878,878,878,,,878,,,,,,878,878,878,878,878,878,878,878,878,878', -'878,878,878,878,,878,878,,878,878,878,,,,,,,,,,,,,,,,,,,,878,,,878,', -',878,878,,,878,,878,,,,878,,,,,,,,878,,,,,878,878,878,878,878,878,,', -',878,878,222,222,222,,222,,,,222,222,,,,222,,222,222,222,222,222,222', -'222,,,,,222,222,222,222,222,222,222,,,,,,,,,,222,,,222,222,222,222,222', -'222,222,222,222,222,,222,222,,222,222,222,,,,,,,,,,,,,,,,,,,,222,,,222', -',,222,222,,,222,,,,,,222,,,,,,,,222,,,,,222,222,222,222,222,222,,,,222', -'222,223,223,223,,223,,,,223,223,,,,223,,223,223,223,223,223,223,223', -',,,,223,223,223,223,223,223,223,,,,,,,,,,223,,,223,223,223,223,223,223', -'223,223,223,223,,223,223,,223,223,223,,,,,,,,,,,,,,,,,,,,223,,,223,', -',223,223,,,223,,,,,,223,,,,,,,,223,,,,,223,223,223,223,223,223,,,,223', -'223,224,224,224,,224,,,,224,224,,,,224,,224,224,224,224,224,224,224', -',,,,224,224,224,224,224,224,224,,,,,,,,,,224,,,224,224,224,224,224,224', -'224,224,224,224,,224,224,,224,224,224,,,,,,,,,,,,,,,,,,,,224,,,224,', -',224,224,,,224,,,,,,224,,,,,,,,224,,,,,224,224,224,224,224,224,,,,224', -'224,225,225,225,,225,,,,225,225,,,,225,,225,225,225,225,225,225,225', -',,,,225,225,225,225,225,225,225,,,,,,,,,,225,,,225,225,225,225,225,225', -'225,225,225,225,,225,225,,225,225,225,,,,,,,,,,,,,,,,,,,,225,,,225,', -',225,225,,,225,,,,,,225,,,,,,,,225,,,,,225,225,225,225,225,225,,,,225', -'225,226,226,226,,226,,,,226,226,,,,226,,226,226,226,226,226,226,226', -',,,,226,226,226,226,226,226,226,,,,,,,,,,226,,,226,226,226,226,226,226', -'226,226,226,226,,226,226,,226,226,226,,,,,,,,,,,,,,,,,,,,226,,,226,', -',226,226,,,226,,,,,,226,,,,,,,,226,,,,,226,226,226,226,226,226,,,,226', -'226,682,682,682,,682,,,,682,682,,,,682,,682,682,682,682,682,682,682', -',,,,682,682,682,682,682,682,682,,,,,,,,,,682,,,682,682,682,682,682,682', -'682,682,682,682,,682,682,,682,682,682,,,,,,,,,,,,,,,,,,,,682,,,682,', -',682,682,,,682,,,,,,682,,,,,,,,682,,,,,682,682,682,682,682,682,,,,682', -'682,683,683,683,,683,,,,683,683,,,,683,,683,683,683,683,683,683,683', -',,,,683,683,683,683,683,683,683,,,,,,,,,,683,,,683,683,683,683,683,683', -'683,683,683,683,,683,683,,683,683,683,,,,,,,,,,,,,,,,,,,,683,,,683,', -',683,683,,,683,,,,,,683,,,,,,,,683,,,,,683,683,683,683,683,683,,,,683', -'683,693,693,693,,693,,,,693,693,,,,693,,693,693,693,693,693,693,693', -',,,,693,693,693,693,693,693,693,,,,,,,,,,693,,,693,693,693,693,693,693', -'693,693,693,693,,693,693,,693,693,693,,,,,,,,,,,,,,,,,,,,693,,,693,', -',693,693,,,693,,,,,,693,,,,,,,,693,,,,,693,693,693,693,693,693,,,,693', -'693,694,694,694,,694,,,,694,694,,,,694,,694,694,694,694,694,694,694', -',,,,694,694,694,694,694,694,694,,,,,,,,,,694,,,694,694,694,694,694,694', -'694,694,694,694,,694,694,,694,694,694,,,,,,,,,,,,,,,,,,,,694,,,694,', -',694,694,,,694,,,,,,694,,,,,,,,694,,,,,694,694,694,694,694,694,,,,694', -'694,695,695,695,,695,,,,695,695,,,,695,,695,695,695,695,695,695,695', -',,,,695,695,695,695,695,695,695,,,,,,,,,,695,,,695,695,695,695,695,695', -'695,695,695,695,,695,695,,695,695,695,,,,,,,,,,,,,,,,,,,,695,,,695,', -',695,695,,,695,,,,,,695,,,,,,,,695,,,,,695,695,695,695,695,695,,,,695', -'695,227,227,227,,227,,,,227,227,,,,227,,227,227,227,227,227,227,227', -',,,,227,227,227,227,227,227,227,,,,,,,,,,227,,,227,227,227,227,227,227', -'227,227,227,227,,227,227,,227,227,227,,,,,,,,,,,,,,,,,,,,227,,,227,', -',227,227,,,227,,,,,,227,,,,,,,,227,,,,,227,227,227,227,227,227,,,,227', -'227,701,701,701,,701,,,,701,701,,,,701,,701,701,701,701,701,701,701', -',,,,701,701,701,701,701,701,701,,,,,,,,,,701,,,701,701,701,701,701,701', -'701,701,701,701,,701,701,,,,701,,,,,,,,,,,,,,,,,,,,701,,,701,,,701,701', -',,701,,,,,,,,,,,,,,,,,,,701,701,701,701,701,701,,,,701,701,228,228,228', -',228,,,,228,228,,,,228,,228,228,228,228,228,228,228,,,,,228,228,228', -'228,228,228,228,,,,,,,,,,228,,,228,228,228,228,228,228,228,228,228,228', -',228,228,,228,228,228,,,,,,,,,,,,,,,,,,,,228,,,228,,,228,228,,,228,', -',,,,228,,,,,,,,228,,,,,228,228,228,228,228,228,,,,228,228,229,229,229', -',229,,,,229,229,,,,229,,229,229,229,229,229,229,229,,,,,229,229,229', -'229,229,229,229,,,,,,,,,,229,,,229,229,229,229,229,229,229,229,229,229', -',229,229,,229,229,229,,,,,,,,,,,,,,,,,,,,229,,,229,,,229,229,,,229,', -',,,,229,,,,,,,,229,,,,,229,229,229,229,229,229,,,,229,229,707,707,707', -',707,,,,707,707,,,,707,,707,707,707,707,707,707,707,,,,,707,707,707', -'707,707,707,707,,,,,,,,,,707,,,707,707,707,707,707,707,707,707,707,707', -',707,707,,707,707,707,,,,,,,,,,,,,,,,,,,,707,,,707,,,707,707,,,707,', -'707,,707,,707,,,,,,,,707,,,,,707,707,707,707,707,707,,,,707,707,230', -'230,230,,230,,,,230,230,,,,230,,230,230,230,230,230,230,230,,,,,230', -'230,230,230,230,230,230,,,,,,,,,,230,,,230,230,230,230,230,230,230,230', -'230,230,,230,230,,230,230,230,,,,,,,,,,,,,,,,,,,,230,,,230,,,230,230', -',,230,,,,,,230,,,,,,,,230,,,,,230,230,230,230,230,230,,,,230,230,710', -'710,710,,710,,,,710,710,,,,710,,710,710,710,710,710,710,710,,,,,710', -'710,710,710,710,710,710,,,,,,,,,,710,,,710,710,710,710,710,710,710,710', -'710,710,,710,710,,710,710,710,,,,,,,,,,,,,,,,,,,,710,,,710,,,710,710', -',,710,,710,,710,,710,,,,,,,,710,,,,,710,710,710,710,710,710,,,,710,710', -'712,712,712,,712,,,,712,712,,,,712,,712,712,712,712,712,712,712,,,,', -'712,712,712,712,712,712,712,,,,,,,,,,712,,,712,712,712,712,712,712,712', -'712,712,712,,712,712,,712,712,712,,,,,,,,,,,,,,,,,,,,712,,,712,,,712', -'712,,,712,,712,,712,,712,,,,,,,,712,,,,,712,712,712,712,712,712,,,,712', -'712,231,231,231,,231,,,,231,231,,,,231,,231,231,231,231,231,231,231', -',,,,231,231,231,231,231,231,231,,,,,,,,,,231,,,231,231,231,231,231,231', -'231,231,231,231,,231,231,,231,231,231,,,,,,,,,,,,,,,,,,,,231,,,231,', -',231,231,,,231,,,,,,231,,,,,,,,231,,,,,231,231,231,231,231,231,,,,231', -'231,232,232,232,,232,,,,232,232,,,,232,,232,232,232,232,232,232,232', -',,,,232,232,232,232,232,232,232,,,,,,,,,,232,,,232,232,232,232,232,232', -'232,232,232,232,,232,232,,232,232,232,,,,,,,,,,,,,,,,,,,,232,,,232,', -',232,232,,,232,,,,,,232,,,,,,,,232,,,,,232,232,232,232,232,232,,,,232', -'232,233,233,233,,233,,,,233,233,,,,233,,233,233,233,233,233,233,233', -',,,,233,233,233,233,233,233,233,,,,,,,,,,233,,,233,233,233,233,233,233', -'233,233,233,233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,', -',233,233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233', -'233,234,234,234,,234,,,,234,234,,,,234,,234,234,234,234,234,234,234', -',,,,234,234,234,234,234,234,234,,,,,,,,,,234,,,234,234,234,234,234,234', -'234,234,234,234,,234,234,,234,234,234,,,,,,,,,,,,,,,,,,,,234,,,234,', -',234,234,,,234,,,,,,234,,,,,,,,234,,,,,234,234,234,234,234,234,,,,234', -'234,235,235,235,,235,,,,235,235,,,,235,,235,235,235,235,235,235,235', -',,,,235,235,235,235,235,235,235,,,,,,,,,,235,,,235,235,235,235,235,235', -'235,235,235,235,,235,235,,235,235,235,,,,,,,,,,,,,,,,,,,,235,,,235,', -',235,235,,,235,,,,,,235,,,,,,,,235,,,,,235,235,235,235,235,235,,,,235', -'235,236,236,236,,236,,,,236,236,,,,236,,236,236,236,236,236,236,236', -',,,,236,236,236,236,236,236,236,,,,,,,,,,236,,,236,236,236,236,236,236', -'236,236,236,236,,236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236,,,236,', -',236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236,236,236,236,,,,236', -'236,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,,,9,9,9,9,9,9,9', -'9,9,9,,,,,,9,9,9,9,9,9,9,9,9,,9,,,,,,,,9,9,,9,9,9,9,,9,9,,,9,,,,,9,9', -'9,9,,,,,,,,,,,,,,9,9,,9,9,9,9,9,9,9,9,9,,9,,,9,9,,,25,25,25,,25,,,9', -'25,25,,,,25,,25,25,25,25,25,25,25,,,,,25,25,25,25,25,25,25,,,,,,,,,', -'25,,,25,25,25,25,25,25,25,25,25,25,,25,25,,25,25,25,,,,,,,,,,,,,,,,', -',,,25,,,25,,,25,25,,,25,,25,,25,,25,,,,,,,,25,,,,,25,25,25,25,25,25', -',,,25,25,737,737,737,,737,,,,737,737,,,,737,,737,737,737,737,737,737', -'737,,,,,737,737,737,737,737,737,737,,,737,,,,,,,737,,,737,737,737,737', -'737,737,737,737,737,737,,737,737,,737,737,737,,,,,,,,,,,,,,,,,,,,737', -',,737,,,737,737,,,737,,,,,,737,,,,,,,,737,,,,,737,737,737,737,737,737', -',,,737,737,244,244,244,,244,,,,244,244,,,,244,,244,244,244,244,244,244', -'244,,,,,244,244,244,244,244,244,244,,,,,,,,,,244,,,244,244,244,244,244', -'244,244,244,244,244,,244,244,,244,244,244,,,,,,,,,,,,,,,,,,,,244,,,244', -',,244,244,,,244,,,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244,,,,244', -'244,246,246,246,,246,,,,246,246,,,,246,,246,246,246,246,246,246,246', -',,,,246,246,246,246,246,246,246,,,,,,,,,,246,,,246,246,246,246,246,246', -'246,246,246,246,,246,246,,246,246,246,,,,,,,,,,,,,,,,,,,,246,,,246,', -',246,246,,,246,,,,,,246,,,,,,,,246,,,,,246,246,246,246,246,246,,,,246', -'246,745,745,745,,745,,,,745,745,,,,745,,745,745,745,745,745,745,745', -',,,,745,745,745,745,745,745,745,,,,,,,,,,745,,,745,745,745,745,745,745', -'745,745,745,745,,745,745,,745,745,745,,,,,,,,,,,,,,,,,,,,745,,,745,', -',745,745,,,745,,,,,,745,,,,,,,,745,,,,,745,745,745,745,745,745,,,,745', -'745,26,26,26,,26,,,,26,26,,,,26,,26,26,26,26,26,26,26,,,,,26,26,26,26', -'26,26,26,,,,,,,,,,26,,,26,26,26,26,26,26,26,26,26,26,,26,26,,26,26,26', -',,,,,,,,,,,,,,,,,,,26,,,26,,,26,26,,,26,,26,,26,,26,,,,,,,,26,,,,,26', -'26,26,26,26,26,,,,26,26,753,753,753,,753,,,,753,753,,,,753,,753,753', -'753,753,753,753,753,,,,,753,753,753,753,753,753,753,,,753,,,,,,,753', -',,753,753,753,753,753,753,753,753,753,753,,753,753,,753,753,753,,,,', -',,,,,,,,,,,,,,,753,,,753,,,753,753,,,753,,,,,,753,,,,,,,,753,,,,,753', -'753,753,753,753,753,,,,753,753,27,27,27,,27,,,,27,27,,,,27,,27,27,27', -'27,27,27,27,,,,,27,27,27,27,27,27,27,,,,,,,,,,27,,,27,27,27,27,27,27', -'27,27,27,27,,27,27,,27,27,27,,,,,,,,,,,,,,,,,,,,27,,,27,,,27,27,,,27', -',27,,27,,27,,,,,,,,27,,,,,27,27,27,27,27,27,,,,27,27,766,766,766,,766', -',,,766,766,,,,766,,766,766,766,766,766,766,766,,,,,766,766,766,766,766', -'766,766,,,,,,,,,,766,,,766,766,766,766,766,766,766,766,766,766,,766', -'766,,766,766,766,,,,,,,,,,,,,,,,,,,,766,,,766,,,766,766,,,766,,,,,,766', -',,,,,,,766,,,,,766,766,766,766,766,766,,,,766,766,257,257,257,,257,', -',,257,257,,,,257,,257,257,257,257,257,257,257,,,,,257,257,257,257,257', -'257,257,,,,,,,,,,257,,,257,257,257,257,257,257,257,257,257,257,,257', -'257,,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257,,,257,,257,', -'257,,257,,,,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,780,780,780', -',780,,,,780,780,,,,780,,780,780,780,780,780,780,780,,,,,780,780,780', -'780,780,780,780,,,,,,,,,,780,,,780,780,780,780,780,780,780,780,780,780', -',780,780,,780,780,780,,,,,,,,,,,,,,,,,,,,780,,,780,,,780,780,,,780,', -',,,,780,,,,,,,,780,,,,,780,780,780,780,780,780,,,,780,780,781,781,781', -',781,,,,781,781,,,,781,,781,781,781,781,781,781,781,,,,,781,781,781', -'781,781,781,781,,,,,,,,,,781,,,781,781,781,781,781,781,781,781,781,781', -',781,781,,,,781,,,,,,,,,,,,,,,,,,,,781,,,781,,,781,781,,,781,,781,,781', -',,,,,,,,,,,,,,781,781,781,781,781,781,,,,781,781,263,263,263,,263,,', -',263,263,,,,263,,263,263,263,263,263,263,263,,,,,263,263,263,263,263', -'263,263,,,,,,,,,,263,,,263,263,263,263,263,263,263,263,263,263,,263', -'263,,263,263,263,,,,,,,,,,,,,,,,,,,,263,,,263,,,263,263,,,263,,263,', -'263,,263,,,,,,,,263,,,,,263,263,263,263,263,263,,,,263,263,266,266,266', -',266,,,,266,266,,,,266,,266,266,266,266,266,266,266,,,,,266,266,266', -'266,266,266,266,,,,,,,,,,266,,,266,266,266,266,266,266,266,266,266,266', -',266,266,,266,266,266,,,,,,,,,,,,,,,,,,,,266,,,266,,266,266,266,,,266', -',266,,266,,266,,,,,,,,266,,,,,266,266,266,266,266,266,,,,266,266,792', -'792,792,,792,,,,792,792,,,,792,,792,792,792,792,792,792,792,,,,,792', -'792,792,792,792,792,792,,,,,,,,,,792,,,792,792,792,792,792,792,792,792', -'792,792,,792,792,,792,792,792,,,,,,,,,,,,,,,,,,,,792,,,792,,,792,792', -',,792,,,,,,792,,,,,,,,792,,,,,792,792,792,792,792,792,,,,792,792,30', -'30,30,,30,,,,30,30,,,,30,,30,30,30,30,30,30,30,,,,,30,30,30,30,30,30', -'30,,,,,,,,,,30,,,30,30,30,30,30,30,30,30,30,30,,30,30,,30,30,30,,,,', -',,,,,,,,,,,,,,,30,,,30,30,,30,30,,,30,,30,,30,,30,,,,,,,,30,,,,,30,30', -'30,30,30,30,,,,30,30,797,797,797,,797,,,,797,797,,,,797,,797,797,797', -'797,797,797,797,,,,,797,797,797,797,797,797,797,,,,,,,,,,797,,,797,797', -'797,797,797,797,797,797,797,797,,797,797,,797,797,797,,,,,,,,,,,,,,', -',,,,,797,,,797,,,797,797,,,797,,,,,,797,,,,,,,,797,,,,,797,797,797,797', -'797,797,,,,797,797,31,31,31,,31,,,,31,31,,,,31,,31,31,31,31,31,31,31', -',,,,31,31,31,31,31,31,31,,,,,,,,,,31,,,31,31,31,31,31,31,31,31,31,31', -',31,31,,31,31,31,,,,,,,,,,,,,,,,,,,,31,,,31,31,,31,31,,,31,,31,,31,', -'31,,,,,,,,31,,,,,31,31,31,31,31,31,,,,31,31,799,799,799,,799,,,,799', -'799,,,,799,,799,799,799,799,799,799,799,,,,,799,799,799,799,799,799', -'799,,,,,,,,,,799,,,799,799,799,799,799,799,799,799,799,799,,799,799', -',799,799,799,,,,,,,,,,,,,,,,,,,,799,,,799,,,799,799,,,799,,,,,,799,', -',,,,,,799,,,,,799,799,799,799,799,799,,,,799,799,272,272,272,,272,,', -',272,272,,,,272,,272,272,272,272,272,272,272,,,,,272,272,272,272,272', -'272,272,,,,,,,,,,272,,,272,272,272,272,272,272,272,272,272,272,,272', -'272,,,,272,,,,,,,,,,,,,,,,,,,,272,,,272,,,272,272,,,272,,,,,,,,,,,,', -',,,,,,272,272,272,272,272,272,,,,272,272,810,810,810,,810,,,,810,810', -',,,810,,810,810,810,810,810,810,810,,,,,810,810,810,810,810,810,810', -',,,,,,,,,810,,,810,810,810,810,810,810,810,810,810,810,,810,810,,,,810', -',,,,,,,,,,,,,,,,,,,810,,,810,,,810,810,,,810,,,,,,,,,,,,,,,,,,,810,810', -'810,810,810,810,,,,810,810,818,818,818,,818,,,,818,818,,,,818,,818,818', -'818,818,818,818,818,,,,,818,818,818,818,818,818,818,,,,,,,,,,818,,,818', -'818,818,818,818,818,818,818,818,818,,818,818,,818,818,818,,,,,,,,,,', -',,,,,,,,,818,,,818,,,818,818,,,818,,818,,,,818,,,,,,,,818,,,,,818,818', -'818,818,818,818,,,,818,818,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34', -'34,34,34,,,,,34,34,34,34,34,34,34,,,,,,,,,,34,,,34,34,34,34,34,34,34', -'34,34,34,,34,34,,,,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,', -',,,,,,,,,,,,,,34,34,34,34,34,34,,,,34,34,35,35,35,,35,,,,35,35,,,,35', -',35,35,35,35,35,35,35,,,,,35,35,35,35,35,35,35,,,,,,,,,,35,,,35,35,35', -'35,35,35,35,35,35,35,,35,35,,,,35,,,,,,,,,,,,,,,,,,,,35,,,35,,,35,35', -',,35,,,,,,,,,,,,,,,,,,,35,35,35,35,35,35,,,,35,35,10,10,10,10,10,10', -'10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,,,10,10,10,10', -'10,10,10,10,10,10,,,,,,10,10,10,10,10,10,10,10,,,10,,,,,,,,10,10,,10', -'10,10,10,,10,10,,,10,,,,,10,10,10,10,,,,,,,,,,,,,,10,10,,10,10,10,10', -'10,10,10,10,10,,10,,,10,10,,,841,841,841,,841,,,10,841,841,,,,841,,841', -'841,841,841,841,841,841,,,,,841,841,841,841,841,841,841,,,,,,,,,,841', -',,841,841,841,841,841,841,841,841,841,841,,841,841,,,,841,,,,,,,,,,', -',,,,,,,,,841,,,841,,,841,841,,,841,,,,,,,,,,,,,,,,,,,841,841,841,841', -'841,841,,,,841,841,843,843,843,,843,,,,843,843,,,,843,,843,843,843,843', -'843,843,843,,,,,843,843,843,843,843,843,843,,,,,,,,,,843,,,843,843,843', -'843,843,843,843,843,843,843,,843,843,,843,843,843,,,,,,,,,,,,,,,,,,', -',843,,,843,,,843,843,,,843,,843,,,,843,,,,,,,,843,,,,,843,843,843,843', -'843,843,,,,843,843,848,848,848,,848,,,,848,848,,,,848,,848,848,848,848', -'848,848,848,,,,,848,848,848,848,848,848,848,,,,,,,,,,848,,,848,848,848', -'848,848,848,848,848,848,848,,848,848,,,,848,,,,,,,,,,,,,,,,,,,,848,', -',848,,,848,848,,,848,,,,,,,,,,,,,,,,,,,848,848,848,848,848,848,,,,848', -'848,853,853,853,,853,,,,853,853,,,,853,,853,853,853,853,853,853,853', -',,,,853,853,853,853,853,853,853,,,,,,,,,,853,,,853,853,853,853,853,853', -'853,853,853,853,,853,853,,853,853,853,,,,,,,,,,,,,,,,,,,,853,,,853,', -',853,853,,,853,,853,,853,,853,,,,,,,,853,,,,,853,853,853,853,853,853', -',,,853,853,856,856,856,,856,,,,856,856,,,,856,,856,856,856,856,856,856', -'856,,,,,856,856,856,856,856,856,856,,,,,,,,,,856,,,856,856,856,856,856', -'856,856,856,856,856,,856,856,,856,856,856,,,,,,,,,,,,,,,,,,,,856,,,856', -',,856,856,,,856,,856,,856,,856,,,,,,,,856,,,,,856,856,856,856,856,856', -',,,856,856,867,867,867,,867,,,,867,867,,,,867,,867,867,867,867,867,867', -'867,,,,,867,867,867,867,867,867,867,,,,,,,,,,867,,,867,867,867,867,867', -'867,867,867,867,867,,867,867,,867,867,867,,,,,,,,,,,,,,,,,,,,867,,,867', -',,867,867,,,867,,,,,,867,,,,,,,,867,,,,,867,867,867,867,867,867,,,,867', -'867,41,41,41,,41,,,,41,41,,,,41,,41,41,41,41,41,41,41,,,,,41,41,41,41', -'41,41,41,,,,,,,,,,41,,,41,41,41,41,41,41,41,41,41,41,,41,41,,41,41,41', -',,,,,,,,,,,,,,,,,,,41,,,41,,,41,41,,,41,,,,,,41,,,,,,,,41,,,,,41,41', -'41,41,41,41,,,,41,41,293,293,293,,293,,,,293,293,,,,293,,293,293,293', -'293,293,293,293,,,,,293,293,293,293,293,293,293,,,,,,,,,,293,,,293,293', -'293,293,293,293,293,293,293,293,,293,293,,293,293,293,,,,,,,,,,,,,,', -',,,,,293,,,293,293,,293,293,,,293,,,,,,293,,,,,,,,293,,,,,293,293,293', -'293,293,293,,,,293,293,887,887,887,,887,,,,887,887,,,,887,,887,887,887', -'887,887,887,887,,,,,887,887,887,887,887,887,887,,,,,,,,,,887,,,887,887', -'887,887,887,887,887,887,887,887,,887,887,,,,887,,,,,,,,,,,,,,,,,,,,887', -',,887,,,887,887,,,887,,,,,,,,,,,,,,,,,,,887,887,887,887,887,887,,,,887', -'887,891,891,891,,891,,,,891,891,,,,891,,891,891,891,891,891,891,891', -',,,,891,891,891,891,891,891,891,,,,,,,,,,891,,,891,891,891,891,891,891', -'891,891,891,891,,891,891,,891,891,891,,,,,,,,,,,,,,,,,,,,891,,,891,', -',891,891,,,891,,,,,,891,,,,,,,,891,,,,,891,891,891,891,891,891,,,,891', -'891,894,894,894,,894,,,,894,894,,,,894,,894,894,894,894,894,894,894', -',,,,894,894,894,894,894,894,894,,,,,,,,,,894,,,894,894,894,894,894,894', -'894,894,894,894,,894,894,,894,894,894,,,,,,,,,,,,,,,,,,,,894,,,894,', -',894,894,,,894,,,,,,894,,,,,,,,894,,,,,894,894,894,894,894,894,,,,894', -'894,42,42,42,,42,,,,42,42,,,,42,,42,42,42,42,42,42,42,,,,,42,42,42,42', -'42,42,42,,,,,,,,,,42,,,42,42,42,42,42,42,42,42,42,42,,42,42,,42,42,42', -',,,,,,,,,,,,,,,,,,,42,,,42,,,42,42,,,42,,,,,,42,,,,,,,,42,,,,,42,42', -'42,42,42,42,,,,42,42,301,301,301,,301,,,,301,301,,,,301,,301,301,301', -'301,301,301,301,,,,,301,301,301,301,301,301,301,,,,,,,,,,301,,,301,301', -'301,301,301,301,301,301,301,301,,301,301,,301,301,301,,,,,,,,,,,,,,', -',,,,,301,,,301,,,301,301,,,301,,,,,,301,,,,,,,,301,,,,,301,301,301,301', -'301,301,,,,301,301,43,43,43,,43,,,,43,43,,,,43,,43,43,43,43,43,43,43', -',,,,43,43,43,43,43,43,43,,,,,,,,,,43,,,43,43,43,43,43,43,43,43,43,43', -',43,43,,43,43,43,,,,,,,,,,,,,,,,,,,,43,,,43,,,43,43,,,43,,,,,,43,,,', -',,,,43,,,,,43,43,43,43,43,43,,,,43,43,907,907,907,,907,,,,907,907,,', -',907,,907,907,907,907,907,907,907,,,,,907,907,907,907,907,907,907,,', -',,,,,,,907,,,907,907,907,907,907,907,907,907,907,907,,907,907,,,,907', -',,,,,,,,,,,,,,,,,,,907,,,907,,,907,907,,,907,,,,,,,,,,,,,,,,,,,907,907', -'907,907,907,907,,,,907,907,303,303,303,,303,,,,303,303,,,,303,,303,303', -'303,303,303,303,303,,,,,303,303,303,303,303,303,303,,,,,,,,,,303,,,303', -'303,303,303,303,303,303,303,303,303,,303,303,,303,303,303,,,,,,,,,,', -',,,,,,,,,303,,,303,,,303,303,,,303,,,,,,303,,,,,,,,303,,,,,303,303,303', -'303,303,303,,,,303,303,912,912,912,,912,,,,912,912,,,,912,,912,912,912', -'912,912,912,912,,,,,912,912,912,912,912,912,912,,,,,,,,,,912,,,912,912', -'912,912,912,912,912,912,912,912,,912,912,,912,912,912,,,,,,,,,,,,,,', -',,,,,912,,,912,,,912,912,,,912,,912,,912,,912,,,,,,,,912,,,,,912,912', -'912,912,912,912,,,,912,912,920,920,920,,920,,,,920,920,,,,920,,920,920', -'920,920,920,920,920,,,,,920,920,920,920,920,920,920,,,,,,,,,,920,,,920', -'920,920,920,920,920,920,920,920,920,,920,920,,,,920,,,,,,,,,,,,,,,,', -',,,920,,,920,,,920,920,,,920,,,,,,,,,,,,,,,,,,,920,920,920,920,920,920', -',,,920,920,923,923,923,,923,,,,923,923,,,,923,,923,923,923,923,923,923', -'923,,,,,923,923,923,923,923,923,923,,,,,,,,,,923,,,923,923,923,923,923', -'923,923,923,923,923,,923,923,,923,923,923,,,,,,,,,,,,,,,,,,,,923,,,923', -',,923,923,,,923,,,,,,923,,,,,,,,923,,,,,923,923,923,923,923,923,,,,923', -'923,308,308,308,,308,,,,308,308,,,,308,,308,308,308,308,308,308,308', -',,,,308,308,308,308,308,308,308,,,308,,,,,,,308,,,308,308,308,308,308', -'308,308,308,308,308,,308,308,,308,308,308,,,,,,,,,,,,,,,,,,,,308,,,308', -',,308,308,,,308,,,,,,308,,,,,,,,308,,,,,308,308,308,308,308,308,,,,308', -'308,309,309,309,,309,,,,309,309,,,,309,,309,309,309,309,309,309,309', -',,,,309,309,309,309,309,309,309,,,309,,,,,,,309,,,309,309,309,309,309', -'309,309,309,309,309,,309,309,,309,309,309,,,,,,,,,,,,,,,,,,,,309,,,309', -',,309,309,,,309,,,,,,309,,,,,,,,309,,,,,309,309,309,309,309,309,,,,309', -'309,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320,320', -',,,,320,320,320,320,320,320,320,,,,,,,,,,320,,,320,320,320,320,320,320', -'320,320,320,320,,320,320,,,,320,,,,,,,,,,,,,,,,,,,,320,,,320,,,320,320', -',,320,,,,,,,,,,,,,,,,,,,320,320,320,320,320,320,,,,320,320,322,322,322', -',322,,,,322,322,,,,322,,322,322,322,322,322,322,322,,,,,322,322,322', -'322,322,322,322,,,,,,,,,,322,,,322,322,322,322,322,322,322,322,322,322', -',322,322,,,,322,,,,,,,,,,,,,,,,,,,,322,,,322,,,322,322,,,322,,,,,,,', -',,,,,,,,,,,322,322,322,322,322,322,,,,322,322,55,55,55,,55,,,,55,55', -',,,55,,55,55,55,55,55,55,55,,,,,55,55,55,55,55,55,55,,,55,,,,,,,55,', -',55,55,55,55,55,55,55,55,55,55,,55,55,,55,55,55,,,,,,,,,,,,,,,,,,,,55', -',,55,,,55,55,,,55,,,,,,55,,,,,,,,55,,,,,55,55,55,55,55,55,,,,55,55,56', -'56,56,,56,,,,56,56,,,,56,,56,56,56,56,56,56,56,,,,,56,56,56,56,56,56', -'56,,,,,,,,,,56,,,56,56,56,56,56,56,56,56,56,56,,56,56,,56,56,56,,,,', -',,,,,,,,,,,,,,,56,,,56,,,56,56,,,56,,56,,,,56,,,,,,,,56,,,,,56,56,56', -'56,56,56,,,,56,56,361,361,361,361,361,361,361,361,361,361,361,361,361', -'361,361,361,361,361,361,361,361,361,361,361,,,361,361,361,361,361,361', -'361,361,361,361,,,,,,361,361,361,361,361,361,361,361,,,361,,,,,,,,361', -'361,,361,361,361,361,,361,361,,,361,,,,,361,361,361,361,,,,,,,,,,,,', -',361,361,,361,361,361,361,361,361,361,361,361,,361,,,361,361,,,59,59', -'59,,59,,,361,59,59,,,,59,,59,59,59,59,59,59,59,,,,,59,59,59,59,59,59', -'59,,,59,,,,,,,59,,,59,59,59,59,59,59,59,59,59,59,,59,59,,59,59,59,,', -',,,,,,,,,,,,,,,,,59,,,59,,,59,59,,,59,,,,,,59,,,,,,,,59,,,,,59,59,59', -'59,59,59,,,,59,59,373,373,373,,373,,,,373,373,,,,373,,373,373,373,373', -'373,373,373,,,,,373,373,373,373,373,373,373,,,,,,,,,,373,,,373,373,373', -'373,373,373,373,373,373,373,,373,373,,373,373,373,,,,,,,,,,,,,,,,,,', -',373,,,373,,,373,373,,,373,,,,,,373,,,,,,,,373,,,,,373,373,373,373,373', -'373,,,,373,373,60,60,60,,60,,,,60,60,,,,60,,60,60,60,60,60,60,60,,,', -',60,60,60,60,60,60,60,,,60,,,,,,,60,,,60,60,60,60,60,60,60,60,60,60', -',60,60,,60,60,60,,,,,,,,,,,,,,,,,,,,60,,,60,,,60,60,,,60,,,,,,60,,,', -',,,,60,,,,,60,60,60,60,60,60,,,,60,60,382,382,382,,382,,,,382,382,,', -',382,,382,382,382,382,382,382,382,,,,,382,382,382,382,382,382,382,,', -',,,,,,,382,,,382,382,382,382,382,382,382,382,382,382,,382,382,,382,382', -'382,,,,,,,,,,,,,,,,,,,,382,,,382,382,,382,382,,,382,,382,,382,,382,', -',,,,,,382,,,,,382,382,382,382,382,382,,,,382,382,64,64,64,,64,,,,64', -'64,,,,64,,64,64,64,64,64,64,64,,,,,64,64,64,64,64,64,64,,,,,,,,,,64', -',,64,64,64,64,64,64,64,64,64,64,,64,64,,,,64,,,,,,,,,,,,,,,,,,,,64,', -',64,,,64,64,,,64,,64,,,,,,,,,,,,,,,,,64,64,64,64,64,64,,,,64,64,389', -'389,389,,389,,,,389,389,,,,389,,389,389,389,389,389,389,389,,,,,389', -'389,389,389,389,389,389,,,,,,,,,,389,,,389,389,389,389,389,389,389,389', -'389,389,,389,389,,389,389,389,,,,,,,,,,,,,,,,,,,,389,,,389,389,,389', -'389,,,389,,389,,389,,389,,,,,,,,389,,,,,389,389,389,389,389,389,,,,389', -'389,390,390,390,,390,,,,390,390,,,,390,,390,390,390,390,390,390,390', -',,,,390,390,390,390,390,390,390,,,,,,,,,,390,,,390,390,390,390,390,390', -'390,390,390,390,,390,390,,390,390,390,,,,,,,,,,,,,,,,,,,,390,,,390,390', -',390,390,,,390,,390,,390,,390,,,,,,,,390,,,,,390,390,390,390,390,390', -',,,390,390,397,397,397,,397,,,,397,397,,,,397,,397,397,397,397,397,397', -'397,,,,,397,397,397,397,397,397,397,,,,,,,,,,397,,,397,397,397,397,397', -'397,397,397,397,397,,397,397,,397,397,397,,,,,,,,,,,,,,,,,,,,397,,,397', -',,397,397,,,397,,397,,,,397,,,,,,,,397,,,,,397,397,397,397,397,397,', -',,397,397,399,399,399,,399,,,,399,399,,,,399,,399,399,399,399,399,399', -'399,,,,,399,399,399,399,399,399,399,,,,,,,,,,399,,,399,399,399,399,399', -'399,399,399,399,399,,399,399,,399,399,399,,,,,,,,,,,,,,,,,,,,399,,,399', -',,399,399,,,399,,,,,,399,,,,,,,,399,,,,,399,399,399,399,399,399,,,,399', -'399,400,400,400,,400,,,,400,400,,,,400,,400,400,400,400,400,400,400', -',,,,400,400,400,400,400,400,400,,,,,,,,,,400,,,400,400,400,400,400,400', -'400,400,400,400,,400,400,,400,400,400,,,,,,,,,,,,,,,,,,,,400,,,400,', -',400,400,,,400,,,,,,400,,,,,,,,400,,,,,400,400,400,400,400,400,,,,400', -'400,401,401,401,,401,,,,401,401,,,,401,,401,401,401,401,401,401,401', -',,,,401,401,401,401,401,401,401,,,,,,,,,,401,,,401,401,401,401,401,401', -'401,401,401,401,,401,401,,401,401,401,,,,,,,,,,,,,,,,,,,,401,,,401,', -',401,401,,,401,,,,,,401,,,,,,,,401,,,,,401,401,401,401,401,401,,,,401', -'401,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,,,,8,8,8,8,8,8,8,,,8,,,,,', -'8,8,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8', -'8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8,8,8,8,,,,8,8,430,430,430,,430,,,,430', -'430,,,,430,,430,430,430,430,430,430,430,,,,,430,430,430,430,430,430', -'430,,,,,,,,,,430,,,430,430,430,430,430,430,430,430,430,430,,430,430', -',430,430,430,,,,,,,,,,,,,,,,,,,,430,,,430,,,430,430,,,430,,430,,430', -',430,,,,,,,,430,,,,,430,430,430,430,430,430,,,,430,430,433,433,433,', -'433,,,,433,433,,,,433,,433,433,433,433,433,433,433,,,,,433,433,433,433', -'433,433,433,,,,,,,,,,433,,,433,433,433,433,433,433,433,433,433,433,', -'433,433,,433,433,433,,,,,,,,,,,,,,,,,,,,433,,,433,,,433,433,,,433,,433', -',433,,433,,,,,,,,433,,,,,433,433,433,433,433,433,,,,433,433,436,436', -'436,,436,,,,436,436,,,,436,,436,436,436,436,436,436,436,,,,,436,436', -'436,436,436,436,436,,,,,,,,,,436,,,436,436,436,436,436,436,436,436,436', -'436,,436,436,,436,436,436,,,,,,,,,,,,,,,,,,,,436,,,436,,,436,436,,,436', -',,,,,436,,,,,,,,436,,,,,436,436,436,436,436,436,,,,436,436,445,445,445', -',445,,,,445,445,,,,445,,445,445,445,445,445,445,445,,,,,445,445,445', -'445,445,445,445,,,445,,,,,,,445,,,445,445,445,445,445,445,445,445,445', -'445,,445,445,,445,445,445,,,,,,,,,,,,,,,,,,,,445,,,445,,,445,445,,,445', -',445,,445,,445,,,,,,,,445,,,,,445,445,445,445,445,445,,,,445,445,85', -'85,85,,85,,,,85,85,,,,85,,85,85,85,85,85,85,85,,85,,,85,85,85,85,85', -'85,85,,,,,,,,,,85,,,85,85,85,85,85,85,85,85,85,85,,85,85,,85,85,85,', -',,,,,,,,,,,,,,,,,,85,,,85,85,,85,85,,,85,,85,,85,,85,,,,,,,,85,,85,', -',85,85,85,85,85,85,,,,85,85,88,88,88,,88,,,,88,88,,,,88,,88,88,88,88', -'88,88,88,,88,,,88,88,88,88,88,88,88,,,,,,,,,,88,,,88,88,88,88,88,88', -'88,88,88,88,,88,88,,88,88,88,,,,,,,,,,,,,,,,,,,,88,,,88,88,,88,88,,', -'88,,88,,88,,88,,,,,,,,88,,88,,,88,88,88,88,88,88,,,,88,88,104,104,104', -',104,,,,104,104,,,,104,,104,104,104,104,104,104,104,,,,,104,104,104', -'104,104,104,104,,,104,,,,,,,104,,,104,104,104,104,104,104,104,104,104', -'104,,104,104,,104,104,104,,,,,,,,,,,,,,,,,,,,104,,,104,,,104,104,,,104', -',,,,,104,,,,,,,,104,,,,,104,104,104,104,104,104,,,,104,104,105,105,105', -',105,,,,105,105,,,,105,,105,105,105,105,105,105,105,,,,,105,105,105', -'105,105,105,105,,,105,,,,,,,105,,,105,105,105,105,105,105,105,105,105', -'105,,105,105,,105,105,105,,,,,,,,,,,,,,,,,,,,105,,,105,,,105,105,,,105', -',,,,,105,,,,,,,,105,,,,,105,105,105,105,105,105,,,,105,105,106,106,106', -',106,,,,106,106,,,,106,,106,106,106,106,106,106,106,,,,,106,106,106', -'106,106,106,106,,,106,,,,,,,106,,,106,106,106,106,106,106,106,106,106', -'106,,106,106,,106,106,106,,,,,,,,,,,,,,,,,,,,106,,,106,,,106,106,,,106', -',,,,,106,,,,,,,,106,,,,,106,106,106,106,106,106,,,,106,106,107,107,107', -',107,,,,107,107,,,,107,,107,107,107,107,107,107,107,,,,,107,107,107', -'107,107,107,107,,,107,,,,,,,107,,,107,107,107,107,107,107,107,107,107', -'107,,107,107,,107,107,107,,,,,,,,,,,,,,,,,,,,107,,,107,,,107,107,,,107', -',,,,,107,,,,,,,,107,,,,,107,107,107,107,107,107,,,,107,107,462,462,462', -',462,,,,462,462,,,,462,,462,462,462,462,462,462,462,,,,,462,462,462', -'462,462,462,462,,,,,,,,,,462,,,462,462,462,462,462,462,462,462,462,462', -',462,462,,462,462,462,,,,,,,,,,,,,,,,,,,,462,,,462,,,462,462,,,462,', -'462,,,,462,,,,,,,,462,,,,,462,462,462,462,462,462,,,,462,462,108,108', -'108,108,108,,,,108,108,,,,108,,108,108,108,108,108,108,108,,,,,108,108', -'108,108,108,108,108,,,108,,,,,,108,108,108,108,108,108,108,108,108,108', -'108,108,108,108,,108,108,,108,108,108,,,,,,,,,,,,,,,,,,,,108,,,108,', -',108,108,,,108,,108,,,,108,,,,,,,,108,,,,,108,108,108,108,108,108,,', -',108,108,469,469,469,,469,,,,469,469,,,,469,,469,469,469,469,469,469', -'469,,,,,469,469,469,469,469,469,469,,,,,,,,,,469,,,469,469,469,469,469', -'469,469,469,469,469,,469,469,,469,469,469,,,,,,,,,,,,,,,,,,,,469,,,469', -',,469,469,,,469,,,,,,469,,,,,,,,469,,,,,469,469,469,469,469,469,,,,469', -'469,470,470,470,,470,,,,470,470,,,,470,,470,470,470,470,470,470,470', -',,,,470,470,470,470,470,470,470,,,,,,,,,,470,,,470,470,470,470,470,470', -'470,470,470,470,,470,470,,470,470,470,,,,,,,,,,,,,,,,,,,,470,,,470,', -',470,470,,,470,,,,,,470,,,,,,,,470,,,,,470,470,470,470,470,470,,,,470', -'470,471,471,471,,471,,,,471,471,,,,471,,471,471,471,471,471,471,471', -',,,,471,471,471,471,471,471,471,,,,,,,,,,471,,,471,471,471,471,471,471', -'471,471,471,471,,471,471,,471,471,471,,,,,,,,,,,,,,,,,,,,471,,,471,', -',471,471,,,471,,,,,,471,,,,,,,,471,,,,,471,471,471,471,471,471,,,,471', -'471,475,475,475,,475,,,,475,475,,,,475,,475,475,475,475,475,475,475', -',,,,475,475,475,475,475,475,475,,,475,,,,,,,475,,,475,475,475,475,475', -'475,475,475,475,475,,475,475,,475,475,475,,,,,,,,,,,,,,,,,,,,475,,,475', -',,475,475,,,475,,,,,,475,,,,,,,,475,,,,,475,475,475,475,475,475,,,,475', -'475,481,481,481,,481,,,,481,481,,,,481,,481,481,481,481,481,481,481', -',,,,481,481,481,481,481,481,481,,,,,,,,,,481,,,481,481,481,481,481,481', -'481,481,481,481,,481,481,,481,481,481,,,,,,,,,,,,,,,,,,,,481,,,481,', -',481,481,,,481,,481,,,,481,,,,,,,,481,,,,,481,481,481,481,481,481,,', -',481,481,484,484,484,,484,,,,484,484,,,,484,,484,484,484,484,484,484', -'484,,,,,484,484,484,484,484,484,484,,,,,,,,,,484,,,484,484,484,484,484', -'484,484,484,484,484,,484,484,,484,484,484,,,,,,,,,,,,,,,,,,,,484,,,484', -',,484,484,,,484,,,,,,484,,,,,,,,484,,,,,484,484,484,484,484,484,,,,484', -'484,191,191,191,,191,,,,191,191,,,,191,,191,191,191,191,191,191,191', -',,,,191,191,191,191,191,191,191,,,,,,,,,,191,,,191,191,191,191,191,191', -'191,191,191,191,,191,191,,191,191,191,,,,,,,,,,,,,,,,,,,,191,,,191,', -',191,191,,,191,,191,,,,191,,,,,,,,191,,,,,191,191,191,191,191,191,,', -',191,191,192,192,192,,192,,,,192,192,,,,192,,192,192,192,192,192,192', -'192,,,,,192,192,192,192,192,192,192,,,,,,,,,,192,,,192,192,192,192,192', -'192,192,192,192,192,,192,192,,192,192,192,,,,,,,,,,,,,,,,,,,,192,,,192', -',,192,192,,,192,,192,,,,192,,,,,,,,192,,,,,192,192,192,192,192,192,', -',,192,192,502,502,502,,502,,,,502,502,,,,502,,502,502,502,502,502,502', -'502,,,,,502,502,502,502,502,502,502,,,,,,,,,,502,,,502,502,502,502,502', -'502,502,502,502,502,,502,502,,502,502,502,,,,,,,,,,,,,,,,,,,,502,,,502', -',,502,502,,,502,,502,,,,502,,,,,,,,502,,,,,502,502,502,502,502,502,', -',,502,502,514,514,514,,514,,,,514,514,,,,514,,514,514,514,514,514,514', -'514,,,,,514,514,514,514,514,514,514,,,514,,,,,,,514,,,514,514,514,514', -'514,514,514,514,514,514,,514,514,,514,514,514,,,,,,,,,,,,,,,,,,,,514', -',,514,,,514,514,,,514,,,,,,514,,,,,,,,514,,,,,514,514,514,514,514,514', -',,,514,514,520,520,520,,520,,,,520,520,,,,520,,520,520,520,520,520,520', -'520,,,,,520,520,520,520,520,520,520,,,520,,,,,,,520,,,520,520,520,520', -'520,520,520,520,520,520,,520,520,,520,520,520,,,,,,,,,,,,,,,,,,,,520', -',,520,,,520,520,,,520,,,,,,520,,,,,,,,520,,,,,520,520,520,520,520,520', -',,,520,520,193,193,193,,193,,,,193,193,,,,193,,193,193,193,193,193,193', -'193,,,,,193,193,193,193,193,193,193,,,,,,,,,,193,,,193,193,193,193,193', -'193,193,193,193,193,,193,193,,193,193,193,,,,,,,,,,,,,,,,,,,,193,,,193', -',,193,193,,,193,,,,,,193,,,,,,,,193,,,,,193,193,193,193,193,193,,,,193', -'193,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538', -'538,538,538,538,538,538,538,538,,,538,538,538,538,538,538,538,538,538', -'538,,,,,,538,538,538,538,538,538,538,538,,,538,,,,,,,,538,538,,538,538', -'538,538,,538,538,,,538,,,,,538,538,538,538,,,,,,,,,,,,,,538,538,,538', -'538,538,538,538,538,538,538,538,,538,,,538,538,,,194,194,194,,194,,', -'538,194,194,,,,194,,194,194,194,194,194,194,194,,,,,194,194,194,194', -'194,194,194,,,,,,,,,,194,,,194,194,194,194,194,194,194,194,194,194,', -'194,194,,194,194,194,,,,,,,,,,,,,,,,,,,,194,,,194,,,194,194,,,194,,194', -',,,194,,,,,,,,194,,,,,194,194,194,194,194,194,,,,194,194,541,541,541', -',541,,,,541,541,,,,541,,541,541,541,541,541,541,541,,,,,541,541,541', -'541,541,541,541,,,,,,,,,,541,,,541,541,541,541,541,541,541,541,541,541', -',541,541,,541,541,541,,,,,,,,,,,,,,,,,,,,541,,,541,,,541,541,,,541,', -',,,,541,,,,,,,,541,,,,,541,541,541,541,541,541,,,,541,541,542,542,542', -',542,,,,542,542,,,,542,,542,542,542,542,542,542,542,,,,,542,542,542', -'542,542,542,542,,,,,,,,,,542,,,542,542,542,542,542,542,542,542,542,542', -',542,542,,542,542,542,,,,,,,,,,,,,,,,,,,,542,,,542,,,542,542,,,542,', -'542,,,,542,,,,,,,,542,,,,,542,542,542,542,542,542,,,,542,542,545,545', -'545,,545,,,,545,545,,,,545,,545,545,545,545,545,545,545,,,,,545,545', -'545,545,545,545,545,,,,,,,,,,545,,,545,545,545,545,545,545,545,545,545', -'545,,545,545,,545,545,545,,,,,,,,,,,,,,,,,,,,545,,,545,,,545,545,,,545', -',,,,,545,,,,,,,,545,,,,,545,545,545,545,545,545,,,,545,545,546,546,546', -',546,,,,546,546,,,,546,,546,546,546,546,546,546,546,,,,,546,546,546', -'546,546,546,546,,,,,,,,,,546,,,546,546,546,546,546,546,546,546,546,546', -',546,546,,546,546,546,,,,,,,,,,,,,,,,,,,,546,,,546,,,546,546,,,546,', -',,,,546,,,,,,,,546,,,,,546,546,546,546,546,546,,,,546,546,551,551,551', -',551,,,,551,551,,,,551,,551,551,551,551,551,551,551,,,,,551,551,551', -'551,551,551,551,,,,,,,,,,551,,,551,551,551,551,551,551,551,551,551,551', -',551,551,,551,551,551,,,,,,,,,,,,,,,,,,,,551,,,551,,,551,551,,,551,', -',,,,551,,,,,,,,551,,,,,551,551,551,551,551,551,,,,551,551,554,554,554', -',554,,,,554,554,,,,554,,554,554,554,554,554,554,554,,,,,554,554,554', -'554,554,554,554,,,,,,,,,,554,,,554,554,554,554,554,554,554,554,554,554', -',554,554,,554,554,554,,,,,,,,,,,,,,,,,,,,554,,,554,,,554,554,,,554,', -',,,,554,,,,,,,,554,,,,,554,554,554,554,554,554,,,,554,554,197,197,197', -',197,,,,197,197,,,,197,,197,197,197,197,197,197,197,,,,,197,197,197', -'197,197,197,197,,,,,,,,,,197,,,197,197,197,197,197,197,197,197,197,197', -',197,197,,197,197,197,,,,,,,,,,,,,,,,,,,,197,,,197,,,197,197,,,197,', -',,,,197,,,,,,,,197,,,,,197,197,197,197,197,197,,,,197,197,561,561,561', -',561,,,,561,561,,,,561,,561,561,561,561,561,561,561,,,,,561,561,561', -'561,561,561,561,,,,,,,,,,561,,,561,561,561,561,561,561,561,561,561,561', -',561,561,,561,561,561,,,,,,,,,,,,,,,,,,,,561,,,561,,,561,561,,,561,', -',,,,561,,,,,,,,561,,,,,561,561,561,561,561,561,,,,561,561,563,563,563', -',563,,,,563,563,,,,563,,563,563,563,563,563,563,563,,,,,563,563,563', -'563,563,563,563,,,,,,,,,,563,,,563,563,563,563,563,563,563,563,563,563', -',563,563,,,,563,,,,,,,,,,,,,,,,,,,,563,,,563,,,563,563,,,563,,563,,563', -',,,,,,,,563,,,,,,563,563,563,563,563,563,,,,563,563,566,566,566,,566', -',,,566,566,,,,566,,566,566,566,566,566,566,566,,,,,566,566,566,566,566', -'566,566,,,,,,,,,,566,,,566,566,566,566,566,566,566,566,566,566,,566', -'566,,566,566,566,,,,,,,,,,,,,,,,,,,,566,,,566,,,566,566,,,566,,,,,,566', -',,,,,,,566,,,,,566,566,566,566,566,566,,,,566,566,198,198,198,,198,', -',,198,198,,,,198,,198,198,198,198,198,198,198,,,,,198,198,198,198,198', -'198,198,,,198,,,,,,,198,,,198,198,198,198,198,198,198,198,198,198,,198', -'198,,198,198,198,,,,,,,,,,,,,,,,,,,,198,,,198,,,198,198,,,198,,,,,,198', -',,,,,,,198,,,,,198,198,198,198,198,198,,,,198,198,199,199,199,,199,', -',,199,199,,,,199,,199,199,199,199,199,199,199,,,,,199,199,199,199,199', -'199,199,,,199,,,,,,,199,,,199,199,199,199,199,199,199,199,199,199,,199', -'199,,199,199,199,,,,,,,,,,,,,,,,,,,,199,,,199,,,199,199,,,199,,,,,,199', -',,,,,,,199,,,,,199,199,199,199,199,199,,,,199,199,570,570,570,,570,', -',,570,570,,,,570,,570,570,570,570,570,570,570,,,,,570,570,570,570,570', -'570,570,,,,,,,,,,570,,,570,570,570,570,570,570,570,570,570,570,,570', -'570,,570,570,570,,,,,,,,,,,,,,,,,,,,570,,,570,,,570,570,,,570,,,,,,570', -',,,,,,,570,,,,,570,570,570,570,570,570,,,,570,570,20,20,20,,20,,,,20', -'20,,,,20,,20,20,20,20,20,20,20,,,,,20,20,20,20,20,20,20,,,20,,,,,,,20', -',,20,20,20,20,20,20,20,20,20,20,,20,20,,20,20,20,,,,,,,,,,,,,,,,,,,', -'20,,,20,,,20,20,,,20,,,,,,20,,,,,,,,20,,,,,20,20,20,20,20,20,,,,20,20', -'584,584,584,,584,,,,584,584,,,,584,,584,584,584,584,584,584,584,,,,', -'584,584,584,584,584,584,584,,,,,,,,,,584,,,584,584,584,584,584,584,584', -'584,584,584,,584,584,,584,584,584,,,,,,,,,,,,,,,,,,,,584,,,584,,,584', -'584,,,584,,,,,,584,,,,,,,,584,,,,,584,584,584,584,584,584,,,,584,584', -'21,21,21,,21,,,,21,21,,,,21,,21,21,21,21,21,21,21,,,,,21,21,21,21,21', -'21,21,,,,,,,,,,21,,,21,21,21,21,21,21,21,21,21,21,,21,21,,21,21,21,', -',,,,,,,,,,,,,,,,,,21,,,21,,,21,21,,,21,,,,,,21,,,,,,,,21,,,,,21,21,21', -'21,21,21,,,,21,21,595,595,595,,595,,,,595,595,,,,595,,595,595,595,595', -'595,595,595,,,,,595,595,595,595,595,595,595,,,,,,,,,,595,,,595,595,595', -'595,595,595,595,595,595,595,,595,595,,595,595,595,,,,,,,,,,,,,,,,,,', -',595,,,595,,,595,595,,,595,,595,,595,,595,,,,,,,,595,,,,,595,595,595', -'595,595,595,,,,595,595,210,210,210,,210,,,,210,210,,,,210,,210,210,210', -'210,210,210,210,,,,,210,210,210,210,210,210,210,,,,,,,,,,210,,,210,210', -'210,210,210,210,210,210,210,210,,210,210,,210,210,210,,,,,,,,,,,,,,', -',,,,,210,,,210,,,210,210,,,210,,,,,,210,,,,,,,,210,,,,,210,210,210,210', -'210,210,,,,210,210,211,211,211,,211,,,,211,211,,,,211,,211,211,211,211', -'211,211,211,,,,,211,211,211,211,211,211,211,,,,,,,,,,211,,,211,211,211', -'211,211,211,211,211,211,211,,211,211,,211,211,211,,,,,,,,,,,,,,,,,,', -',211,,,211,,,211,211,,,211,,,,,,211,,,,,,,,211,,,,,211,211,211,211,211', -'211,,,,211,211,212,212,212,,212,,,,212,212,,,,212,,212,212,212,212,212', -'212,212,,,,,212,212,212,212,212,212,212,,,,,,,,,,212,,,212,212,212,212', -'212,212,212,212,212,212,,212,212,,212,212,212,,,,,,,,,,,,,,,,,,,,212', -',,212,,,212,212,,,212,,,,,,212,,,,,,,,212,,,,,212,212,212,212,212,212', -',,,212,212,213,213,213,,213,,,,213,213,,,,213,,213,213,213,213,213,213', -'213,,,,,213,213,213,213,213,213,213,,,,,,,,,,213,,,213,213,213,213,213', -'213,213,213,213,213,,213,213,,213,213,213,,,,,,,,,,,,,,,,,,,,213,,,213', -',,213,213,,,213,,,,,,213,,,,,,,,213,,,,,213,213,213,213,213,213,,,,213', -'213,214,214,214,,214,,,,214,214,,,,214,,214,214,214,214,214,214,214', -',,,,214,214,214,214,214,214,214,,,,,,,,,,214,,,214,214,214,214,214,214', -'214,214,214,214,,214,214,,214,214,214,,,,,,,,,,,,,,,,,,,,214,,,214,', -',214,214,,,214,,,,,,214,,,,,,,,214,,,,,214,214,214,214,214,214,,,,214', -'214,611,611,611,,611,,,,611,611,,,,611,,611,611,611,611,611,611,611', -',,,,611,611,611,611,611,611,611,,,,,,,,,,611,,,611,611,611,611,611,611', -'611,611,611,611,,611,611,,611,611,611,,,,,,,,,,,,,,,,,,,,611,,,611,', -',611,611,,,611,,611,,,,611,,,,,,,,611,,,,,611,611,611,611,611,611,,', -',611,611,215,215,215,,215,,,,215,215,,,,215,,215,215,215,215,215,215', -'215,,,,,215,215,215,215,215,215,215,,,,,,,,,,215,,,215,215,215,215,215', -'215,215,215,215,215,,215,215,,215,215,215,,,,,,,,,,,,,,,,,,,,215,,,215', -',,215,215,,,215,,,,,,215,,,,,,,,215,,,,,215,215,215,215,215,215,,,,215', -'215,614,614,614,,614,,,,614,614,,,,614,,614,614,614,614,614,614,614', -',,,,614,614,614,614,614,614,614,,,,,,,,,,614,,,614,614,614,614,614,614', -'614,614,614,614,,614,614,,614,614,614,,,,,,,,,,,,,,,,,,,,614,,,614,', -',614,614,,,614,,,,,,614,,,,,,,,614,,,,,614,614,614,614,614,614,,,,614', -'614,617,617,617,,617,,,,617,617,,,,617,,617,617,617,617,617,617,617', -',,,,617,617,617,617,617,617,617,,,,,,,,,,617,,,617,617,617,617,617,617', -'617,617,617,617,,617,617,,617,617,617,,,,,,,,,,,,,,,,,,,,617,,,617,', -',617,617,,,617,,,,,,617,,,,,,,,617,,,,,617,617,617,617,617,617,,,,617', -'617,216,216,216,,216,,,,216,216,,,,216,,216,216,216,216,216,216,216', -',,,,216,216,216,216,216,216,216,,,,,,,,,,216,,,216,216,216,216,216,216', -'216,216,216,216,,216,216,,216,216,216,,,,,,,,,,,,,,,,,,,,216,,,216,', -',216,216,,,216,,,,,,216,,,,,,,,216,,,,,216,216,216,216,216,216,,,,216', -'216,217,217,217,,217,,,,217,217,,,,217,,217,217,217,217,217,217,217', -',,,,217,217,217,217,217,217,217,,,,,,,,,,217,,,217,217,217,217,217,217', -'217,217,217,217,,217,217,,217,217,217,,,,,,,,,,,,,,,,,,,,217,,,217,', -',217,217,,,217,,,,,,217,,,,,,,,217,,,,,217,217,217,217,217,217,,,,217', -'217,218,218,218,,218,,,,218,218,,,,218,,218,218,218,218,218,218,218', -',,,,218,218,218,218,218,218,218,,,,,,,,,,218,,,218,218,218,218,218,218', -'218,218,218,218,,218,218,,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,', -',218,218,,,218,,,,,,218,,,,,,,,218,,,,,218,218,218,218,218,218,,,,218', -'218,632,632,632,,632,,,,632,632,,,,632,,632,632,632,632,632,632,632', -',,,,632,632,632,632,632,632,632,,,,,,,,,,632,,,632,632,632,632,632,632', -'632,632,632,632,,632,632,,632,632,632,,,,,,,,,,,,,,,,,,,,632,,,632,', -',632,632,,,632,,632,,,,632,,,,,,,,632,,,,,632,632,632,632,632,632,,', -',632,632,219,219,219,,219,,,,219,219,,,,219,,219,219,219,219,219,219', -'219,,,,,219,219,219,219,219,219,219,,,,,,,,,,219,,,219,219,219,219,219', -'219,219,219,219,219,,219,219,,219,219,219,,,,,,,,,,,,,,,,,,,,219,,,219', -',,219,219,,,219,,,,,,219,,,,,,,,219,,,,,219,219,219,219,219,219,,,,219', -'219,638,638,638,,638,,,,638,638,,,,638,,638,638,638,638,638,638,638', -',,,,638,638,638,638,638,638,638,,,638,,,,,,,638,,,638,638,638,638,638', -'638,638,638,638,638,,638,638,,638,638,638,,,,,,,,,,,,,,,,,,,,638,,,638', -',,638,638,,,638,,,,,,638,,,,,,,,638,,,,,638,638,638,638,638,638,,,,638', -'638,643,643,643,,643,,,,643,643,,,,643,,643,643,643,643,643,643,643', -',,,,643,643,643,643,643,643,643,,,,,,,,,,643,,,643,643,643,643,643,643', -'643,643,643,643,,643,643,,643,643,643,,,,,,,,,,,,,,,,,,,,643,,,643,', -',643,643,,,643,,643,,,,643,,,,,,,,643,,,,,643,643,643,643,643,643,,', -',643,643,220,220,220,,220,,,,220,220,,,,220,,220,220,220,220,220,220', -'220,,,,,220,220,220,220,220,220,220,,,,,,,,,,220,,,220,220,220,220,220', -'220,220,220,220,220,,220,220,,220,220,220,,,,,,,,,,,,,,,,,,,,220,,,220', -',,220,220,,,220,,,,,,220,,,,,,,,220,,,,,220,220,220,220,220,220,,,,220', -'220,221,221,221,,221,,,,221,221,,,,221,,221,221,221,221,221,221,221', -',,,,221,221,221,221,221,221,221,,,,,,,,,,221,,,221,221,221,221,221,221', -'221,221,221,221,,221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,', -',221,221,,,221,,,,,,221,,,,,,,,221,,,,,221,221,221,221,221,221,,,,221', -'221,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67', -'67,67,,,67,67,67,67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,67,67', -'67,67,67,,,,,,,67,67,,67,67,67,67,,67,67,,,67,,,,,67,67,67,67,,,,,,67', -',,,,,,,67,67,,67,67,67,67,67,67,67,67,67,,67,,,67,671,671,671,671,671', -'671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671', -'671,671,,,671,671,671,671,671,671,671,671,671,671,,,,,,671,671,671,671', -'671,671,671,671,,,671,,,,,,,,671,671,,671,671,671,671,,671,671,,,671', -',,,,671,671,671,671,,,,,,,,,,,,,,671,671,,671,671,671,671,671,671,671', -'671,671,,671,,,671,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81', -'81,81,81,81,81,81,81,,,81,81,81,81,81,81,81,81,81,81,,,,,,81,81,81,81', -'81,81,81,81,81,81,81,81,,,,,,,81,81,,81,81,81,81,,81,81,,,81,,,,,81', -'81,81,81,,,,,,,,,,,,,,81,81,,81,81,81,81,81,81,81,81,81,,81,845,845', -'81,,845,,,,,,,,845,845,,845,845,845,845,,845,845,,,845,,,,,845,845,845', -'845,,,,,,,,,,,,,,845,845,,845,845,845,845,845,845,845,845,845,,845,844', -'844,845,,844,,,,,,,,844,844,,844,844,844,844,,844,844,,,844,,,,,844', -'844,844,844,,,,,,,,,,,,,,844,844,,844,844,844,844,844,844,844,844,844', -',844,196,196,844,,196,,,,,,,,196,196,,196,196,196,196,,196,196,,,196', -',,,,196,196,196,196,,,,,,,,,,,,,,196,196,,196,196,196,196,196,196,196', -'196,196,,196,395,395,196,,395,,,,,,,,395,395,,395,395,395,395,,395,395', -',,395,,,,,395,395,395,395,,,,,,,,,,,,,,395,395,,395,395,395,395,395', -'395,395,395,395,,395,396,396,395,,396,,,,,,,,396,396,,396,396,396,396', -',396,396,,,396,,,,,396,396,396,396,,,,,,,,,,,,,,396,396,,396,396,396', -'396,396,396,396,396,396,,396,504,504,396,,504,,,,,,,,504,504,,504,504', -'504,504,,504,504,,,504,,,,,504,504,504,504,,,,,,,,,,,,,,504,504,,504', -'504,504,504,504,504,504,504,504,,504,503,503,504,,503,,,,,,,,503,503', -',503,503,503,503,,503,503,,,503,,,,,503,503,503,503,,,,,,,,,,,,,,503', -'503,,503,503,503,503,503,503,503,503,503,,503,642,642,503,,642,,,,,', -',,642,642,,642,642,642,642,,642,642,,,642,,,,,642,642,642,642,,,,,,', -',,,,,,,642,642,,642,642,642,642,642,642,642,642,642,,642,594,594,642', -',594,,,,,,,,594,594,,594,594,594,594,,594,594,,,594,,,,,594,594,594', -'594,,,,,,,,,,,,,,594,594,,594,594,594,594,594,594,594,594,594,,594,', -',594,850,850,850,850,850,850,850,850,850,850,850,,850,850,,,850,850', -',,,,,,,,,,,,,,850,,850,,850,850,850,850,850,850,850,,850,,,,,,,464,464', -',,464,,,,,850,,850,464,464,,464,464,464,464,,464,464,,,464,,,,,464,464', -'464,464,,,,,,,,,,,,,,464,464,,464,464,464,464,464,464,464,464,464,,464', -'593,593,464,,593,,,,,,,,593,593,,593,593,593,593,,593,593,,,593,,,,', -'593,593,593,593,,,,,,,,,,,,,,593,593,,593,593,593,593,593,593,593,593', -'593,,593,,,593,581,581,581,581,581,581,581,581,581,581,581,,581,581', -',,581,581,,,,581,,,,,,,,,,,581,,581,,581,581,581,581,581,581,581,,581', -',,,,,,644,644,,,644,,,,,581,,581,644,644,,644,644,644,644,,644,644,', -',644,,,,,644,644,644,644,,,,,,,,,,,,,,644,644,,644,644,644,644,644,644', -'644,644,644,,644,254,254,644,,254,,,,,,,,254,254,,254,254,254,254,,254', -'254,,,254,,,,,254,254,254,254,,,,,,,,,,,,,,254,254,,254,254,254,254', -'254,254,254,254,254,,254,472,472,254,,472,,,,,,,,472,472,,472,472,472', -'472,,472,472,,,472,,,,,472,472,472,472,,,,,,,,,,,,,,472,472,,472,472', -'472,472,472,472,472,472,472,,472,473,473,472,,473,,,,,,,,473,473,,473', -'473,473,473,,473,473,,,473,,,,,473,473,473,473,,,,,,,,,,,,,,473,473', -',473,473,473,473,473,473,473,473,473,,473,195,195,473,,195,,,,,,,,195', -'195,,195,195,195,195,,195,195,,,195,,,,,195,195,195,195,,,,,,,,,,,,', -',195,195,,195,195,195,195,195,195,195,195,195,,195,255,255,195,,255', -',,,,,,,255,255,,255,255,255,255,,255,255,,,255,,,,,255,255,255,255,', -',,,,,,,,,,,,255,255,,255,255,255,255,255,255,255,255,255,,255,,,255', -'427,427,427,427,427,427,427,427,427,427,427,,427,427,,,427,427,,,,,', -',,,,,,,,,427,,427,,427,427,427,427,427,427,427,,427,,378,378,378,378', -'378,378,378,378,378,378,378,,378,378,427,427,378,378,,,,,,,,,,,,,,,378', -',378,,378,378,378,378,378,378,378,,378,392,392,392,392,392,392,392,392', -'392,392,392,,392,392,,378,392,392,,,,,,,,,,,,,,,392,,392,,392,392,392', -'392,392,392,392,,392,474,474,474,474,474,474,474,474,474,474,474,,474', -'474,,392,474,474,,,,,,,,,,,,,,,474,,474,,474,474,474,474,474,474,474', -',474,692,692,692,692,692,692,692,692,692,692,692,,692,692,,474,692,692', -',,,,,,,,,,,,,,692,,692,,692,692,692,692,692,692,692,,692,22,22,22,22', -'22,22,22,22,22,22,22,,22,22,,692,22,22,,,,,,,,,,,,,,,22,,22,,22,22,22', -'22,22,22,22,,22,697,697,697,697,697,697,697,697,697,697,697,,697,697', -',22,697,697,,,,,,,,,,,,,,,697,,697,,697,697,697,697,697,697,697,,697', -'685,685,685,685,685,685,685,685,685,685,685,,685,685,,697,685,685,,', -',,,,,,,,,,,,685,,685,,685,685,685,685,685,685,685,,685,734,734,734,734', -'734,734,734,734,734,734,734,,734,734,,685,734,734,,,,,,,,,,,,,,,734', -',734,,734,734,734,734,734,734,734,,734,687,687,687,687,687,687,687,687', -'687,687,687,,687,687,734,734,687,687,,,,,,,,,,,,,,,687,,687,,687,687', -'687,687,687,687,687,,687,240,240,240,240,240,240,240,240,240,240,240', -',240,240,,687,240,240,,,,,,,,,,,,,,,240,,240,,240,240,240,240,240,240', -'240,,240,485,485,485,485,485,485,485,485,485,485,485,,485,485,,240,485', -'485,,,,,,,,,,,,,,,485,,485,,485,485,485,485,485,485,485,,485,779,779', -'779,779,779,779,779,779,779,779,779,,779,779,485,485,779,779,,,,,,,', -',,,,,,,779,,779,,779,779,779,779,779,779,779,,779,680,680,680,680,680', -'680,680,680,680,680,680,,680,680,,779,680,680,,,,,,,,,,,,,,,680,,680', -',680,680,680,680,680,680,680,,680,690,690,690,690,690,690,690,690,690', -'690,690,,690,690,,680,690,690,,,,,,,,,,,,,,,690,,690,,690,690,690,690', -'690,690,690,,690,606,606,606,606,606,606,606,606,606,606,606,,606,606', -',690,606,606,,,,,,,,,,,,,,,606,,606,,606,606,606,606,606,606,606,,606', -',,,,,,,,,,,,,,,606' ] - racc_action_check = arr = ::Array.new(25062, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -racc_action_pointer = [ - nil, 1096, 1941, 59, nil, 274, nil, 1119, 15371, 7772, - 10789, nil, 2, 32, 42, 119, 759, 316, 452, nil, - 20203, 20445, 24487, 185, nil, 7885, 8490, 8732, 165, 6, - 9700, 9942, nil, 2917, 10547, 10668, nil, 98, 335, 185, - 467, 11628, 12233, 12475, 137, 1007, nil, nil, nil, nil, - nil, nil, nil, 250, nil, 13685, 13806, nil, 26, 14040, - 14282, nil, nil, 836, 14524, 229, nil, 22865, nil, nil, - nil, nil, nil, 58, nil, nil, nil, nil, nil, 186, - 216, 23085, nil, nil, nil, 15976, nil, nil, 16097, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 963, nil, nil, nil, 16218, 16339, 16460, 16581, 16823, 1081, - nil, 373, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 223, nil, 258, - 1575, 17670, 17791, 18275, 18509, 24153, 23265, 19356, 19840, 19961, - nil, 629, 126, 351, 157, 300, 368, 3405, nil, nil, - 20687, 20808, 20929, 21050, 21171, 21413, 21776, 21897, 22018, 22260, - 22623, 22744, 4868, 4989, 5110, 5231, 5352, 6078, 6320, 6441, - 6683, 7046, 7167, 7288, 7409, 7530, 7651, nil, nil, nil, - 24712, nil, 337, 341, 8127, nil, 8248, 385, nil, nil, - nil, nil, nil, nil, 23973, 24213, 380, 8974, nil, 389, - nil, nil, nil, 9337, nil, nil, 9458, 401, 3161, 405, - 408, 378, 10184, 2795, 491, 485, 478, 380, 458, 425, - -15, nil, 472, 475, nil, nil, 342, 500, 501, 597, - nil, 516, nil, 11749, nil, 4381, 479, nil, 474, 211, - 280, 12354, 506, 12717, nil, 466, 20, 31, 13201, 13322, - 243, 404, 489, -13, 960, 566, 3, 598, nil, nil, - 13443, nil, 13564, 254, 265, 282, 228, 229, -45, 230, - 288, nil, 287, nil, nil, nil, nil, 179, nil, 188, - nil, 154, 503, 175, nil, 504, -35, nil, 151, nil, - nil, nil, nil, nil, 1114, nil, nil, nil, nil, nil, - nil, 13927, nil, nil, nil, nil, 4259, 518, nil, nil, - 836, nil, 503, 14161, nil, 505, nil, nil, 24307, 550, - 135, 170, 14403, nil, nil, 125, 556, 0, nil, 14645, - 14766, nil, 24352, nil, nil, 23325, 23385, 14887, -31, 15008, - 15129, 15250, 1453, 1819, 87, -52, 581, 593, 604, 605, - 2795, 377, 552, 1941, 2185, 2307, 1697, 1575, 2063, 715, - 2429, 488, 2551, 690, 938, 963, 2673, 24261, 80, nil, - 15492, nil, nil, 15613, 545, nil, 15734, 372, nil, nil, - 599, nil, nil, nil, nil, 15855, nil, -46, -20, 594, - 560, -28, 558, 658, 602, nil, 603, 568, nil, nil, - nil, 618, 16702, 597, 23739, 598, 623, nil, nil, 16944, - 17065, 17186, 24033, 24093, 24397, 17307, 705, 704, 592, nil, - nil, 17428, nil, nil, 17549, 24757, nil, 155, 606, nil, - 327, 2429, 716, nil, nil, 4015, 30, 52, 713, 722, - 3649, nil, 17912, 23505, 23445, -7, nil, 340, 192, -25, - nil, 839, nil, 14, 18033, nil, 1097, nil, nil, nil, - 18154, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 125, nil, nil, nil, 612, nil, nil, 18396, 630, - nil, 18630, 18751, nil, -80, 18872, 18993, 647, nil, nil, - nil, 19114, 648, nil, 19235, 85, 90, 715, 488, 658, - 1205, 19477, nil, 19598, nil, nil, 19719, 625, nil, 673, - 20082, nil, 675, nil, 664, nil, nil, nil, nil, nil, - -43, 23847, -64, 646, 20324, nil, 687, nil, nil, nil, - nil, 709, 712, 23799, 23625, 20566, nil, -65, nil, 714, - 116, 1, 720, 193, 539, 722, 24937, 760, 761, -30, - 812, 21292, nil, 745, 21534, nil, nil, 21655, nil, nil, - nil, 510, nil, 821, nil, nil, nil, nil, nil, 834, - nil, 835, 22139, 756, -5, 21, 10, -4, 22381, nil, - 632, nil, 23565, 22502, 23913, nil, nil, nil, 341, 402, - 2551, 4625, 432, -36, 723, 726, 734, nil, nil, nil, - nil, nil, 731, nil, nil, nil, nil, 813, nil, nil, - 814, 22975, -33, 701, 4137, nil, nil, nil, nil, nil, - 24847, 745, 5473, 5594, nil, 24577, nil, 24667, nil, nil, - 24892, nil, 24442, 5715, 5836, 5957, 198, 24532, nil, 746, - 1084, 6199, nil, 768, 3527, 749, nil, 6562, 750, nil, - 6804, nil, 6925, 751, nil, 791, 2063, 2185, nil, nil, - 794, 795, 34, 866, 712, nil, 888, nil, 3283, 789, - 835, nil, nil, nil, 24622, 915, nil, 8006, 919, 3771, - 3893, nil, nil, 805, 45, 8369, -6, 53, 334, 888, - nil, 841, 4503, 8611, nil, 317, 936, 937, 824, nil, - 1382, nil, 338, nil, nil, 87, 8853, nil, nil, nil, - 866, nil, nil, nil, nil, nil, 845, nil, nil, 24802, - 9095, 9216, 545, 569, 903, 574, 835, 874, nil, nil, - 963, nil, 9579, nil, 3039, 850, nil, 9821, 851, 10063, - nil, nil, 877, 979, 901, nil, 2673, nil, nil, -11, - 10305, nil, nil, nil, 21, nil, 981, 989, 10426, 2307, - nil, nil, nil, 990, 328, nil, nil, nil, 913, 877, - 878, nil, nil, 879, 890, nil, nil, 1134, nil, nil, - nil, 10902, 1205, 11023, 23205, 23145, 488, 926, 11144, nil, - 23673, 935, nil, 11265, 921, nil, 11386, 922, nil, nil, - nil, nil, 1819, nil, 1697, nil, nil, 11507, 223, 1453, - nil, nil, 1331, nil, 296, nil, nil, nil, 4747, nil, - 924, 957, 963, 314, 308, 357, 836, 11870, nil, nil, - nil, 11991, 931, nil, 12112, nil, 1053, 499, nil, nil, - nil, nil, 1063, 1064, 948, 1072, 986, 12596, 286, nil, - 966, nil, 12838, 967, nil, nil, nil, nil, nil, nil, - 12959, nil, nil, 13080, nil, nil, -71, nil ] - -racc_action_default = [ - -1, -521, -520, -521, -2, -509, -5, -6, -521, -521, - -521, -20, -521, -521, -521, -521, -521, -274, -34, -35, - -521, -521, -40, -42, -43, -287, -324, -325, -47, -252, - -372, -290, -61, -520, -65, -70, -71, -521, -450, -521, - -521, -521, -521, -521, -511, -217, -267, -268, -269, -270, - -271, -272, -273, -499, -276, -521, -520, -285, -293, -521, - -521, -297, -300, -509, -521, -309, -316, -521, -326, -327, - -395, -396, -397, -398, -399, -520, -402, -520, -520, -520, - -520, -520, -429, -435, -436, -439, -440, -441, -442, -443, - -444, -445, -446, -447, -448, -449, -452, -453, 928, -4, - -510, -516, -517, -518, -521, -521, -521, -521, -521, -8, - -9, -521, -96, -97, -98, -99, -100, -101, -102, -103, - -104, -108, -109, -110, -111, -112, -113, -114, -115, -116, - -117, -118, -119, -120, -121, -122, -123, -124, -125, -126, - -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, - -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, - -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, - -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, - -167, -168, -169, -170, -171, -172, -173, -14, -105, -521, - -520, -521, -521, -521, -520, -521, -521, -521, -521, -521, - -38, -521, -450, -521, -274, -521, -521, -520, -39, -209, - -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, - -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, - -521, -521, -521, -521, -521, -521, -521, -360, -363, -44, - -218, -231, -520, -520, -521, -239, -521, -262, -287, -324, - -325, -494, -45, -46, -521, -521, -53, -521, -292, -521, - -373, -376, -59, -520, -371, -60, -521, -61, -520, -521, - -521, -66, -68, -520, -75, -521, -521, -82, -290, -511, - -366, -328, -372, -521, -69, -73, -282, -437, -438, -521, - -194, -195, -210, -521, -512, -520, -278, -219, -511, -513, - -513, -521, -521, -520, -294, -41, -521, -521, -521, -521, - -509, -521, -510, -450, -521, -521, -274, -521, -340, -341, - -521, -312, -521, -96, -97, -134, -135, -151, -156, -163, - -166, -319, -521, -450, -488, -489, -400, -521, -415, -521, - -417, -521, -521, -521, -407, -521, -521, -413, -521, -428, - -430, -431, -432, -433, -7, -519, -15, -16, -17, -18, - -19, -521, -11, -12, -13, -106, -520, -521, -23, -31, - -174, -262, -521, -521, -24, -32, -33, -25, -176, -521, - -500, -501, -520, -502, -503, -500, -252, -501, -370, -505, - -506, -30, -183, -36, -37, -521, -521, -520, -282, -521, - -521, -521, -184, -185, -186, -187, -188, -189, -190, -191, - -196, -197, -198, -199, -200, -201, -202, -203, -204, -205, - -206, -207, -208, -211, -212, -213, -214, -521, -520, -232, - -521, -261, -234, -521, -520, -259, -521, -252, -500, -501, - -252, -50, -54, -253, -254, -255, -367, -520, -520, -521, - -511, -511, -520, -231, -521, -289, -521, -62, -280, -74, - -67, -521, -520, -521, -521, -81, -521, -437, -438, -521, - -521, -521, -521, -521, -215, -521, -387, -521, -511, -220, - -221, -515, -514, -223, -515, -511, -284, -513, -521, -491, - -513, -520, -329, -330, -331, -520, -521, -521, -521, -521, - -520, -379, -520, -521, -521, -282, -306, -91, -92, -521, - -94, -521, -274, -521, -521, -317, -468, -321, -507, -508, - -521, -401, -416, -419, -420, -422, -403, -418, -404, -405, - -406, -521, -409, -411, -412, -521, -434, -10, -521, -521, - -22, -521, -521, -266, -283, -521, -521, -55, -229, -230, - -368, -521, -57, -369, -521, -500, -501, -504, -281, -521, - -174, -521, -356, -521, -358, -361, -521, -520, -260, -263, - -521, -495, -521, -238, -521, -496, -48, -364, -49, -365, - -520, -40, -521, -520, -521, -251, -521, -257, -374, -377, - -225, -521, -521, -521, -521, -521, -288, -62, -72, -521, - -500, -501, -520, -78, -80, -521, -182, -192, -193, -521, - -520, -520, -277, -521, -521, -263, -224, -515, -493, -286, - -492, -520, -332, -520, -298, -333, -334, -335, -301, -521, - -304, -521, -521, -521, -500, -501, -504, -281, -521, -91, - -92, -93, -521, -520, -521, -310, -454, -455, -521, -313, - -520, -520, -468, -521, -487, -487, -487, -467, -469, -470, - -471, -472, -473, -474, -477, -479, -480, -482, -483, -484, - -521, -521, -511, -521, -520, -408, -410, -414, -107, -21, - -175, -264, -521, -521, -27, -178, -28, -179, -56, -29, - -180, -58, -181, -521, -521, -521, -283, -216, -342, -344, - -354, -521, -357, -521, -520, -520, -236, -521, -520, -51, - -521, -244, -521, -520, -256, -521, -520, -520, -226, -227, - -520, -520, -511, -521, -76, -291, -520, -338, -520, -388, - -520, -389, -390, -279, -511, -521, -336, -521, -521, -520, - -520, -303, -305, -381, -521, -521, -283, -521, -91, -92, - -95, -521, -520, -521, -457, -521, -521, -521, -511, -459, - -521, -463, -521, -465, -466, -521, -521, -481, -485, -322, - -521, -421, -424, -425, -426, -427, -521, -265, -26, -177, - -521, -345, -83, -521, -521, -90, -353, -521, -355, -359, - -521, -233, -521, -235, -520, -520, -241, -521, -520, -521, - -250, -258, -521, -521, -521, -3, -520, -394, -339, -521, - -521, -392, -222, -295, -521, -296, -521, -521, -521, -520, - -383, -307, -283, -521, -521, -314, -318, -320, -521, -487, - -487, -475, -486, -487, -521, -478, -476, -468, -490, -423, - -343, -521, -350, -520, -521, -521, -89, -521, -521, -362, - -520, -521, -240, -521, -520, -246, -521, -520, -375, -378, - -228, -393, -520, -391, -520, -299, -302, -521, -520, -520, - -311, -456, -520, -458, -521, -461, -462, -464, -520, -346, - -349, -521, -521, -85, -87, -86, -88, -521, -352, -237, - -52, -521, -520, -242, -521, -245, -387, -520, -382, -380, - -384, -385, -521, -521, -487, -521, -521, -521, -84, -351, - -520, -247, -521, -520, -386, -337, -308, -315, -460, -323, - -521, -348, -243, -521, -248, -347, -520, -249 ] - -clist = [ -'38,271,115,115,610,331,38,302,200,499,118,118,477,110,188,281,281,451', -'103,350,491,495,657,241,241,241,651,243,243,243,99,38,274,274,735,242', -'242,242,571,269,264,120,120,296,284,281,442,305,305,208,577,305,835', -'579,298,522,109,369,376,673,115,532,313,624,628,333,726,267,245,245', -'245,565,674,293,115,349,103,382,386,738,306,307,641,830,310,833,753', -'758,311,571,588,589,305,305,305,305,829,513,38,515,239,252,253,339,341', -'831,38,348,520,531,2,256,262,265,805,100,187,319,361,761,763,764,189', -'580,794,356,357,358,359,538,587,480,483,443,586,715,437,440,334,488', -'304,317,645,332,517,379,295,478,354,303,308,739,309,740,638,869,360', -'320,657,752,514,755,872,322,835,650,516,671,837,699,703,428,704,447', -'716,448,717,744,899,632,730,809,336,337,343,16,393,394,38,390,1,16,298', -'346,771,,629,904,,,,372,372,201,201,38,,,201,201,201,,,,,750,16,275', -'275,368,374,377,,709,,391,,,,,,,,,,,,,201,201,,,201,201,,,201,314,,676', -',,,281,13,241,,,,243,13,453,,,241,243,38,242,243,446,274,38,,452,456', -',242,382,386,461,,460,,16,,13,,201,201,201,201,16,264,38,875,876,305', -'305,877,,245,281,267,281,,490,245,267,466,245,915,,571,487,821,,318', -'571,333,618,333,,620,103,900,,,479,,496,497,,444,577,579,498,,688,450', -',,454,691,657,,,605,878,559,722,,,13,,115,605,,,,,13,,118,,38,537,,756', -'757,918,,,,16,201,201,201,201,,,201,201,201,,,,605,,,390,16,,,120,,298', -'553,,,432,,,,,,,,,,,,,,599,,,,,,,,,,,914,,,,,,,,567,296,,,,,,17,201', -',13,,,17,201,583,,201,,16,,633,,275,16,390,819,13,298,571,,609,547,', -'390,,552,823,17,277,277,,,720,721,731,16,591,592,,,,,,,,585,38,,201', -'201,38,,,,390,38,,298,316,649,511,,511,,613,672,625,625,,,,616,,,571', -',576,13,,578,862,605,13,646,,864,,698,115,,,,,,17,,118,,,678,,281,17', -',13,,16,,,,,,,,,,,,274,,,,,901,,,,120,,,684,686,,,,,689,201,,,,,,,,', -'903,573,,,723,751,905,,567,,,,,,,,,,,,769,,,,,,553,,,13,,,372,,,,,305', -'17,201,,,,,,,390,,,,,,298,743,,17,201,,,38,38,,,,,,,,,201,747,,754,', -',115,,759,,,,,,38,,16,,,,16,,,281,281,16,,201,,,,,,,,,,,,201,782,782', -',770,38,201,,17,,,,277,17,778,798,,38,38,,,,,795,,,706,,305,38,605,201', -'201,,,17,,201,,,38,38,711,,305,,13,,,275,13,840,,38,804,13,796,,,,512', -'814,512,625,,281,812,,,,,825,,,,,,824,,,,201,274,,,,,,,,828,,,,281,38', -'4,882,,,,,,,,,17,38,,,,782,,,,,,,,,38,,,,201,281,281,270,,201,,,281', -',,,16,16,,,871,390,782,782,298,,,,,782,,,,,,,,,892,,16,,,38,791,38,', -'793,,201,38,281,800,38,,,,,,38,,,,,,,783,783,782,,16,281,,,,,,,,,,,16', -'16,281,13,13,,782,,,,,,16,,,,,,,782,,201,,16,16,,,13,,17,,,,17,,,16', -'201,17,,,,,,15,,,,,,15,,852,786,788,855,,13,,,,,,,,275,,,,13,13,,,,', -'15,,,16,,,13,367,,,,,,,,16,,13,13,783,,,,,270,,277,,16,,13,,889,,,,893', -',,895,,,,,,,,,,,783,783,201,,,,,783,,,,,,,,,,15,,,,16,13,16,911,15,', -',16,,,16,,,13,270,,16,863,,270,,922,,,924,783,13,,,,,,,,,,,927,,,,,17', -'17,,783,,,879,880,,,,,,888,,,783,,,,,,,775,17,,,13,,13,,,,,13,,,13,', -',,,,13,15,,,,,,785,785,909,,17,,,,,,,15,,,,,17,17,,,539,,921,,,,,,17', -',,,,,,925,,,209,17,17,,240,240,240,,,,,,,,17,,,,,,290,291,292,,,,,,', -',,,,,15,240,,,,15,,,,277,,,,,,,,,,,,,17,,,,,15,,,,,,,17,,,,785,,,,,', -',,,17,,,,,,,,,,,,,,,,,,,,,,785,785,,,621,,,785,623,,,,,631,,,,,,,,17', -',17,,,,,17,15,,17,,,,,,17,,,,,,,,,785,,,,,,,,,,,,,,,,,,,,785,370,240', -'378,240,,,392,,,,,,785,,,,,,,209,402,403,404,405,406,407,408,409,410', -'411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427', -',,,,,,,240,,240,,,,,,,,,,,240,,,,,,240,,,240,,,,,,,,,,,,15,,,,15,,,', -',15,,,,,,474,,,,,,,,485,,240,,,,,,,,776,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',790,,,,,,,,,,,,802,803,,,,,,,,,,,808,,,,,,,,240,,,816,817,,,,,,,,,', -',,,,,,,,,,240,,392,560,378,,,,,,,,,,,,,,,,,,,,,,,,,,,,,240,851,,240', -',,240,15,15,,,,,861,,581,,,,,,,,,,,868,,,,,15,240,,,,,,,606,607,608', -',,,,,,,,,240,,,240,,,,,,,15,,,,,,,,896,,897,240,15,15,,902,,,,,,,,,15', -',,,,,,,,,,15,15,,,,,,,,,,,,15,,680,240,,,685,687,,,,,690,,,692,,,,,', -',697,,,,,240,,,,240,,,29,,,,,,29,,15,,,240,,,,,,,29,29,15,,240,29,29', -'29,,,,,,29,,15,,,371,375,240,,,734,,,240,,,,,,,,,29,29,,,29,29,240,', -'29,,,,,,,,,240,,,,,,15,,15,,,,,15,,,15,,,434,,435,15,,,,,,29,,,,29,29', -'29,29,29,,,240,779,,,,,,,,,,685,687,690,,,,,,,297,,,,,240,,,240,,240', -',,,,,,,,338,,340,340,344,347,340,,,,,,,,,,,,,,,,,,240,,,,,,,,,,,,,,', -',29,29,29,29,29,240,,29,29,29,,,,,,,,29,,779,,,,,,,,,,,543,850,,,,,240', -',240,,,,,,,,,,,,,,,,,,,240,,,,,,,,,,29,,,,,,29,,,29,,29,297,,,240,29', -',,,569,,,572,,240,575,,240,,,,,,,582,,,29,240,,,,,,,,,,,,29,29,,,,,', -',,431,431,,240,,,240,,,,,615,,,572,,,,,,,449,,,240,,,,,,,,,,,240,,,', -',,,,,,,,,,29,,,,,,,,,,,,489,,,,,,,,,,,681,,,,,,,,29,,,,,,,,,,,,,,,,705', -',,,708,,,,,,,,,,,,,,713,,,,,,,,,,,569,,,29,,,,,,,,,,,,548,729,,,,29', -',615,,,,,,,,297,,,29,,,,371,,,,,,,,,,,,29,,,,29,,,,,29,,29,562,,,,,', -'431,,,548,,29,548,,,,,29,,562,562,,,,431,,777,,,,,,,,297,,,,,,,,29,29', -',,,,29,,,572,,,,,572,,,,,,,,,,,,,,,,,,297,,,,,,,,,,,,,,,820,,,29,,,', -',,,,,,,,,,,,,,836,,,,,,,,,,,,,,,,,,,,,,,,,29,,,,431,29,854,,857,,,,29', -'29,,,,562,,,431,,,,,,,615,,,,,,,,,29,,,548,,,,,,29,,727,732,,,,,,,,', -',727,,727,,569,,,572,29,,,,,,,,,,898,,29,29,297,,,,,,,,,,29,,,,,,,,', -'29,910,29,29,913,,,,,,,,,,,29,29,,,,,,572,,,,,,,,,,,926,,,,,,,,,,431', -',,431,,,,,431,,,,,,29,548,548,,,,,807,,,,811,29,,,,,,,,,,,,,29,,,,,', -',,,,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,29,,29,,,,,29,431,,29,431,,,', -',29,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,297,,,,,,,431,,,,431,,,431', -',,,,,,,,,,727,,,,,,,,,,,,,,,,,,,,,,,,431,,,,,727,,,,,,,,,,,,,431,,,431', -',,,,,,,,,,,,431' ] - racc_goto_table = arr = ::Array.new(2727, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -clist = [ -'45,43,49,49,5,48,45,21,25,82,52,52,3,13,13,56,56,32,85,48,79,79,143', -'29,29,29,86,59,59,59,9,45,45,45,80,57,57,57,149,41,60,53,53,25,44,56', -'35,25,25,17,61,25,145,61,29,131,11,23,23,134,49,131,45,81,81,45,6,40', -'63,63,63,36,135,55,49,136,85,33,33,6,15,15,46,141,15,141,137,138,9,149', -'36,36,25,25,25,25,140,47,45,47,31,31,31,128,128,144,45,128,148,130,4', -'34,34,34,7,12,14,18,26,142,142,142,27,37,38,15,15,15,15,54,64,58,58', -'65,67,68,33,33,75,76,77,83,84,87,88,21,89,90,11,91,92,93,94,95,96,97', -'11,98,143,99,100,101,102,103,145,104,105,106,107,108,109,111,112,115', -'116,117,118,119,120,121,122,123,126,127,129,20,25,25,45,49,1,20,29,132', -'133,,82,141,,,,57,57,20,20,45,,,20,20,20,,,,,46,20,20,20,17,17,17,,36', -',17,,,,,,,,,,,,,20,20,,,20,20,,,20,20,,131,,,,56,16,29,,,,59,16,29,', -',29,59,45,57,59,60,45,45,,57,41,,57,33,33,41,,44,,20,,16,,20,20,20,20', -'20,60,45,142,142,25,25,142,,63,56,40,56,,59,63,40,55,63,80,,149,57,81', -',16,149,45,58,45,,58,85,6,,,55,,15,15,,31,61,61,9,,35,31,,,31,35,143', -',,33,86,21,32,,,16,,49,33,,,,,16,,52,,45,13,,3,3,142,,,,20,20,20,20', -'20,,,20,20,20,,,,33,,,49,20,,,53,,29,60,,,62,,,,,,,,,,,,,,21,,,,,,,', -',,,5,,,,,,,,59,25,,,,,,22,20,,16,,,22,20,59,,20,,20,,21,,20,20,49,79', -'16,29,149,,25,34,,49,,34,3,22,22,22,,,33,33,23,20,55,55,,,,,,,,63,45', -',20,20,45,,,,49,45,,29,22,25,20,,20,,55,25,85,85,,,,55,,,149,,34,16', -',34,79,33,16,85,,79,,43,49,,,,,,22,,52,,,13,,56,22,,16,,20,,,,,,,,,', -',,45,,,,,82,,,,53,,,17,17,,,,,17,20,,,,,,,,,3,62,,,29,21,3,,59,,,,,', -',,,,,,48,,,,,,60,,,16,,,57,,,,,25,22,20,,,,,,,49,,,,,,29,57,,22,20,', -',45,45,,,,,,,,,20,15,,85,,,49,,85,,,,,,45,,20,,,,20,,,56,56,20,,20,', -',,,,,,,,,,20,45,45,,55,45,20,,22,,,,22,22,17,59,,45,45,,,,,57,,,62,', -'25,45,33,20,20,,,22,,20,,,45,45,62,,25,,16,,,20,16,43,,45,55,16,63,', -',,22,15,22,85,,56,55,,,,,85,,,,,,15,,,,20,45,,,,,,,,55,,,,56,45,2,21', -',,,,,,,,22,45,,,,45,,,,,,,,,45,,,,20,56,56,2,,20,,,56,,,,20,20,,,85', -'49,45,45,29,,,,,45,,,,,,,,,59,,20,,,45,62,45,,62,,20,45,56,62,45,,,', -',,45,,,,,,,20,20,45,,20,56,,,,,,,,,,,20,20,56,16,16,,45,,,,,,20,,,,', -',,45,,20,,20,20,,,16,,22,,,,22,,,20,20,22,,,,,,19,,,,,,19,,62,16,16', -'62,,16,,,,,,,,20,,,,16,16,,,,,19,,,20,,,16,2,,,,,,,,20,,16,16,20,,,', -',2,,22,,20,,16,,62,,,,62,,,62,,,,,,,,,,,20,20,20,,,,,20,,,,,,,,,,19', -',,,20,16,20,62,19,,,20,,,20,,,16,2,,20,16,,2,,62,,,62,20,16,,,,,,,,', -',,62,,,,,22,22,,20,,,16,16,,,,,,16,,,20,,,,,,,22,22,,,16,,16,,,,,16', -',,16,,,,,,16,19,,,,,,22,22,16,,22,,,,,,,19,,,,,22,22,,,2,,16,,,,,,22', -',,,,,,16,,,28,22,22,,28,28,28,,,,,,,,22,,,,,,28,28,28,,,,,,,,,,,,19', -'28,,,,19,,,,22,,,,,,,,,,,,,22,,,,,19,,,,,,,22,,,,22,,,,,,,,,22,,,,,', -',,,,,,,,,,,,,,,,22,22,,,2,,,22,2,,,,,2,,,,,,,,22,,22,,,,,22,19,,22,', -',,,,22,,,,,,,,,22,,,,,,,,,,,,,,,,,,,,22,28,28,28,28,,,28,,,,,,22,,,', -',,,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28', -'28,28,28,28,28,,,,,,,,28,,28,,,,,,,,,,,28,,,,,,28,,,28,,,,,,,,,,,,19', -',,,19,,,,,19,,,,,,28,,,,,,,,28,,28,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,2,,,,,,,,,,,,2,2,,,,,,,,,,,2,,,,,,,,28,,,2,2,,,,,,,,,,,,,,,,,,', -',28,,28,28,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,2,,28,,,28,19,19,,,,,2', -',28,,,,,,,,,,,2,,,,,19,28,,,,,,,28,28,28,,,,,,,,,,28,,,28,,,,,,,19,', -',,,,,,2,,2,28,19,19,,2,,,,,,,,,19,,,,,,,,,,,19,19,,,,,,,,,,,,19,,28', -'28,,,28,28,,,,,28,,,28,,,,,,,28,,,,,28,,,,28,,,39,,,,,,39,,19,,,28,', -',,,,,39,39,19,,28,39,39,39,,,,,,39,,19,,,24,24,28,,,28,,,28,,,,,,,,', -'39,39,,,39,39,28,,39,,,,,,,,,28,,,,,,19,,19,,,,,19,,,19,,,24,,24,19', -',,,,,39,,,,39,39,39,39,39,,,28,28,,,,,,,,,,28,28,28,,,,,,,10,,,,,28', -',,28,,28,,,,,,,,,10,,10,10,10,10,10,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,', -',,,39,39,39,39,39,28,,39,39,39,,,,,,,,39,,28,,,,,,,,,,,24,28,,,,,28', -',28,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,39,,,,,,39,,,39,,39,10,,,28,39,,,', -'24,,,24,,28,24,,28,,,,,,,24,,,39,28,,,,,,,,,,,,39,39,,,,,,,,10,10,,28', -',,28,,,,,24,,,24,,,,,,,10,,,28,,,,,,,,,,,28,,,,,,,,,,,,,,39,,,,,,,,', -',,,10,,,,,,,,,,,24,,,,,,,,39,,,,,,,,,,,,,,,,24,,,,24,,,,,,,,,,,,,,24', -',,,,,,,,,,24,,,39,,,,,,,,,,,,10,24,,,,39,,24,,,,,,,,10,,,39,,,,24,,', -',,,,,,,,,39,,,,39,,,,,39,,39,10,,,,,,10,,,10,,39,10,,,,,39,,10,10,,', -',10,,24,,,,,,,,10,,,,,,,,39,39,,,,,39,,,24,,,,,24,,,,,,,,,,,,,,,,,,10', -',,,,,,,,,,,,,,24,,,39,,,,,,,,,,,,,,,,,,24,,,,,,,,,,,,,,,,,,,,,,,,,39', -',,,10,39,24,,24,,,,39,39,,,,10,,,10,,,,,,,24,,,,,,,,,39,,,10,,,,,,39', -',10,10,,,,,,,,,,10,,10,,24,,,24,39,,,,,,,,,,24,,39,39,10,,,,,,,,,,39', -',,,,,,,,39,24,39,39,24,,,,,,,,,,,39,39,,,,,,24,,,,,,,,,,,24,,,,,,,,', -',10,,,10,,,,,10,,,,,,39,10,10,,,,,10,,,,10,39,,,,,,,,,,,,,39,,,,,,,', -',,,,,,,,,,,,,,,,39,,,,,,,,,,,,,,,,,,,39,,39,,,,,39,10,,39,10,,,,,39', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,,,10,,,,10,,,10,,,,,,', -',,,,10,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,10,,,,,,,,,,,,,10,,,10,,,,,,,,', -',,,,10' ] - racc_goto_check = arr = ::Array.new(2727, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -racc_goto_pointer = [ - nil, 190, 791, -283, 110, -472, -544, -612, nil, 25, - 1800, 48, 110, 4, 106, 21, 252, 28, 53, 941, - 183, -49, 437, -134, 1572, -12, 8, 111, 1154, -2, - nil, 75, -246, -118, 82, -210, -357, -318, -585, 1725, - 34, 6, nil, -33, 9, -2, -427, -223, -62, -7, - nil, nil, 1, 32, -236, 29, -19, 10, -168, 2, - 10, -387, 156, 43, -315, -124, nil, -311, -452, nil, - nil, nil, nil, nil, nil, 71, -164, 82, nil, -286, - -587, -433, -302, 77, -371, 13, -490, 76, -188, 92, - -149, 92, 89, -473, 90, -475, -352, -666, 92, -486, - -161, -488, -663, 97, -350, -165, -350, -601, -394, -393, - nil, -66, -393, nil, nil, -87, -414, -86, -413, -455, - -690, -322, -431, -549, nil, nil, 109, 108, 26, 105, - -234, -282, 113, -479, -465, -453, -6, -561, -565, nil, - -664, -677, -535, -494, -655, -710, nil, nil, -227, -395 ] - -racc_goto_default = [ - nil, nil, 476, nil, nil, nil, 736, nil, 5, nil, - 6, 7, 312, nil, nil, nil, 205, 19, 14, 206, - 289, nil, 204, nil, 247, 18, nil, nil, 22, 23, - 24, nil, 28, 602, nil, nil, nil, nil, nil, 280, - 32, nil, 34, 37, 36, 202, 510, nil, 117, 384, - 116, 119, 71, 72, nil, nil, 45, 299, nil, 300, - 549, 550, 429, 568, nil, nil, 257, nil, nil, 46, - 47, 48, 49, 50, 51, 52, nil, 258, 58, nil, - nil, nil, nil, nil, nil, 492, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 238, nil, nil, 388, 259, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 70, 73, 74, nil, nil, nil, - nil, 527, nil, nil, nil, nil, nil, nil, 653, 654, - 655, 656, nil, 832, 663, 664, 667, 670, nil, 251 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 0, 136, :_reduce_1, - 2, 133, :_reduce_2, - 4, 135, :_reduce_3, - 2, 134, :_reduce_4, - 1, 140, :_reduce_none, - 1, 140, :_reduce_none, - 3, 140, :_reduce_7, - 2, 140, :_reduce_8, - 0, 158, :_reduce_9, - 4, 143, :_reduce_10, - 3, 143, :_reduce_11, - 3, 143, :_reduce_12, - 3, 143, :_reduce_13, - 2, 143, :_reduce_14, - 3, 143, :_reduce_15, - 3, 143, :_reduce_16, - 3, 143, :_reduce_17, - 3, 143, :_reduce_18, - 3, 143, :_reduce_19, - 0, 159, :_reduce_20, - 5, 143, :_reduce_21, - 4, 143, :_reduce_22, - 3, 143, :_reduce_23, - 3, 143, :_reduce_24, - 3, 143, :_reduce_25, - 6, 143, :_reduce_26, - 5, 143, :_reduce_27, - 5, 143, :_reduce_28, - 5, 143, :_reduce_29, - 3, 143, :_reduce_30, - 3, 143, :_reduce_31, - 3, 143, :_reduce_32, - 3, 143, :_reduce_33, - 1, 143, :_reduce_none, - 1, 157, :_reduce_none, - 3, 157, :_reduce_36, - 3, 157, :_reduce_37, - 2, 157, :_reduce_38, - 2, 157, :_reduce_39, - 1, 157, :_reduce_none, - 1, 147, :_reduce_41, - 1, 149, :_reduce_none, - 1, 149, :_reduce_none, - 2, 149, :_reduce_44, - 2, 149, :_reduce_45, - 2, 149, :_reduce_46, - 1, 162, :_reduce_none, - 4, 162, :_reduce_48, - 4, 162, :_reduce_49, - 0, 169, :_reduce_50, - 0, 170, :_reduce_51, - 6, 167, :_reduce_52, - 2, 161, :_reduce_53, - 3, 161, :_reduce_54, - 4, 161, :_reduce_55, - 5, 161, :_reduce_56, - 4, 161, :_reduce_57, - 5, 161, :_reduce_58, - 2, 161, :_reduce_59, - 2, 161, :_reduce_60, - 1, 150, :_reduce_none, - 3, 150, :_reduce_62, - 1, 173, :_reduce_none, - 3, 173, :_reduce_64, - 1, 172, :_reduce_65, - 2, 172, :_reduce_66, - 3, 172, :_reduce_67, - 2, 172, :_reduce_68, - 2, 172, :_reduce_69, - 1, 172, :_reduce_70, - 1, 175, :_reduce_none, - 3, 175, :_reduce_72, - 2, 174, :_reduce_73, - 3, 174, :_reduce_74, - 1, 176, :_reduce_75, - 4, 176, :_reduce_76, - 3, 176, :_reduce_77, - 3, 176, :_reduce_78, - 3, 176, :_reduce_79, - 3, 176, :_reduce_80, - 2, 176, :_reduce_81, - 1, 176, :_reduce_82, - 1, 148, :_reduce_83, - 4, 148, :_reduce_84, - 3, 148, :_reduce_85, - 3, 148, :_reduce_86, - 3, 148, :_reduce_87, - 3, 148, :_reduce_88, - 2, 148, :_reduce_89, - 1, 148, :_reduce_90, - 1, 178, :_reduce_91, - 1, 178, :_reduce_none, - 2, 179, :_reduce_93, - 1, 179, :_reduce_94, - 3, 179, :_reduce_95, - 1, 180, :_reduce_none, - 1, 180, :_reduce_none, - 1, 180, :_reduce_none, - 1, 180, :_reduce_99, - 1, 180, :_reduce_100, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 145, :_reduce_103, - 1, 145, :_reduce_none, - 1, 146, :_reduce_105, - 0, 186, :_reduce_106, - 4, 146, :_reduce_107, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 3, 160, :_reduce_174, - 5, 160, :_reduce_175, - 3, 160, :_reduce_176, - 6, 160, :_reduce_177, - 5, 160, :_reduce_178, - 5, 160, :_reduce_179, - 5, 160, :_reduce_180, - 5, 160, :_reduce_181, - 4, 160, :_reduce_182, - 3, 160, :_reduce_183, - 3, 160, :_reduce_184, - 3, 160, :_reduce_185, - 3, 160, :_reduce_186, - 3, 160, :_reduce_187, - 3, 160, :_reduce_188, - 3, 160, :_reduce_189, - 3, 160, :_reduce_190, - 3, 160, :_reduce_191, - 4, 160, :_reduce_192, - 4, 160, :_reduce_193, - 2, 160, :_reduce_194, - 2, 160, :_reduce_195, - 3, 160, :_reduce_196, - 3, 160, :_reduce_197, - 3, 160, :_reduce_198, - 3, 160, :_reduce_199, - 3, 160, :_reduce_200, - 3, 160, :_reduce_201, - 3, 160, :_reduce_202, - 3, 160, :_reduce_203, - 3, 160, :_reduce_204, - 3, 160, :_reduce_205, - 3, 160, :_reduce_206, - 3, 160, :_reduce_207, - 3, 160, :_reduce_208, - 2, 160, :_reduce_209, - 2, 160, :_reduce_210, - 3, 160, :_reduce_211, - 3, 160, :_reduce_212, - 3, 160, :_reduce_213, - 3, 160, :_reduce_214, - 3, 160, :_reduce_215, - 5, 160, :_reduce_216, - 1, 160, :_reduce_none, - 1, 156, :_reduce_218, - 1, 153, :_reduce_none, - 2, 153, :_reduce_220, - 2, 153, :_reduce_221, - 5, 153, :_reduce_222, - 2, 153, :_reduce_223, - 3, 153, :_reduce_224, - 3, 192, :_reduce_225, - 4, 192, :_reduce_226, - 4, 192, :_reduce_227, - 6, 192, :_reduce_228, - 1, 193, :_reduce_none, - 1, 193, :_reduce_none, - 1, 163, :_reduce_231, - 2, 163, :_reduce_232, - 5, 163, :_reduce_233, - 2, 163, :_reduce_234, - 5, 163, :_reduce_235, - 4, 163, :_reduce_236, - 7, 163, :_reduce_237, - 3, 163, :_reduce_238, - 1, 163, :_reduce_none, - 4, 196, :_reduce_240, - 3, 196, :_reduce_241, - 5, 196, :_reduce_242, - 7, 196, :_reduce_243, - 2, 196, :_reduce_244, - 5, 196, :_reduce_245, - 4, 196, :_reduce_246, - 6, 196, :_reduce_247, - 7, 196, :_reduce_248, - 9, 196, :_reduce_249, - 3, 196, :_reduce_250, - 1, 196, :_reduce_none, - 0, 198, :_reduce_252, - 2, 166, :_reduce_253, - 1, 197, :_reduce_none, - 0, 199, :_reduce_255, - 3, 197, :_reduce_256, - 0, 200, :_reduce_257, - 4, 197, :_reduce_258, - 2, 195, :_reduce_259, - 2, 194, :_reduce_260, - 1, 194, :_reduce_none, - 1, 189, :_reduce_262, - 3, 189, :_reduce_263, - 3, 155, :_reduce_264, - 4, 155, :_reduce_265, - 2, 155, :_reduce_266, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_275, - 0, 221, :_reduce_276, - 4, 188, :_reduce_277, - 0, 222, :_reduce_278, - 5, 188, :_reduce_279, - 3, 188, :_reduce_280, - 3, 188, :_reduce_281, - 2, 188, :_reduce_282, - 4, 188, :_reduce_283, - 3, 188, :_reduce_284, - 0, 223, :_reduce_285, - 4, 188, :_reduce_286, - 1, 188, :_reduce_287, - 4, 188, :_reduce_288, - 3, 188, :_reduce_289, - 1, 188, :_reduce_290, - 5, 188, :_reduce_291, - 2, 188, :_reduce_292, - 1, 188, :_reduce_none, - 2, 188, :_reduce_294, - 6, 188, :_reduce_295, - 6, 188, :_reduce_296, - 0, 224, :_reduce_297, - 0, 225, :_reduce_298, - 7, 188, :_reduce_299, - 0, 226, :_reduce_300, - 0, 227, :_reduce_301, - 7, 188, :_reduce_302, - 5, 188, :_reduce_303, - 4, 188, :_reduce_304, - 5, 188, :_reduce_305, - 0, 228, :_reduce_306, - 0, 229, :_reduce_307, - 9, 188, :_reduce_308, - 0, 230, :_reduce_309, - 0, 231, :_reduce_310, - 7, 188, :_reduce_311, - 0, 232, :_reduce_312, - 0, 233, :_reduce_313, - 0, 234, :_reduce_314, - 9, 188, :_reduce_315, - 0, 235, :_reduce_316, - 0, 236, :_reduce_317, - 6, 188, :_reduce_318, - 0, 237, :_reduce_319, - 6, 188, :_reduce_320, - 0, 238, :_reduce_321, - 0, 239, :_reduce_322, - 9, 188, :_reduce_323, - 1, 188, :_reduce_324, - 1, 188, :_reduce_325, - 1, 188, :_reduce_326, - 1, 188, :_reduce_327, - 1, 152, :_reduce_328, - 1, 211, :_reduce_none, - 1, 211, :_reduce_none, - 1, 211, :_reduce_none, - 2, 211, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 212, :_reduce_none, - 5, 212, :_reduce_337, - 1, 138, :_reduce_none, - 2, 138, :_reduce_339, - 1, 215, :_reduce_none, - 1, 215, :_reduce_341, - 1, 240, :_reduce_342, - 3, 240, :_reduce_343, - 1, 241, :_reduce_344, - 2, 241, :_reduce_345, - 4, 241, :_reduce_346, - 7, 241, :_reduce_347, - 6, 241, :_reduce_348, - 4, 241, :_reduce_349, - 3, 241, :_reduce_350, - 5, 241, :_reduce_351, - 4, 241, :_reduce_352, - 2, 241, :_reduce_353, - 1, 241, :_reduce_354, - 2, 241, :_reduce_355, - 1, 168, :_reduce_356, - 2, 168, :_reduce_357, - 1, 168, :_reduce_358, - 3, 168, :_reduce_359, - 0, 243, :_reduce_360, - 0, 244, :_reduce_361, - 6, 242, :_reduce_362, - 2, 164, :_reduce_363, - 4, 164, :_reduce_364, - 4, 164, :_reduce_365, - 0, 246, :_reduce_366, - 3, 210, :_reduce_367, - 4, 210, :_reduce_368, - 4, 210, :_reduce_369, - 3, 210, :_reduce_370, - 2, 210, :_reduce_371, - 1, 210, :_reduce_372, - 0, 247, :_reduce_373, - 0, 248, :_reduce_374, - 6, 209, :_reduce_375, - 0, 249, :_reduce_376, - 0, 250, :_reduce_377, - 6, 209, :_reduce_378, - 0, 253, :_reduce_379, - 6, 214, :_reduce_380, - 1, 251, :_reduce_none, - 4, 251, :_reduce_382, - 2, 251, :_reduce_383, - 1, 252, :_reduce_none, - 1, 252, :_reduce_none, - 6, 137, :_reduce_386, - 0, 137, :_reduce_387, - 1, 254, :_reduce_388, - 1, 254, :_reduce_none, - 1, 254, :_reduce_none, - 2, 255, :_reduce_391, - 1, 255, :_reduce_none, - 2, 139, :_reduce_393, - 1, 139, :_reduce_none, - 1, 201, :_reduce_395, - 1, 201, :_reduce_396, - 1, 201, :_reduce_none, - 1, 202, :_reduce_398, - 1, 257, :_reduce_none, - 2, 257, :_reduce_400, - 3, 258, :_reduce_401, - 1, 258, :_reduce_402, - 3, 203, :_reduce_403, - 3, 204, :_reduce_404, - 3, 205, :_reduce_405, - 3, 205, :_reduce_406, - 1, 261, :_reduce_407, - 3, 261, :_reduce_408, - 1, 262, :_reduce_none, - 2, 262, :_reduce_410, - 3, 206, :_reduce_411, - 3, 206, :_reduce_412, - 1, 264, :_reduce_413, - 3, 264, :_reduce_414, - 1, 259, :_reduce_415, - 2, 259, :_reduce_416, - 1, 260, :_reduce_417, - 2, 260, :_reduce_418, - 1, 263, :_reduce_419, - 0, 266, :_reduce_420, - 3, 263, :_reduce_421, - 0, 267, :_reduce_422, - 4, 263, :_reduce_423, - 1, 265, :_reduce_424, - 1, 265, :_reduce_425, - 1, 265, :_reduce_426, - 1, 265, :_reduce_none, - 2, 184, :_reduce_428, - 1, 184, :_reduce_429, - 1, 268, :_reduce_none, - 1, 268, :_reduce_none, - 1, 268, :_reduce_none, - 1, 268, :_reduce_none, - 3, 185, :_reduce_434, - 1, 256, :_reduce_none, - 1, 256, :_reduce_none, - 2, 256, :_reduce_437, - 2, 256, :_reduce_438, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_444, - 1, 177, :_reduce_445, - 1, 177, :_reduce_446, - 1, 177, :_reduce_447, - 1, 177, :_reduce_448, - 1, 177, :_reduce_449, - 1, 207, :_reduce_450, - 1, 151, :_reduce_451, - 1, 154, :_reduce_452, - 1, 154, :_reduce_453, - 1, 216, :_reduce_454, - 0, 269, :_reduce_455, - 4, 216, :_reduce_456, - 2, 216, :_reduce_457, - 4, 218, :_reduce_458, - 2, 218, :_reduce_459, - 6, 270, :_reduce_460, - 4, 270, :_reduce_461, - 4, 270, :_reduce_462, - 2, 270, :_reduce_463, - 4, 270, :_reduce_464, - 2, 270, :_reduce_465, - 2, 270, :_reduce_466, - 1, 270, :_reduce_467, - 0, 270, :_reduce_468, - 1, 276, :_reduce_469, - 1, 276, :_reduce_470, - 1, 276, :_reduce_471, - 1, 276, :_reduce_472, - 1, 276, :_reduce_473, - 1, 271, :_reduce_474, - 3, 271, :_reduce_475, - 3, 277, :_reduce_476, - 1, 272, :_reduce_477, - 3, 272, :_reduce_478, - 1, 278, :_reduce_none, - 1, 278, :_reduce_none, - 2, 273, :_reduce_481, - 1, 273, :_reduce_482, - 1, 279, :_reduce_none, - 1, 279, :_reduce_none, - 2, 275, :_reduce_485, - 2, 274, :_reduce_486, - 0, 274, :_reduce_487, - 1, 219, :_reduce_none, - 0, 280, :_reduce_489, - 5, 219, :_reduce_490, - 1, 208, :_reduce_491, - 2, 208, :_reduce_492, - 2, 208, :_reduce_493, - 1, 191, :_reduce_none, - 3, 191, :_reduce_495, - 3, 281, :_reduce_496, - 1, 171, :_reduce_none, - 1, 171, :_reduce_none, - 1, 171, :_reduce_none, - 1, 165, :_reduce_none, - 1, 165, :_reduce_none, - 1, 165, :_reduce_none, - 1, 165, :_reduce_none, - 1, 245, :_reduce_none, - 1, 245, :_reduce_none, - 1, 245, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 0, 141, :_reduce_none, - 1, 141, :_reduce_none, - 0, 187, :_reduce_none, - 1, 187, :_reduce_none, - 0, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 217, :_reduce_516, - 1, 217, :_reduce_none, - 1, 144, :_reduce_none, - 2, 144, :_reduce_519, - 0, 142, :_reduce_520 ] - -racc_reduce_n = 521 - -racc_shift_n = 928 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kRETURN => 28, - :kYIELD => 29, - :kSUPER => 30, - :kSELF => 31, - :kNIL => 32, - :kTRUE => 33, - :kFALSE => 34, - :kAND => 35, - :kOR => 36, - :kNOT => 37, - :kIF_MOD => 38, - :kUNLESS_MOD => 39, - :kWHILE_MOD => 40, - :kUNTIL_MOD => 41, - :kRESCUE_MOD => 42, - :kALIAS => 43, - :kDEFINED => 44, - :klBEGIN => 45, - :klEND => 46, - :k__LINE__ => 47, - :k__FILE__ => 48, - :tIDENTIFIER => 49, - :tFID => 50, - :tGVAR => 51, - :tIVAR => 52, - :tCONSTANT => 53, - :tCVAR => 54, - :tNTH_REF => 55, - :tBACK_REF => 56, - :tSTRING_CONTENT => 57, - :tINTEGER => 58, - :tFLOAT => 59, - :tREGEXP_END => 60, - :tUPLUS => 61, - :tUMINUS => 62, - :tUMINUS_NUM => 63, - :tPOW => 64, - :tCMP => 65, - :tEQ => 66, - :tEQQ => 67, - :tNEQ => 68, - :tGEQ => 69, - :tLEQ => 70, - :tANDOP => 71, - :tOROP => 72, - :tMATCH => 73, - :tNMATCH => 74, - :tDOT => 75, - :tDOT2 => 76, - :tDOT3 => 77, - :tAREF => 78, - :tASET => 79, - :tLSHFT => 80, - :tRSHFT => 81, - :tCOLON2 => 82, - :tCOLON3 => 83, - :tOP_ASGN => 84, - :tASSOC => 85, - :tLPAREN => 86, - :tLPAREN2 => 87, - :tRPAREN => 88, - :tLPAREN_ARG => 89, - :tLBRACK => 90, - :tLBRACK2 => 91, - :tRBRACK => 92, - :tLBRACE => 93, - :tLBRACE_ARG => 94, - :tSTAR => 95, - :tSTAR2 => 96, - :tAMPER => 97, - :tAMPER2 => 98, - :tTILDE => 99, - :tPERCENT => 100, - :tDIVIDE => 101, - :tPLUS => 102, - :tMINUS => 103, - :tLT => 104, - :tGT => 105, - :tPIPE => 106, - :tBANG => 107, - :tCARET => 108, - :tLCURLY => 109, - :tRCURLY => 110, - :tBACK_REF2 => 111, - :tSYMBEG => 112, - :tSTRING_BEG => 113, - :tXSTRING_BEG => 114, - :tREGEXP_BEG => 115, - :tWORDS_BEG => 116, - :tQWORDS_BEG => 117, - :tSTRING_DBEG => 118, - :tSTRING_DVAR => 119, - :tSTRING_END => 120, - :tSTRING => 121, - :tSYMBOL => 122, - :tNL => 123, - :tEH => 124, - :tCOLON => 125, - :tCOMMA => 126, - :tSPACE => 127, - :tSEMI => 128, - :tLAST_TOKEN => 129, - :tEQL => 130, - :tLOWEST => 131 } - -racc_nt_base = 132 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tREGEXP_END", - "tUPLUS", - "tUMINUS", - "tUMINUS_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAST_TOKEN", - "tEQL", - "tLOWEST", - "$start", - "program", - "compstmt", - "bodystmt", - "@1", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "opt_terms", - "none", - "stmt", - "terms", - "fitem", - "undef_list", - "expr_value", - "lhs", - "command_call", - "mlhs", - "var_lhs", - "primary_value", - "aref_args", - "backref", - "mrhs", - "arg_value", - "expr", - "@2", - "@3", - "arg", - "command", - "block_command", - "call_args", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "opt_block_var", - "@4", - "@5", - "operation", - "mlhs_basic", - "mlhs_entry", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@6", - "opt_nl", - "primary", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "call_args2", - "open_args", - "@7", - "@8", - "@9", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "superclass", - "term", - "f_arglist", - "singleton", - "dot_or_colon", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "@20", - "@21", - "@22", - "@23", - "@24", - "@25", - "@26", - "@27", - "@28", - "block_par", - "block_var", - "do_block", - "@29", - "@30", - "operation3", - "@31", - "@32", - "@33", - "@34", - "@35", - "when_args", - "cases", - "@36", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "word_list", - "word", - "string_content", - "qword_list", - "string_dvar", - "@37", - "@38", - "sym", - "@39", - "f_args", - "f_arg", - "f_optarg", - "f_rest_arg", - "opt_f_block_arg", - "f_block_arg", - "f_norm_arg", - "f_opt", - "restarg_mark", - "blkarg_mark", - "@40", - "assoc" ] - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -def _reduce_1(val, _values, result) - self.lexer.lex_state = :expr_beg - - result -end - -def _reduce_2(val, _values, result) - result = val[1] - - result -end - -def _reduce_3(val, _values, result) - result = new_body val - - result -end - -def _reduce_4(val, _values, result) - result = new_compstmt val - - result -end - -# reduce 5 omitted - -# reduce 6 omitted - -def _reduce_7(val, _values, result) - result = block_append val[0], val[2] - - result -end - -def _reduce_8(val, _values, result) - result = val[1] - - result -end - -def _reduce_9(val, _values, result) - lexer.lex_state = :expr_fname - result = self.lexer.lineno - - result -end - -def _reduce_10(val, _values, result) - result = s(:alias, val[1], val[3]).line(val[2]) - - result -end - -def _reduce_11(val, _values, result) - result = s(:valias, val[1].to_sym, val[2].to_sym) - - result -end - -def _reduce_12(val, _values, result) - result = s(:valias, val[1].to_sym, :"$#{val[2]}") - - result -end - -def _reduce_13(val, _values, result) - yyerror "can't make alias for the number variables" - - result -end - -def _reduce_14(val, _values, result) - result = val[1] - - result -end - -def _reduce_15(val, _values, result) - result = new_if val[2], val[0], nil - - result -end - -def _reduce_16(val, _values, result) - result = new_if val[2], nil, val[0] - - result -end - -def _reduce_17(val, _values, result) - result = new_while val[0], val[2], true - - result -end - -def _reduce_18(val, _values, result) - result = new_until val[0], val[2], true - - result -end - -def _reduce_19(val, _values, result) - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) - - result -end - -def _reduce_20(val, _values, result) - if (in_def || in_single > 0) then - yyerror "BEGIN in method" - end - self.env.extend - - result -end - -def _reduce_21(val, _values, result) - result = new_iter s(:preexe), nil, val[3] - - result -end - -def _reduce_22(val, _values, result) - if (in_def || in_single > 0) then - yyerror "END in method; use at_exit" - end - result = new_iter s(:postexe), 0, val[2] - - result -end - -def _reduce_23(val, _values, result) - result = new_assign val[0], val[2] - - result -end - -def _reduce_24(val, _values, result) - result = new_masgn val[0], val[2], :wrap - - result -end - -def _reduce_25(val, _values, result) - result = new_op_asgn val - - result -end - -def _reduce_26(val, _values, result) - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - - result -end - -def _reduce_27(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - - result -end - -def _reduce_28(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - - result -end - -def _reduce_29(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - - result -end - -def _reduce_30(val, _values, result) - backref_assign_error val[0] - - result -end - -def _reduce_31(val, _values, result) - result = new_assign val[0], s(:svalue, val[2]) - - result -end - -def _reduce_32(val, _values, result) - result = new_masgn val[0], val[2], :wrap - - result -end - -def _reduce_33(val, _values, result) - result = new_masgn val[0], val[2] - - result -end - -# reduce 34 omitted - -# reduce 35 omitted - -def _reduce_36(val, _values, result) - result = logical_op :and, val[0], val[2] - - result -end - -def _reduce_37(val, _values, result) - result = logical_op :or, val[0], val[2] - - result -end - -def _reduce_38(val, _values, result) - result = s(:not, val[1]) - - result -end - -def _reduce_39(val, _values, result) - result = s(:not, val[1]) - - result -end - -# reduce 40 omitted - -def _reduce_41(val, _values, result) - result = value_expr(val[0]) - - result -end - -# reduce 42 omitted - -# reduce 43 omitted - -def _reduce_44(val, _values, result) - line = val[0].last - result = s(:return, ret_args(val[1])).line(line) - - result -end - -def _reduce_45(val, _values, result) - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) - - result -end - -def _reduce_46(val, _values, result) - line = val[0].last - result = s(:next, ret_args(val[1])).line(line) - - result -end - -# reduce 47 omitted - -def _reduce_48(val, _values, result) - result = new_call val[0], val[2], val[3] - - result -end - -def _reduce_49(val, _values, result) - result = new_call val[0], val[2], val[3] - - result -end - -def _reduce_50(val, _values, result) - self.env.extend(:dynamic) - result = self.lexer.lineno - - result -end - -def _reduce_51(val, _values, result) - result = nil # self.env.dynamic.keys - - result -end - -def _reduce_52(val, _values, result) - result = new_iter nil, val[2], val[4] - self.env.unextend - - result -end - -def _reduce_53(val, _values, result) - result = new_call nil, val[0].to_sym, val[1] - - result -end - -def _reduce_54(val, _values, result) - result = new_call nil, val[0].to_sym, val[1] - - if val[2] then - block_dup_check result, val[2] - - result, operation = val[2], result - result.insert 1, operation - end - - result -end - -def _reduce_55(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_56(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - raise "no2" - - if val[4] then - block_dup_check result, val[4] - - val[2] << result - result = val[2] - end - - result -end - -def _reduce_57(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_58(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - raise "no3" - - if val[4] then - block_dup_check result, val[4] - - val[2] << result - result = val[2] - end - - result -end - -def _reduce_59(val, _values, result) - result = new_super val[1] - - result -end - -def _reduce_60(val, _values, result) - result = new_yield val[1] - - result -end - -# reduce 61 omitted - -def _reduce_62(val, _values, result) - result = val[1] - - result -end - -# reduce 63 omitted - -def _reduce_64(val, _values, result) - result = s(:masgn, s(:array, val[1])) - - result -end - -def _reduce_65(val, _values, result) - result = s(:masgn, val[0]) - - result -end - -def _reduce_66(val, _values, result) - result = s(:masgn, val[0] << val[1].compact) - - result -end - -def _reduce_67(val, _values, result) - result = s(:masgn, val[0] << s(:splat, val[2])) - - result -end - -def _reduce_68(val, _values, result) - result = s(:masgn, val[0] << s(:splat)) - - result -end - -def _reduce_69(val, _values, result) - result = s(:masgn, s(:array, s(:splat, val[1]))) - - result -end - -def _reduce_70(val, _values, result) - result = s(:masgn, s(:array, s(:splat))) - - result -end - -# reduce 71 omitted - -def _reduce_72(val, _values, result) - result = val[1] - - result -end - -def _reduce_73(val, _values, result) - result = s(:array, val[0]) - - result -end - -def _reduce_74(val, _values, result) - result = val[0] << val[1].compact - - result -end - -def _reduce_75(val, _values, result) - result = assignable val[0] - - result -end - -def _reduce_76(val, _values, result) - result = aryset val[0], val[2] - - result -end - -def _reduce_77(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_78(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_79(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_80(val, _values, result) - if (in_def || in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) - - result -end - -def _reduce_81(val, _values, result) - if (in_def || in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, nil, s(:colon3, val[1].to_sym)) - - result -end - -def _reduce_82(val, _values, result) - backref_assign_error val[0] - - result -end - -def _reduce_83(val, _values, result) - result = assignable val[0] - - result -end - -def _reduce_84(val, _values, result) - result = aryset val[0], val[2] - - result -end - -def _reduce_85(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_86(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_87(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_88(val, _values, result) - if (in_def || in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon2, val[0], val[2].to_sym)) - - result -end - -def _reduce_89(val, _values, result) - if (in_def || in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon3, val[1].to_sym)) - - result -end - -def _reduce_90(val, _values, result) - backref_assign_error val[0] - - result -end - -def _reduce_91(val, _values, result) - yyerror "class/module name must be CONSTANT" - - result -end - -# reduce 92 omitted - -def _reduce_93(val, _values, result) - result = s(:colon3, val[1].to_sym) - - result -end - -def _reduce_94(val, _values, result) - result = val[0].to_sym - - result -end - -def _reduce_95(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - - result -end - -# reduce 96 omitted - -# reduce 97 omitted - -# reduce 98 omitted - -def _reduce_99(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - - result -end - -def _reduce_100(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - - result -end - -# reduce 101 omitted - -# reduce 102 omitted - -def _reduce_103(val, _values, result) - result = s(:lit, val[0].to_sym) - result -end - -# reduce 104 omitted - -def _reduce_105(val, _values, result) - result = new_undef val[0] - - result -end - -def _reduce_106(val, _values, result) - lexer.lex_state = :expr_fname - - result -end - -def _reduce_107(val, _values, result) - result = new_undef val[0], val[3] - - result -end - -# reduce 108 omitted - -# reduce 109 omitted - -# reduce 110 omitted - -# reduce 111 omitted - -# reduce 112 omitted - -# reduce 113 omitted - -# reduce 114 omitted - -# reduce 115 omitted - -# reduce 116 omitted - -# reduce 117 omitted - -# reduce 118 omitted - -# reduce 119 omitted - -# reduce 120 omitted - -# reduce 121 omitted - -# reduce 122 omitted - -# reduce 123 omitted - -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -def _reduce_174(val, _values, result) - result = new_assign val[0], val[2] - - result -end - -def _reduce_175(val, _values, result) - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - # result.line = val[0].line - - result -end - -def _reduce_176(val, _values, result) - result = new_op_asgn val - - result -end - -def _reduce_177(val, _values, result) - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - val[2].sexp_type = :arglist if val[2] - - result -end - -def _reduce_178(val, _values, result) - result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) - - result -end - -def _reduce_179(val, _values, result) - result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) - - result -end - -def _reduce_180(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - - result -end - -def _reduce_181(val, _values, result) - yyerror "constant re-assignment" - - result -end - -def _reduce_182(val, _values, result) - yyerror "constant re-assignment" - - result -end - -def _reduce_183(val, _values, result) - backref_assign_error val[0] - - result -end - -def _reduce_184(val, _values, result) - v1, v2 = val[0], val[2] - if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) - else - result = s(:dot2, v1, v2) - end - - result -end - -def _reduce_185(val, _values, result) - v1, v2 = val[0], val[2] - if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) - else - result = s(:dot3, v1, v2) - end - - result -end - -def _reduce_186(val, _values, result) - result = new_call val[0], :+, argl(val[2]) - - result -end - -def _reduce_187(val, _values, result) - result = new_call val[0], :-, argl(val[2]) - - result -end - -def _reduce_188(val, _values, result) - result = new_call val[0], :*, argl(val[2]) - - result -end - -def _reduce_189(val, _values, result) - result = new_call val[0], :"/", argl(val[2]) - - result -end - -def _reduce_190(val, _values, result) - result = new_call val[0], :"%", argl(val[2]) - - result -end - -def _reduce_191(val, _values, result) - result = new_call val[0], :**, argl(val[2]) - - result -end - -def _reduce_192(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - - result -end - -def _reduce_193(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - - result -end - -def _reduce_194(val, _values, result) - if val[1].sexp_type == :lit then - result = val[1] - else - result = new_call val[1], :"+@" - end - - result -end - -def _reduce_195(val, _values, result) - result = new_call val[1], :"-@" - - result -end - -def _reduce_196(val, _values, result) - result = new_call val[0], :"|", argl(val[2]) - - result -end - -def _reduce_197(val, _values, result) - result = new_call val[0], :"^", argl(val[2]) - - result -end - -def _reduce_198(val, _values, result) - result = new_call val[0], :"&", argl(val[2]) - - result -end - -def _reduce_199(val, _values, result) - result = new_call val[0], :"<=>", argl(val[2]) - - result -end - -def _reduce_200(val, _values, result) - result = new_call val[0], :">", argl(val[2]) - - result -end - -def _reduce_201(val, _values, result) - result = new_call val[0], :">=", argl(val[2]) - - result -end - -def _reduce_202(val, _values, result) - result = new_call val[0], :"<", argl(val[2]) - - result -end - -def _reduce_203(val, _values, result) - result = new_call val[0], :"<=", argl(val[2]) - - result -end - -def _reduce_204(val, _values, result) - result = new_call val[0], :"==", argl(val[2]) - - result -end - -def _reduce_205(val, _values, result) - result = new_call val[0], :"===", argl(val[2]) - - result -end - -def _reduce_206(val, _values, result) - val[0] = value_expr val[0] # TODO: port call_op and clean these - val[2] = value_expr val[2] - result = s(:not, new_call(val[0], :"==", argl(val[2]))) - - result -end - -def _reduce_207(val, _values, result) - result = new_match val[0], val[2] - - result -end - -def _reduce_208(val, _values, result) - result = s(:not, new_match(val[0], val[2])) - - result -end - -def _reduce_209(val, _values, result) - result = s(:not, val[1]) - - result -end - -def _reduce_210(val, _values, result) - val[2] = value_expr val[2] - result = new_call val[1], :"~" - - result -end - -def _reduce_211(val, _values, result) - val[0] = value_expr val[0] - val[2] = value_expr val[2] - result = new_call val[0], :"\<\<", argl(val[2]) - - result -end - -def _reduce_212(val, _values, result) - val[0] = value_expr val[0] - val[2] = value_expr val[2] - result = new_call val[0], :">>", argl(val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = logical_op :and, val[0], val[2] - - result -end - -def _reduce_214(val, _values, result) - result = logical_op :or, val[0], val[2] - - result -end - -def _reduce_215(val, _values, result) - result = s(:defined, val[2]) - - result -end - -def _reduce_216(val, _values, result) - result = s(:if, val[0], val[2], val[4]) - - result -end - -# reduce 217 omitted - -def _reduce_218(val, _values, result) - result = value_expr(val[0]) - - result -end - -# reduce 219 omitted - -def _reduce_220(val, _values, result) - warning 'parenthesize argument(s) for future version' - result = s(:array, val[0]) - - result -end - -def _reduce_221(val, _values, result) - result = val[0] - - result -end - -def _reduce_222(val, _values, result) - result = arg_concat val[0], val[3] - - result -end - -def _reduce_223(val, _values, result) - result = s(:array, s(:hash, *val[0].values)) - - result -end - -def _reduce_224(val, _values, result) - result = s(:array, s(:splat, val[1])) - - result -end - -def _reduce_225(val, _values, result) - result = val[1] - - result -end - -def _reduce_226(val, _values, result) - result = val[1] - - result -end - -def _reduce_227(val, _values, result) - warning "parenthesize argument(s) for future version" - result = s(:array, val[1]) - - result -end - -def _reduce_228(val, _values, result) - warning "parenthesize argument(s) for future version" - result = val[1].add val[3] - - result -end - -# reduce 229 omitted - -# reduce 230 omitted - -def _reduce_231(val, _values, result) - warning "parenthesize argument(s) for future version" - result = s(:array, val[0]) - - result -end - -def _reduce_232(val, _values, result) - result = arg_blk_pass val[0], val[1] - - result -end - -def _reduce_233(val, _values, result) - result = arg_concat val[0], val[3] - result = arg_blk_pass result, val[4] - - result -end - -def _reduce_234(val, _values, result) - result = s(:array, s(:hash, *val[0].values)) - result = arg_blk_pass result, val[1] - - result -end - -def _reduce_235(val, _values, result) - result = arg_concat s(:array, s(:hash, *val[0].values)), val[3] - result = arg_blk_pass result, val[4] - - result -end - -def _reduce_236(val, _values, result) - result = val[0] << s(:hash, *val[2].values) - result = arg_blk_pass result, val[3] - - result -end - -def _reduce_237(val, _values, result) - val[0] << s(:hash, *val[2].values) - result = arg_concat val[0], val[5] - result = arg_blk_pass result, val[6] - - result -end - -def _reduce_238(val, _values, result) - result = arg_blk_pass s(:splat, val[1]), val[2] - - result -end - -# reduce 239 omitted - -def _reduce_240(val, _values, result) - args = list_prepend val[0], val[2] - result = arg_blk_pass args, val[3] - - result -end - -def _reduce_241(val, _values, result) - result = arg_blk_pass val[0], val[2] - - result -end - -def _reduce_242(val, _values, result) - result = arg_concat s(:array, val[0]), val[3] - result = arg_blk_pass result, val[4] - - result -end - -def _reduce_243(val, _values, result) - result = arg_concat s(:array, val[0], s(:hash, *val[2].values)), val[5] - result = arg_blk_pass result, val[6] - - result -end - -def _reduce_244(val, _values, result) - result = s(:array, s(:hash, *val[0].values)) - result = arg_blk_pass result, val[1] - - result -end - -def _reduce_245(val, _values, result) - result = s(:array, s(:hash, *val[0].values), val[3]) - result = arg_blk_pass result, val[4] - - result -end - -def _reduce_246(val, _values, result) - result = s(:array, val[0], s(:hash, *val[2].values)) - result = arg_blk_pass result, val[3] - - result -end - -def _reduce_247(val, _values, result) - arg_value, _, args, _, assocs, opt_block = val - result = s(:array, arg_value).add_all(args) - result.add(s(:hash, *assocs.sexp_body)) - result = arg_blk_pass result, opt_block - - result -end - -def _reduce_248(val, _values, result) - result = arg_concat s(:array, val[0]).add(s(:hash, *val[2].sexp_body)), val[5] - result = arg_blk_pass result, val[6] - - result -end - -def _reduce_249(val, _values, result) - result = arg_concat s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values)), val[7] - result = arg_blk_pass result, val[8] - - result -end - -def _reduce_250(val, _values, result) - result = arg_blk_pass s(:splat, val[1]), val[2] - - result -end - -# reduce 251 omitted - -def _reduce_252(val, _values, result) - result = lexer.cmdarg.stack.dup - lexer.cmdarg.push true - - result -end - -def _reduce_253(val, _values, result) - lexer.cmdarg.stack.replace val[0] - result = val[1] - - result -end - -# reduce 254 omitted - -def _reduce_255(val, _values, result) - lexer.lex_state = :expr_endarg - - result -end - -def _reduce_256(val, _values, result) - warning "don't put space before argument parentheses" - result = nil - - result -end - -def _reduce_257(val, _values, result) - lexer.lex_state = :expr_endarg - - result -end - -def _reduce_258(val, _values, result) - warning "don't put space before argument parentheses" - result = val[1] - - result -end - -def _reduce_259(val, _values, result) - result = s(:block_pass, val[1]) - - result -end - -def _reduce_260(val, _values, result) - result = val[1] - - result -end - -# reduce 261 omitted - -def _reduce_262(val, _values, result) - result = s(:array, val[0]) - - result -end - -def _reduce_263(val, _values, result) - result = list_append val[0], val[2] - - result -end - -def _reduce_264(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_265(val, _values, result) - result = arg_concat val[0], val[3] - - result -end - -def _reduce_266(val, _values, result) - result = s(:splat, val[1]) - - result -end - -# reduce 267 omitted - -# reduce 268 omitted - -# reduce 269 omitted - -# reduce 270 omitted - -# reduce 271 omitted - -# reduce 272 omitted - -# reduce 273 omitted - -# reduce 274 omitted - -def _reduce_275(val, _values, result) - result = new_call nil, val[0].to_sym - - result -end - -def _reduce_276(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_277(val, _values, result) - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] - - result -end - -def _reduce_278(val, _values, result) - lexer.lex_state = :expr_endarg - - result -end - -def _reduce_279(val, _values, result) - warning "(...) interpreted as grouped expression" - result = val[1] - - result -end - -def _reduce_280(val, _values, result) - result = val[1] || s(:nil) - result.paren = true - - result -end - -def _reduce_281(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - - result -end - -def _reduce_282(val, _values, result) - result = s(:colon3, val[1].to_sym) - - result -end - -def _reduce_283(val, _values, result) - result = new_aref val - - result -end - -def _reduce_284(val, _values, result) - result = val[1] || s(:array) - - result -end - -def _reduce_285(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_286(val, _values, result) - result = new_hash val - - result -end - -def _reduce_287(val, _values, result) - result = s(:return) - - result -end - -def _reduce_288(val, _values, result) - result = new_yield val[2] - - result -end - -def _reduce_289(val, _values, result) - result = new_yield - - result -end - -def _reduce_290(val, _values, result) - result = new_yield - - result -end - -def _reduce_291(val, _values, result) - result = s(:defined, val[3]) - - result -end - -def _reduce_292(val, _values, result) - oper, iter = val[0], val[1] - call = new_call(nil, oper.to_sym) - iter.insert 1, call - result = iter - call.line = iter.line - - result -end - -# reduce 293 omitted - -def _reduce_294(val, _values, result) - call, iter = val[0], val[1] - block_dup_check call, iter - - iter.insert 1, call - result = iter - - result -end - -def _reduce_295(val, _values, result) - result = new_if val[1], val[3], val[4] - - result -end - -def _reduce_296(val, _values, result) - result = new_if val[1], val[4], val[3] - - result -end - -def _reduce_297(val, _values, result) - lexer.cond.push true - - result -end - -def _reduce_298(val, _values, result) - lexer.cond.pop - - result -end - -def _reduce_299(val, _values, result) - result = new_while val[5], val[2], true - - result -end - -def _reduce_300(val, _values, result) - lexer.cond.push true - - result -end - -def _reduce_301(val, _values, result) - lexer.cond.pop - - result -end - -def _reduce_302(val, _values, result) - result = new_until val[5], val[2], true - - result -end - -def _reduce_303(val, _values, result) - (_, line), expr, _, body, _ = val - result = new_case expr, body, line - - result -end - -def _reduce_304(val, _values, result) - (_, line), _, body, _ = val - result = new_case nil, body, line - - result -end - -def _reduce_305(val, _values, result) - (_, line), _, _, elsebody, _ = val - result = new_case nil, elsebody, line - - result -end - -def _reduce_306(val, _values, result) - lexer.cond.push true - - result -end - -def _reduce_307(val, _values, result) - lexer.cond.pop - - result -end - -def _reduce_308(val, _values, result) - result = new_for val[4], val[1], val[7] - - result -end - -def _reduce_309(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_310(val, _values, result) - self.comments.push self.lexer.comments - if (in_def || in_single > 0) then - yyerror "class definition in method body" - end - self.env.extend - - result -end - -def _reduce_311(val, _values, result) - result = new_class val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - - result -end - -def _reduce_312(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_313(val, _values, result) - result = in_def - self.in_def = false - - result -end - -def _reduce_314(val, _values, result) - result = in_single - self.in_single = 0 - self.env.extend - - result -end - -def _reduce_315(val, _values, result) - result = new_sclass val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - - result -end - -def _reduce_316(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_317(val, _values, result) - self.comments.push self.lexer.comments - yyerror "module definition in method body" if - in_def or in_single > 0 - - self.env.extend - - result -end - -def _reduce_318(val, _values, result) - result = new_module val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - - result -end - -def _reduce_319(val, _values, result) - result = self.in_def - - self.comments.push self.lexer.comments - self.in_def = true - self.env.extend - - result -end - -def _reduce_320(val, _values, result) - in_def = val[2] - - result = new_defn val - - self.env.unextend - self.in_def = in_def - self.lexer.comments # we don't care about comments in the body - - result -end - -def _reduce_321(val, _values, result) - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname - - result -end - -def _reduce_322(val, _values, result) - self.in_single += 1 - self.env.extend - lexer.lex_state = :expr_end # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] - - result -end - -def _reduce_323(val, _values, result) - line, cmdarg = val[5] - result = new_defs val - result[3].line line - - lexer.cmdarg.stack.replace cmdarg - self.env.unextend - self.in_single -= 1 - self.lexer.comments # we don't care about comments in the body - - result -end - -def _reduce_324(val, _values, result) - result = s(:break) - - result -end - -def _reduce_325(val, _values, result) - result = s(:next) - - result -end - -def _reduce_326(val, _values, result) - result = s(:redo) - - result -end - -def _reduce_327(val, _values, result) - result = s(:retry) - - result -end - -def _reduce_328(val, _values, result) - result = value_expr(val[0]) - - result -end - -# reduce 329 omitted - -# reduce 330 omitted - -# reduce 331 omitted - -# reduce 332 omitted - -# reduce 333 omitted - -# reduce 334 omitted - -# reduce 335 omitted - -# reduce 336 omitted - -def _reduce_337(val, _values, result) - result = s(:if, val[1], val[3], val[4]) - - result -end - -# reduce 338 omitted - -def _reduce_339(val, _values, result) - result = val[1] - - result -end - -# reduce 340 omitted - -def _reduce_341(val, _values, result) - val[0].delete_at 1 if val[0][1].nil? # HACK - - result -end - -def _reduce_342(val, _values, result) - result = s(:array, clean_mlhs(val[0])) - - result -end - -def _reduce_343(val, _values, result) - result = list_append val[0], clean_mlhs(val[2]) - - result -end - -def _reduce_344(val, _values, result) - result = block_var18 val[0], nil, nil - - result -end - -def _reduce_345(val, _values, result) - result = block_var18 val[0], nil, nil - - result -end - -def _reduce_346(val, _values, result) - result = block_var18 val[0], nil, val[3] - - result -end - -def _reduce_347(val, _values, result) - result = block_var18 val[0], val[3], val[6] - - result -end - -def _reduce_348(val, _values, result) - result = block_var18 val[0], s(:splat), val[5] - - result -end - -def _reduce_349(val, _values, result) - result = block_var18 val[0], val[3], nil - - result -end - -def _reduce_350(val, _values, result) - result = block_var18 val[0], s(:splat), nil - - result -end - -def _reduce_351(val, _values, result) - result = block_var18 nil, val[1], val[4] - - result -end - -def _reduce_352(val, _values, result) - result = block_var18 nil, s(:splat), val[3] - - result -end - -def _reduce_353(val, _values, result) - result = block_var18 nil, val[1], nil - - result -end - -def _reduce_354(val, _values, result) - result = block_var18 nil, s(:splat), nil - - result -end - -def _reduce_355(val, _values, result) - result = block_var18 nil, nil, val[1] - - result -end - -def _reduce_356(val, _values, result) - result = 0 - result -end - -def _reduce_357(val, _values, result) - result = s(:args) - self.lexer.command_start = true - - result -end - -def _reduce_358(val, _values, result) - result = s(:args) - self.lexer.command_start = true - - result -end - -def _reduce_359(val, _values, result) - result = val[1] - self.lexer.command_start = true - - result -end - -def _reduce_360(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - - result -end - -def _reduce_361(val, _values, result) - result = nil # self.env.dynamic.keys - - result -end - -def _reduce_362(val, _values, result) - vars = val[2] - body = val[4] - result = new_iter nil, vars, body - result.line = val[1] - - self.env.unextend - - result -end - -def _reduce_363(val, _values, result) - block_dup_check val[0], val[1] - - result = val[1] - result.insert 1, val[0] - - result -end - -def _reduce_364(val, _values, result) - result = new_call val[0], val[2], val[3] - - result -end - -def _reduce_365(val, _values, result) - result = new_call val[0], val[2], val[3] - - result -end - -def _reduce_366(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_367(val, _values, result) - result = new_call nil, val[0].to_sym, val[2] - - result -end - -def _reduce_368(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_369(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_370(val, _values, result) - result = new_call val[0], val[2].to_sym - - result -end - -def _reduce_371(val, _values, result) - result = new_super val[1] - - result -end - -def _reduce_372(val, _values, result) - result = s(:zsuper) - - result -end - -def _reduce_373(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - - result -end - -def _reduce_374(val, _values, result) - result = nil # self.env.dynamic.keys - - result -end - -def _reduce_375(val, _values, result) - # REFACTOR - args = val[2] - body = val[4] - result = new_iter nil, args, body - self.env.unextend - result.line = val[1] - - result -end - -def _reduce_376(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - - result -end - -def _reduce_377(val, _values, result) - result = nil # self.env.dynamic.keys - - result -end - -def _reduce_378(val, _values, result) - args = val[2] - body = val[4] - result = new_iter nil, args, body - self.env.unextend - result.line = val[1] - - result -end - -def _reduce_379(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_380(val, _values, result) - result = new_when(val[2], val[4]) - result.line = val[1] - result << val[5] if val[5] - - result -end - -# reduce 381 omitted - -def _reduce_382(val, _values, result) - result = list_append val[0], s(:splat, val[3]) - - result -end - -def _reduce_383(val, _values, result) - result = s(:array, s(:splat, val[1])) - - result -end - -# reduce 384 omitted - -# reduce 385 omitted - -def _reduce_386(val, _values, result) - (_, line), klasses, var, _, body, rest = val - - klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var - klasses.line line - - result = new_resbody(klasses, body) - result << rest if rest # UGH, rewritten above - - result -end - -def _reduce_387(val, _values, result) - result = nil - - result -end - -def _reduce_388(val, _values, result) - result = s(:array, val[0]) - - result -end - -# reduce 389 omitted - -# reduce 390 omitted - -def _reduce_391(val, _values, result) - result = val[1] - - result -end - -# reduce 392 omitted - -def _reduce_393(val, _values, result) - if (val[1] != nil) then - result = val[1] - else - result = s(:nil) - end - - result -end - -# reduce 394 omitted - -def _reduce_395(val, _values, result) - result = s(:lit, val[0]) - result -end - -def _reduce_396(val, _values, result) - result = s(:lit, val[0]) - result -end - -# reduce 397 omitted - -def _reduce_398(val, _values, result) - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] - - result -end - -# reduce 399 omitted - -def _reduce_400(val, _values, result) - result = literal_concat val[0], val[1] - - result -end - -def _reduce_401(val, _values, result) - result = val[1] - - result -end - -def _reduce_402(val, _values, result) - result = new_string val - - result -end - -def _reduce_403(val, _values, result) - result = new_xstring val[1] - - result -end - -def _reduce_404(val, _values, result) - result = new_regexp val - - result -end - -def _reduce_405(val, _values, result) - result = s(:array) - - result -end - -def _reduce_406(val, _values, result) - result = val[1] - - result -end - -def _reduce_407(val, _values, result) - result = new_word_list - - result -end - -def _reduce_408(val, _values, result) - result = val[0] << new_word_list_entry(val) - - result -end - -# reduce 409 omitted - -def _reduce_410(val, _values, result) - result = literal_concat val[0], val[1] - - result -end - -def _reduce_411(val, _values, result) - result = s(:array) - - result -end - -def _reduce_412(val, _values, result) - result = val[1] - - result -end - -def _reduce_413(val, _values, result) - result = new_qword_list - - result -end - -def _reduce_414(val, _values, result) - result = val[0] << new_qword_list_entry(val) - - result -end - -def _reduce_415(val, _values, result) - result = s(:str, "") - - result -end - -def _reduce_416(val, _values, result) - result = literal_concat(val[0], val[1]) - - result -end - -def _reduce_417(val, _values, result) - result = nil - - result -end - -def _reduce_418(val, _values, result) - result = literal_concat(val[0], val[1]) - - result -end - -def _reduce_419(val, _values, result) - result = new_string val - - result -end - -def _reduce_420(val, _values, result) - result = lexer.lex_strterm - - lexer.lex_strterm = nil - lexer.lex_state = :expr_beg - - result -end - -def _reduce_421(val, _values, result) - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) - - result -end - -def _reduce_422(val, _values, result) - result = [lexer.lex_strterm, - lexer.brace_nest, - lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store] - - lexer.lex_strterm = nil - lexer.brace_nest = 0 - lexer.string_nest = 0 - - lexer.lex_state = :expr_beg - - result -end - -def _reduce_423(val, _values, result) - _, memo, stmt, _ = val - - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg = memo - - lexer.lex_strterm = lex_strterm - lexer.brace_nest = brace_nest - lexer.string_nest = string_nest - - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg - - case stmt - when Sexp then - case stmt.sexp_type - when :str, :dstr, :evstr then - result = stmt - else - result = s(:evstr, stmt) - end - when nil then - result = s(:evstr) - else - raise "unknown string body: #{stmt.inspect}" - end - - result -end - -def _reduce_424(val, _values, result) - result = s(:gvar, val[0].to_sym) - result -end - -def _reduce_425(val, _values, result) - result = s(:ivar, val[0].to_sym) - result -end - -def _reduce_426(val, _values, result) - result = s(:cvar, val[0].to_sym) - result -end - -# reduce 427 omitted - -def _reduce_428(val, _values, result) - lexer.lex_state = :expr_end - result = val[1].to_sym - - result -end - -def _reduce_429(val, _values, result) - result = val[0].to_sym - - result -end - -# reduce 430 omitted - -# reduce 431 omitted - -# reduce 432 omitted - -# reduce 433 omitted - -def _reduce_434(val, _values, result) - lexer.lex_state = :expr_end - result = val[1] - - yyerror "empty symbol literal" if - result.nil? or result.empty? - - case result.sexp_type - when :dstr then - result.sexp_type = :dsym - when :str then - result = s(:lit, result.last.to_sym) - else - result = s(:dsym, "", result) - end - - result -end - -# reduce 435 omitted - -# reduce 436 omitted - -def _reduce_437(val, _values, result) - result = -val[1] # TODO: pt_testcase - - result -end - -def _reduce_438(val, _values, result) - result = -val[1] # TODO: pt_testcase - - result -end - -# reduce 439 omitted - -# reduce 440 omitted - -# reduce 441 omitted - -# reduce 442 omitted - -# reduce 443 omitted - -def _reduce_444(val, _values, result) - result = s(:nil) - result -end - -def _reduce_445(val, _values, result) - result = s(:self) - result -end - -def _reduce_446(val, _values, result) - result = s(:true) - result -end - -def _reduce_447(val, _values, result) - result = s(:false) - result -end - -def _reduce_448(val, _values, result) - result = s(:str, self.file) - result -end - -def _reduce_449(val, _values, result) - result = s(:lit, lexer.lineno) - result -end - -def _reduce_450(val, _values, result) - var = val[0] - result = Sexp === var ? var : self.gettable(var) - - result -end - -def _reduce_451(val, _values, result) - result = assignable val[0] - - result -end - -def _reduce_452(val, _values, result) - result = s(:nth_ref, val[0]) - result -end - -def _reduce_453(val, _values, result) - result = s(:back_ref, val[0]) - result -end - -def _reduce_454(val, _values, result) - result = nil - - result -end - -def _reduce_455(val, _values, result) - lexer.lex_state = :expr_beg - - result -end - -def _reduce_456(val, _values, result) - result = val[2] - - result -end - -def _reduce_457(val, _values, result) - yyerrok - result = nil - - result -end - -def _reduce_458(val, _values, result) - result = val[1] - lexer.lex_state = :expr_beg - self.lexer.command_start = true - - result -end - -def _reduce_459(val, _values, result) - result = val[0] - - result -end - -def _reduce_460(val, _values, result) - result = args val - - result -end - -def _reduce_461(val, _values, result) - result = args val - - result -end - -def _reduce_462(val, _values, result) - result = args val - - result -end - -def _reduce_463(val, _values, result) - result = args val - - result -end - -def _reduce_464(val, _values, result) - result = args val - - result -end - -def _reduce_465(val, _values, result) - result = args val - - result -end - -def _reduce_466(val, _values, result) - result = args val - - result -end - -def _reduce_467(val, _values, result) - result = args val - - result -end - -def _reduce_468(val, _values, result) - result = args val - - result -end - -def _reduce_469(val, _values, result) - yyerror "formal argument cannot be a constant" - - result -end - -def _reduce_470(val, _values, result) - yyerror "formal argument cannot be an instance variable" - - result -end - -def _reduce_471(val, _values, result) - yyerror "formal argument cannot be a global variable" - - result -end - -def _reduce_472(val, _values, result) - yyerror "formal argument cannot be a class variable" - - result -end - -def _reduce_473(val, _values, result) - identifier = val[0].to_sym - self.env[identifier] = :lvar - - result = val[0] - - result -end - -def _reduce_474(val, _values, result) - result = s(:args) - result << val[0].to_sym - - result -end - -def _reduce_475(val, _values, result) - val[0] << val[2].to_sym - result = val[0] - - result -end - -def _reduce_476(val, _values, result) - result = assignable val[0], val[2] - # TODO: detect duplicate names - - result -end - -def _reduce_477(val, _values, result) - result = s(:block, val[0]) - - result -end - -def _reduce_478(val, _values, result) - result = block_append val[0], val[2] - - result -end - -# reduce 479 omitted - -# reduce 480 omitted - -def _reduce_481(val, _values, result) - # TODO: differs from parse.y - needs tests - name = val[1].to_sym - assignable name - result = :"*#{name}" - - result -end - -def _reduce_482(val, _values, result) - name = :"*" - self.env[name] = :lvar - result = name - - result -end - -# reduce 483 omitted - -# reduce 484 omitted - -def _reduce_485(val, _values, result) - identifier = val[1].to_sym - - self.env[identifier] = :lvar - result = s(:block_arg, identifier.to_sym) - - result -end - -def _reduce_486(val, _values, result) - result = val[1] - - result -end - -def _reduce_487(val, _values, result) - result = nil - - result -end - -# reduce 488 omitted - -def _reduce_489(val, _values, result) - lexer.lex_state = :expr_beg - - result -end - -def _reduce_490(val, _values, result) - result = val[2] - yyerror "Can't define single method for literals." if - result.sexp_type == :lit - - result -end - -def _reduce_491(val, _values, result) - result = s(:array) - - result -end - -def _reduce_492(val, _values, result) - result = val[0] - - result -end - -def _reduce_493(val, _values, result) - size = val[0].size - if (size % 2 != 1) then # != 1 because of leading :array - yyerror "Odd number (#{size}) list for Hash. #{val[0].inspect}" - end - result = val[0] - - result -end - -# reduce 494 omitted - -def _reduce_495(val, _values, result) - list = val[0].dup - more = val[2].sexp_body - list.push(*more) unless more.empty? - result = list - - result -end - -def _reduce_496(val, _values, result) - result = s(:array, val[0], val[2]) - - result -end - -# reduce 497 omitted - -# reduce 498 omitted - -# reduce 499 omitted - -# reduce 500 omitted - -# reduce 501 omitted - -# reduce 502 omitted - -# reduce 503 omitted - -# reduce 504 omitted - -# reduce 505 omitted - -# reduce 506 omitted - -# reduce 507 omitted - -# reduce 508 omitted - -# reduce 509 omitted - -# reduce 510 omitted - -# reduce 511 omitted - -# reduce 512 omitted - -# reduce 513 omitted - -# reduce 514 omitted - -# reduce 515 omitted - -def _reduce_516(val, _values, result) - yyerrok - result -end - -# reduce 517 omitted - -# reduce 518 omitted - -def _reduce_519(val, _values, result) - yyerrok - result -end - -def _reduce_520(val, _values, result) - result = nil - result -end - -def _reduce_none(val, _values, result) - val[0] -end - -end # class Ruby18Parser diff -Nru ruby-ruby-parser-3.11.0/lib/ruby18_parser.y ruby-ruby-parser-3.15.1/lib/ruby18_parser.y --- ruby-ruby-parser-3.11.0/lib/ruby18_parser.y 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby18_parser.y 1970-01-01 00:00:00.000000000 +0000 @@ -1,1908 +0,0 @@ -# -*- racc -*- - -class Ruby18Parser - -token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS - kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT - kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kRETURN kYIELD kSUPER - kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD - kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ - k__FILE__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tNTH_REF - tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS - tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP - tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT - tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG - tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 - tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET - tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG - tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING - tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAST_TOKEN - -prechigh - right tBANG tTILDE tUPLUS - right tPOW - right tUMINUS_NUM tUMINUS - left tSTAR2 tDIVIDE tPERCENT - left tPLUS tMINUS - left tLSHFT tRSHFT - left tAMPER2 - left tPIPE tCARET - left tGT tGEQ tLT tLEQ - nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH - left tANDOP - left tOROP - nonassoc tDOT2 tDOT3 - right tEH tCOLON - left kRESCUE_MOD - right tEQL tOP_ASGN - nonassoc kDEFINED - right kNOT - left kOR kAND - nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD - nonassoc tLBRACE_ARG - nonassoc tLOWEST -preclow - -rule - - program: { - self.lexer.lex_state = :expr_beg - } - compstmt - { - result = val[1] - } - - bodystmt: compstmt opt_rescue opt_else opt_ensure - { - result = new_body val - } - - compstmt: stmts opt_terms - { - result = new_compstmt val - } - - stmts: none - | stmt - | stmts terms stmt - { - result = block_append val[0], val[2] - } - | error stmt - { - result = val[1] - } - - stmt: kALIAS fitem - { - lexer.lex_state = :expr_fname - result = self.lexer.lineno - } - fitem - { - result = s(:alias, val[1], val[3]).line(val[2]) - } - | kALIAS tGVAR tGVAR - { - result = s(:valias, val[1].to_sym, val[2].to_sym) - } - | kALIAS tGVAR tBACK_REF - { - result = s(:valias, val[1].to_sym, :"$#{val[2]}") - } - | kALIAS tGVAR tNTH_REF - { - yyerror "can't make alias for the number variables" - } - | kUNDEF undef_list - { - result = val[1] - } - | stmt kIF_MOD expr_value - { - result = new_if val[2], val[0], nil - } - | stmt kUNLESS_MOD expr_value - { - result = new_if val[2], nil, val[0] - } - | stmt kWHILE_MOD expr_value - { - result = new_while val[0], val[2], true - } - | stmt kUNTIL_MOD expr_value - { - result = new_until val[0], val[2], true - } - | stmt kRESCUE_MOD stmt - { - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) - } - | klBEGIN - { - if (in_def || in_single > 0) then - yyerror "BEGIN in method" - end - self.env.extend - } - tLCURLY compstmt tRCURLY - { - result = new_iter s(:preexe), nil, val[3] - } - | klEND tLCURLY compstmt tRCURLY - { - if (in_def || in_single > 0) then - yyerror "END in method; use at_exit" - end - result = new_iter s(:postexe), 0, val[2] - } - | lhs tEQL command_call - { - result = new_assign val[0], val[2] - } - | mlhs tEQL command_call - { - result = new_masgn val[0], val[2], :wrap - } - | var_lhs tOP_ASGN command_call - { - result = new_op_asgn val - } - | primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN command_call - { - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - } - | primary_value tDOT tIDENTIFIER tOP_ASGN command_call - { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - } - | primary_value tDOT tCONSTANT tOP_ASGN command_call - { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call - { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - } - | backref tOP_ASGN command_call - { - backref_assign_error val[0] - } - | lhs tEQL mrhs - { - result = new_assign val[0], s(:svalue, val[2]) - } - | mlhs tEQL arg_value - { - result = new_masgn val[0], val[2], :wrap - } - | mlhs tEQL mrhs - { - result = new_masgn val[0], val[2] - } - | expr - - expr: command_call - | expr kAND expr - { - result = logical_op :and, val[0], val[2] - } - | expr kOR expr - { - result = logical_op :or, val[0], val[2] - } - | kNOT expr - { - result = s(:not, val[1]) - } - | tBANG command_call - { - result = s(:not, val[1]) - } - | arg - - expr_value: expr - { - result = value_expr(val[0]) - } - - command_call: command - | block_command - | kRETURN call_args - { - line = val[0].last - result = s(:return, ret_args(val[1])).line(line) - } - | kBREAK call_args - { - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) - } - | kNEXT call_args - { - line = val[0].last - result = s(:next, ret_args(val[1])).line(line) - } - - block_command: block_call - | block_call tDOT operation2 command_args - { - result = new_call val[0], val[2], val[3] - } - | block_call tCOLON2 operation2 command_args - { - result = new_call val[0], val[2], val[3] - } - - cmd_brace_block: tLBRACE_ARG - { - self.env.extend(:dynamic) - result = self.lexer.lineno - } - opt_block_var - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - result = new_iter nil, val[2], val[4] - self.env.unextend - } - - command: operation command_args =tLOWEST - { - result = new_call nil, val[0].to_sym, val[1] - } - | operation command_args cmd_brace_block - { - result = new_call nil, val[0].to_sym, val[1] - - if val[2] then - block_dup_check result, val[2] - - result, operation = val[2], result - result.insert 1, operation - end - } - | primary_value tDOT operation2 command_args =tLOWEST - { - result = new_call val[0], val[2].to_sym, val[3] - } - | primary_value tDOT operation2 command_args cmd_brace_block - { - result = new_call val[0], val[2].to_sym, val[3] - raise "no2" - - if val[4] then - block_dup_check result, val[4] - - val[2] << result - result = val[2] - end - } - | primary_value tCOLON2 operation2 command_args =tLOWEST - { - result = new_call val[0], val[2].to_sym, val[3] - } - | primary_value tCOLON2 operation2 command_args cmd_brace_block - { - result = new_call val[0], val[2].to_sym, val[3] - raise "no3" - - if val[4] then - block_dup_check result, val[4] - - val[2] << result - result = val[2] - end - } - | kSUPER command_args - { - result = new_super val[1] - } - | kYIELD command_args - { - result = new_yield val[1] - } - - mlhs: mlhs_basic - | tLPAREN mlhs_entry tRPAREN - { - result = val[1] - } - - mlhs_entry: mlhs_basic - | tLPAREN mlhs_entry tRPAREN - { - result = s(:masgn, s(:array, val[1])) - } - - mlhs_basic: mlhs_head - { - result = s(:masgn, val[0]) - } - | mlhs_head mlhs_item - { - result = s(:masgn, val[0] << val[1].compact) - } - | mlhs_head tSTAR mlhs_node - { - result = s(:masgn, val[0] << s(:splat, val[2])) - } - | mlhs_head tSTAR - { - result = s(:masgn, val[0] << s(:splat)) - } - | tSTAR mlhs_node - { - result = s(:masgn, s(:array, s(:splat, val[1]))) - } - | tSTAR - { - result = s(:masgn, s(:array, s(:splat))) - } - - mlhs_item: mlhs_node - | tLPAREN mlhs_entry tRPAREN - { - result = val[1] - } - - mlhs_head: mlhs_item tCOMMA - { - result = s(:array, val[0]) - } - | mlhs_head mlhs_item tCOMMA - { - result = val[0] << val[1].compact - } - - mlhs_node: variable - { - result = assignable val[0] - } - | primary_value tLBRACK2 aref_args tRBRACK - { - result = aryset val[0], val[2] - } - | primary_value tDOT tIDENTIFIER - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tCOLON2 tIDENTIFIER - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tDOT tCONSTANT - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tCOLON2 tCONSTANT - { - if (in_def || in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) - } - | tCOLON3 tCONSTANT - { - if (in_def || in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, nil, s(:colon3, val[1].to_sym)) - } - | backref - { - backref_assign_error val[0] - } - - lhs: variable - { - result = assignable val[0] - } - | primary_value tLBRACK2 aref_args tRBRACK - { - result = aryset val[0], val[2] - } - | primary_value tDOT tIDENTIFIER - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tCOLON2 tIDENTIFIER - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tDOT tCONSTANT - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tCOLON2 tCONSTANT - { - if (in_def || in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon2, val[0], val[2].to_sym)) - } - | tCOLON3 tCONSTANT - { - if (in_def || in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon3, val[1].to_sym)) - } - | backref - { - backref_assign_error val[0] - } - - cname: tIDENTIFIER - { - yyerror "class/module name must be CONSTANT" - } - | tCONSTANT - - cpath: tCOLON3 cname - { - result = s(:colon3, val[1].to_sym) - } - | cname - { - result = val[0].to_sym - } - | primary_value tCOLON2 cname - { - result = s(:colon2, val[0], val[2].to_sym) - } - - fname: tIDENTIFIER | tCONSTANT | tFID - | op - { - lexer.lex_state = :expr_end - result = val[0] - } - - | reswords - { - lexer.lex_state = :expr_end - result = val[0] - } - - fsym: fname | symbol - - fitem: fsym { result = s(:lit, val[0].to_sym) } - | dsym - - undef_list: fitem - { - result = new_undef val[0] - } - | - undef_list tCOMMA - { - lexer.lex_state = :expr_fname - } - fitem - { - result = new_undef val[0], val[3] - } - - op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ - | tMATCH | tGT | tGEQ | tLT | tLEQ | tLSHFT - | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE - | tPERCENT | tPOW | tTILDE | tUPLUS | tUMINUS | tAREF - | tASET | tBACK_REF2 - - reswords: k__LINE__ | k__FILE__ | klBEGIN | klEND | kALIAS | kAND - | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED - | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE - | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT - | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF - | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD - | kIF | kUNLESS | kWHILE | kUNTIL - - arg: lhs tEQL arg - { - result = new_assign val[0], val[2] - } - | lhs tEQL arg kRESCUE_MOD arg - { - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - # result.line = val[0].line - } - | var_lhs tOP_ASGN arg - { - result = new_op_asgn val - } - | primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN arg - { - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - val[2].sexp_type = :arglist if val[2] - } - | primary_value tDOT tIDENTIFIER tOP_ASGN arg - { - result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) - } - | primary_value tDOT tCONSTANT tOP_ASGN arg - { - result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) - } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg - { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - } - | primary_value tCOLON2 tCONSTANT tOP_ASGN arg - { - yyerror "constant re-assignment" - } - | tCOLON3 tCONSTANT tOP_ASGN arg - { - yyerror "constant re-assignment" - } - | backref tOP_ASGN arg - { - backref_assign_error val[0] - } - | arg tDOT2 arg - { - v1, v2 = val[0], val[2] - if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) - else - result = s(:dot2, v1, v2) - end - } - | arg tDOT3 arg - { - v1, v2 = val[0], val[2] - if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) - else - result = s(:dot3, v1, v2) - end - } - | arg tPLUS arg - { - result = new_call val[0], :+, argl(val[2]) - } - | arg tMINUS arg - { - result = new_call val[0], :-, argl(val[2]) - } - | arg tSTAR2 arg - { - result = new_call val[0], :*, argl(val[2]) - } - | arg tDIVIDE arg - { - result = new_call val[0], :"/", argl(val[2]) - } - | arg tPERCENT arg - { - result = new_call val[0], :"%", argl(val[2]) - } - | arg tPOW arg - { - result = new_call val[0], :**, argl(val[2]) - } - | tUMINUS_NUM tINTEGER tPOW arg - { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - } - | tUMINUS_NUM tFLOAT tPOW arg - { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - } - | tUPLUS arg - { - if val[1].sexp_type == :lit then - result = val[1] - else - result = new_call val[1], :"+@" - end - } - | tUMINUS arg - { - result = new_call val[1], :"-@" - } - | arg tPIPE arg - { - result = new_call val[0], :"|", argl(val[2]) - } - | arg tCARET arg - { - result = new_call val[0], :"^", argl(val[2]) - } - | arg tAMPER2 arg - { - result = new_call val[0], :"&", argl(val[2]) - } - | arg tCMP arg - { - result = new_call val[0], :"<=>", argl(val[2]) - } - | arg tGT arg - { - result = new_call val[0], :">", argl(val[2]) - } - | arg tGEQ arg - { - result = new_call val[0], :">=", argl(val[2]) - } - | arg tLT arg - { - result = new_call val[0], :"<", argl(val[2]) - } - | arg tLEQ arg - { - result = new_call val[0], :"<=", argl(val[2]) - } - | arg tEQ arg - { - result = new_call val[0], :"==", argl(val[2]) - } - | arg tEQQ arg - { - result = new_call val[0], :"===", argl(val[2]) - } - | arg tNEQ arg - { - val[0] = value_expr val[0] # TODO: port call_op and clean these - val[2] = value_expr val[2] - result = s(:not, new_call(val[0], :"==", argl(val[2]))) - } - | arg tMATCH arg - { - result = new_match val[0], val[2] - } - | arg tNMATCH arg - { - result = s(:not, new_match(val[0], val[2])) - } - | tBANG arg - { - result = s(:not, val[1]) - } - | tTILDE arg - { - val[2] = value_expr val[2] - result = new_call val[1], :"~" - } - | arg tLSHFT arg - { - val[0] = value_expr val[0] - val[2] = value_expr val[2] - result = new_call val[0], :"\<\<", argl(val[2]) - } - | arg tRSHFT arg - { - val[0] = value_expr val[0] - val[2] = value_expr val[2] - result = new_call val[0], :">>", argl(val[2]) - } - | arg tANDOP arg - { - result = logical_op :and, val[0], val[2] - } - | arg tOROP arg - { - result = logical_op :or, val[0], val[2] - } - | kDEFINED opt_nl arg - { - result = s(:defined, val[2]) - } - | arg tEH arg tCOLON arg - { - result = s(:if, val[0], val[2], val[4]) - } - | primary - - arg_value: arg - { - result = value_expr(val[0]) - } - - aref_args: none - | command opt_nl - { - warning 'parenthesize argument(s) for future version' - result = s(:array, val[0]) - } - | args trailer - { - result = val[0] - } - | args tCOMMA tSTAR arg opt_nl - { - result = arg_concat val[0], val[3] - } - | assocs trailer - { - result = s(:array, s(:hash, *val[0].values)) - } - | tSTAR arg opt_nl - { - result = s(:array, s(:splat, val[1])) - } - - paren_args: tLPAREN2 none tRPAREN - { - result = val[1] - } - | tLPAREN2 call_args opt_nl tRPAREN - { - result = val[1] - } - | tLPAREN2 block_call opt_nl tRPAREN - { - warning "parenthesize argument(s) for future version" - result = s(:array, val[1]) - } - | tLPAREN2 args tCOMMA block_call opt_nl tRPAREN - { - warning "parenthesize argument(s) for future version" - result = val[1].add val[3] - } - - opt_paren_args: none - | paren_args - - call_args: command - { - warning "parenthesize argument(s) for future version" - result = s(:array, val[0]) - } - | args opt_block_arg - { - result = arg_blk_pass val[0], val[1] - } - | args tCOMMA tSTAR arg_value opt_block_arg - { - result = arg_concat val[0], val[3] - result = arg_blk_pass result, val[4] - } - | assocs opt_block_arg - { - result = s(:array, s(:hash, *val[0].values)) - result = arg_blk_pass result, val[1] - } - | assocs tCOMMA tSTAR arg_value opt_block_arg - { - result = arg_concat s(:array, s(:hash, *val[0].values)), val[3] - result = arg_blk_pass result, val[4] - } - | args tCOMMA assocs opt_block_arg - { - result = val[0] << s(:hash, *val[2].values) - result = arg_blk_pass result, val[3] - } - | args tCOMMA assocs tCOMMA tSTAR arg opt_block_arg - { - val[0] << s(:hash, *val[2].values) - result = arg_concat val[0], val[5] - result = arg_blk_pass result, val[6] - } - | tSTAR arg_value opt_block_arg - { - result = arg_blk_pass s(:splat, val[1]), val[2] - } - | block_arg - - call_args2: arg_value tCOMMA args opt_block_arg - { - args = list_prepend val[0], val[2] - result = arg_blk_pass args, val[3] - } - | arg_value tCOMMA block_arg - { - result = arg_blk_pass val[0], val[2] - } - | arg_value tCOMMA tSTAR arg_value opt_block_arg - { - result = arg_concat s(:array, val[0]), val[3] - result = arg_blk_pass result, val[4] - } - | arg_value tCOMMA args tCOMMA tSTAR arg_value opt_block_arg - { - result = arg_concat s(:array, val[0], s(:hash, *val[2].values)), val[5] - result = arg_blk_pass result, val[6] - } - | assocs opt_block_arg - { - result = s(:array, s(:hash, *val[0].values)) - result = arg_blk_pass result, val[1] - } - | assocs tCOMMA tSTAR arg_value opt_block_arg - { - result = s(:array, s(:hash, *val[0].values), val[3]) - result = arg_blk_pass result, val[4] - } - | arg_value tCOMMA assocs opt_block_arg - { - result = s(:array, val[0], s(:hash, *val[2].values)) - result = arg_blk_pass result, val[3] - } - | arg_value tCOMMA args tCOMMA assocs opt_block_arg - { - arg_value, _, args, _, assocs, opt_block = val - result = s(:array, arg_value).add_all(args) - result.add(s(:hash, *assocs.sexp_body)) - result = arg_blk_pass result, opt_block - } - | arg_value tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg - { - result = arg_concat s(:array, val[0]).add(s(:hash, *val[2].sexp_body)), val[5] - result = arg_blk_pass result, val[6] - } - | arg_value tCOMMA args tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg - { - result = arg_concat s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values)), val[7] - result = arg_blk_pass result, val[8] - } - | tSTAR arg_value opt_block_arg - { - result = arg_blk_pass s(:splat, val[1]), val[2] - } - | block_arg - - command_args: { - result = lexer.cmdarg.stack.dup - lexer.cmdarg.push true - } - open_args - { - lexer.cmdarg.stack.replace val[0] - result = val[1] - } - - open_args: call_args - | tLPAREN_ARG - { - lexer.lex_state = :expr_endarg - } - tRPAREN - { - warning "don't put space before argument parentheses" - result = nil - } - | tLPAREN_ARG call_args2 - { - lexer.lex_state = :expr_endarg - } - tRPAREN - { - warning "don't put space before argument parentheses" - result = val[1] - } - - block_arg: tAMPER arg_value - { - result = s(:block_pass, val[1]) - } - - opt_block_arg: tCOMMA block_arg - { - result = val[1] - } - | none - - args: arg_value - { - result = s(:array, val[0]) - } - | args tCOMMA arg_value - { - result = list_append val[0], val[2] - } - - mrhs: args tCOMMA arg_value - { - result = val[0] << val[2] - } - | args tCOMMA tSTAR arg_value - { - result = arg_concat val[0], val[3] - } - | tSTAR arg_value - { - result = s(:splat, val[1]) - } - - primary: literal - | strings - | xstring - | regexp - | words - | qwords - | var_ref - | backref - | tFID - { - result = new_call nil, val[0].to_sym - } - | kBEGIN - { - result = self.lexer.lineno - } - bodystmt kEND - { - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] - } - | tLPAREN_ARG expr - { - lexer.lex_state = :expr_endarg - } - opt_nl tRPAREN - { - warning "(...) interpreted as grouped expression" - result = val[1] - } - | tLPAREN compstmt tRPAREN - { - result = val[1] || s(:nil) - result.paren = true - } - | primary_value tCOLON2 tCONSTANT - { - result = s(:colon2, val[0], val[2].to_sym) - } - | tCOLON3 tCONSTANT - { - result = s(:colon3, val[1].to_sym) - } - | primary_value tLBRACK2 aref_args tRBRACK - { - result = new_aref val - } - | tLBRACK aref_args tRBRACK - { - result = val[1] || s(:array) - } - | tLBRACE - { - result = self.lexer.lineno - } - assoc_list tRCURLY - { - result = new_hash val - } - | kRETURN - { - result = s(:return) - } - | kYIELD tLPAREN2 call_args tRPAREN - { - result = new_yield val[2] - } - | kYIELD tLPAREN2 tRPAREN - { - result = new_yield - } - | kYIELD - { - result = new_yield - } - | kDEFINED opt_nl tLPAREN2 expr tRPAREN - { - result = s(:defined, val[3]) - } - | operation brace_block - { - oper, iter = val[0], val[1] - call = new_call(nil, oper.to_sym) - iter.insert 1, call - result = iter - call.line = iter.line - } - | method_call - | method_call brace_block - { - call, iter = val[0], val[1] - block_dup_check call, iter - - iter.insert 1, call - result = iter - } - | kIF expr_value then compstmt if_tail kEND - { - result = new_if val[1], val[3], val[4] - } - | kUNLESS expr_value then compstmt opt_else kEND - { - result = new_if val[1], val[4], val[3] - } - | kWHILE - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND - { - result = new_while val[5], val[2], true - } - | kUNTIL - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND - { - result = new_until val[5], val[2], true - } - | kCASE expr_value opt_terms case_body kEND - { - (_, line), expr, _, body, _ = val - result = new_case expr, body, line - } - | kCASE opt_terms case_body kEND - { - (_, line), _, body, _ = val - result = new_case nil, body, line - } - | kCASE opt_terms kELSE compstmt kEND # TODO: need a test - { - (_, line), _, _, elsebody, _ = val - result = new_case nil, elsebody, line - } - | kFOR for_var kIN - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND - { - result = new_for val[4], val[1], val[7] - } - | kCLASS - { - result = self.lexer.lineno - } - cpath superclass - { - self.comments.push self.lexer.comments - if (in_def || in_single > 0) then - yyerror "class definition in method body" - end - self.env.extend - } - bodystmt kEND - { - result = new_class val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - } - | kCLASS tLSHFT - { - result = self.lexer.lineno - } - expr - { - result = in_def - self.in_def = false - } - term - { - result = in_single - self.in_single = 0 - self.env.extend - } - bodystmt kEND - { - result = new_sclass val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - } - | kMODULE - { - result = self.lexer.lineno - } - cpath - { - self.comments.push self.lexer.comments - yyerror "module definition in method body" if - in_def or in_single > 0 - - self.env.extend - } - bodystmt kEND - { - result = new_module val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - } - | kDEF fname - { - result = self.in_def - - self.comments.push self.lexer.comments - self.in_def = true - self.env.extend - } - f_arglist bodystmt kEND - { - in_def = val[2] - - result = new_defn val - - self.env.unextend - self.in_def = in_def - self.lexer.comments # we don't care about comments in the body - } - | kDEF singleton dot_or_colon - { - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname - } - fname - { - self.in_single += 1 - self.env.extend - lexer.lex_state = :expr_end # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] - } - f_arglist bodystmt kEND - { - line, cmdarg = val[5] - result = new_defs val - result[3].line line - - lexer.cmdarg.stack.replace cmdarg - self.env.unextend - self.in_single -= 1 - self.lexer.comments # we don't care about comments in the body - } - | kBREAK - { - result = s(:break) - } - | kNEXT - { - result = s(:next) - } - | kREDO - { - result = s(:redo) - } - | kRETRY - { - result = s(:retry) - } - - primary_value: primary - { - result = value_expr(val[0]) - } - - then: term - | tCOLON - | kTHEN - | term kTHEN - - do: term - | tCOLON - | kDO_COND - - if_tail: opt_else - | kELSIF expr_value then compstmt if_tail - { - result = s(:if, val[1], val[3], val[4]) - } - - opt_else: none - | kELSE compstmt - { - result = val[1] - } - - for_var: lhs - | mlhs - { - val[0].delete_at 1 if val[0][1].nil? # HACK - } - - block_par: mlhs_item - { - result = s(:array, clean_mlhs(val[0])) - } - | block_par tCOMMA mlhs_item - { - result = list_append val[0], clean_mlhs(val[2]) - } - - block_var: block_par - { - result = block_var18 val[0], nil, nil - } - | block_par tCOMMA - { - result = block_var18 val[0], nil, nil - } - | block_par tCOMMA tAMPER lhs - { - result = block_var18 val[0], nil, val[3] - } - | block_par tCOMMA tSTAR lhs tCOMMA tAMPER lhs - { - result = block_var18 val[0], val[3], val[6] - } - | block_par tCOMMA tSTAR tCOMMA tAMPER lhs - { - result = block_var18 val[0], s(:splat), val[5] - } - | block_par tCOMMA tSTAR lhs - { - result = block_var18 val[0], val[3], nil - } - | block_par tCOMMA tSTAR - { - result = block_var18 val[0], s(:splat), nil - } - | tSTAR lhs tCOMMA tAMPER lhs - { - result = block_var18 nil, val[1], val[4] - } - | tSTAR tCOMMA tAMPER lhs - { - result = block_var18 nil, s(:splat), val[3] - } - | tSTAR lhs - { - result = block_var18 nil, val[1], nil - } - | tSTAR - { - result = block_var18 nil, s(:splat), nil - } - | tAMPER lhs - { - result = block_var18 nil, nil, val[1] - } - ; - - opt_block_var: none { result = 0 } - | tPIPE tPIPE - { - result = s(:args) - self.lexer.command_start = true - } - | tOROP - { - result = s(:args) - self.lexer.command_start = true - } - | tPIPE block_var tPIPE - { - result = val[1] - self.lexer.command_start = true - } - - do_block: kDO_BLOCK - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_var - { - result = nil # self.env.dynamic.keys - } - compstmt kEND - { - vars = val[2] - body = val[4] - result = new_iter nil, vars, body - result.line = val[1] - - self.env.unextend - } - - block_call: command do_block - { - block_dup_check val[0], val[1] - - result = val[1] - result.insert 1, val[0] - } - | block_call tDOT operation2 opt_paren_args - { - result = new_call val[0], val[2], val[3] - } - | block_call tCOLON2 operation2 opt_paren_args - { - result = new_call val[0], val[2], val[3] - } - - method_call: operation - { - result = self.lexer.lineno - } - paren_args - { - result = new_call nil, val[0].to_sym, val[2] - } - | primary_value tDOT operation2 opt_paren_args - { - result = new_call val[0], val[2].to_sym, val[3] - } - | primary_value tCOLON2 operation2 paren_args - { - result = new_call val[0], val[2].to_sym, val[3] - } - | primary_value tCOLON2 operation3 - { - result = new_call val[0], val[2].to_sym - } - | kSUPER paren_args - { - result = new_super val[1] - } - | kSUPER - { - result = s(:zsuper) - } - - brace_block: tLCURLY - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_var - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - # REFACTOR - args = val[2] - body = val[4] - result = new_iter nil, args, body - self.env.unextend - result.line = val[1] - } - | kDO - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_var - { - result = nil # self.env.dynamic.keys - } - compstmt kEND - { - args = val[2] - body = val[4] - result = new_iter nil, args, body - self.env.unextend - result.line = val[1] - } - - case_body: kWHEN - { - result = self.lexer.lineno - } - when_args then compstmt cases - { - result = new_when(val[2], val[4]) - result.line = val[1] - result << val[5] if val[5] - } - - when_args: args - | args tCOMMA tSTAR arg_value - { - result = list_append val[0], s(:splat, val[3]) - } - | tSTAR arg_value - { - result = s(:array, s(:splat, val[1])) - } - - cases: opt_else | case_body - - opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue - { - (_, line), klasses, var, _, body, rest = val - - klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var - klasses.line line - - result = new_resbody(klasses, body) - result << rest if rest # UGH, rewritten above - } - | - { - result = nil - } - - exc_list: arg_value - { - result = s(:array, val[0]) - } - | mrhs - | none - - exc_var: tASSOC lhs - { - result = val[1] - } - | none - - opt_ensure: kENSURE compstmt - { - if (val[1] != nil) then - result = val[1] - else - result = s(:nil) - end - } - | none - - literal: numeric { result = s(:lit, val[0]) } - | symbol { result = s(:lit, val[0]) } - | dsym - - strings: string - { - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] - } - - string: string1 - | string string1 - { - result = literal_concat val[0], val[1] - } - - string1: tSTRING_BEG string_contents tSTRING_END - { - result = val[1] - } - | tSTRING - { - result = new_string val - } - - xstring: tXSTRING_BEG xstring_contents tSTRING_END - { - result = new_xstring val[1] - } - - regexp: tREGEXP_BEG xstring_contents tREGEXP_END - { - result = new_regexp val - } - - words: tWORDS_BEG tSPACE tSTRING_END - { - result = s(:array) - } - | tWORDS_BEG word_list tSTRING_END - { - result = val[1] - } - - word_list: none - { - result = new_word_list - } - | word_list word tSPACE - { - result = val[0] << new_word_list_entry(val) - } - - word: string_content - | word string_content - { - result = literal_concat val[0], val[1] - } - - qwords: tQWORDS_BEG tSPACE tSTRING_END - { - result = s(:array) - } - | tQWORDS_BEG qword_list tSTRING_END - { - result = val[1] - } - - qword_list: none - { - result = new_qword_list - } - | qword_list tSTRING_CONTENT tSPACE - { - result = val[0] << new_qword_list_entry(val) - } - - string_contents: none - { - result = s(:str, "") - } - | string_contents string_content - { - result = literal_concat(val[0], val[1]) - } - -xstring_contents: none - { - result = nil - } - | xstring_contents string_content - { - result = literal_concat(val[0], val[1]) - } - - string_content: tSTRING_CONTENT - { - result = new_string val - } - | tSTRING_DVAR - { - result = lexer.lex_strterm - - lexer.lex_strterm = nil - lexer.lex_state = :expr_beg - } - string_dvar - { - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) - } - | tSTRING_DBEG - { - result = [lexer.lex_strterm, - lexer.brace_nest, - lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store] - - lexer.lex_strterm = nil - lexer.brace_nest = 0 - lexer.string_nest = 0 - - lexer.lex_state = :expr_beg - } - compstmt tRCURLY - { - _, memo, stmt, _ = val - - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg = memo - - lexer.lex_strterm = lex_strterm - lexer.brace_nest = brace_nest - lexer.string_nest = string_nest - - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg - - case stmt - when Sexp then - case stmt.sexp_type - when :str, :dstr, :evstr then - result = stmt - else - result = s(:evstr, stmt) - end - when nil then - result = s(:evstr) - else - raise "unknown string body: #{stmt.inspect}" - end - } - - string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } - | tIVAR { result = s(:ivar, val[0].to_sym) } - | tCVAR { result = s(:cvar, val[0].to_sym) } - | backref - - symbol: tSYMBEG sym - { - lexer.lex_state = :expr_end - result = val[1].to_sym - } - | tSYMBOL - { - result = val[0].to_sym - } - - sym: fname | tIVAR | tGVAR | tCVAR - - dsym: tSYMBEG xstring_contents tSTRING_END - { - lexer.lex_state = :expr_end - result = val[1] - - yyerror "empty symbol literal" if - result.nil? or result.empty? - - case result.sexp_type - when :dstr then - result.sexp_type = :dsym - when :str then - result = s(:lit, result.last.to_sym) - else - result = s(:dsym, "", result) - end - } - - numeric: tINTEGER - | tFLOAT - | tUMINUS_NUM tINTEGER =tLOWEST - { - result = -val[1] # TODO: pt_testcase - } - | tUMINUS_NUM tFLOAT =tLOWEST - { - result = -val[1] # TODO: pt_testcase - } - - variable: tIDENTIFIER - | tIVAR - | tGVAR - | tCONSTANT - | tCVAR - | kNIL { result = s(:nil) } - | kSELF { result = s(:self) } - | kTRUE { result = s(:true) } - | kFALSE { result = s(:false) } - | k__FILE__ { result = s(:str, self.file) } - | k__LINE__ { result = s(:lit, lexer.lineno) } - - var_ref: variable - { - var = val[0] - result = Sexp === var ? var : self.gettable(var) - } - - var_lhs: variable - { - result = assignable val[0] - } - - backref: tNTH_REF { result = s(:nth_ref, val[0]) } - | tBACK_REF { result = s(:back_ref, val[0]) } - - superclass: term - { - result = nil - } - | tLT - { - lexer.lex_state = :expr_beg - } - expr_value term - { - result = val[2] - } - | error term - { - yyerrok - result = nil - } - - f_arglist: tLPAREN2 f_args opt_nl tRPAREN - { - result = val[1] - lexer.lex_state = :expr_beg - self.lexer.command_start = true - } - | f_args term - { - result = val[0] - } - - f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_optarg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_rest_arg opt_f_block_arg - { - result = args val - } - | f_arg opt_f_block_arg - { - result = args val - } - | f_optarg tCOMMA f_rest_arg opt_f_block_arg - { - result = args val - } - | f_optarg opt_f_block_arg - { - result = args val - } - | f_rest_arg opt_f_block_arg - { - result = args val - } - | f_block_arg - { - result = args val - } - | - { - result = args val - } - - f_norm_arg: tCONSTANT - { - yyerror "formal argument cannot be a constant" - } - | tIVAR - { - yyerror "formal argument cannot be an instance variable" - } - | tGVAR - { - yyerror "formal argument cannot be a global variable" - } - | tCVAR - { - yyerror "formal argument cannot be a class variable" - } - | tIDENTIFIER - { - identifier = val[0].to_sym - self.env[identifier] = :lvar - - result = val[0] - } - - f_arg: f_norm_arg - { - result = s(:args) - result << val[0].to_sym - } - | f_arg tCOMMA f_norm_arg - { - val[0] << val[2].to_sym - result = val[0] - } - - f_opt: tIDENTIFIER tEQL arg_value - { - result = assignable val[0], val[2] - # TODO: detect duplicate names - } - - f_optarg: f_opt - { - result = s(:block, val[0]) - } - | f_optarg tCOMMA f_opt - { - result = block_append val[0], val[2] - } - - restarg_mark: tSTAR2 | tSTAR - - f_rest_arg: restarg_mark tIDENTIFIER - { - # TODO: differs from parse.y - needs tests - name = val[1].to_sym - assignable name - result = :"*#{name}" - } - | restarg_mark - { - name = :"*" - self.env[name] = :lvar - result = name - } - - blkarg_mark: tAMPER2 | tAMPER - - f_block_arg: blkarg_mark tIDENTIFIER - { - identifier = val[1].to_sym - - self.env[identifier] = :lvar - result = s(:block_arg, identifier.to_sym) - } - - opt_f_block_arg: tCOMMA f_block_arg - { - result = val[1] - } - | - { - result = nil - } - - singleton: var_ref - | tLPAREN2 - { - lexer.lex_state = :expr_beg - } - expr opt_nl tRPAREN - { - result = val[2] - yyerror "Can't define single method for literals." if - result.sexp_type == :lit - } - - assoc_list: none # [!nil] - { - result = s(:array) - } - | assocs trailer # [!nil] - { - result = val[0] - } - | args trailer - { - size = val[0].size - if (size % 2 != 1) then # != 1 because of leading :array - yyerror "Odd number (#{size}) list for Hash. #{val[0].inspect}" - end - result = val[0] - } - - assocs: assoc - | assocs tCOMMA assoc - { - list = val[0].dup - more = val[2].sexp_body - list.push(*more) unless more.empty? - result = list - } - - assoc: arg_value tASSOC arg_value - { - result = s(:array, val[0], val[2]) - } - - operation: tIDENTIFIER | tCONSTANT | tFID - operation2: tIDENTIFIER | tCONSTANT | tFID | op - operation3: tIDENTIFIER | tFID | op - dot_or_colon: tDOT | tCOLON2 - opt_terms: | terms - opt_nl: | tNL - trailer: | tNL | tCOMMA - - term: tSEMI { yyerrok } - | tNL - - terms: term - | terms tSEMI { yyerrok } - - none: { result = nil } - -end - ----- inner - -require "ruby_lexer" -require "ruby_parser_extras" - -# :stopdoc: - -# Local Variables: ** -# racc-token-length-max:14 ** -# End: ** diff -Nru ruby-ruby-parser-3.11.0/lib/ruby19_parser.rb ruby-ruby-parser-3.15.1/lib/ruby19_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby19_parser.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby19_parser.rb 1970-01-01 00:00:00.000000000 +0000 @@ -1,6185 +0,0 @@ -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.4.14 -# from Racc grammer file "". -# - -require 'racc/parser.rb' -class Ruby19Parser < RubyParser::Parser - - -require "ruby_lexer" -require "ruby_parser_extras" - -# :stopdoc: - -# Local Variables: ** -# racc-token-length-max:14 ** -# End: ** -##### State transition tables begin ### - -clist = [ -'-561,281,69,70,71,12,57,-561,-561,-561,63,64,-561,-561,-561,67,-561', -'65,66,68,32,33,72,73,231,-561,-561,-561,-561,31,30,29,95,94,96,97,-561', -'-561,22,-561,-561,-561,-561,-561,11,47,551,13,99,98,100,89,56,91,90', -'92,717,93,101,102,-101,87,88,551,44,45,43,-561,-561,-561,-561,-561,-561', -'-561,-561,-561,-561,-561,-561,-561,-561,259,618,-561,-561,-561,42,751', -'-561,35,674,-561,58,59,-561,-561,60,-561,37,-561,592,-561,46,-561,-561', -'-561,-561,-561,-561,-561,23,-561,-561,-561,-100,85,79,81,82,83,84,-101', -'697,-106,80,86,-561,-561,-561,-561,-561,-561,551,62,-561,-103,259,-561', -'-561,-561,697,750,-104,-561,-561,-105,-561,-107,697,-102,777,79,557', -'-99,-492,-561,551,210,-104,80,107,-492,716,591,834,106,-561,-561,258', -'-561,-561,-561,-561,-561,-101,107,615,107,261,-101,106,107,106,-103', -'749,551,106,-102,-103,-104,207,208,604,211,207,208,673,-561,-561,-561', -'-561,-561,-561,-561,-561,-561,-561,-561,-561,-561,-561,-558,-101,-561', -'-561,-561,708,612,-490,-91,709,-561,107,258,-561,-490,-92,106,-97,-561', -'-495,-561,-102,-561,-561,-561,-561,-561,-561,-561,107,-561,-561,-561', -'603,106,107,-95,107,-557,-96,106,-98,106,-93,-484,-561,-561,-90,-94', -'-265,-561,-484,-484,-484,-103,-557,-484,-484,-484,107,-484,-104,882', -'211,106,629,-104,-99,-484,211,-484,-484,-484,211,629,-93,629,-94,207', -'208,-484,-484,-496,-484,-484,-484,-484,-484,107,-95,-102,-103,-496,106', -'599,-102,-103,259,688,628,535,534,533,-85,536,-263,434,833,628,-71,628', -'-484,-484,-484,-484,-484,-484,-484,-484,-484,-484,-484,-484,-484,-484', -'629,-484,-484,-484,-484,-100,-484,-484,-484,-91,-484,-561,579,-484,-484', -'-100,-484,-93,-484,506,-484,597,-484,-484,-484,-484,-484,-484,-484,-107', -'-484,-95,-484,579,628,590,688,-406,535,534,533,586,536,211,-415,-484', -'-484,-484,-484,-284,-484,921,-93,-484,-484,-93,-284,-284,-284,258,836', -'-93,-284,-284,-561,-284,-95,-106,838,-95,231,-561,-481,581,580,-95,-557', -'-561,386,-481,-561,841,727,388,387,-284,-284,842,-284,-284,-284,-284', -'-284,205,581,580,593,-415,-561,207,208,762,228,506,-415,-489,230,229', -'-555,579,107,848,-489,-415,798,106,-284,-284,-284,-284,-284,-284,-284', -'-284,-284,-284,-284,-284,-284,-284,-561,-415,-284,-284,-284,-98,611', -'-561,-554,562,-284,-107,-557,-284,579,-97,-561,584,-284,660,-284,-106', -'-284,-284,-284,-284,-284,-284,-284,579,-284,-484,-284,518,-561,579,517', -'561,-484,854,581,580,587,-555,-284,-284,-284,-484,-96,378,-284,-284', -'-284,-284,-105,-263,-284,-284,-284,735,-284,-481,-495,518,107,-555,520', -'-488,-481,106,-284,-284,-284,-554,-488,581,580,-481,207,208,-284,-284', -'-487,-284,-284,-284,-284,-284,606,-487,581,580,582,-277,858,-554,581', -'580,577,-486,-277,-92,518,107,-90,520,-486,-101,106,-277,-99,-284,-284', -'-284,-284,-284,-284,-284,-284,-284,-284,-284,-284,-284,-284,860,203', -'-284,-284,-284,-95,752,-284,204,861,-284,-104,252,-284,-284,211,-284', -'202,-284,253,-284,863,-284,-284,-284,-284,-284,-284,-284,866,-284,763', -'-284,535,534,533,688,536,535,534,533,518,536,868,520,-284,-284,-284', -'-284,-481,-284,605,-491,-284,-105,107,-481,-481,-481,-491,106,-481,-481', -'-481,688,-481,535,534,533,540,536,802,777,-481,684,-481,-481,-481,544', -'543,547,546,870,687,870,-481,-481,-332,-481,-481,-481,-481,-481,-93', -'-332,107,107,211,574,-102,106,106,540,-332,688,575,535,534,533,557,536', -'762,875,547,546,877,-481,-481,-481,-481,-481,-481,-481,-481,-481,-481', -'-481,-481,-481,-481,879,430,-481,-481,-481,521,-481,-481,431,231,-481', -'508,684,-481,-481,199,-481,432,-481,211,-481,874,-481,-481,-481,-481', -'-481,-481,-481,507,-481,538,-481,535,534,533,-493,536,110,111,112,113', -'114,-493,-494,-481,-481,-481,-481,-563,-481,-494,-493,-481,-481,503', -'-563,-563,-563,889,-494,-563,-563,-563,688,-563,535,534,533,540,536', -'207,208,890,-563,-563,-563,-563,544,543,547,546,207,208,211,-563,-563', -'497,-563,-563,-563,-563,-563,688,498,535,534,533,893,536,501,502,540', -'496,688,-266,535,534,533,261,536,802,777,547,546,211,-563,-563,-563', -'-563,-563,-563,-563,-563,-563,-563,-563,-563,-563,-563,264,684,-563', -'-563,-563,3,231,-563,307,308,-563,499,684,-563,-563,492,-563,900,-563', -'901,-563,687,-563,-563,-563,-563,-563,-563,-563,491,-563,-563,-563,688', -'904,535,534,533,228,536,211,906,230,229,509,-563,-563,-563,-563,-562', -'-563,510,907,-563,-70,211,-562,-562,-562,483,432,-562,-562,-562,763', -'-562,535,534,533,231,536,540,481,478,-562,-562,-562,-562,261,468,923', -'210,547,546,925,-562,-562,559,-562,-562,-562,-562,-562,688,560,535,534', -'533,926,536,436,228,540,558,435,230,229,226,227,930,433,544,543,547', -'546,934,-562,-562,-562,-562,-562,-562,-562,-562,-562,-562,-562,-562', -'-562,-562,937,684,-562,-562,-562,-285,939,-562,870,870,-562,944,-285', -'-562,-562,945,-562,389,-562,870,-562,-285,-562,-562,-562,-562,-562,-562', -'-562,870,-562,-562,-562,688,923,535,534,533,950,536,952,870,231,870', -'712,-562,-562,-562,-562,-278,-562,711,870,-562,956,923,-278,-278,-278', -'384,713,-278,-278,-278,538,-278,535,534,533,368,536,540,365,341,228', -'-278,-278,-278,230,229,226,227,547,546,211,-278,-278,306,-278,-278,-278', -'-278,-278,688,305,535,534,533,666,536,250,103,540,721,688,206,535,534', -'533,201,536,544,543,547,546,923,-278,-278,-278,-278,-278,-278,-278,-278', -'-278,-278,-278,-278,-278,-278,980,684,-278,-278,-278,981,982,-278,984', -'870,-278,870,684,-278,-278,870,-278,-558,-278,-557,-278,468,-278,-278', -'-278,-278,-278,-278,-278,468,-278,688,-278,535,534,533,-285,536,110', -'111,112,113,114,-285,712,-278,-278,-278,-278,736,-278,943,-285,-278', -'281,69,70,71,12,57,713,825,826,63,64,827,101,102,67,540,65,66,68,32', -'33,72,73,-264,730,211,547,546,31,30,29,95,94,96,97,729,846,22,535,534', -'533,754,536,11,47,481,13,99,98,100,89,56,91,90,92,700,93,101,102,483', -'87,88,557,44,45,43,693,688,660,535,534,533,688,536,535,534,533,-284', -'536,211,-493,691,690,-494,-284,42,261,-493,35,-558,-494,58,59,-284,682', -'60,-493,37,211,-494,688,46,535,534,533,684,536,261,660,23,540,681,678', -'231,85,79,81,82,83,84,231,547,546,80,86,281,69,70,71,12,57,676,62,777', -'63,64,483,670,540,67,762,65,66,68,32,33,72,73,211,547,546,667,666,31', -'30,29,95,94,96,97,660,846,22,535,534,533,512,536,11,47,796,13,99,98', -'100,89,56,91,90,92,-284,93,101,102,211,87,88,-284,44,45,43,948,-558', -'211,777,-277,-284,688,949,535,534,533,-277,536,806,-285,649,947,211', -'-85,42,-277,-285,35,211,211,58,59,211,200,60,-285,37,231,231,231,46', -'538,,535,534,533,,536,23,540,,,,85,79,81,82,83,84,,547,546,80,86,281', -'69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', -'546,31,30,29,95,94,96,97,,,22,110,111,112,113,114,11,47,,13,99,98,100', -'89,56,91,90,92,-284,93,101,102,,87,88,-284,44,45,43,,-558,,,,-284,688', -',535,534,533,,536,110,111,112,113,114,,42,,,35,,,58,59,,,60,,37,,,,46', -'763,,535,534,533,,536,23,540,,,,85,79,81,82,83,84,,547,546,80,86,281', -'69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', -'546,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92', -',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60', -',37,,,,46,763,,535,534,533,,536,23,,,,,85,79,81,82,83,84,,,,80,86,281', -'69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', -'546,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92', -',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60', -',37,,,,46,538,,535,534,533,,536,23,,,,,85,79,81,82,83,84,,,,80,86,281', -'69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', -'546,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92', -',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60', -',37,,,,46,538,,535,534,533,,536,23,,,,,85,79,81,82,83,84,,,,80,86,281', -'69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', -'546,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92', -',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60', -',37,,,,46,538,,535,534,533,,536,23,,,,,85,79,81,82,83,84,,,,80,86,281', -'69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', -'546,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92', -',93,101,102,,87,88,,44,45,43,231,,,,,,,,,,,,,,,,245,246,,42,,,35,,,58', -'59,,,60,,37,228,,234,46,230,229,226,227,,,232,23,233,,,,85,79,81,82', -'83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72', -'73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91', -'90,92,,93,101,102,,87,88,,44,45,43,231,235,240,241,242,237,239,,,243', -'244,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229,226,227', -'238,236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57', -',62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22', -',,,,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43', -'231,-580,-580,-580,-580,237,239,,,-580,-580,,,,,,245,246,,42,,,35,,', -'58,59,,,60,,37,228,,234,46,230,229,226,227,238,236,232,23,233,,,,85', -'79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68', -'32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100', -'89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,-580,-580,-580,-580', -'237,239,,,-580,-580,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234', -'46,230,229,226,227,238,236,232,23,233,,,,85,79,81,82,83,84,,,,80,86', -'281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30', -'29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92,,93,101', -'102,,87,88,,44,45,43,231,-580,-580,-580,-580,237,239,,,-580,-580,,,', -',,245,246,,42,,,283,,,58,59,,,60,,37,228,,234,46,230,229,226,227,238', -'236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62', -',63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,', -',,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231', -'-580,-580,-580,-580,237,239,,,-580,-580,,,,,,245,246,,42,,,35,,,58,59', -',,60,,37,228,,234,46,230,229,226,227,238,236,232,23,233,,,,85,79,81', -'82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33', -'72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56', -'91,90,92,,93,101,102,,87,88,,44,45,43,231,-580,-580,-580,-580,237,239', -',,-580,-580,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229', -'226,227,238,236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,8,69,70,71', -'12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96', -'97,,,22,,,,,,11,47,10,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,231,235,240,241,242,237,239,247,,243,244,,,,,,245,246,,42', -',,35,,,58,59,,,60,,37,228,,234,46,230,229,226,227,238,236,232,23,233', -',,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65', -'66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98', -'100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,,,,,,,,,,,,,,,,245', -'246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229,226,227,,,232,23,233', -',,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65', -'66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98', -'100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,,,,,,,,,,,,,,,,245', -'246,,42,,,283,,,58,59,,,60,,37,228,,234,46,230,229,226,227,,,232,23', -'233,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67', -',65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13', -'99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,,,,,,,,,,', -',,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229,226,227,', -',232,23,233,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63', -'64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11', -'47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,-580', -'-580,-580,-580,237,239,,,-580,-580,,,,,,245,246,,42,,,35,,,58,59,,,60', -',37,228,,234,46,230,229,226,227,238,236,232,23,233,,,,85,79,81,82,83', -'84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73', -',,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90', -'92,,93,101,102,,87,88,,44,45,43,231,235,240,241,242,237,239,247,248', -'243,244,,-580,-580,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230', -'229,226,227,238,236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,281,69', -'70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95', -'94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87', -'88,,44,45,43,231,235,240,241,242,237,239,247,248,243,244,,-580,-580', -',,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229,226,227,238', -'236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62', -',63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,', -',,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231', -',,,,,,,,,,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229', -'226,227,,,,23,,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62', -',63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,', -',,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231', -',,,,,,,,,,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229', -'226,227,,,,23,,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62', -',63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,', -',,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231', -',,,,,,,,,,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,,46,230,229,226', -'227,,,,23,,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63', -'64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11', -'47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,', -',,,,,,,,,,,,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81,82', -'83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72', -'73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91', -'90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,283,,,58', -'59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,281,69,70', -'71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94', -'96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23', -',,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,', -'65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99', -'98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,', -',,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,', -'80,86,8,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31', -'30,29,95,94,96,97,,,22,,,,,,11,47,10,13,99,98,100,89,56,91,90,92,,93', -'101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60,,37', -',,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', -'64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,', -',47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,', -',,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,,,,,85', -'79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33', -'72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91', -'90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58', -'59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,', -'57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97', -',,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45', -'43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,394,,,,46,,,,,,,,221,', -',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', -'32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56', -'91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,', -',58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71', -',57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97', -',,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43', -',,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79', -'81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72', -'73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92', -',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,', -'60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62', -'63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,', -',,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,', -',,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82', -'83,84,,,,80,86,211,69,70,71,,57,,62,,63,64,,,,67,,65,66,68,32,33,72', -'73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90', -'92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59', -',,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57', -',,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22', -',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', -',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81', -'82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72', -'73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91', -'90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58', -'59,,,60,,733,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71', -',57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94', -'96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,', -'44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,643,,,,46,,,,,,', -',221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65', -'66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99', -'98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,', -',,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,', -',80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294', -'295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101', -'102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,', -'46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', -',,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,', -',,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,', -',,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81', -'82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72', -'73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91', -'90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58', -'59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,', -'57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96', -'97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44', -'45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,', -',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', -'298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100', -'89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,', -',222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', -'95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', -'88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', -',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', -'65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', -',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', -',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', -',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', -'294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93', -'101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,', -',,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', -'64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', -',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', -',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79', -'81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299', -'72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56', -'91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,', -',58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', -'71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', -'94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', -',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', -'68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98', -'100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', -',,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', -'95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', -'88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', -',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', -'65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', -',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', -',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', -',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', -'294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93', -'101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,', -',,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', -'64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', -',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', -',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79', -'81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299', -'72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56', -'91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,', -',58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', -'71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', -'94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', -',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', -'68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98', -'100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', -',,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', -'95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', -'88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', -',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', -'65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', -',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', -',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', -',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', -'294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93', -'101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,', -',,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', -'64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', -',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', -',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79', -'81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299', -'72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56', -'91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,', -',58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', -'71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', -'94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', -',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', -'68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98', -'100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', -',,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95', -'94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87', -'88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46', -',,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,', -',67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,', -',99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,', -',,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,,,,,85,79,81', -'82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73', -',,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92', -'275,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59', -',,60,,273,,271,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,211,69', -'70,71,,57,,62,,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', -'95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102', -',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,643,,271', -',46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', -',,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,', -',,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,', -',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,271,,46,,,,,,,,221,,,,,85', -'79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298', -'299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89', -'56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222', -',,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', -'71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', -'94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', -',,,,85,79,81,82,83,84,,,,80,86,69,70,71,12,57,,,62,63,64,,,,67,,65,66', -'68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100', -'89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,', -'35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69', -'70,71,,57,378,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', -'95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', -'88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,,,46,,', -',,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67', -',65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,296', -',,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,', -',,,,292,,,288,,,58,59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80', -'86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29', -'95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102', -',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271', -',46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', -',,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,', -',,,296,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,', -',,,,,,,,,,,292,,,288,,,58,59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84', -',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31', -'30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101', -'102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,', -'46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', -',,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47', -',,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,', -',,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,,,,-414,85', -'79,81,82,83,84,-414,-414,-414,80,86,-414,-414,-414,,-414,,,62,,,,,,-414', -'-414,-414,,,,,,,,,-414,-414,,-414,-414,-414,-414,-414,,,,,,,,,,,,,,', -',,,,,,,,,-414,-414,-414,-414,-414,-414,-414,-414,-414,-414,-414,-414', -'-414,-414,,,-414,-414,-414,,,-414,,261,-414,,,-414,-414,,-414,,-414', -',-414,,-414,-414,-414,-414,-414,-414,-414,,-414,-414,-414,,,,,,,,,,', -',-292,-414,-414,,-414,,-414,-292,-292,-292,,,-292,-292,-292,538,-292', -'535,534,533,,536,,,,,-292,-292,,,,,,,,,-292,-292,,-292,-292,-292,-292', -'-292,,,,,,,,,,540,527,,,,,,,,544,543,547,546,,-292,-292,-292,-292,-292', -'-292,-292,-292,-292,-292,-292,-292,-292,-292,,,-292,-292,-292,,,-292', -',264,-292,,,-292,-292,,-292,,-292,,-292,,-292,-292,-292,-292,-292,-292', -'-292,,-292,,-292,,,,,,,,,,,,,-292,-292,,-292,,-292,69,70,71,,57,,,,63', -'64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,', -',47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,', -',,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,,,,,85', -'79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33', -'72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91', -'90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,', -',58,59,,,60,,273,,271,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95', -'94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87', -'88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46', -',,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,', -',67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,', -',296,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,,,', -',,,,,,,,,292,,,288,,,58,59,,,60,,287,,,,,,,,,,,,,,,,,85,79,81,82,83', -'84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,', -',,,294,295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56,91,90,92', -',93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,292,,,222,,,58,59,,,60', -',,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,304,57,,,62,63', -'64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', -',,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43', -',,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,643,,271,,46,,,,,,,,221,', -',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', -'298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100', -'89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', -',,222,,,58,59,,,60,,,,271,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80', -'86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295', -'301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102', -',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,', -',,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,', -'67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,', -'47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,', -',,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82', -'83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73', -',,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90', -'92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59', -',,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57', -',,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223', -',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', -',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79', -'81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72', -'73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92', -',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,', -'60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62', -'63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', -',,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43', -',,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,,,46,,,,,,,,221,,,,', -'85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32', -'33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91', -'90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58', -'59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57', -',,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22', -',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', -',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81', -'82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73', -',,,,,31,30,29,95,94,96,97,,,22,,,,,616,,47,,,99,98,100,89,56,91,90,92', -',93,101,102,,87,88,,44,45,43,231,235,240,241,242,237,239,247,248,243', -'244,,224,225,,,245,246,,216,,,222,,,58,59,,,60,,,228,,234,46,230,229', -'226,227,238,236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,107,249,69', -'70,71,106,57,62,,,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', -'95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56,91,90,92,,93,101,102,', -'87,88,,,,302,,,,,,,,,,,,,,,,,,,,335,,,35,,,58,59,,,60,,37,,,,,,,,,,', -',,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,12,57,,,62,63,64,,,,67,,65', -'66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,10,13,99', -'98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,', -',,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,', -'80,86,69,70,71,,57,378,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31', -'30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102', -',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,', -',,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67', -',65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98', -'100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', -',,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95', -'94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23', -',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', -'68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89', -'56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222', -',,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70', -'71,12,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94', -'96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23', -',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', -'68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89', -'56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222', -',,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70', -'71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96', -'97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44', -'45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,394,,,,46,,,,,,,,221', -',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', -'68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100', -'89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,', -',222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95', -'94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', -',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', -'68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100', -'89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,', -',222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', -'95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', -'88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', -',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', -'65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', -',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', -',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', -',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', -'294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93', -'101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,', -',,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', -'64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,', -',47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,', -',,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82', -'83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73', -',,,,,294,295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56,91,90', -'92,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,913,,,222,,,58,59,,', -'60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,12,57,,,62', -'63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,', -',,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,', -',,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79', -'81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299', -'72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56', -'91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,903,,,222,,,58', -'59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,', -'62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97', -',,223,,,,,,616,296,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,,', -'302,,231,235,240,241,242,237,239,247,248,243,244,,224,225,,,245,246', -'292,,,222,,,58,59,,,60,,,,228,,234,,230,229,226,227,238,236,232,,233', -',,85,79,81,82,83,84,,,,80,86,,,249,494,-240,,,62,69,70,71,12,57,,,,63', -'64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11', -'47,10,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,', -',,,,,,,,,,,,,,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81', -'82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72', -'73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91', -'90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58', -'59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,', -'57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96', -'97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44', -'45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,', -',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', -'298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100', -'89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', -',,222,,,58,59,,,60,,,,271,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80', -'86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29', -'95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', -'88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', -',,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65', -'66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,296,,,99', -'98,100,89,56,91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,292', -',,288,,,58,59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70', -'71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', -'94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,512,,58,59,,,60,,,,,,46,,,,,', -',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', -'65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', -',99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,', -',,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83', -'84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,', -',31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101', -'102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,', -'46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', -',,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47', -',,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,', -',,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84', -',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31', -'30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102', -',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,', -',,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67', -',65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,296', -',,99,98,100,563,56,91,90,564,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,', -',,,,,,565,,,222,,,58,59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,', -'80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294', -'295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,563,56,91,90,564,,93', -'101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,565,,,222,,,58,59,,,60,,,,', -',,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,', -'67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,', -'47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,', -',,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82', -'83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73', -',,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90', -'92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59', -',,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57', -',,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97', -',,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45', -'43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,', -'85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298', -'299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89', -'56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222', -',,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', -'71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', -'94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', -',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', -'68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100', -'89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,', -',222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', -'95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', -'88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', -',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', -'65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', -',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', -',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', -',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31', -'30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101', -'102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273', -',271,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62', -'63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', -',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', -',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,538,,535,534,533,46,536,,,,,', -',221,,,,-579,85,79,81,82,83,84,-579,-579,-579,80,86,-579,-579,-579,', -'-579,,,62,,540,721,,,-579,-579,-579,,,544,543,547,546,,,-579,-579,,-579', -'-579,-579,-579,-579,,,,,,,,,,,,,,,,,,,,,,,,-579,-579,-579,-579,-579', -'-579,-579,-579,-579,-579,-579,-579,-579,-579,,,-579,-579,-579,,,-579', -',261,-579,,,-579,-579,,-579,,-579,,-579,,-579,-579,-579,-579,-579,-579', -'-579,,-579,-579,-579,,,,,,,,,,,,,-579,-579,,-579,,-579,69,70,71,,57', -',,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223', -',,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43', -',,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,', -',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', -'298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100', -'89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,', -',222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', -'95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', -'88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', -',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', -'65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', -',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', -',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', -',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', -'294,295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56,91,90,92,', -'93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,292,,,288,,,58,59,,,60,', -',,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', -',,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47', -',,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,', -',,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,,,,,85,79', -'81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299', -'72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56', -'91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,292,,,288,,,58', -'59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,', -'62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97', -',,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45', -'43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,394,,,,46,,,,,,,,221,', -',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', -'298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100', -'89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', -',,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', -'69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', -'95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102', -',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,643,,,,46', -',,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,', -',67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,', -'99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,', -',,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84', -',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', -'294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93', -'101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,', -',,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', -'64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', -',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', -',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,-579,85', -'79,81,82,83,84,-579,-579,-579,80,86,-579,-579,-579,,-579,,,62,,,,,,', -'-579,,,,,,,,,,-579,-579,,-579,-579,-579,-579,-579,,,,,,,,,,,,,-579,', -',,,,,-579,-579,-579,,,-579,-579,-579,,-579,,,,,,-579,,,,-579,,,-579', -',,,,261,-579,-579,-579,,-579,-579,-579,-579,-579,,,,,,,,,,,,,,-579,', -',,,,,,,,,,,-579,,,,,-579,,,-579,,,,,,,-579,,,,,261,-579,,,,,,,,,,,,', -',,,,,,,,,-579,,,,,,69,70,71,,57,,,-579,63,64,,,-579,67,,65,66,68,298', -'299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89', -'56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222', -',,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', -'71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', -'94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', -',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', -',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', -'68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,600,,47,,,99,98,100', -'89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,235,240,241,242,237', -'239,247,248,243,244,,224,225,,,245,246,,216,,,222,,,58,59,,,60,,,228', -',234,46,230,229,226,227,238,236,232,23,233,,,,85,79,81,82,83,84,,,,80', -'86,,249,,,,,,62,166,177,167,190,163,183,173,172,193,194,188,171,170', -'165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187,186,179,189', -'174,162,181,180,,,,,,161,168,159,160,156,157,158,118,120,,,119,,,,,', -',,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141', -',,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,,', -'155,85,,,,,,,,,,86,166,177,167,190,163,183,173,172,193,194,188,171,170', -'165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187,186,179,189', -'174,162,181,180,,,,,,161,168,159,160,156,157,158,118,120,,,119,,,,,', -',,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141', -',,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,,', -'155,85,,,,,,,,,,86,166,177,167,190,163,183,173,172,193,194,188,171,170', -'165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187,186,179,189', -'174,162,181,180,,,,,,161,168,159,160,156,157,158,118,120,117,,119,,', -',,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', -'141,,,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128', -',,155,85,,,,,,,,,,86,166,177,167,190,163,183,173,172,193,194,188,171', -'170,165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187,186,179', -'189,174,162,181,180,,,,,,161,168,159,160,156,157,158,118,120,,,119,', -',,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', -'141,,,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128', -',,155,85,,,,,,,,,,86,166,177,167,190,163,183,173,172,193,194,188,171', -'170,165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187,186,179', -'189,174,162,181,180,,,,,,161,168,159,160,156,157,158,118,120,,,119,', -',,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', -'141,,,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128', -',,155,166,177,167,190,163,183,173,172,193,194,188,171,170,165,191,195', -'196,175,164,178,182,184,176,169,,,,185,192,187,350,349,351,348,162,181', -'180,,,,,,161,168,159,160,345,346,347,343,120,91,90,344,,93,,,,,,,151', -'152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,357', -',,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,,,155,166', -'177,167,190,163,183,173,172,193,194,188,171,170,165,191,195,196,175', -'164,178,182,184,176,169,,,,185,192,187,186,179,189,174,162,181,180,', -',,,,161,168,159,160,156,157,158,118,120,375,374,119,,376,,,,,,,151,152', -',148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,,,,,', -',,,145,144,,129,150,147,146,142,143,137,135,127,149,128,975,414,155', -',976,,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154', -'140,141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127', -'149,128,465,407,155,,466,,,,,,,,,151,152,,148,130,131,132,139,136,138', -',,133,134,,,,153,154,140,141,,,,,,,,,,,,,,145,144,,129,150,147,146,142', -'143,137,135,127,149,128,970,414,155,,969,,,,,,,,,151,152,,148,130,131', -'132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145,144', -',129,150,147,146,142,143,137,135,127,149,128,465,407,155,,466,,,,,,', -',,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141', -',,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,621', -'414,155,,622,,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134', -',,,153,154,140,141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143', -'137,135,127,149,128,621,414,155,,622,,,,,,,,,151,152,,148,130,131,132', -'139,136,138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145,144,,129', -'150,147,146,142,143,137,135,127,149,128,410,414,155,,409,,,,,,,,,151', -'152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,261', -',,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,403,407', -'155,,404,,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153', -'154,140,141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143,137,135', -'127,149,128,619,407,155,,620,,,,,,,,,151,152,,148,130,131,132,139,136', -'138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145,144,,129,150,147', -'146,142,143,137,135,127,149,128,810,414,155,,811,,,,,,,,,151,152,,148', -'130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,', -',145,144,,129,150,147,146,142,143,137,135,127,149,128,653,407,155,,654', -',,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', -'141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149', -'128,465,407,155,,466,,,,,,,,,151,152,,148,130,131,132,139,136,138,,', -'133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145,144,,129,150,147,146', -'142,143,137,135,127,149,128,705,414,155,,706,,,,,,,,,151,152,,148,130', -'131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145', -'144,,129,150,147,146,142,143,137,135,127,149,128,973,407,155,,974,,', -',,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', -'141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149', -'128,656,414,155,,657,,,,,,,,,151,152,,148,130,131,132,139,136,138,,', -'133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145,144,,129,150,147,146', -'142,143,137,135,127,149,128,619,407,155,,620,,,,,,,,,151,152,,148,130', -'131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145', -'144,,129,150,147,146,142,143,137,135,127,149,128,703,407,155,,704,,', -',,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', -'141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149', -'128,,,155,231,235,240,241,242,237,239,247,248,243,244,,224,225,,,245', -'246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,231,235', -'240,241,242,237,239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,', -',,,,228,,234,,230,229,226,227,238,236,232,,233,231,235,240,241,242,237', -'239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230', -'229,226,227,238,236,232,,233,231,235,240,241,242,237,239,247,248,243', -'244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238', -'236,232,,233,231,235,240,241,242,237,239,247,248,243,244,,224,225,,249', -'245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,231', -'235,240,241,242,237,239,247,248,243,244,,224,225,,249,245,246,,,,,,', -',,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,231,235,240,241,242', -'237,239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234', -',230,229,226,227,238,236,232,,233,231,235,240,241,242,237,239,247,248', -'243,244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227', -'238,236,232,,233,231,235,240,241,242,237,239,247,248,243,244,,224,225', -',249,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233', -'231,235,240,241,242,237,239,247,248,243,244,,224,225,211,249,245,246', -',,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,231,235,240', -'241,242,237,239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,', -'228,,234,,230,229,226,227,238,236,232,,233,231,235,240,241,242,237,239', -'247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230,229', -'226,227,238,236,232,,233,231,235,240,241,242,237,239,247,248,243,244', -',224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236', -'232,,233,231,235,240,241,242,237,239,247,248,243,244,,224,225,,249,245', -'246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,,,,,,,', -',,,,,,,,249' ] - racc_action_table = arr = ::Array.new(23604, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -clist = [ -'621,549,549,549,549,549,549,621,621,621,549,549,621,621,621,549,621', -'549,549,549,549,549,549,549,441,621,621,621,621,549,549,549,549,549', -'549,549,621,621,549,621,621,621,621,621,549,549,857,549,549,549,549', -'549,549,549,549,549,569,549,549,549,988,549,549,326,549,549,549,621', -'621,621,621,621,621,621,621,621,621,621,621,621,621,61,429,621,621,621', -'549,621,621,549,526,621,549,549,621,621,549,621,549,621,369,621,549', -'621,621,621,621,621,621,621,549,621,621,621,333,549,549,549,549,549', -'549,808,809,561,549,549,621,621,621,621,410,621,325,549,621,621,297', -'410,410,410,553,620,704,410,410,706,410,336,554,703,928,77,928,332,347', -'410,807,22,974,77,857,347,569,369,753,857,410,410,61,410,410,410,410', -'410,988,717,419,326,411,988,717,569,326,705,619,878,569,973,975,620', -'427,427,402,22,724,724,526,410,410,410,410,410,410,410,410,410,410,410', -'410,410,410,706,753,410,410,410,565,410,346,333,565,410,809,297,410', -'346,808,809,561,410,214,410,619,410,410,410,410,410,410,410,553,410', -'410,410,401,553,325,704,554,705,706,325,336,554,703,92,410,410,332,410', -'732,410,92,92,92,410,975,92,92,92,807,92,974,807,398,807,463,974,214', -'92,427,92,92,92,724,473,653,472,705,664,664,92,92,215,92,92,92,92,92', -'878,654,973,975,41,878,395,973,975,28,874,463,874,874,874,648,874,392', -'217,737,473,648,472,92,92,92,92,92,92,92,92,92,92,92,92,92,92,635,344', -'92,92,92,215,92,92,344,41,92,810,588,92,92,41,92,653,92,433,92,390,92', -'92,92,92,92,92,92,217,92,654,92,371,635,368,687,28,687,687,687,365,687', -'664,772,92,92,92,92,409,92,874,653,92,92,653,409,409,409,28,755,653', -'409,409,810,409,654,433,756,654,439,810,343,588,588,654,810,656,117', -'343,810,757,588,117,117,409,409,759,409,409,409,409,409,18,371,371,371', -'772,810,20,20,760,439,306,772,348,439,439,564,366,722,763,348,772,687', -'722,409,409,409,409,409,409,409,409,409,409,409,409,409,409,656,772', -'409,409,409,18,409,656,563,337,409,18,656,409,363,306,656,363,409,771', -'409,306,409,409,409,409,409,409,409,361,409,564,409,317,656,359,317', -'335,564,775,366,366,366,564,622,409,409,564,409,331,409,622,622,622', -'409,778,622,622,622,601,622,563,40,524,817,564,524,351,563,817,622,622', -'622,563,351,363,363,563,718,718,622,622,350,622,622,622,622,622,404', -'350,361,361,361,293,779,563,359,359,359,349,293,601,669,887,40,669,349', -'601,887,293,40,622,622,622,622,622,622,622,622,622,622,622,622,622,622', -'783,17,622,622,622,404,622,622,17,784,622,404,27,622,622,785,622,17', -'622,27,622,786,622,622,622,622,622,622,622,787,622,628,622,628,628,628', -'540,628,540,540,540,318,540,790,318,622,622,622,622,89,622,403,345,622', -'622,278,89,89,89,345,278,89,89,89,952,89,952,952,952,628,952,692,692', -'89,540,89,89,89,628,628,628,628,791,540,793,89,89,48,89,89,89,89,89', -'403,48,329,5,795,353,403,329,5,952,48,796,353,796,796,796,330,796,628', -'797,952,952,800,89,89,89,89,89,89,89,89,89,89,89,89,89,89,803,213,89', -'89,89,319,89,89,213,311,89,308,796,89,89,13,89,213,89,813,89,796,89', -'89,89,89,89,89,89,307,89,676,89,676,676,676,289,676,488,488,488,488', -'488,289,290,89,89,89,89,415,89,290,289,89,89,303,415,415,415,818,290', -'415,415,415,939,415,939,939,939,676,939,324,324,819,415,415,415,415', -'676,676,676,676,315,315,820,415,415,291,415,415,415,415,415,956,291', -'956,956,956,829,956,302,302,939,291,684,830,684,684,684,301,684,958', -'958,939,939,296,415,415,415,415,415,415,415,415,415,415,415,415,415', -'415,295,956,415,415,415,1,440,415,43,43,415,292,684,415,415,286,415', -'843,415,844,415,684,415,415,415,415,415,415,415,285,415,415,415,937', -'849,937,937,937,440,937,284,851,440,440,309,415,415,415,415,414,415', -'309,852,415,282,275,414,414,414,272,309,414,414,414,934,414,934,934', -'934,458,934,937,269,268,414,414,414,414,257,254,876,223,937,937,880', -'414,414,334,414,414,414,414,414,921,334,921,921,921,881,921,219,458', -'934,334,218,458,458,458,458,886,216,934,934,934,934,894,414,414,414', -'414,414,414,414,414,414,414,414,414,414,414,895,921,414,414,414,499', -'896,414,897,899,414,903,499,414,414,905,414,197,414,990,414,499,414', -'414,414,414,414,414,414,977,414,414,414,984,978,984,984,984,913,984', -'916,917,459,918,567,414,414,414,414,56,414,567,919,414,920,922,56,56', -'56,115,567,56,56,56,892,56,892,892,892,84,892,984,83,69,459,56,56,56', -'459,459,459,459,984,984,47,56,56,42,56,56,56,56,56,923,39,923,923,923', -'946,923,25,3,892,892,798,19,798,798,798,16,798,892,892,892,892,957,56', -'56,56,56,56,56,56,56,56,56,56,56,56,56,962,923,56,56,56,963,964,56,965', -'966,56,967,798,56,56,968,56,969,56,970,56,613,56,56,56,56,56,56,56,607', -'56,870,56,870,870,870,709,870,647,647,647,647,647,709,902,56,56,56,56', -'602,56,902,709,56,719,719,719,719,719,719,902,725,725,719,719,725,725', -'725,719,870,719,719,719,719,719,719,719,598,594,623,870,870,719,719', -'719,719,719,719,719,592,762,719,762,762,762,625,762,719,719,640,719', -'719,719,719,719,719,719,719,719,556,719,719,719,642,719,719,555,719', -'719,719,550,875,650,875,875,875,868,875,868,868,868,657,868,652,910', -'548,545,911,657,719,655,910,719,657,911,719,719,657,538,719,910,719', -'972,911,866,719,866,866,866,875,866,658,659,719,868,531,530,662,719', -'719,719,719,719,719,663,868,868,719,719,804,804,804,804,804,804,529', -'719,665,804,804,525,522,866,804,675,804,804,804,804,804,804,804,515', -'866,866,514,513,804,804,804,804,804,804,804,504,901,804,901,901,901', -'500,901,804,804,686,804,804,804,804,804,804,804,804,804,811,804,804', -'804,495,804,804,811,804,804,804,912,811,689,694,914,811,841,912,841', -'841,841,914,841,699,950,493,912,702,490,804,914,950,804,489,475,804', -'804,474,15,804,950,804,444,443,442,804,863,,863,863,863,,863,804,841', -',,,804,804,804,804,804,804,,841,841,804,804,552,552,552,552,552,552', -',804,,552,552,,,,552,863,552,552,552,552,552,552,552,,863,863,863,863', -'552,552,552,552,552,552,552,,,552,280,280,280,280,280,552,552,,552,552', -'552,552,552,552,552,552,552,976,552,552,552,,552,552,976,552,552,552', -',976,,,,976,681,,681,681,681,,681,9,9,9,9,9,,552,,,552,,,552,552,,,552', -',552,,,,552,838,,838,838,838,,838,552,681,,,,552,552,552,552,552,552', -',681,681,552,552,909,909,909,909,909,909,,552,,909,909,,,,909,838,909', -'909,909,909,909,909,909,,838,838,838,838,909,909,909,909,909,909,909', -',,909,,,,,,909,909,,909,909,909,909,909,909,909,909,909,,909,909,909', -',909,909,,909,909,909,,,,,,,,,,,,,,,,,,,,909,,,909,,,909,909,,,909,', -'909,,,,909,836,,836,836,836,,836,909,,,,,909,909,909,909,909,909,,,', -'909,909,199,199,199,199,199,199,,909,,199,199,,,,199,836,199,199,199', -'199,199,199,199,,836,836,836,836,199,199,199,199,199,199,199,,,199,', -',,,,199,199,,199,199,199,199,199,199,199,199,199,,199,199,199,,199,199', -',199,199,199,,,,,,,,,,,,,,,,,,,,199,,,199,,,199,199,,,199,,199,,,,199', -'721,,721,721,721,,721,199,,,,,199,199,199,199,199,199,,,,199,199,720', -'720,720,720,720,720,,199,,720,720,,,,720,721,720,720,720,720,720,720', -'720,,721,721,721,721,720,720,720,720,720,720,720,,,720,,,,,,720,720', -',720,720,720,720,720,720,720,720,720,,720,720,720,,720,720,,720,720', -'720,,,,,,,,,,,,,,,,,,,,720,,,720,,,720,720,,,720,,720,,,,720,678,,678', -'678,678,,678,720,,,,,720,720,720,720,720,720,,,,720,720,765,765,765', -'765,765,765,,720,,765,765,,,,765,678,765,765,765,765,765,765,765,,678', -'678,678,678,765,765,765,765,765,765,765,,,765,,,,,,765,765,,765,765', -'765,765,765,765,765,765,765,,765,765,765,,765,765,,765,765,765,,,,,', -',,,,,,,,,,,,,,765,,,765,,,765,765,,,765,,765,,,,765,527,,527,527,527', -',527,765,,,,,765,765,765,765,765,765,,,,765,765,805,805,805,805,805', -'805,,765,,805,805,,,,805,527,805,805,805,805,805,805,805,,527,527,527', -'527,805,805,805,805,805,805,805,,,805,,,,,,805,805,,805,805,805,805', -'805,805,805,805,805,,805,805,805,,805,805,,805,805,805,452,,,,,,,,,', -',,,,,,452,452,,805,,,805,,,805,805,,,805,,805,452,,452,805,452,452,452', -'452,,,452,805,452,,,,805,805,805,805,805,805,,,,805,805,314,314,314', -'314,314,314,,805,,314,314,,,,314,,314,314,314,314,314,314,314,,,,,,314', -'314,314,314,314,314,314,,,314,,,,,,314,314,,314,314,314,314,314,314', -'314,314,314,,314,314,314,,314,314,,314,314,314,460,460,460,460,460,460', -'460,,,460,460,,,,,,460,460,,314,,,314,,,314,314,,,314,,314,460,,460', -'314,460,460,460,460,460,460,460,314,460,,,,314,314,314,314,314,314,', -',,314,314,674,674,674,674,674,674,,314,,674,674,,,,674,,674,674,674', -'674,674,674,674,,,,,,674,674,674,674,674,674,674,,,674,,,,,,674,674', -',674,674,674,674,674,674,674,674,674,,674,674,674,,674,674,,674,674', -'674,457,457,457,457,457,457,457,,,457,457,,,,,,457,457,,674,,,674,,', -'674,674,,,674,,674,457,,457,674,457,457,457,457,457,457,457,674,457', -',,,674,674,674,674,674,674,,,,674,674,767,767,767,767,767,767,,674,', -'767,767,,,,767,,767,767,767,767,767,767,767,,,,,,767,767,767,767,767', -'767,767,,,767,,,,,,767,767,,767,767,767,767,767,767,767,767,767,,767', -'767,767,,767,767,,767,767,767,456,456,456,456,456,456,456,,,456,456', -',,,,,456,456,,767,,,767,,,767,767,,,767,,767,456,,456,767,456,456,456', -'456,456,456,456,767,456,,,,767,767,767,767,767,767,,,,767,767,35,35', -'35,35,35,35,,767,,35,35,,,,35,,35,35,35,35,35,35,35,,,,,,35,35,35,35', -'35,35,35,,,35,,,,,,35,35,,35,35,35,35,35,35,35,35,35,,35,35,35,,35,35', -',35,35,35,455,455,455,455,455,455,455,,,455,455,,,,,,455,455,,35,,,35', -',,35,35,,,35,,35,455,,455,35,455,455,455,455,455,455,455,35,455,,,,35', -'35,35,35,35,35,,,,35,35,673,673,673,673,673,673,,35,,673,673,,,,673', -',673,673,673,673,673,673,673,,,,,,673,673,673,673,673,673,673,,,673', -',,,,,673,673,,673,673,673,673,673,673,673,673,673,,673,673,673,,673', -'673,,673,673,673,454,454,454,454,454,454,454,,,454,454,,,,,,454,454', -',673,,,673,,,673,673,,,673,,673,454,,454,673,454,454,454,454,454,454', -'454,673,454,,,,673,673,673,673,673,673,,,,673,673,726,726,726,726,726', -'726,,673,,726,726,,,,726,,726,726,726,726,726,726,726,,,,,,726,726,726', -'726,726,726,726,,,726,,,,,,726,726,,726,726,726,726,726,726,726,726', -'726,,726,726,726,,726,726,,726,726,726,453,453,453,453,453,453,453,', -',453,453,,,,,,453,453,,726,,,726,,,726,726,,,726,,726,453,,453,726,453', -'453,453,453,453,453,453,726,453,,,,726,726,726,726,726,726,,,,726,726', -'2,2,2,2,2,2,,726,,2,2,,,,2,,2,2,2,2,2,2,2,,,,,,2,2,2,2,2,2,2,,,2,,,', -',,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,,2,2,2,461,461,461,461,461,461', -'461,461,,461,461,,,,,,461,461,,2,,,2,,,2,2,,,2,,2,461,,461,2,461,461', -'461,461,461,461,461,2,461,,,,2,2,2,2,2,2,,,,2,2,850,850,850,850,850', -'850,,2,,850,850,,,,850,,850,850,850,850,850,850,850,,,,,,850,850,850', -'850,850,850,850,,,850,,,,,,850,850,,850,850,850,850,850,850,850,850', -'850,,850,850,850,,850,850,,850,850,850,451,,,,,,,,,,,,,,,,451,451,,850', -',,850,,,850,850,,,850,,850,451,,451,850,451,451,451,451,,,451,850,451', -',,,850,850,850,850,850,850,,,,850,850,283,283,283,283,283,283,,850,', -'283,283,,,,283,,283,283,283,283,283,283,283,,,,,,283,283,283,283,283', -'283,283,,,283,,,,,,283,283,,283,283,283,283,283,283,283,283,283,,283', -'283,283,,283,283,,283,283,283,450,,,,,,,,,,,,,,,,450,450,,283,,,283', -',,283,283,,,283,,283,450,,450,283,450,450,450,450,,,450,283,450,,,,283', -'283,283,283,283,283,,,,283,283,933,933,933,933,933,933,,283,,933,933', -',,,933,,933,933,933,933,933,933,933,,,,,,933,933,933,933,933,933,933', -',,933,,,,,,933,933,,933,933,933,933,933,933,933,933,933,,933,933,933', -',933,933,,933,933,933,449,,,,,,,,,,,,,,,,449,449,,933,,,933,,,933,933', -',,933,,933,449,,449,933,449,449,449,449,,,449,933,449,,,,933,933,933', -'933,933,933,,,,933,933,854,854,854,854,854,854,,933,,854,854,,,,854', -',854,854,854,854,854,854,854,,,,,,854,854,854,854,854,854,854,,,854', -',,,,,854,854,,854,854,854,854,854,854,854,854,854,,854,854,854,,854', -'854,,854,854,854,448,448,448,448,448,448,448,,,448,448,,,,,,448,448', -',854,,,854,,,854,854,,,854,,854,448,,448,854,448,448,448,448,448,448', -'448,854,448,,,,854,854,854,854,854,854,,,,854,854,814,814,814,814,814', -'814,,854,,814,814,,,,814,,814,814,814,814,814,814,814,,,,,,814,814,814', -'814,814,814,814,,,814,,,,,,814,814,,814,814,814,814,814,814,814,814', -'814,,814,814,814,,814,814,,814,814,814,438,438,438,438,438,438,438,438', -'438,438,438,,438,438,,,438,438,,814,,,814,,,814,814,,,814,,814,438,', -'438,814,438,438,438,438,438,438,438,814,438,,,,814,814,814,814,814,814', -',,,814,814,768,768,768,768,768,768,,814,,768,768,,,,768,,768,768,768', -'768,768,768,768,,,,,,768,768,768,768,768,768,768,,,768,,,,,,768,768', -',768,768,768,768,768,768,768,768,768,,768,768,768,,768,768,,768,768', -'768,437,437,437,437,437,437,437,437,437,437,437,,437,437,,,437,437,', -'768,,,768,,,768,768,,,768,,768,437,,437,768,437,437,437,437,437,437', -'437,768,437,,,,768,768,768,768,768,768,,,,768,768,883,883,883,883,883', -'883,,768,,883,883,,,,883,,883,883,883,883,883,883,883,,,,,,883,883,883', -'883,883,883,883,,,883,,,,,,883,883,,883,883,883,883,883,883,883,883', -'883,,883,883,883,,883,883,,883,883,883,445,,,,,,,,,,,,,,,,445,445,,883', -',,883,,,883,883,,,883,,883,445,,445,883,445,445,445,445,,,,883,,,,,883', -'883,883,883,883,883,,,,883,883,932,932,932,932,932,932,,883,,932,932', -',,,932,,932,932,932,932,932,932,932,,,,,,932,932,932,932,932,932,932', -',,932,,,,,,932,932,,932,932,932,932,932,932,932,932,932,,932,932,932', -',932,932,,932,932,932,446,,,,,,,,,,,,,,,,446,446,,932,,,932,,,932,932', -',,932,,932,446,,446,932,446,446,446,446,,,,932,,,,,932,932,932,932,932', -'932,,,,932,932,929,929,929,929,929,929,,932,,929,929,,,,929,,929,929', -'929,929,929,929,929,,,,,,929,929,929,929,929,929,929,,,929,,,,,,929', -'929,,929,929,929,929,929,929,929,929,929,,929,929,929,,929,929,,929', -'929,929,447,,,,,,,,,,,,,,,,447,447,,929,,,929,,,929,929,,,929,,929,447', -',,929,447,447,447,447,,,,929,,,,,929,929,929,929,929,929,,,,929,929', -'222,222,222,222,222,222,,929,,222,222,,,,222,,222,222,222,222,222,222', -'222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,222,222,,222,222,222', -'222,222,222,222,222,222,,222,222,222,,222,222,,222,222,222,,,,,,,,,', -',,,,,,,,,,222,,,222,,,222,222,,,222,,222,,,,222,,,,,,,,222,,,,,222,222', -'222,222,222,222,,,,222,222,288,288,288,288,288,288,,222,,288,288,,,', -'288,,288,288,288,288,288,288,288,,,,,,288,288,288,288,288,288,288,,', -'288,,,,,,288,288,,288,288,288,288,288,288,288,288,288,,288,288,288,', -'288,288,,288,288,288,,,,,,,,,,,,,,,,,,,,288,,,288,,,288,288,,,288,,288', -',,,288,,,,,,,,288,,,,,288,288,288,288,288,288,,,,288,288,924,924,924', -'924,924,924,,288,,924,924,,,,924,,924,924,924,924,924,924,924,,,,,,924', -'924,924,924,924,924,924,,,924,,,,,,924,924,,924,924,924,924,924,924', -'924,924,924,,924,924,924,,924,924,,924,924,924,,,,,,,,,,,,,,,,,,,,924', -',,924,,,924,924,,,924,,924,,,,924,,,,,,,,924,,,,,924,924,924,924,924', -'924,,,,924,924,777,777,777,777,777,777,,924,,777,777,,,,777,,777,777', -'777,777,777,777,777,,,,,,777,777,777,777,777,777,777,,,777,,,,,,777', -'777,,777,777,777,777,777,777,777,777,777,,777,777,777,,777,777,,777', -'777,777,,,,,,,,,,,,,,,,,,,,777,,,777,,,777,777,,,777,,777,,,,777,,,', -',,,,777,,,,,777,777,777,777,777,777,,,,777,777,384,384,384,384,384,384', -',777,,384,384,,,,384,,384,384,384,384,384,384,384,,,,,,384,384,384,384', -'384,384,384,,,384,,,,,,384,384,384,384,384,384,384,384,384,384,384,384', -',384,384,384,,384,384,,384,384,384,,,,,,,,,,,,,,,,,,,,384,,,384,,,384', -'384,,,384,,384,,,,384,,,,,,,,384,,,,,384,384,384,384,384,384,,,,384', -'384,202,202,202,,202,,,384,202,202,,,,202,,202,202,202,202,202,202,202', -',,,,,202,202,202,202,202,202,202,,,202,,,,,,,202,,,202,202,202,202,202', -'202,202,202,202,202,202,202,,202,202,,202,202,202,,,,,,,,,,,,,,,,,,', -',202,,,202,,,202,202,,,202,,202,,202,,202,,,,,,,,202,,,,,202,202,202', -'202,202,202,,,,202,202,205,205,205,,205,,,202,205,205,,,,205,,205,205', -'205,205,205,205,205,,,,,,205,205,205,205,205,205,205,,,205,,,,,,,205', -',,205,205,205,205,205,205,205,205,,205,205,205,,205,205,,205,205,205', -',,,,,,,,,,,,,,,,,,,205,,,205,,,205,205,,,205,,,,,,205,,,,,,,,205,,,', -',205,205,205,205,205,205,,,,205,205,206,206,206,,206,,,205,206,206,', -',,206,,206,206,206,206,206,206,206,,,,,,206,206,206,206,206,206,206', -',,206,,,,,,,206,,,206,206,206,206,206,206,206,206,,206,206,206,,206', -'206,,206,206,206,,,,,,,,,,,,,,,,,,,,206,,,206,,,206,206,,,206,,206,', -',,206,,,,,,,,206,,,,,206,206,206,206,206,206,,,,206,206,207,207,207', -',207,,,206,207,207,,,,207,,207,207,207,207,207,207,207,,,,,,207,207', -'207,207,207,207,207,,,207,,,,,,,207,,,207,207,207,207,207,207,207,207', -',207,207,207,,207,207,,207,207,207,,,,,,,,,,,,,,,,,,,,207,,,207,,,207', -'207,,,207,,,,,,207,,,,,,,,207,,,,,207,207,207,207,207,207,,,,207,207', -'208,208,208,,208,,,207,208,208,,,,208,,208,208,208,208,208,208,208,', -',,,,208,208,208,208,208,208,208,,,208,,,,,,,208,,,208,208,208,208,208', -'208,208,208,,208,208,208,,208,208,,208,208,208,,,,,,,,,,,,,,,,,,,,208', -',,208,,,208,208,,,208,,,,,,208,,,,,,,,208,,,,,208,208,208,208,208,208', -',,,208,208,209,209,209,,209,,,208,209,209,,,,209,,209,209,209,209,209', -'209,209,,,,,,209,209,209,209,209,209,209,,,209,,,,,,,209,,,209,209,209', -'209,209,209,209,209,,209,209,209,,209,209,,209,209,209,,,,,,,,,,,,,', -',,,,,,209,,,209,,,209,209,,,209,,,,,,209,,,,,,,,209,,,,,209,209,209', -'209,209,209,,,,209,209,210,210,210,,210,,,209,210,210,,,,210,,210,210', -'210,210,210,210,210,,,,,,210,210,210,210,210,210,210,,,210,,,,,,,210', -',,210,210,210,210,210,210,210,210,,210,210,210,,210,210,,210,210,210', -',,,,,,,,,,,,,,,,,,,210,,,210,,,210,210,,,210,,,,,,210,,,,,,,,210,,,', -',210,210,210,210,210,210,,,,210,210,210,606,606,606,,606,,210,,606,606', -',,,606,,606,606,606,606,606,606,606,,,,,,606,606,606,606,606,606,606', -',,606,,,,,,,606,,,606,606,606,606,606,606,606,606,,606,606,606,,606', -'606,,606,606,606,,,,,,,,,,,,,,,,,,,,606,,,606,,,606,606,,,606,,,,,,606', -',,,,,,,606,,,,,606,606,606,606,606,606,,,,606,606,570,570,570,,570,', -',606,570,570,,,,570,,570,570,570,570,570,570,570,,,,,,570,570,570,570', -'570,570,570,,,570,,,,,,,570,,,570,570,570,570,570,570,570,570,,570,570', -'570,,570,570,,570,570,570,,,,,,,,,,,,,,,,,,,,570,,,570,,,570,570,,,570', -',,,,,570,,,,,,,,570,,,,,570,570,570,570,570,570,,,,570,570,599,599,599', -',599,,,570,599,599,,,,599,,599,599,599,599,599,599,599,,,,,,599,599', -'599,599,599,599,599,,,599,,,,,,,599,,,599,599,599,599,599,599,599,599', -',599,599,599,,599,599,,599,599,599,,,,,,,,,,,,,,,,,,,,599,,,599,,,599', -'599,,,599,,599,,,,599,,,,,,,,599,,,,,599,599,599,599,599,599,,,,599', -'599,882,882,882,,882,,,599,882,882,,,,882,,882,882,882,882,882,882,882', -',,,,,882,882,882,882,882,882,882,,,882,,,,,,,882,,,882,882,882,882,882', -'882,882,882,,882,882,882,,882,882,,882,882,882,,,,,,,,,,,,,,,,,,,,882', -',,882,,,882,882,,,882,,882,,,,882,,,,,,,,882,,,,,882,882,882,882,882', -'882,,,,882,882,221,221,221,,221,,,882,221,221,,,,221,,221,221,221,221', -'221,221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,,,221,,,221,221', -'221,221,221,221,221,221,,221,221,221,,221,221,,221,221,221,,,,,,,,,', -',,,,,,,,,,221,,,221,,,221,221,,,221,,,,,,221,,,,,,,,221,,,,,221,221', -'221,221,221,221,,,,221,221,224,224,224,,224,,,221,224,224,,,,224,,224', -'224,224,224,224,224,224,,,,,,224,224,224,224,224,224,224,,,224,,,,,', -',224,,,224,224,224,224,224,224,224,224,,224,224,224,,224,224,,224,224', -'224,,,,,,,,,,,,,,,,,,,,224,,,224,,,224,224,,,224,,,,,,224,,,,,,,,224', -',,,,224,224,224,224,224,224,,,,224,224,225,225,225,,225,,,224,225,225', -',,,225,,225,225,225,225,225,225,225,,,,,,225,225,225,225,225,225,225', -',,225,,,,,,,225,,,225,225,225,225,225,225,225,225,,225,225,225,,225', -'225,,225,225,225,,,,,,,,,,,,,,,,,,,,225,,,225,,,225,225,,,225,,,,,,225', -',,,,,,,225,,,,,225,225,225,225,225,225,,,,225,225,226,226,226,,226,', -',225,226,226,,,,226,,226,226,226,226,226,226,226,,,,,,226,226,226,226', -'226,226,226,,,226,,,,,,,226,,,226,226,226,226,226,226,226,226,,226,226', -'226,,226,226,,226,226,226,,,,,,,,,,,,,,,,,,,,226,,,226,,,226,226,,,226', -',,,,,226,,,,,,,,226,,,,,226,226,226,226,226,226,,,,226,226,227,227,227', -',227,,,226,227,227,,,,227,,227,227,227,227,227,227,227,,,,,,227,227', -'227,227,227,227,227,,,227,,,,,,,227,,,227,227,227,227,227,227,227,227', -',227,227,227,,227,227,,227,227,227,,,,,,,,,,,,,,,,,,,,227,,,227,,,227', -'227,,,227,,,,,,227,,,,,,,,227,,,,,227,227,227,227,227,227,,,,227,227', -'228,228,228,,228,,,227,228,228,,,,228,,228,228,228,228,228,228,228,', -',,,,228,228,228,228,228,228,228,,,228,,,,,,,228,,,228,228,228,228,228', -'228,228,228,,228,228,228,,228,228,,228,228,228,,,,,,,,,,,,,,,,,,,,228', -',,228,,,228,228,,,228,,,,,,228,,,,,,,,228,,,,,228,228,228,228,228,228', -',,,228,228,229,229,229,,229,,,228,229,229,,,,229,,229,229,229,229,229', -'229,229,,,,,,229,229,229,229,229,229,229,,,229,,,,,,,229,,,229,229,229', -'229,229,229,229,229,,229,229,229,,229,229,,229,229,229,,,,,,,,,,,,,', -',,,,,,229,,,229,,,229,229,,,229,,,,,,229,,,,,,,,229,,,,,229,229,229', -'229,229,229,,,,229,229,230,230,230,,230,,,229,230,230,,,,230,,230,230', -'230,230,230,230,230,,,,,,230,230,230,230,230,230,230,,,230,,,,,,,230', -',,230,230,230,230,230,230,230,230,,230,230,230,,230,230,,230,230,230', -',,,,,,,,,,,,,,,,,,,230,,,230,,,230,230,,,230,,,,,,230,,,,,,,,230,,,', -',230,230,230,230,230,230,,,,230,230,231,231,231,,231,,,230,231,231,', -',,231,,231,231,231,231,231,231,231,,,,,,231,231,231,231,231,231,231', -',,231,,,,,,,231,,,231,231,231,231,231,231,231,231,,231,231,231,,231', -'231,,231,231,231,,,,,,,,,,,,,,,,,,,,231,,,231,,,231,231,,,231,,,,,,231', -',,,,,,,231,,,,,231,231,231,231,231,231,,,,231,231,232,232,232,,232,', -',231,232,232,,,,232,,232,232,232,232,232,232,232,,,,,,232,232,232,232', -'232,232,232,,,232,,,,,,,232,,,232,232,232,232,232,232,232,232,,232,232', -'232,,232,232,,232,232,232,,,,,,,,,,,,,,,,,,,,232,,,232,,,232,232,,,232', -',,,,,232,,,,,,,,232,,,,,232,232,232,232,232,232,,,,232,232,233,233,233', -',233,,,232,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233', -'233,233,233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233', -',233,233,233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233', -'233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233', -'234,234,234,,234,,,233,234,234,,,,234,,234,234,234,234,234,234,234,', -',,,,234,234,234,234,234,234,234,,,234,,,,,,,234,,,234,234,234,234,234', -'234,234,234,,234,234,234,,234,234,,234,234,234,,,,,,,,,,,,,,,,,,,,234', -',,234,,,234,234,,,234,,,,,,234,,,,,,,,234,,,,,234,234,234,234,234,234', -',,,234,234,235,235,235,,235,,,234,235,235,,,,235,,235,235,235,235,235', -'235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,,,235,,,235,235,235', -'235,235,235,235,235,,235,235,235,,235,235,,235,235,235,,,,,,,,,,,,,', -',,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,,,235,,,,,235,235,235', -'235,235,235,,,,235,235,236,236,236,,236,,,235,236,236,,,,236,,236,236', -'236,236,236,236,236,,,,,,236,236,236,236,236,236,236,,,236,,,,,,,236', -',,236,236,236,236,236,236,236,236,,236,236,236,,236,236,,236,236,236', -',,,,,,,,,,,,,,,,,,,236,,,236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,', -',236,236,236,236,236,236,,,,236,236,237,237,237,,237,,,236,237,237,', -',,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237,237,237', -',,237,,,,,,,237,,,237,237,237,237,237,237,237,237,,237,237,237,,237', -'237,,237,237,237,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,237,,,237,,,,,,237', -',,,,,,,237,,,,,237,237,237,237,237,237,,,,237,237,238,238,238,,238,', -',237,238,238,,,,238,,238,238,238,238,238,238,238,,,,,,238,238,238,238', -'238,238,238,,,238,,,,,,,238,,,238,238,238,238,238,238,238,238,,238,238', -'238,,238,238,,238,238,238,,,,,,,,,,,,,,,,,,,,238,,,238,,,238,238,,,238', -',,,,,238,,,,,,,,238,,,,,238,238,238,238,238,238,,,,238,238,239,239,239', -',239,,,238,239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239,239', -'239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239,239', -',239,239,239,,239,239,,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239,,,239', -'239,,,239,,,,,,239,,,,,,,,239,,,,,239,239,239,239,239,239,,,,239,239', -'240,240,240,,240,,,239,240,240,,,,240,,240,240,240,240,240,240,240,', -',,,,240,240,240,240,240,240,240,,,240,,,,,,,240,,,240,240,240,240,240', -'240,240,240,,240,240,240,,240,240,,240,240,240,,,,,,,,,,,,,,,,,,,,240', -',,240,,,240,240,,,240,,,,,,240,,,,,,,,240,,,,,240,240,240,240,240,240', -',,,240,240,241,241,241,,241,,,240,241,241,,,,241,,241,241,241,241,241', -'241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241', -'241,241,241,241,241,,241,241,241,,241,241,,241,241,241,,,,,,,,,,,,,', -',,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,,,241,241,241', -'241,241,241,,,,241,241,242,242,242,,242,,,241,242,242,,,,242,,242,242', -'242,242,242,242,242,,,,,,242,242,242,242,242,242,242,,,242,,,,,,,242', -',,242,242,242,242,242,242,242,242,,242,242,242,,242,242,,242,242,242', -',,,,,,,,,,,,,,,,,,,242,,,242,,,242,242,,,242,,,,,,242,,,,,,,,242,,,', -',242,242,242,242,242,242,,,,242,242,243,243,243,,243,,,242,243,243,', -',,243,,243,243,243,243,243,243,243,,,,,,243,243,243,243,243,243,243', -',,243,,,,,,,243,,,243,243,243,243,243,243,243,243,,243,243,243,,243', -'243,,243,243,243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243,,,243,,,,,,243', -',,,,,,,243,,,,,243,243,243,243,243,243,,,,243,243,244,244,244,,244,', -',243,244,244,,,,244,,244,244,244,244,244,244,244,,,,,,244,244,244,244', -'244,244,244,,,244,,,,,,,244,,,244,244,244,244,244,244,244,244,,244,244', -'244,,244,244,,244,244,244,,,,,,,,,,,,,,,,,,,,244,,,244,,,244,244,,,244', -',,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244,,,,244,244,245,245,245', -',245,,,244,245,245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245', -'245,245,245,245,245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245', -',245,245,245,,245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245', -'245,,,245,,,,,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245,245', -'246,246,246,,246,,,245,246,246,,,,246,,246,246,246,246,246,246,246,', -',,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246,246,246,246,246', -'246,246,246,,246,246,246,,246,246,,246,246,246,,,,,,,,,,,,,,,,,,,,246', -',,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246,246,246,246,246,246', -',,,246,246,247,247,247,,247,,,246,247,247,,,,247,,247,247,247,247,247', -'247,247,,,,,,247,247,247,247,247,247,247,,,247,,,,,,,247,,,247,247,247', -'247,247,247,247,247,,247,247,247,,247,247,,247,247,247,,,,,,,,,,,,,', -',,,,,,247,,,247,,,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247,247,247', -'247,247,247,,,,247,247,248,248,248,,248,,,247,248,248,,,,248,,248,248', -'248,248,248,248,248,,,,,,248,248,248,248,248,248,248,,,248,,,,,,,248', -',,248,248,248,248,248,248,248,248,,248,248,248,,248,248,,248,248,248', -',,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,,,,,248,,,,,,,,248,,,', -',248,248,248,248,248,248,,,,248,248,249,249,249,,249,,,248,249,249,', -',,249,,249,249,249,249,249,249,249,,,,,,249,249,249,249,249,249,249', -',,249,,,,,,,249,,,249,249,249,249,249,249,249,249,,249,249,249,,249', -'249,,249,249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,,249,,,,,,249', -',,,,,,,249,,,,,249,249,249,249,249,249,,,,249,249,255,255,255,,255,', -',249,255,255,,,,255,,255,255,255,255,255,255,255,,,,,,255,255,255,255', -'255,255,255,,,255,,,,,,,255,,,255,255,255,255,255,255,255,255,255,255', -'255,255,,255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255,,,255,255', -',,255,,255,,255,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255,255', -'261,261,261,,261,,,255,261,261,,,,261,,261,261,261,261,261,261,261,', -',,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261,261,261,261,261', -'261,261,261,261,261,261,261,,261,261,,261,261,261,,,,,,,,,,,,,,,,,,', -',261,,,261,,,261,261,,,261,,261,,261,,261,,,,,,,,261,,,,,261,261,261', -'261,261,261,,,,261,261,264,264,264,,264,,,261,264,264,,,,264,,264,264', -'264,264,264,264,264,,,,,,264,264,264,264,264,264,264,,,264,,,,,,,264', -',,264,264,264,264,264,264,264,264,264,264,264,264,,264,264,,264,264', -'264,,,,,,,,,,,,,,,,,,,,264,,,264,,,264,264,,,264,,264,,264,,264,,,,', -',,,264,,,,,264,264,264,264,264,264,,,,264,264,264,603,603,603,,603,', -'264,,603,603,,,,603,,603,603,603,603,603,603,603,,,,,,603,603,603,603', -'603,603,603,,,603,,,,,,,603,,,603,603,603,603,603,603,603,603,603,603', -'603,603,,603,603,,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603,603', -',,603,,603,,603,,603,,,,,,,,603,,,,,603,603,603,603,603,603,,,,603,603', -'481,481,481,,481,,,603,481,481,,,,481,,481,481,481,481,481,481,481,', -',,,,481,481,481,481,481,481,481,,,481,,,,,,,481,,,481,481,481,481,481', -'481,481,481,481,481,481,481,,481,481,,481,481,481,,,,,,,,,,,,,,,,,,', -',481,,,481,,,481,481,,,481,,,,481,,481,,,,,,,,481,,,,,481,481,481,481', -'481,481,,,,481,481,483,483,483,,483,,,481,483,483,,,,483,,483,483,483', -'483,483,483,483,,,,,,483,483,483,483,483,483,483,,,483,,,,,,,483,,,483', -'483,483,483,483,483,483,483,,483,483,483,,483,483,,483,483,483,,,,,', -',,,,,,,,,,,,,,483,,,483,,,483,483,,,483,,,,,,483,,,,,,,,483,,,,,483', -'483,483,483,483,483,,,,483,483,485,485,485,,485,,,483,485,485,,,,485', -',485,485,485,485,485,485,485,,,,,,485,485,485,485,485,485,485,,,485', -',,,,,,485,,,485,485,485,485,485,485,485,485,,485,485,485,,485,485,,485', -'485,485,,,,,,,,,,,,,,,,,,,,485,,,485,,,485,485,,,485,,,,,,485,,,,,,', -',485,,,,,485,485,485,485,485,485,,,,485,485,487,487,487,487,487,,,485', -'487,487,,,,487,,487,487,487,487,487,487,487,,,,,,487,487,487,487,487', -'487,487,,,487,,,,,,487,487,,487,487,487,487,487,487,487,487,487,,487', -'487,487,,487,487,,487,487,487,,,,,,,,,,,,,,,,,,,,487,,,487,,,487,487', -',,487,,487,,,,487,,,,,,,,487,,,,,487,487,487,487,487,487,,,,487,487', -'701,701,701,,701,487,,487,701,701,,,,701,,701,701,701,701,701,701,701', -',,,,,701,701,701,701,701,701,701,,,701,,,,,,,701,,,701,701,701,701,701', -'701,701,701,,701,701,701,,701,701,,701,701,701,,,,,,,,,,,,,,,,,,,,701', -',,701,,,701,701,,,701,,701,,,,701,,,,,,,,701,,,,,701,701,701,701,701', -'701,,,,701,701,494,494,494,,494,,,701,494,494,,,,494,,494,494,494,494', -'494,494,494,,,,,,494,494,494,494,494,494,494,,,494,,,,,,,494,,,494,494', -'494,494,494,494,494,494,,494,494,494,,494,494,,,,494,,,,,,,,,,,,,,,', -',,,,494,,,494,,,494,494,,,494,,,,,,,,,,,,,,,,,,,494,494,494,494,494', -'494,,,,494,494,496,496,496,,496,,,494,496,496,,,,496,,496,496,496,496', -'496,496,496,,,,,,496,496,496,496,496,496,496,,,496,,,,,,,496,,,496,496', -'496,496,496,496,496,496,496,496,496,496,,496,496,,496,496,496,,,,,,', -',,,,,,,,,,,,,496,,,496,,,496,496,,,496,,496,,496,,496,,,,,,,,496,,,', -',496,496,496,496,496,496,,,,496,496,503,503,503,,503,,,496,503,503,', -',,503,,503,503,503,503,503,503,503,,,,,,503,503,503,503,503,503,503', -',,503,,,,,,,503,,,503,503,503,503,503,503,503,503,,503,503,503,,503', -'503,,,,503,,,,,,,,,,,,,,,,,,,,503,,,503,,,503,503,,,503,,,,,,,,,,,,', -',,,,,,503,503,503,503,503,503,,,,503,503,23,23,23,,23,,,503,23,23,,', -',23,,23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,', -'23,23,23,23,23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,', -',,23,,,23,,,23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23', -'23,947,947,947,,947,,,23,947,947,,,,947,,947,947,947,947,947,947,947', -',,,,,947,947,947,947,947,947,947,,,947,,,,,,,947,,,947,947,947,947,947', -'947,947,947,947,947,947,947,,947,947,,947,947,947,,,,,,,,,,,,,,,,,,', -',947,,,947,,,947,947,,,947,,947,,947,,947,,,,,,,,947,,,,29,947,947,947', -'947,947,947,29,29,29,947,947,29,29,29,,29,,,947,,,,,,29,29,29,,,,,,', -',,29,29,,29,29,29,29,29,,,,,,,,,,,,,,,,,,,,,,,,29,29,29,29,29,29,29', -'29,29,29,29,29,29,29,,,29,29,29,,,29,,29,29,,,29,29,,29,,29,,29,,29', -'29,29,29,29,29,29,,29,29,29,,,,,,,,,,,,30,29,29,,29,,29,30,30,30,,,30', -'30,30,323,30,323,323,323,,323,,,,,30,30,,,,,,,,,30,30,,30,30,30,30,30', -',,,,,,,,,323,323,,,,,,,,323,323,323,323,,30,30,30,30,30,30,30,30,30', -'30,30,30,30,30,,,30,30,30,,,30,,30,30,,,30,30,,30,,30,,30,,30,30,30', -'30,30,30,30,,30,,30,,,,,,,,,,,,,30,30,,30,,30,31,31,31,,31,,,,31,31', -',,,31,,31,31,31,31,31,31,31,,,,,,31,31,31,31,31,31,31,,,31,,,,,,,31', -',,31,31,31,31,31,31,31,31,31,31,31,31,,31,31,,31,31,31,,,,,,,,,,,,,', -',,,,,,31,,,31,,,31,31,,,31,,31,,31,,31,,,,,,,,31,,,,,31,31,31,31,31', -'31,,,,31,31,32,32,32,,32,,,31,32,32,,,,32,,32,32,32,32,32,32,32,,,,', -',32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32', -'32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,', -'32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,33,33,33,,33,,,32,33', -'33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,', -'33,,,33,33,33,33,33,33,33,33,33,33,33,33,,33,33,,33,33,33,,,,,,,,,,', -',,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33,,,,,,,,33,,,,,33,33,33,33', -'33,33,,,,33,33,36,36,36,,36,,,33,36,36,,,,36,,36,36,36,36,36,36,36,', -',,,,36,36,36,36,36,36,36,,,36,,,,,,,36,,,36,36,36,36,36,36,36,36,,36', -'36,36,,36,36,,,,36,,,,,,,,,,,,,,,,,,,,36,,,36,,,36,36,,,36,,36,,,,,', -',,,,,,,,,,,36,36,36,36,36,36,,,,36,36,37,37,37,,37,,,36,37,37,,,,37', -',37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37,,,,,,,37,,,37,37', -'37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,,,,,,,,,,,,,,37,,,37', -',,37,37,,,37,,,,,,,,,,,,,,,,,,,37,37,37,37,37,37,,,,37,37,478,478,478', -'37,478,,,37,478,478,,,,478,,478,478,478,478,478,478,478,,,,,,478,478', -'478,478,478,478,478,,,478,,,,,,,478,,,478,478,478,478,478,478,478,478', -'478,478,478,478,,478,478,,478,478,478,,,,,,,,,,,,,,,,,,,,478,,,478,', -',478,478,,,478,,478,,478,,478,,,,,,,,478,,,,,478,478,478,478,478,478', -',,,478,478,604,604,604,,604,,,478,604,604,,,,604,,604,604,604,604,604', -'604,604,,,,,,604,604,604,604,604,604,604,,,604,,,,,,,604,,,604,604,604', -'604,604,604,604,604,604,604,604,604,,604,604,,604,604,604,,,,,,,,,,', -',,,,,,,,,604,,,604,,,604,604,,,604,,,,604,,604,,,,,,,,604,,,,,604,604', -'604,604,604,604,,,,604,604,44,44,44,,44,,,604,44,44,,,,44,,44,44,44', -'44,44,44,44,,,,,,44,44,44,44,44,44,44,,,44,,,,,,,44,,,44,44,44,44,44', -'44,44,44,,44,44,44,,44,44,,44,44,44,,,,,,,,,,,,,,,,,,,,44,,,44,,,44', -'44,,,44,,,,,,44,,,,,,,,44,,,,,44,44,44,44,44,44,,,,44,44,45,45,45,,45', -',,44,45,45,,,,45,,45,45,45,45,45,45,45,,,,,,45,45,45,45,45,45,45,,,45', -',,,,,,45,,,45,45,45,45,45,45,45,45,,45,45,45,,45,45,,45,45,45,,,,,,', -',,,,,,,,,,,,,45,,,45,,,45,45,,,45,,,,,,45,,,,,,,,45,,,,,45,45,45,45', -'45,45,,,,45,45,46,46,46,,46,,,45,46,46,,,,46,,46,46,46,46,46,46,46,', -',,,,46,46,46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46', -'46,46,,46,46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,', -'46,,,,,,,,46,,,,,46,46,46,46,46,46,,,,46,46,605,605,605,,605,,,46,605', -'605,,,,605,,605,605,605,605,605,605,605,,,,,,605,605,605,605,605,605', -'605,,,605,,,,,,,605,,,605,605,605,605,605,605,605,605,,605,605,605,', -'605,605,,605,605,605,,,,,,,,,,,,,,,,,,,,605,,,605,,,605,605,,,605,,', -',,,605,,,,,,,,605,,,,,605,605,605,605,605,605,,,,605,605,58,58,58,,58', -',,605,58,58,,,,58,,58,58,58,58,58,58,58,,,,,,58,58,58,58,58,58,58,,', -'58,,,,,,,58,,,58,58,58,58,58,58,58,58,,58,58,58,,58,58,,58,58,58,,,', -',,,,,,,,,,,,,,,,58,,,58,,,58,58,,,58,,,,,,58,,,,,,,,58,,,,,58,58,58', -'58,58,58,,,,58,58,59,59,59,,59,,,58,59,59,,,,59,,59,59,59,59,59,59,59', -',,,,,59,59,59,59,59,59,59,,,59,,,,,,,59,,,59,59,59,59,59,59,59,59,59', -'59,59,59,,59,59,,59,59,59,,,,,,,,,,,,,,,,,,,,59,,,59,,,59,59,,,59,,59', -',,,59,,,,,,,,59,,,,,59,59,59,59,59,59,,,,59,59,63,63,63,,63,,,59,63', -'63,,,,63,,63,63,63,63,63,63,63,,,,,,63,63,63,63,63,63,63,,,63,,,,,,', -'63,,,63,63,63,63,63,63,63,63,,63,63,63,,63,63,,63,63,63,,,,,,,,,,,,', -',,,,,,,63,,,63,,,63,63,,,63,,,,,,63,,,,,,,,63,,,,,63,63,63,63,63,63', -',,,63,63,64,64,64,,64,,,63,64,64,,,,64,,64,64,64,64,64,64,64,,,,,,64', -'64,64,64,64,64,64,,,64,,,,,,,64,,,64,64,64,64,64,64,64,64,,64,64,64', -',64,64,,64,64,64,,,,,,,,,,,,,,,,,,,,64,,,64,,,64,64,,,64,,,,,,64,,,', -',,,,64,,,,,64,64,64,64,64,64,,,,64,64,67,67,67,,67,,,64,67,67,,,,67', -',67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,624,,67,,,67', -'67,67,67,67,67,67,67,,67,67,67,,67,67,,67,67,67,624,624,624,624,624', -'624,624,624,624,624,624,,624,624,,,624,624,,67,,,67,,,67,67,,,67,,,624', -',624,67,624,624,624,624,624,624,624,67,624,,,,67,67,67,67,67,67,,,,67', -'67,67,624,68,68,68,67,68,67,,,68,68,,,,68,,68,68,68,68,68,68,68,,,,', -',68,68,68,68,68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68,68,68,,68,68', -'68,,68,68,,,,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68,,68,,,,,,,,', -',,,,,,,,68,68,68,68,68,68,,,,68,68,105,105,105,105,105,,,68,105,105', -',,,105,,105,105,105,105,105,105,105,,,,,,105,105,105,105,105,105,105', -',,105,,,,,,105,105,105,105,105,105,105,105,105,105,105,105,,105,105', -'105,,105,105,,105,105,105,,,,,,,,,,,,,,,,,,,,105,,,105,,,105,105,,,105', -',105,,,,105,,,,,,,,105,,,,,105,105,105,105,105,105,,,,105,105,110,110', -'110,,110,105,,105,110,110,,,,110,,110,110,110,110,110,110,110,,,,,,110', -'110,110,110,110,110,110,,,110,,,,,,,110,,,110,110,110,110,110,110,110', -'110,,110,110,110,,110,110,,110,110,110,,,,,,,,,,,,,,,,,,,,110,,,110', -',,110,110,,,110,,,,,,110,,,,,,,,110,,,,,110,110,110,110,110,110,,,,110', -'110,111,111,111,,111,,,110,111,111,,,,111,,111,111,111,111,111,111,111', -',,,,,111,111,111,111,111,111,111,,,111,,,,,,,111,,,111,111,111,111,111', -'111,111,111,,111,111,111,,111,111,,111,111,111,,,,,,,,,,,,,,,,,,,,111', -',,111,,,111,111,,,111,,,,,,111,,,,,,,,111,,,,,111,111,111,111,111,111', -',,,111,111,112,112,112,,112,,,111,112,112,,,,112,,112,112,112,112,112', -'112,112,,,,,,112,112,112,112,112,112,112,,,112,,,,,,,112,,,112,112,112', -'112,112,112,112,112,,112,112,112,,112,112,,112,112,112,,,,,,,,,,,,,', -',,,,,,112,,,112,,,112,112,,,112,,,,,,112,,,,,,,,112,,,,,112,112,112', -'112,112,112,,,,112,112,113,113,113,,113,,,112,113,113,,,,113,,113,113', -'113,113,113,113,113,,,,,,113,113,113,113,113,113,113,,,113,,,,,,,113', -',,113,113,113,113,113,113,113,113,,113,113,113,,113,113,,113,113,113', -',,,,,,,,,,,,,,,,,,,113,,,113,,,113,113,,,113,,,,,,113,,,,,,,,113,,,', -',113,113,113,113,113,113,,,,113,113,114,114,114,114,114,,,113,114,114', -',,,114,,114,114,114,114,114,114,114,,,,,,114,114,114,114,114,114,114', -',,114,,,,,,114,114,,114,114,114,114,114,114,114,114,114,,114,114,114', -',114,114,,114,114,114,,,,,,,,,,,,,,,,,,,,114,,,114,,,114,114,,,114,', -'114,,,,114,,,,,,,,114,,,,,114,114,114,114,114,114,,,,114,114,576,576', -'576,,576,,,114,576,576,,,,576,,576,576,576,576,576,576,576,,,,,,576', -'576,576,576,576,576,576,,,576,,,,,,,576,,,576,576,576,576,576,576,576', -'576,,576,576,576,,576,576,,576,576,576,,,,,,,,,,,,,,,,,,,,576,,,576', -',,576,576,,,576,,,,,,576,,,,,,,,576,,,,,576,576,576,576,576,576,,,,576', -'576,200,200,200,,200,,,576,200,200,,,,200,,200,200,200,200,200,200,200', -',,,,,200,200,200,200,200,200,200,,,200,,,,,,,200,,,200,200,200,200,200', -'200,200,200,,200,200,200,,200,200,,200,200,200,,,,,,,,,,,,,,,,,,,,200', -',,200,,,200,200,,,200,,200,,,,200,,,,,,,,200,,,,,200,200,200,200,200', -'200,,,,200,200,201,201,201,,201,,,200,201,201,,,,201,,201,201,201,201', -'201,201,201,,,,,,201,201,201,201,201,201,201,,,201,,,,,,,201,,,201,201', -'201,201,201,201,201,201,,201,201,201,,201,201,,201,201,201,,,,,,,,,', -',,,,,,,,,,201,,,201,,,201,201,,,201,,,,,,201,,,,,,,,201,,,,,201,201', -'201,201,201,201,,,,201,201,611,611,611,,611,,,201,611,611,,,,611,,611', -'611,611,611,611,611,611,,,,,,611,611,611,611,611,611,611,,,611,,,,,', -',611,,,611,611,611,611,611,611,611,611,,611,611,611,,611,611,,611,611', -'611,,,,,,,,,,,,,,,,,,,,611,,,611,,,611,611,,,611,,,,,,611,,,,,,,,611', -',,,,611,611,611,611,611,611,,,,611,611,612,612,612,,612,,,611,612,612', -',,,612,,612,612,612,612,612,612,612,,,,,,612,612,612,612,612,612,612', -',,612,,,,,,,612,,,612,612,612,612,612,612,612,612,,612,612,612,,612', -'612,,612,612,612,,,,,,,,,,,,,,,,,,,,612,,,612,,,612,612,,,612,,,,,,612', -',,,,,,,612,,,,,612,612,612,612,612,612,,,,612,612,271,271,271,,271,', -',612,271,271,,,,271,,271,271,271,271,271,271,271,,,,,,271,271,271,271', -'271,271,271,,,271,,,,,,,271,,,271,271,271,271,271,271,271,271,,271,271', -'271,,271,271,,271,271,271,,,,,,,,,,,,,,,,,,,,271,,,271,,,271,271,,,271', -',,,,,271,,,,,,,,271,,,,,271,271,271,271,271,271,,,,271,271,616,616,616', -',616,,,271,616,616,,,,616,,616,616,616,616,616,616,616,,,,,,616,616', -'616,616,616,616,616,,,616,,,,,,,616,,,616,616,616,616,616,616,616,616', -',616,616,616,,616,616,,616,616,616,,,,,,,,,,,,,,,,,,,,616,,,616,,,616', -'616,,,616,,,,,,616,,,,,,,,616,,,,,616,616,616,616,616,616,,,,616,616', -'273,273,273,,273,,,616,273,273,,,,273,,273,273,273,273,273,273,273,', -',,,,273,273,273,273,273,273,273,,,273,,,,,,,273,,,273,273,273,273,273', -'273,273,273,,273,273,273,,273,273,,273,273,273,,,,,,,,,,,,,,,,,,,,273', -',,273,,,273,273,,,273,,,,,,273,,,,,,,,273,,,,,273,273,273,273,273,273', -',,,273,273,615,615,615,,615,,,273,615,615,,,,615,,615,615,615,615,615', -'615,615,,,,,,615,615,615,615,615,615,615,,,615,,,,,,,615,,,615,615,615', -'615,615,615,615,615,,615,615,615,,615,615,,615,615,615,,,,,,,,,,,,,', -',,,,,,615,,,615,,,615,615,,,615,,,,,,615,,,,,,,,615,,,,,615,615,615', -'615,615,615,,,,615,615,858,858,858,,858,,,615,858,858,,,,858,,858,858', -'858,858,858,858,858,,,,,,858,858,858,858,858,858,858,,,858,,,,,,,858', -',,858,858,858,858,858,858,858,858,,858,858,858,,858,858,,,,858,,,,,', -',,,,,,,,,,,,,,858,,,858,,,858,858,,,858,,,,,,,,,,,,,,,,,,,858,858,858', -'858,858,858,,,,858,858,281,281,281,281,281,,,858,281,281,,,,281,,281', -'281,281,281,281,281,281,,,,,,281,281,281,281,281,281,281,,,281,,,,,', -'281,281,,281,281,281,281,281,281,281,281,281,,281,281,281,,281,281,', -'281,281,281,,,,,,,,,,,,,,,,,,,,281,,,281,,,281,281,,,281,,281,,,,281', -',,,,,,,281,,,,,281,281,281,281,281,281,,,,281,281,848,848,848,,848,', -',281,848,848,,,,848,,848,848,848,848,848,848,848,,,,,,848,848,848,848', -'848,848,848,,,848,,,,,,,848,,,848,848,848,848,848,848,848,848,,848,848', -'848,,848,848,,,,848,,,,,,,,,,,,,,,,,,,,848,,,848,,,848,848,,,848,,,', -',,,,,,,,,,,,,,,848,848,848,848,848,848,,,,848,848,287,287,287,,287,', -',848,287,287,,,,287,,287,287,287,287,287,287,287,,,,,,287,287,287,287', -'287,287,287,,,287,,,,,,422,287,,,287,287,287,287,287,287,287,287,,287', -'287,287,,287,287,,,,287,,422,422,422,422,422,422,422,422,422,422,422', -',422,422,,,422,422,287,,,287,,,287,287,,,287,,,,422,,422,,422,422,422', -'422,422,422,422,,422,,,287,287,287,287,287,287,,,,287,287,,,422,287', -'422,,,287,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,', -'8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8,,8,8,,8,8,8,,,,,,,,,,,,,,,,,,', -',8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8,8,8,8,,,,8,8,600,600,600', -',600,,,8,600,600,,,,600,,600,600,600,600,600,600,600,,,,,,600,600,600', -'600,600,600,600,,,600,,,,,,,600,,,600,600,600,600,600,600,600,600,,600', -'600,600,,600,600,,600,600,600,,,,,,,,,,,,,,,,,,,,600,,,600,,,600,600', -',,600,,,,,,600,,,,,,,,600,,,,,600,600,600,600,600,600,,,,600,600,834', -'834,834,,834,,,600,834,834,,,,834,,834,834,834,834,834,834,834,,,,,', -'834,834,834,834,834,834,834,,,834,,,,,,,834,,,834,834,834,834,834,834', -'834,834,,834,834,834,,834,834,,834,834,834,,,,,,,,,,,,,,,,,,,,834,,', -'834,,,834,834,,,834,,,,,,834,,,,,,,,834,,,,,834,834,834,834,834,834', -',,,834,834,833,833,833,,833,,,834,833,833,,,,833,,833,833,833,833,833', -'833,833,,,,,,833,833,833,833,833,833,833,,,833,,,,,,,833,,,833,833,833', -'833,833,833,833,833,833,833,833,833,,833,833,,833,833,833,,,,,,,,,,', -',,,,,,,,,833,,,833,,,833,833,,,833,,,,833,,833,,,,,,,,833,,,,,833,833', -'833,833,833,833,,,,833,833,815,815,815,,815,,,833,815,815,,,,815,,815', -'815,815,815,815,815,815,,,,,,815,815,815,815,815,815,815,,,815,,,,,', -',815,,,815,815,815,815,815,815,815,815,,815,815,815,,815,815,,815,815', -'815,,,,,,,,,,,,,,,,,,,,815,,,815,,,815,815,,,815,,,,,,815,,,,,,,,815', -',,,,815,815,815,815,815,815,,,,815,815,304,304,304,,304,,,815,304,304', -',,,304,,304,304,304,304,304,304,304,,,,,,304,304,304,304,304,304,304', -',,304,,,,,,,304,,,304,304,304,304,304,304,304,304,,304,304,304,,304', -'304,,,,304,,,,,,,,,,,,,,,,,,,,304,,,304,,,304,304,,,304,,,,,,,,,,,,', -',,,,,,304,304,304,304,304,304,,,,304,304,313,313,313,,313,,,304,313', -'313,,,,313,,313,313,313,313,313,313,313,,,,,,313,313,313,313,313,313', -'313,,,313,,,,,,,313,,,313,313,313,313,313,313,313,313,,313,313,313,', -'313,313,,313,313,313,,,,,,,,,,,,,,,,,,,,313,,,313,313,,313,313,,,313', -',,,,,313,,,,,,,,313,,,,,313,313,313,313,313,313,,,,313,313,320,320,320', -',320,,,313,320,320,,,,320,,320,320,320,320,320,320,320,,,,,,320,320', -'320,320,320,320,320,,,320,,,,,,,320,,,320,320,320,320,320,320,320,320', -'320,320,320,320,,320,320,,320,320,320,,,,,,,,,,,,,,,,,,,,320,,,320,', -',320,320,,,320,,,,,,320,,,,,,,,320,,,,,320,320,320,320,320,320,,,,320', -'320,802,802,802,,802,,,320,802,802,,,,802,,802,802,802,802,802,802,802', -',,,,,802,802,802,802,802,802,802,,,802,,,,,,,802,,,802,802,802,802,802', -'802,802,802,,802,802,802,,802,802,,802,802,802,,,,,,,,,,,,,,,,,,,,802', -',,802,,,802,802,,,802,,,,,,802,,,,,,,,802,,,,,802,802,802,802,802,802', -',,,802,802,327,327,327,,327,,,802,327,327,,,,327,,327,327,327,327,327', -'327,327,,,,,,327,327,327,327,327,327,327,,,327,,,,,,,327,,,327,327,327', -'327,327,327,327,327,,327,327,327,,327,327,,327,327,327,,,,,,,,,,,,,', -',,,,,,327,,,327,,,327,327,,,327,,,,,,327,,,,,,,,327,,,,,327,327,327', -'327,327,327,,,,327,327,328,328,328,,328,,,327,328,328,,,,328,,328,328', -'328,328,328,328,328,,,,,,328,328,328,328,328,328,328,,,328,,,,,,,328', -',,328,328,328,328,328,328,328,328,,328,328,328,,328,328,,328,328,328', -',,,,,,,,,,,,,,,,,,,328,,,328,,,328,328,,,328,,,,,,328,,,,,,,,328,,,', -',328,328,328,328,328,328,,,,328,328,340,340,340,,340,,,328,340,340,', -',,340,,340,340,340,340,340,340,340,,,,,,340,340,340,340,340,340,340', -',,340,,,,,,,340,,,340,340,340,340,340,340,340,340,,340,340,340,,340', -'340,,,,340,,,,,,,,,,,,,,,,,,,,340,,,340,,,340,340,,,340,,,,,,,,,,,,', -',,,,,,340,340,340,340,340,340,,,,340,340,342,342,342,,342,,,340,342', -'342,,,,342,,342,342,342,342,342,342,342,,,,,,342,342,342,342,342,342', -'342,,,342,,,,,,,342,,,342,342,342,342,342,342,342,342,,342,342,342,', -'342,342,,,,342,,,,,,,,,,,,,,,,,,,,342,,,342,,,342,342,,,342,,,,,,,,', -',,,,,,,,,,342,342,342,342,342,342,,,,342,342,754,754,754,,754,,,342', -'754,754,,,,754,,754,754,754,754,754,754,754,,,,,,754,754,754,754,754', -'754,754,,,754,,,,,,,754,,,754,754,754,754,754,754,754,754,,754,754,754', -',754,754,,754,754,754,,,,,,,,,,,,,,,,,,,,754,,,754,,,754,754,,,754,', -',,,,754,,,,,,,,754,,,,,754,754,754,754,754,754,,,,754,754,752,752,752', -',752,,,754,752,752,,,,752,,752,752,752,752,752,752,752,,,,,,752,752', -'752,752,752,752,752,,,752,,,,,,,752,,,752,752,752,752,752,752,752,752', -',752,752,752,,752,752,,752,752,752,,,,,,,,,,,,,,,,,,,,752,,,752,,,752', -'752,,,752,,,,,,752,,,,,,,,752,,,,,752,752,752,752,752,752,,,,752,752', -'751,751,751,,751,,,752,751,751,,,,751,,751,751,751,751,751,751,751,', -',,,,751,751,751,751,751,751,751,,,751,,,,,,,751,,,751,751,751,751,751', -'751,751,751,,751,751,751,,751,751,,751,751,751,,,,,,,,,,,,,,,,,,,,751', -',,751,,,751,751,,,751,,,,,,751,,,,,,,,751,,,,,751,751,751,751,751,751', -',,,751,751,750,750,750,,750,,,751,750,750,,,,750,,750,750,750,750,750', -'750,750,,,,,,750,750,750,750,750,750,750,,,750,,,,,,,750,,,750,750,750', -'750,750,750,750,750,,750,750,750,,750,750,,750,750,750,,,,,,,,,,,,,', -',,,,,,750,,,750,,,750,750,,,750,,,,,,750,,,,,,,,750,,,,,750,750,750', -'750,750,750,,,,750,750,749,749,749,,749,,,750,749,749,,,,749,,749,749', -'749,749,749,749,749,,,,,,749,749,749,749,749,749,749,,,749,,,,,,,749', -',,749,749,749,749,749,749,749,749,,749,749,749,,749,749,,749,749,749', -',,,,,,,,,,,,,,,,,,,749,,,749,,,749,749,,,749,,,,,,749,,,,,,,,749,,,', -',749,749,749,749,749,749,,,,749,749,735,735,735,,735,,,749,735,735,', -',,735,,735,735,735,735,735,735,735,,,,,,735,735,735,735,735,735,735', -',,735,,,,,,,735,,,735,735,735,735,735,735,735,735,,735,735,735,,735', -'735,,735,735,735,,,,,,,,,,,,,,,,,,,,735,,,735,,,735,735,,,735,,,,,,735', -',,,,,,,735,,,,,735,735,735,735,735,735,,,,735,735,394,394,394,,394,', -',735,394,394,,,,394,,394,394,394,394,394,394,394,,,,,,394,394,394,394', -'394,394,394,,,394,,,,,,,394,,,394,394,394,394,394,394,394,394,,394,394', -'394,,394,394,,394,394,394,,,,,,,,,,,,,,,,,,,,394,,,394,,,394,394,,,394', -',,,,,394,,,,,,,,394,,,,,394,394,394,394,394,394,,,,394,394,733,733,733', -',733,,,394,733,733,,,,733,,733,733,733,733,733,733,733,,,,,,733,733', -'733,733,733,733,733,,,733,,,,,,,733,,,733,733,733,733,733,733,733,733', -',733,733,733,,733,733,,733,733,733,,,,,,,,,,,,,,,,,,,,733,,,733,,,733', -'733,,,733,,,,,,733,,,,,,,,733,,,,,733,733,733,733,733,733,,,,733,733', -'558,558,558,,558,,,733,558,558,,,,558,,558,558,558,558,558,558,558,', -',,,,558,558,558,558,558,558,558,,,558,,,,,,,558,,,558,558,558,558,558', -'558,558,558,558,558,558,558,,558,558,,558,558,558,,,,,,,,,,,,,,,,,,', -',558,,,558,,,558,558,,,558,,558,,558,,558,,,,,,,,558,,,,,558,558,558', -'558,558,558,,,,558,558,643,643,643,,643,,,558,643,643,,,,643,,643,643', -'643,643,643,643,643,,,,,,643,643,643,643,643,643,643,,,643,,,,,,,643', -',,643,643,643,643,643,643,643,643,,643,643,643,,643,643,,643,643,643', -',,,,,,,,,,,,,,,,,,,643,,,643,,,643,643,,,643,572,,572,572,572,643,572', -',,,,,,643,,,,405,643,643,643,643,643,643,405,405,405,643,643,405,405', -'405,,405,,,643,,572,572,,,405,405,405,,,572,572,572,572,,,405,405,,405', -'405,405,405,405,,,,,,,,,,,,,,,,,,,,,,,,405,405,405,405,405,405,405,405', -'405,405,405,405,405,405,,,405,405,405,,,405,,405,405,,,405,405,,405', -',405,,405,,405,405,405,405,405,405,405,,405,405,405,,,,,,,,,,,,,405', -'405,,405,,405,432,432,432,,432,,,,432,432,,,,432,,432,432,432,432,432', -'432,432,,,,,,432,432,432,432,432,432,432,,,432,,,,,,,432,,,432,432,432', -'432,432,432,432,432,432,432,432,432,,432,432,,432,432,432,,,,,,,,,,', -',,,,,,,,,432,,,432,,,432,432,,,432,,432,,432,,432,,,,,,,,432,,,,,432', -'432,432,432,432,432,,,,432,432,434,434,434,,434,,,432,434,434,,,,434', -',434,434,434,434,434,434,434,,,,,,434,434,434,434,434,434,434,,,434', -',,,,,,434,,,434,434,434,434,434,434,434,434,,434,434,434,,434,434,,434', -'434,434,,,,,,,,,,,,,,,,,,,,434,,,434,,,434,434,,,434,,,,,,434,,,,,,', -',434,,,,,434,434,434,434,434,434,,,,434,434,435,435,435,,435,,,434,435', -'435,,,,435,,435,435,435,435,435,435,435,,,,,,435,435,435,435,435,435', -'435,,,435,,,,,,,435,,,435,435,435,435,435,435,435,435,,435,435,435,', -'435,435,,435,435,435,,,,,,,,,,,,,,,,,,,,435,,,435,,,435,435,,,435,,', -',,,435,,,,,,,,435,,,,,435,435,435,435,435,435,,,,435,435,436,436,436', -',436,,,435,436,436,,,,436,,436,436,436,436,436,436,436,,,,,,436,436', -'436,436,436,436,436,,,436,,,,,,,436,,,436,436,436,436,436,436,436,436', -',436,436,436,,436,436,,436,436,436,,,,,,,,,,,,,,,,,,,,436,,,436,,,436', -'436,,,436,,,,,,436,,,,,,,,436,,,,,436,436,436,436,436,436,,,,436,436', -'649,649,649,,649,,,436,649,649,,,,649,,649,649,649,649,649,649,649,', -',,,,649,649,649,649,649,649,649,,,649,,,,,,,649,,,649,649,649,649,649', -'649,649,649,,649,649,649,,649,649,,,,649,,,,,,,,,,,,,,,,,,,,649,,,649', -',,649,649,,,649,,,,,,,,,,,,,,,,,,,649,649,649,649,649,649,,,,649,649', -'713,713,713,,713,,,649,713,713,,,,713,,713,713,713,713,713,713,713,', -',,,,713,713,713,713,713,713,713,,,713,,,,,,,713,,,713,713,713,713,713', -'713,713,713,713,713,713,713,,713,713,,713,713,713,,,,,,,,,,,,,,,,,,', -',713,,,713,,,713,713,,,713,,713,,713,,713,,,,,,,,713,,,,,713,713,713', -'713,713,713,,,,713,713,660,660,660,,660,,,713,660,660,,,,660,,660,660', -'660,660,660,660,660,,,,,,660,660,660,660,660,660,660,,,660,,,,,,,660', -',,660,660,660,660,660,660,660,660,,660,660,660,,660,660,,,,660,,,,,', -',,,,,,,,,,,,,,660,,,660,,,660,660,,,660,,,,,,,,,,,,,,,,,,,660,660,660', -'660,660,660,,,,660,660,666,666,666,,666,,,660,666,666,,,,666,,666,666', -'666,666,666,666,666,,,,,,666,666,666,666,666,666,666,,,666,,,,,,,666', -',,666,666,666,666,666,666,666,666,,666,666,666,,666,666,,666,666,666', -',,,,,,,,,,,,,,,,,,,666,,,666,,,666,666,,,666,,666,,,,666,,,,,,,,666', -',,,,666,666,666,666,666,666,,,,666,666,520,520,520,,520,,,666,520,520', -',,,520,,520,520,520,520,520,520,520,,,,,,520,520,520,520,520,520,520', -',,520,,,,,,,520,,,520,520,520,520,520,520,520,520,520,520,520,520,,520', -'520,,520,520,520,,,,,,,,,,,,,,,,,,,,520,,,520,,,520,520,,,520,,,,,,520', -',,,,,,,520,,,,,520,520,520,520,520,520,,,,520,520,517,517,517,,517,', -',520,517,517,,,,517,,517,517,517,517,517,517,517,,,,,,517,517,517,517', -'517,517,517,,,517,,,,,,,517,,,517,517,517,517,517,517,517,517,517,517', -'517,517,,517,517,,517,517,517,,,,,,,,,,,,,,,,,,,,517,,,517,,,517,517', -',,517,,517,,,,517,,,,,,,,517,,,,,517,517,517,517,517,517,,,,517,517', -'512,512,512,,512,,,517,512,512,,,,512,,512,512,512,512,512,512,512,', -',,,,512,512,512,512,512,512,512,,,512,,,,,,,512,,,512,512,512,512,512', -'512,512,512,,512,512,512,,512,512,,512,512,512,,,,,,,,,,,,,,,,,,,,512', -',,512,,,512,512,,,512,,,,,,512,,,,,,,,512,,,,,512,512,512,512,512,512', -',,,512,512,508,508,508,,508,,,512,508,508,,,,508,,508,508,508,508,508', -'508,508,,,,,,508,508,508,508,508,508,508,,,508,,,,,,,508,,,508,508,508', -'508,508,508,508,508,,508,508,508,,508,508,,508,508,508,,,,,,,,,,,,,', -',,,,,,508,,,508,,,508,508,,,508,,,,,,508,,,,,,,,508,,,,,508,508,508', -'508,508,508,,,,508,508,507,507,507,,507,,,508,507,507,,,,507,,507,507', -'507,507,507,507,507,,,,,,507,507,507,507,507,507,507,,,507,,,,,,,507', -',,507,507,507,507,507,507,507,507,,507,507,507,,507,507,,507,507,507', -',,,,,,,,,,,,,,,,,,,507,,,507,,,507,507,,,507,,,,,,507,,,,,,,,507,,,', -'464,507,507,507,507,507,507,464,464,464,507,507,464,464,464,,464,,,507', -',,,,,,464,,,,,,,,,,464,464,,464,464,464,464,464,,,,,,,,,,,,,467,,,,', -',,467,467,467,,,467,467,467,,467,,,,,,464,,,,467,,,464,,,,,464,464,467', -'467,,467,467,467,467,467,,,,,,,,,,,,,,464,,,,,,,,,,,,,464,,,,,464,,', -'467,,,,,,,467,,,,,467,467,,,,,,,,,,,,,,,,,,,,,,467,,,,,,506,506,506', -',506,,,467,506,506,,,467,506,,506,506,506,506,506,506,506,,,,,,506,506', -'506,506,506,506,506,,,506,,,,,,,506,,,506,506,506,506,506,506,506,506', -',506,506,506,,506,506,,506,506,506,,,,,,,,,,,,,,,,,,,,506,,,506,,,506', -'506,,,506,,,,,,506,,,,,,,,506,,,,,506,506,506,506,506,506,,,,506,506', -'682,682,682,,682,,,506,682,682,,,,682,,682,682,682,682,682,682,682,', -',,,,682,682,682,682,682,682,682,,,682,,,,,,,682,,,682,682,682,682,682', -'682,682,682,,682,682,682,,682,682,,682,682,682,,,,,,,,,,,,,,,,,,,,682', -',,682,,,682,682,,,682,,,,,,682,,,,,,,,682,,,,,682,682,682,682,682,682', -',,,682,682,707,707,707,,707,,,682,707,707,,,,707,,707,707,707,707,707', -'707,707,,,,,,707,707,707,707,707,707,707,,,707,,,,,397,,707,,,707,707', -'707,707,707,707,707,707,,707,707,707,,707,707,,707,707,707,397,397,397', -'397,397,397,397,397,397,397,397,,397,397,,,397,397,,707,,,707,,,707', -'707,,,707,,,397,,397,707,397,397,397,397,397,397,397,707,397,,,,707', -'707,707,707,707,707,,,,707,707,,397,,,,,,707,12,12,12,12,12,12,12,12', -'12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12', -'12,12,12,12,,,,,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12', -'12,12,12,12,12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12', -'12,12,12,12,12,12,12,,,12,12,,,,,,,,,,12,596,596,596,596,596,596,596', -'596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596', -',,,596,596,596,596,596,596,596,596,596,596,,,,,,596,596,596,596,596', -'596,596,596,596,,,596,,,,,,,,,596,596,,596,596,596,596,596,596,596,', -',596,596,,,,596,596,596,596,,,,,,,,,,,,,,596,596,,596,596,596,596,596', -'596,596,596,596,596,596,,,596,596,,,,,,,,,,596,11,11,11,11,11,11,11', -'11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11', -'11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,,11,11', -',11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11', -'11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,,11,385,385,385,385,385', -'385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385', -'385,385,,,,385,385,385,385,385,385,385,385,385,385,,,,,,385,385,385', -'385,385,385,385,385,385,,,385,,,,,,,,,385,385,,385,385,385,385,385,385', -'385,,,385,385,,,,385,385,385,385,,,,,,,,,,,,,,385,385,,385,385,385,385', -'385,385,385,385,385,385,385,,,385,385,,,,,,,,,,385,723,723,723,723,723', -'723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723', -'723,723,,,,723,723,723,723,723,723,723,723,723,723,,,,,,723,723,723', -'723,723,723,723,723,723,,,723,,,,,,,,,723,723,,723,723,723,723,723,723', -'723,,,723,723,,,,723,723,723,723,,,,,,,,,,,,,,723,723,,723,723,723,723', -'723,723,723,723,723,723,723,,,723,71,71,71,71,71,71,71,71,71,71,71,71', -'71,71,71,71,71,71,71,71,71,71,71,71,,,,71,71,71,71,71,71,71,71,71,71', -',,,,,71,71,71,71,71,71,71,71,71,71,71,71,,71,,,,,,,71,71,,71,71,71,71', -'71,71,71,,,71,71,,,,71,71,71,71,,,,,,71,,,,,,,,71,71,,71,71,71,71,71', -'71,71,71,71,71,71,,,71,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85', -'85,85,85,85,85,85,85,85,85,,,,85,85,85,85,85,85,85,85,85,85,,,,,,85', -'85,85,85,85,85,85,85,85,85,85,85,,85,,,,,,,85,85,,85,85,85,85,85,85', -'85,,,85,85,,,,85,85,85,85,,,,,,,,,,,,,,85,85,,85,85,85,85,85,85,85,85', -'85,85,85,949,949,85,,949,,,,,,,,,949,949,,949,949,949,949,949,949,949', -',,949,949,,,,949,949,949,949,,,,,,949,,,,,,,,949,949,,949,949,949,949', -'949,949,949,949,949,949,949,253,253,949,,253,,,,,,,,,253,253,,253,253', -'253,253,253,253,253,,,253,253,,,,253,253,253,253,,,,,,,,,,,,,,253,253', -',253,253,253,253,253,253,253,253,253,253,253,943,943,253,,943,,,,,,', -',,943,943,,943,943,943,943,943,943,943,,,943,943,,,,943,943,943,943', -',,,,,943,,,,,,,,943,943,,943,943,943,943,943,943,943,943,943,943,943', -'252,252,943,,252,,,,,,,,,252,252,,252,252,252,252,252,252,252,,,252', -'252,,,,252,252,252,252,,,,,,,,,,,,,,252,252,,252,252,252,252,252,252', -'252,252,252,252,252,431,431,252,,431,,,,,,,,,431,431,,431,431,431,431', -'431,431,431,,,431,431,,,,431,431,431,431,,,,,,431,,,,,,,,431,431,,431', -'431,431,431,431,431,431,431,431,431,431,510,510,431,,510,,,,,,,,,510', -'510,,510,510,510,510,510,510,510,,,510,510,,,,510,510,510,510,,,,,,510', -',,,,,,,510,510,,510,510,510,510,510,510,510,510,510,510,510,204,204', -'510,,204,,,,,,,,,204,204,,204,204,204,204,204,204,204,,,204,204,,,,204', -'204,204,204,,,,,,204,,,,,,,,204,204,,204,204,204,204,204,204,204,204', -'204,204,204,203,203,204,,203,,,,,,,,,203,203,,203,203,203,203,203,203', -'203,,,203,203,,,,203,203,203,203,,,,,,203,,,,,,,,203,203,,203,203,203', -'203,203,203,203,203,203,203,203,509,509,203,,509,,,,,,,,,509,509,,509', -'509,509,509,509,509,509,,,509,509,,,,509,509,509,509,,,,,,509,,,,,,', -',509,509,,509,509,509,509,509,509,509,509,509,509,509,711,711,509,,711', -',,,,,,,,711,711,,711,711,711,711,711,711,711,,,711,711,,,,711,711,711', -'711,,,,,,711,,,,,,,,711,711,,711,711,711,711,711,711,711,711,711,711', -'711,497,497,711,,497,,,,,,,,,497,497,,497,497,497,497,497,497,497,,', -'497,497,,,,497,497,497,497,,,,,,497,,,,,,,,497,497,,497,497,497,497', -'497,497,497,497,497,497,497,712,712,497,,712,,,,,,,,,712,712,,712,712', -'712,712,712,712,712,,,712,712,,,,712,712,712,712,,,,,,712,,,,,,,,712', -'712,,712,712,712,712,712,712,712,712,712,712,712,560,560,712,,560,,', -',,,,,,560,560,,560,560,560,560,560,560,560,,,560,560,,,,560,560,560', -'560,,,,,,560,,,,,,,,560,560,,560,560,560,560,560,560,560,560,560,560', -'560,948,948,560,,948,,,,,,,,,948,948,,948,948,948,948,948,948,948,,', -'948,948,,,,948,948,948,948,,,,,,948,,,,,,,,948,948,,948,948,948,948', -'948,948,948,948,948,948,948,498,498,948,,498,,,,,,,,,498,498,,498,498', -'498,498,498,498,498,,,498,498,,,,498,498,498,498,,,,,,498,,,,,,,,498', -'498,,498,498,498,498,498,498,498,498,498,498,498,430,430,498,,430,,', -',,,,,,430,430,,430,430,430,430,430,430,430,,,430,430,,,,430,430,430', -'430,,,,,,430,,,,,,,,430,430,,430,430,430,430,430,430,430,430,430,430', -'430,559,559,430,,559,,,,,,,,,559,559,,559,559,559,559,559,559,559,,', -'559,559,,,,559,559,559,559,,,,,,559,,,,,,,,559,559,,559,559,559,559', -'559,559,559,559,559,559,559,,,559,734,734,734,734,734,734,734,734,734', -'734,734,,734,734,,,734,734,,,,,,,,,,,,,,,734,,734,,734,734,734,734,734', -'734,734,,734,744,744,744,744,744,744,744,744,744,744,744,,744,744,,734', -'744,744,,,,,,,,,,,,,,,744,,744,,744,744,744,744,744,744,744,,744,835', -'835,835,835,835,835,835,835,835,835,835,,835,835,,744,835,835,,,,,,', -',,,,,,,,835,,835,,835,835,835,835,835,835,835,,835,24,24,24,24,24,24', -'24,24,24,24,24,,24,24,,835,24,24,,,,,,,,,,,,,,,24,,24,,24,24,24,24,24', -'24,24,,24,746,746,746,746,746,746,746,746,746,746,746,,746,746,,24,746', -'746,,,,,,,,,,,,,,,746,,746,,746,746,746,746,746,746,746,,746,832,832', -'832,832,832,832,832,832,832,832,832,,832,832,,746,832,832,,,,,,,,,,', -',,,,832,,832,,832,832,832,832,832,832,832,,832,748,748,748,748,748,748', -'748,748,748,748,748,,748,748,,832,748,748,,,,,,,,,,,,,,,748,,748,,748', -'748,748,748,748,748,748,,748,511,511,511,511,511,511,511,511,511,511', -'511,,511,511,,748,511,511,,,,,,,,,,,,,,,511,,511,,511,511,511,511,511', -'511,511,,511,462,462,462,462,462,462,462,462,462,462,462,,462,462,,511', -'462,462,,,,,,,,,,,,,,,462,,462,,462,462,462,462,462,462,462,,462,417', -'417,417,417,417,417,417,417,417,417,417,,417,417,462,462,417,417,,,', -',,,,,,,,,,,417,,417,,417,417,417,417,417,417,417,,417,266,266,266,266', -'266,266,266,266,266,266,266,,266,266,,417,266,266,,,,,,,,,,,,,,,266', -',266,,266,266,266,266,266,266,266,,266,741,741,741,741,741,741,741,741', -'741,741,741,,741,741,,266,741,741,,,,,,,,,,,,,,,741,,741,,741,741,741', -'741,741,741,741,,741,739,739,739,739,739,739,739,739,739,739,739,,739', -'739,,741,739,739,,,,,,,,,,,,,,,739,,739,,739,739,739,739,739,739,739', -',739,661,661,661,661,661,661,661,661,661,661,661,,661,661,,739,661,661', -',,,,,,,,,,,,,,661,,661,,661,661,661,661,661,661,661,,661,,,,,,,,,,,', -',,,,661' ] - racc_action_check = arr = ::Array.new(23604, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -racc_action_pointer = [ - nil, 856, 2914, 1082, nil, 561, nil, nil, 15957, 1455, - nil, 21332, 21084, 624, nil, 1249, 1003, 514, 342, 951, - 399, nil, 67, 10990, 23026, 1054, nil, 525, 283, 11228, - 11353, 11483, 11607, 11731, nil, 2539, 11855, 11979, nil, 946, - 441, 216, 1013, 798, 12351, 12475, 12599, 939, 600, nil, - nil, nil, nil, nil, nil, nil, 1030, nil, 12847, 12971, - nil, 56, nil, 13095, 13219, nil, nil, 13343, 13469, 971, - nil, 21693, nil, nil, nil, nil, nil, 35, nil, nil, - nil, nil, nil, 923, 920, 21806, nil, nil, nil, 640, - nil, nil, 255, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 13593, nil, nil, nil, nil, - 13717, 13841, 13965, 14089, 14213, 928, nil, 361, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 869, nil, 1664, - 14461, 14585, 4788, 22294, 22233, 4912, 5036, 5160, 5284, 5408, - 5532, nil, nil, 644, 143, 206, 906, 230, 820, 864, - nil, 6153, 4164, 842, 6277, 6401, 6525, 6649, 6773, 6897, - 7021, 7145, 7269, 7393, 7517, 7641, 7765, 7889, 8013, 8137, - 8261, 8385, 8509, 8633, 8757, 8881, 9005, 9129, 9253, 9377, - nil, nil, 22050, 21928, 833, 9501, nil, 839, nil, nil, - nil, 9625, nil, nil, 9749, nil, 23341, nil, 795, 794, - nil, 14957, 822, 15205, nil, 780, nil, nil, 520, nil, - 1414, 15577, 770, 3164, 765, 789, 737, 15825, 4289, 679, - 687, 730, 807, 481, nil, 761, 710, 111, nil, nil, - nil, 740, 760, 647, 16577, nil, 352, 683, 665, 817, - nil, 663, nil, 16701, 2164, 767, nil, 373, 506, 631, - 16825, nil, nil, 11317, 756, 120, 51, 17073, 17197, 560, - 684, 384, 129, 90, 860, 448, 123, 451, nil, nil, - 17321, nil, 17445, 330, 259, 565, 140, 76, 363, 487, - 470, 455, nil, 611, nil, nil, nil, nil, nil, 441, - nil, 435, nil, 420, nil, 254, 385, nil, 248, 40, - nil, 309, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 4664, 21456, nil, nil, nil, nil, - 244, nil, 187, nil, 18313, 176, nil, 20952, 148, nil, - nil, 115, 63, 555, 467, 18799, nil, nil, nil, 385, - 130, 88, nil, nil, 900, 770, nil, 23296, nil, 41, - nil, nil, 15826, nil, nil, nil, nil, 154, nil, -9, - 22782, 22111, 18929, 268, 19053, 19177, 19301, 3664, 3539, 339, - 790, -43, 1323, 1322, 1321, 3789, 3914, 4039, 3414, 3289, - 3164, 3039, 2039, 2789, 2664, 2539, 2414, 2289, 853, 956, - 2164, 2914, 23251, 201, 20531, nil, nil, 20587, nil, nil, - nil, nil, 212, 210, 1257, 1254, nil, nil, 12103, nil, - nil, 9998, nil, 10122, nil, 10246, nil, 10370, 720, 1253, - 1245, nil, nil, 1242, 10618, 1223, 10742, 22477, 22721, 908, - 1241, nil, nil, 10866, 1196, nil, 20704, 20417, 20293, 22355, - 22172, 23206, 20169, 1310, 1307, 1187, nil, 20045, nil, nil, - 19921, nil, 1189, nil, 403, 1213, 62, 1966, nil, 1167, - 1148, 1147, nil, nil, nil, nil, nil, nil, 1124, nil, - 576, nil, nil, nil, nil, 1196, nil, nil, 1195, 0, - 1219, nil, 1414, 114, 122, 1211, 1211, nil, 18561, 22843, - 22599, 99, nil, 449, 419, 165, nil, 947, nil, 55, - 5781, nil, 18731, nil, nil, nil, 14337, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 288, nil, - nil, nil, 1070, nil, 1076, nil, 21208, nil, 1059, 5905, - 16081, 438, 1065, 9874, 12227, 12723, 5657, 1043, nil, nil, - nil, 14709, 14833, 1035, nil, 15329, 15081, nil, nil, 97, - 54, 0, 510, 1064, 13343, 1078, nil, nil, 571, nil, - nil, nil, nil, nil, nil, 261, nil, nil, nil, nil, - 1081, nil, 1136, 18685, nil, nil, nil, 1110, 185, 19425, - 1104, nil, 1118, 262, 276, 1161, 388, 1164, 1182, 1144, - 19673, 23476, 1211, 1218, 253, 1284, 19797, nil, nil, 442, - nil, nil, nil, 2664, 2289, 1174, 701, nil, 1841, nil, - nil, 1436, 20828, nil, 774, nil, 1206, 321, nil, 1232, - nil, nil, 649, nil, 1345, nil, nil, nil, nil, 1360, - nil, 10494, 1247, 125, 118, 159, 121, 20952, nil, 1069, - nil, 22416, 22538, 19549, nil, nil, nil, 49, 508, 1164, - 1789, 1716, 320, 21580, 158, 1119, 2789, nil, nil, nil, - nil, nil, 131, 18437, 22891, 18189, nil, 189, nil, 23431, - nil, 23386, nil, nil, 22936, nil, 23071, nil, 23161, 18065, - 17941, 17817, 17693, 77, 17569, 267, 275, 288, nil, 314, - 306, nil, 1150, 312, nil, 1914, nil, 2414, 3664, nil, - nil, 356, 355, nil, nil, 497, nil, 4539, 392, 472, - nil, nil, nil, 478, 591, 480, 483, 491, nil, nil, - 505, 544, nil, 546, nil, 562, 644, 574, 1034, nil, - 697, nil, 16949, 712, 1289, 2039, nil, 144, 97, 96, - 322, 1267, nil, 614, 3539, 16453, nil, 404, 771, 785, - 679, nil, nil, nil, nil, nil, nil, nil, nil, 706, - 697, nil, 23116, 16329, 16205, 22981, 1591, nil, 1466, nil, - nil, 1311, nil, 759, 741, nil, nil, nil, 15701, 876, - 3039, 779, 894, nil, 3414, nil, nil, 34, 15453, nil, - nil, nil, nil, 1341, nil, nil, 1214, nil, 1186, nil, - 1091, nil, nil, nil, 258, 1181, 802, nil, 173, nil, - 926, 940, 6029, 3789, nil, nil, 951, 443, nil, nil, - nil, nil, 994, nil, 837, 852, 858, 860, nil, 861, - nil, 1275, 1077, 937, nil, 883, nil, nil, nil, 1539, - 1167, 1170, 1278, 964, 1282, nil, 892, 893, 895, 904, - 906, 893, 907, 1023, 4414, nil, nil, nil, 136, 4039, - nil, nil, 3914, 3289, 864, nil, nil, 833, nil, 734, - nil, nil, nil, 21989, nil, nil, 1072, 11114, 22660, 21867, - 1292, nil, 604, nil, nil, nil, 763, 967, 819, nil, - nil, nil, 1102, 1107, 1108, 990, 991, 993, 997, 1038, - 1040, nil, 1137, 175, 146, 176, 1392, 881, 886, nil, - nil, nil, nil, nil, 963, nil, nil, nil, 48, nil, - 871, nil ] - -racc_action_default = [ - -1, -580, -579, -580, -2, -566, -4, -5, -580, -8, - -9, -580, -580, -580, -29, -580, -580, -580, -277, -580, - -41, -44, -568, -580, -49, -51, -52, -53, -258, -258, - -258, -289, -328, -329, -70, -579, -74, -82, -84, -580, - -493, -494, -580, -580, -580, -580, -580, -568, -239, -270, - -271, -272, -273, -274, -275, -276, -556, -279, -580, -579, - -287, -297, -394, -580, -580, -302, -305, -566, -580, -313, - -320, -580, -330, -331, -435, -436, -437, -438, -439, -579, - -442, -579, -579, -579, -579, -579, -471, -477, -478, -554, - -482, -483, -555, -485, -486, -487, -488, -489, -490, -491, - -492, -497, -498, 992, -3, -567, -575, -576, -577, -7, - -580, -580, -580, -580, -580, -580, -17, -580, -113, -114, - -115, -116, -117, -118, -119, -120, -121, -125, -126, -127, - -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, - -188, -189, -190, -191, -192, -193, -194, -22, -122, -579, - -580, -580, -579, -580, -580, -580, -580, -580, -580, -580, - -568, -569, -48, -580, -493, -494, -580, -277, -580, -580, - -231, -580, -579, -580, -580, -580, -580, -580, -580, -580, - -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, - -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, - -400, -403, -580, -580, -59, -580, -296, -580, -416, -419, - -65, -579, -413, -66, -568, -67, -240, -253, -579, -579, - -257, -580, -263, -580, -550, -568, -68, -69, -566, -13, - -14, -580, -72, -579, -568, -580, -75, -78, -579, -90, - -91, -580, -580, -98, -289, -292, -568, -406, -328, -329, - -332, -414, -580, -80, -580, -86, -285, -479, -480, -580, - -216, -217, -232, -580, -579, -281, -241, -572, -572, -580, - -579, -298, -299, -519, -50, -580, -580, -580, -580, -566, - -580, -567, -493, -494, -580, -580, -277, -580, -353, -354, - -580, -316, -580, -113, -114, -154, -155, -156, -172, -177, - -184, -187, -323, -580, -493, -494, -545, -546, -440, -580, - -455, -580, -457, -580, -459, -580, -580, -447, -580, -580, - -453, -580, -470, -472, -473, -474, -475, -6, -578, -23, - -24, -25, -26, -27, -579, -580, -19, -20, -21, -123, - -580, -30, -39, -40, -580, -580, -31, -197, -568, -248, - -249, -579, -579, -557, -558, -258, -411, -559, -560, -558, - -557, -258, -410, -412, -559, -560, -37, -205, -38, -580, - -42, -43, -195, -263, -45, -46, -47, -568, -295, -580, - -580, -580, -579, -285, -580, -580, -580, -206, -207, -208, - -209, -210, -211, -212, -213, -218, -219, -220, -221, -222, - -223, -224, -225, -226, -227, -228, -229, -230, -233, -234, - -235, -236, -568, -579, -258, -557, -558, -258, -56, -60, - -259, -407, -579, -579, -568, -568, -291, -254, -580, -262, - -255, -580, -260, -580, -264, -580, -12, -567, -16, -568, - -71, -283, -87, -76, -580, -568, -579, -580, -580, -97, - -580, -479, -480, -580, -83, -88, -580, -580, -580, -580, - -580, -237, -580, -427, -580, -568, -242, -574, -573, -244, - -574, -286, -580, -548, -572, -580, -580, -519, -397, -544, - -544, -544, -518, -520, -521, -522, -523, -524, -525, -526, - -580, -528, -534, -536, -537, -539, -540, -541, -580, -579, - -344, -345, -579, -580, -580, -580, -580, -422, -579, -580, - -580, -285, -310, -108, -109, -580, -111, -580, -277, -580, - -580, -321, -519, -325, -564, -565, -580, -441, -456, -461, - -462, -464, -443, -458, -444, -460, -445, -446, -580, -449, - -451, -452, -580, -476, -580, -18, -580, -28, -269, -580, - -580, -415, -580, -250, -252, -580, -580, -61, -246, -247, - -408, -580, -580, -63, -409, -580, -580, -294, -570, -557, - -558, -557, -558, -568, -195, -580, -383, -384, -579, -386, - -401, -54, -404, -55, -405, -579, -417, -420, -245, -290, - -579, -261, -265, -580, -551, -552, -553, -15, -73, -580, - -79, -85, -568, -557, -558, -579, -94, -96, -580, -81, - -580, -204, -214, -215, -568, -579, -579, -280, -282, -572, - -288, -549, -395, -579, -579, -579, -580, -511, -580, -514, - -516, -580, -580, -355, -580, -357, -359, -366, -525, -568, - -538, -542, -579, -346, -579, -303, -347, -348, -306, -580, - -309, -580, -568, -557, -558, -561, -284, -580, -108, -109, - -110, -580, -580, -579, -314, -499, -500, -580, -317, -579, - -579, -519, -580, -580, -568, -580, -579, -448, -450, -454, - -10, -124, -267, -580, -198, -580, -571, -579, -33, -200, - -34, -201, -62, -35, -203, -36, -202, -64, -196, -580, - -580, -580, -580, -415, -580, -544, -544, -544, -382, -580, - -579, -388, -580, -525, -532, -579, -57, -579, -579, -256, - -266, -77, -92, -89, -293, -579, -351, -579, -428, -579, - -429, -430, -243, -580, -580, -568, -544, -544, -529, -543, - -544, -544, -535, -544, -530, -568, -580, -364, -580, -527, - -580, -349, -580, -580, -579, -579, -308, -580, -415, -580, - -108, -109, -112, -568, -579, -580, -502, -580, -580, -580, - -568, -504, -326, -547, -463, -466, -467, -468, -469, -580, - -268, -32, -199, -251, -580, -238, -373, -375, -580, -378, - -380, -580, -385, -580, -389, -390, -392, -393, -580, -580, - -579, -580, -580, -11, -579, -434, -352, -580, -580, -432, - -398, -399, -396, -580, -507, -509, -580, -512, -580, -515, - -580, -517, -356, -358, -362, -580, -367, -300, -580, -301, - -580, -580, -580, -579, -311, -415, -580, -580, -318, -322, - -324, -503, -519, -465, -544, -544, -544, -544, -533, -544, - -387, -580, -531, -580, -402, -580, -418, -421, -433, -579, - -99, -100, -580, -580, -107, -431, -544, -544, -544, -544, - -360, -580, -365, -580, -579, -304, -307, -265, -579, -579, - -315, -501, -579, -579, -580, -370, -372, -580, -376, -580, - -379, -381, -391, -580, -285, -58, -427, -579, -580, -580, - -106, -505, -580, -508, -510, -513, -580, -363, -579, -423, - -424, -425, -580, -580, -580, -544, -544, -544, -544, -284, - -561, -426, -568, -557, -558, -561, -105, -544, -361, -350, - -312, -319, -327, -368, -580, -371, -374, -377, -415, -506, - -544, -369 ] - -clist = [ -'6,209,212,514,549,552,665,480,352,421,286,4,121,121,126,126,528,398', -'504,267,267,267,373,532,124,124,313,268,268,268,556,116,198,28,393,641', -'469,800,641,28,418,405,411,284,9,601,720,108,104,644,9,105,325,326,28', -'317,329,316,847,695,698,792,28,28,28,428,28,845,254,260,263,756,121', -'516,519,775,474,360,282,362,364,367,370,362,303,689,121,898,644,28,464', -'467,876,358,28,28,788,262,28,379,380,381,382,569,803,571,300,300,873', -'108,330,710,759,2,578,265,276,277,585,476,115,589,269,269,269,630,109', -'361,853,632,197,371,634,339,636,637,28,385,300,490,480,28,28,28,28,28', -'635,9,850,596,318,319,356,522,321,322,383,337,315,785,641,641,714,324', -'324,353,573,324,314,922,515,16,644,320,327,804,328,16,805,391,396,707', -'929,898,416,420,340,814,570,817,267,932,342,719,572,723,395,847,892', -'760,399,844,395,526,16,415,942,672,650,323,324,324,324,324,757,957,251', -'659,463,765,675,472,767,377,473,768,959,532,701,795,28,28,28,28,779', -'873,28,28,28,28,28,28,857,267,843,1,792,623,359,267,978,268,267,28,485', -'699,788,812,363,399,268,366,787,588,790,369,479,479,405,411,753,406', -'532,824,16,500,725,726,505,894,671,372,617,16,815,786,28,576,,,788,489', -'28,,,28,495,766,,772,,,,979,,,,424,425,426,427,652,28,,28,884,553,554', -'523,28,108,486,,488,487,471,282,,758,638,639,282,,,493,655,,,960,470', -',,,728,648,28,269,655,475,808,651,,,,,269,,300,28,28,,,285,771,,,933', -',16,262,668,108,555,702,300,,,602,769,,,,6,,,,121,,126,742,641,16,,594', -',747,,655,124,479,479,644,,608,,595,,,818,819,300,524,300,,820,28,,', -'421,,267,532,895,,896,782,9,324,324,,399,,415,,,,,,,971,,625,,,,607', -',,,916,16,613,16,,,,,16,,,885,626,608,28,,608,,,505,,626,626,,609,,769', -',505,,614,,,,16,267,,883,,,,,,,,399,,,683,406,415,780,,,886,631,,,633', -',,,415,,,,,,,28,774,965,,,,,,390,28,813,647,,,609,,,609,909,,,,,,,28', -'799,,267,,,285,655,,,16,,,399,924,,,,415,,,300,406,,,,640,,,,300,,,', -'406,,823,28,,,28,738,740,,,,28,743,745,532,,420,696,696,121,,126,,28', -'602,,,,,28,669,124,285,715,664,,,285,731,,,988,,963,964,505,,,761,406', -'961,,,602,,626,773,,28,28,479,,862,683,28,28,797,,28,,,,872,,,608,,', -'16,,,,822,,395,776,781,,,,,,718,,,761,,891,724,,,,,602,,,,,,,,,776,', -'776,,737,,809,807,,,,267,,,28,28,,,,,,399,415,,831,,,,16,300,,16,,609', -'121,,614,,,,300,,,,,479,,,28,,,,,,28,,,,,,28,28,,683,,683,,28,761,816', -',,972,,821,,28,,,,,,,855,,,,859,,,406,,,,,,655,,17,,,878,602,,17,,28', -',28,28,,,,,887,,,324,28,213,,,,,,,,213,213,213,,17,291,291,,,,,,,,920', -'683,28,,28,28,,,,,,16,16,213,28,28,,,213,213,696,,213,334,,,,,888,,', -',,,,,,,,,,,,,,692,,683,694,683,28,,,,28,18,,16,16,,17,18,,,16,213,213', -'213,213,17,,324,,,,,,755,,,,,683,28,324,,,300,18,293,293,,,,,776,,300', -'931,,,,,16,267,16,16,,,28,,,,415,399,16,,,,415,602,336,,,28,776,,791', -',28,793,,28,28,,,,,,,,,16,16,,,,28,,,,,16,,17,213,213,213,18,,213,213', -'213,213,213,213,,18,,783,784,,,,,,,17,,,,,,392,,406,,,16,423,,,16,,', -',,,,,,,,,,,19,,,,213,,19,,,,213,,,213,,16,829,,,,,,,,,,,,,,17,,17,19', -',,291,17,,,,16,,,,,18,,482,,484,,,291,,849,16,851,852,,,16,,17,16,16', -'338,856,,18,,,,,,,213,213,,,,897,,,899,,,,,567,,567,,,880,881,,525,', -',,,,19,,,917,,,918,,919,19,,,,,,,,,,,,,,,,18,,18,,,17,293,18,,,,,905', -',,,908,,,,,,,293,,,,,,,,,,18,,,,,,,,,,598,,928,,,,966,,,967,213,968', -',,,,568,,568,,,,,,977,,19,,946,,,,,419,,,,,,,,,,958,,,,,962,19,,,,,', -',990,,,,18,,,,,17,,,,,,,291,,213,,,,,,,291,,,642,,,525,,645,213,646', -',,,,,,,,,,,,,,,,19,,19,,,,,19,,,,,,,,642,,,525,17,,,17,,,41,,,213,,', -'41,,19,,,,,,,213,,,,,,213,,,,,,,,,18,,,41,290,290,,293,,,,,,,,,293,', -',,213,213,,,,,213,213,,,213,,,,40,,333,,,355,40,,732,,,,642,525,19,', -',,,,,,,,,,,,18,,291,18,,40,289,289,,,,41,,291,,,,,,,41,,,,770,,17,17', -',,,,,,,,,,332,,,354,,,,,,778,,,,,,,,,,,,,213,,,794,,,213,,,,,,17,17', -',40,,,,17,,,423,,40,,,,213,19,,,,,,,,,,,293,,,,,41,,,,,,293,,,830,,', -',17,,17,17,,,18,18,,,41,,17,,,,,,,,,,,,,,,,,,,,,19,,,19,213,,17,17,', -',,677,679,680,,,17,213,40,18,18,,,,,828,18,,,,,,,,,,41,,41,,,40,290', -'41,,,,,,,902,,17,,,,17,,,290,912,,,525,,18,419,18,18,41,,,,,,,,18,,', -',,,,,17,,,,,,,,,,355,,355,,,40,,40,,18,18,289,40,,,,17,927,,18,,,,,', -',,,289,19,19,17,,,,,17,,40,17,17,,,,41,,,,,,,,,568,213,18,,,,18,,,,914', -'354,,354,,,,,,,,,19,19,,,,,,19,,,,,,18,,,,,,,,,,,,,,,,,,,,40,,,,,,18', -',,,,,,19,,19,19,,,,,18,,,,19,18,,,18,18,,,,837,839,840,,,41,,,,,,,290', -',,,,,19,19,,290,,,,,,,19,,,864,865,,,867,869,,871,,,,,,,,,,,,,,,,,,', -',,,,,,,19,,,41,19,40,41,,915,,,,289,,,,,,,,,289,,,,,,,,,,,,19,,,,,,', -',,,,,,,,,,,,,,,,,,,19,,,,,,,,40,,,40,,,,19,935,936,938,940,19,941,,19', -'19,,,,,,,,,,,,,,951,953,954,955,,,290,,,,,,,,,,,290,,,,,,,,,,,,,41,41', -',,,,,,,,,,,,,,,,,983,985,986,987,,,,,,,,,989,,,,,,,,,289,,,,991,,41', -'41,,,,289,,41,,,,,,,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,,,,41,,41,41,,', -',,,,,,41,,,,,,40,40,,,,,,40,,,,,,,,,,220,,,,41,41,,,266,266,266,,,,41', -',,,,,,310,311,312,,,,,,40,,40,40,,,,266,,,,,40,,,,,,,355,,41,,,,41,', -',,911,,,,,,,,,,40,40,,,,,,,,,40,,,,,41,,,,,,,,,,,,,,,,,,,,,,,,,,41,', -',354,,40,,,,40,,,,910,,41,,,,,41,,,41,41,,,,,,,,,,,,,,40,,,,,,,,,,,', -',,,,,,,,,,,,,,40,,,,266,397,266,,,417,422,,,,,40,,,,,40,,,40,40,220', -',,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453', -'454,455,456,457,458,459,460,461,462,,,,,,266,,,,,,266,,,266,,,,,,,266', -',266,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,511,,,,,,,266,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,,417,624,397,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,266,,,266,,266,,266,,,,,,,,,,,266,,,,,,,,', -',661,662,663,,,,,,,,,266,,,266,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'266,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,734,,,266,266,739,741', -',,,,744,746,,,624,748,,,,,,,,,,,,,,,,,,,,,,,,,,,266,,,,,,,,,,,,,,,,', -',,,,,,266,,,,,,,,,,,,,,,,266,,,,,,,,,,,,,,,,,,,266,,,,,,,,,,,,266,,', -',,,,,,,,,,,,,,,,,266,,832,,,,,,,,,,,,,,739,741,746,744,,835,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,266,832,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266' ] - racc_goto_table = arr = ::Array.new(3064, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -clist = [ -'6,33,22,10,85,85,13,71,57,20,50,2,58,58,62,62,143,25,52,35,35,35,57', -'134,61,61,33,66,66,66,88,17,17,44,29,72,40,86,72,44,29,38,38,47,9,26', -'92,91,5,179,9,8,19,19,44,66,19,6,139,87,87,174,44,44,44,48,44,138,39', -'39,39,131,58,67,67,14,25,6,46,6,6,6,6,6,51,127,58,175,179,44,38,38,128', -'159,44,44,173,69,44,19,19,19,19,56,14,56,64,64,125,91,5,55,136,3,165', -'45,45,45,165,48,11,165,68,68,68,41,7,161,15,70,18,161,70,21,41,41,44', -'32,64,48,71,44,44,44,44,44,42,9,43,63,68,65,80,81,82,84,9,89,31,136', -'72,72,90,31,31,93,94,31,95,128,96,23,179,97,98,99,100,23,101,22,22,102', -'103,175,22,22,104,105,106,107,35,108,109,110,111,112,66,139,113,129', -'6,137,66,140,23,58,138,141,52,142,31,31,31,31,132,128,144,52,145,146', -'143,149,150,7,151,152,153,134,154,127,44,44,44,44,155,125,44,44,44,44', -'44,44,156,35,136,1,174,25,160,35,128,66,35,44,33,88,173,55,162,6,66', -'163,132,164,132,166,6,6,38,38,26,69,134,167,23,33,168,169,50,131,67', -'170,48,23,171,172,44,178,,,173,47,44,,,44,47,41,,26,,,,86,,,,31,31,31', -'31,25,44,,44,87,19,19,6,44,91,5,,9,8,69,46,,134,48,48,46,,,51,38,,,14', -'45,,,,165,48,44,68,38,45,26,48,,,,,68,,64,44,44,,,12,52,,,92,,23,69', -'48,91,5,25,64,,,33,71,,,,6,,,,58,,62,40,72,23,,2,,40,,38,61,6,6,179', -',6,,17,,,10,10,64,68,64,,143,44,,,20,,35,134,132,,132,67,9,31,31,,6', -',58,,,,,,,13,,33,,,,39,,,,132,23,39,23,,,,,23,,,26,6,6,44,,6,,,50,,6', -'6,,69,,71,,50,,69,,,,23,35,,85,,,,,,,,6,,,126,69,58,29,,,10,39,,,39', -',,,58,,,,,,,44,48,132,,,,,,12,44,25,9,,,69,,,69,85,,,,,,,44,48,,35,', -',12,38,,,23,,,6,85,,,,58,,,64,69,,,,68,,,,64,,,,69,,48,44,,,44,22,22', -',,,44,22,22,134,,22,91,91,58,,62,,44,33,,,,,44,68,61,12,91,31,,,12,17', -',,26,,10,10,50,,,6,69,88,,,33,,6,50,,44,44,6,,48,126,44,44,126,,44,', -',,48,,,6,,,23,,,,57,,66,6,6,,,,,,31,,,6,,48,31,,,,,33,,,,,,,,,6,,6,', -'68,,19,66,,,,35,,,44,44,,,,,,6,58,,22,,,,23,64,,23,,69,58,,69,,,,64', -',,,,6,,,44,,,,,,44,,,,,,44,44,,126,,126,,44,6,91,,,25,,91,,44,,,,,,', -'6,,,,6,,,69,,,,,,38,,24,,,19,33,,24,,44,,44,44,,,,,19,,,31,44,24,,,', -',,,,24,24,24,,24,24,24,,,,,,,,126,126,44,,44,44,,,,,,23,23,24,44,44', -',,24,24,91,,24,24,,,,,91,,,,,,,,,,,,,,,,,12,,126,12,126,44,,,,44,27', -',23,23,,24,27,,,23,24,24,24,24,24,,31,,,,,,130,,,,,126,44,31,,,64,27', -'27,27,,,,,6,,64,91,,,,,23,35,23,23,,,44,,,,58,6,23,,,,58,33,27,,,44', -'6,,130,,44,130,,44,44,,,,,,,,,23,23,,,,44,,,,,23,,24,24,24,24,27,,24', -'24,24,24,24,24,,27,,12,12,,,,,,,24,,,,,,30,,69,,,23,30,,,23,,,,,,,,', -',,,,,28,,,,24,,28,,,,24,,,24,,23,12,,,,,,,,,,,,,,24,,24,28,,,24,24,', -',,23,,,,,27,,30,,30,,,24,,12,23,12,12,,,23,,24,23,23,28,12,,27,,,,,', -',24,24,,,,130,,,130,,,,,24,,24,,,12,12,,30,,,,,,28,,,130,,,130,,130', -'28,,,,,,,,,,,,,,,,27,,27,,,24,27,27,,,,,12,,,,12,,,,,,,27,,,,,,,,,,27', -',,,,,,,,,30,,12,,,,130,,,130,24,130,,,,,27,,27,,,,,,130,,28,,12,,,,', -'28,,,,,,,,,,12,,,,,12,28,,,,,,,130,,,,27,,,,,24,,,,,,,24,,24,,,,,,,24', -',,30,,,30,,30,24,30,,,,,,,,,,,,,,,,,28,,28,,,,,28,,,,,,,,30,,,30,24', -',,24,,,54,,,24,,,54,,28,,,,,,,24,,,,,,24,,,,,,,,,27,,,54,54,54,,27,', -',,,,,,,27,,,,24,24,,,,,24,24,,,24,,,,53,,54,,,54,53,,30,,,,30,30,28', -',,,,,,,,,,,,,27,,24,27,,53,53,53,,,,54,,24,,,,,,,54,,,,30,,24,24,,,', -',,,,,,,53,,,53,,,,,,30,,,,,,,,,,,,,24,,,30,,,24,,,,,,24,24,,53,,,,24', -',,30,,53,,,,24,28,,,,,,,,,,,27,,,,,54,,,,,,27,,,30,,,,24,,24,24,,,27', -'27,,,54,,24,,,,,,,,,,,,,,,,,,,,,28,,,28,24,,24,24,,,,133,133,133,,,24', -'24,53,27,27,,,,,27,27,,,,,,,,,,54,,54,,,53,54,54,,,,,,,24,,24,,,,24', -',,54,24,,,30,,27,28,27,27,54,,,,,,,,27,,,,,,,,24,,,,,,,,,,54,,54,,,53', -',53,,27,27,53,53,,,,24,30,,27,,,,,,,,,53,28,28,24,,,,,24,,53,24,24,', -',,54,,,,,,,,,27,24,27,,,,27,,,,27,53,,53,,,,,,,,,28,28,,,,,,28,,,,,', -'27,,,,,,,,,,,,,,,,,,,,53,,,,,,27,,,,,,,28,,28,28,,,,,27,,,,28,27,,,27', -'27,,,,133,133,133,,,54,,,,,,,54,,,,,,28,28,,54,,,,,,,28,,,133,133,,', -'133,133,,133,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,54,28,53,54,,28,,,,53,,,', -',,,,,53,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,53,,,53,,,', -'28,133,133,133,133,28,133,,28,28,,,,,,,,,,,,,,133,133,133,133,,,54,', -',,,,,,,,,54,,,,,,,,,,,,,54,54,,,,,,,,,,,,,,,,,,133,133,133,133,,,,,', -',,,133,,,,,,,,,53,,,,133,,54,54,,,,53,,54,,,,,,,,,,,53,53,,,,,,,,,,', -',,,,,,,,,,,,,,,,54,,54,54,,,,,,,,,54,,,,,,53,53,,,,,,53,,,,,,,,,,34', -',,,54,54,,,34,34,34,,,,54,,,,,,,34,34,34,,,,,,53,,53,53,,,,34,,,,,53', -',,,,,,54,,54,,,,54,,,,54,,,,,,,,,,53,53,,,,,,,,,53,,,,,54,,,,,,,,,,', -',,,,,,,,,,,,,,,54,,,53,,53,,,,53,,,,53,,54,,,,,54,,,54,54,,,,,,,,,,', -',,,53,,,,,,,,,,,,,,,,,,,,,,,,,,53,,,,34,34,34,,,34,34,,,,,53,,,,,53', -',,53,53,34,,,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34', -'34,34,34,34,34,34,34,,,,,,34,,,,,,34,,,34,,,,,,,34,,34,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,34,,34,34,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',34,,,34,,34,,34,,,,,,,,,,,34,,,,,,,,,,34,34,34,,,,,,,,,34,,,34,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,34,34,,,34,34,34,34,,,,,34,34,,,34,34,,,,,,,,,,,,,,,,,,,,,,', -',,,,34,,,,,,,,,,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,', -'34,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,34,,34,,,,,,,,,,,,,,34,34,34,34', -',34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,34,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34' ] - racc_goto_check = arr = ::Array.new(3064, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -racc_goto_pointer = [ - nil, 245, 9, 113, nil, 43, -2, 118, 46, 42, - -311, 110, 327, -507, -590, -647, nil, 20, 118, -11, - -197, 65, -21, 169, 786, -185, -353, 884, 1035, -166, - 814, 100, 21, -21, 2116, -12, nil, nil, -162, 40, - -218, -338, -322, -618, 31, 84, 43, 8, -145, nil, - -26, 47, -286, 1403, 1339, -454, -237, -63, 1, nil, - nil, 13, 3, -240, 70, 92, -4, -244, 91, 68, - -335, -262, -443, nil, nil, nil, nil, nil, nil, nil, - 81, -167, 93, nil, 93, -321, -655, -494, -300, 89, - -407, 42, -526, 94, -187, 111, -145, 113, 109, -520, - 110, -520, -381, -702, 117, -527, -153, -529, -697, 122, - -378, -158, -378, -624, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -688, -43, -455, -706, -429, - 280, -557, -414, 1066, -300, nil, -516, -561, -695, -704, - -120, -319, 147, -307, 191, -32, -411, nil, nil, -37, - -414, -35, -412, -702, -329, -432, -537, nil, nil, 16, - 169, 46, 176, 178, -103, -245, 181, -452, -304, -304, - 196, -432, -391, -580, -617, -751, nil, nil, -70, -432 ] - -racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 279, 7, 331, 280, - nil, nil, 513, nil, 801, nil, 278, nil, nil, nil, - 14, 15, 21, 219, 309, nil, nil, 217, 218, nil, - 272, 20, nil, 429, 24, 25, 26, 27, 658, nil, - nil, nil, nil, nil, 297, 400, 34, nil, nil, 36, - 39, 38, nil, 214, 215, 566, nil, 123, 408, 122, - 125, 75, 76, nil, 48, nil, 401, nil, 402, 413, - 610, 477, 270, 255, 49, 50, 51, 52, 53, 54, - 55, nil, 256, 61, nil, nil, nil, nil, nil, nil, - nil, 550, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 685, 539, nil, 686, nil, - 529, nil, 531, nil, 789, 627, nil, nil, nil, 537, - nil, nil, nil, 722, nil, nil, nil, 412, 257, nil, - nil, nil, nil, nil, nil, nil, nil, 74, 77, 78, - nil, nil, nil, nil, nil, 583, nil, nil, nil, nil, - nil, nil, 530, 541, 542, 764, 545, 548, nil, 274 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 0, 140, :_reduce_1, - 2, 138, :_reduce_2, - 2, 139, :_reduce_3, - 1, 141, :_reduce_none, - 1, 141, :_reduce_none, - 3, 141, :_reduce_6, - 2, 141, :_reduce_none, - 1, 144, :_reduce_none, - 0, 148, :_reduce_9, - 5, 144, :_reduce_10, - 4, 147, :_reduce_11, - 2, 149, :_reduce_12, - 1, 153, :_reduce_none, - 1, 153, :_reduce_none, - 3, 153, :_reduce_15, - 2, 153, :_reduce_16, - 0, 169, :_reduce_17, - 4, 146, :_reduce_18, - 3, 146, :_reduce_19, - 3, 146, :_reduce_20, - 3, 146, :_reduce_21, - 2, 146, :_reduce_22, - 3, 146, :_reduce_23, - 3, 146, :_reduce_24, - 3, 146, :_reduce_25, - 3, 146, :_reduce_26, - 3, 146, :_reduce_27, - 4, 146, :_reduce_28, - 1, 146, :_reduce_none, - 3, 146, :_reduce_30, - 3, 146, :_reduce_31, - 6, 146, :_reduce_32, - 5, 146, :_reduce_33, - 5, 146, :_reduce_34, - 5, 146, :_reduce_35, - 5, 146, :_reduce_36, - 3, 146, :_reduce_37, - 3, 146, :_reduce_38, - 3, 146, :_reduce_39, - 3, 146, :_reduce_40, - 1, 146, :_reduce_none, - 3, 157, :_reduce_42, - 3, 157, :_reduce_43, - 1, 168, :_reduce_none, - 3, 168, :_reduce_45, - 3, 168, :_reduce_46, - 3, 168, :_reduce_47, - 2, 168, :_reduce_48, - 1, 168, :_reduce_none, - 1, 156, :_reduce_50, - 1, 159, :_reduce_none, - 1, 159, :_reduce_none, - 1, 173, :_reduce_none, - 4, 173, :_reduce_54, - 4, 173, :_reduce_55, - 0, 179, :_reduce_56, - 0, 180, :_reduce_57, - 6, 177, :_reduce_58, - 2, 172, :_reduce_59, - 3, 172, :_reduce_60, - 4, 172, :_reduce_61, - 5, 172, :_reduce_62, - 4, 172, :_reduce_63, - 5, 172, :_reduce_64, - 2, 172, :_reduce_65, - 2, 172, :_reduce_66, - 2, 172, :_reduce_67, - 2, 172, :_reduce_68, - 2, 172, :_reduce_69, - 1, 158, :_reduce_none, - 3, 158, :_reduce_71, - 1, 184, :_reduce_none, - 3, 184, :_reduce_73, - 1, 183, :_reduce_74, - 2, 183, :_reduce_75, - 3, 183, :_reduce_76, - 5, 183, :_reduce_77, - 2, 183, :_reduce_78, - 4, 183, :_reduce_79, - 2, 183, :_reduce_80, - 4, 183, :_reduce_81, - 1, 183, :_reduce_82, - 3, 183, :_reduce_83, - 1, 187, :_reduce_none, - 3, 187, :_reduce_85, - 2, 186, :_reduce_86, - 3, 186, :_reduce_87, - 1, 189, :_reduce_88, - 3, 189, :_reduce_89, - 1, 188, :_reduce_90, - 1, 188, :_reduce_91, - 4, 188, :_reduce_92, - 3, 188, :_reduce_93, - 3, 188, :_reduce_94, - 3, 188, :_reduce_95, - 3, 188, :_reduce_96, - 2, 188, :_reduce_97, - 1, 188, :_reduce_98, - 1, 165, :_reduce_99, - 1, 165, :_reduce_100, - 4, 165, :_reduce_101, - 3, 165, :_reduce_102, - 3, 165, :_reduce_103, - 3, 165, :_reduce_104, - 3, 165, :_reduce_105, - 2, 165, :_reduce_106, - 1, 165, :_reduce_107, - 1, 192, :_reduce_108, - 1, 192, :_reduce_none, - 2, 193, :_reduce_110, - 1, 193, :_reduce_111, - 3, 193, :_reduce_112, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_116, - 1, 194, :_reduce_117, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 154, :_reduce_120, - 1, 154, :_reduce_none, - 1, 155, :_reduce_122, - 0, 200, :_reduce_123, - 4, 155, :_reduce_124, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 3, 171, :_reduce_195, - 5, 171, :_reduce_196, - 3, 171, :_reduce_197, - 5, 171, :_reduce_198, - 6, 171, :_reduce_199, - 5, 171, :_reduce_200, - 5, 171, :_reduce_201, - 5, 171, :_reduce_202, - 5, 171, :_reduce_203, - 4, 171, :_reduce_204, - 3, 171, :_reduce_205, - 3, 171, :_reduce_206, - 3, 171, :_reduce_207, - 3, 171, :_reduce_208, - 3, 171, :_reduce_209, - 3, 171, :_reduce_210, - 3, 171, :_reduce_211, - 3, 171, :_reduce_212, - 3, 171, :_reduce_213, - 4, 171, :_reduce_214, - 4, 171, :_reduce_215, - 2, 171, :_reduce_216, - 2, 171, :_reduce_217, - 3, 171, :_reduce_218, - 3, 171, :_reduce_219, - 3, 171, :_reduce_220, - 3, 171, :_reduce_221, - 3, 171, :_reduce_222, - 3, 171, :_reduce_223, - 3, 171, :_reduce_224, - 3, 171, :_reduce_225, - 3, 171, :_reduce_226, - 3, 171, :_reduce_227, - 3, 171, :_reduce_228, - 3, 171, :_reduce_229, - 3, 171, :_reduce_230, - 2, 171, :_reduce_231, - 2, 171, :_reduce_232, - 3, 171, :_reduce_233, - 3, 171, :_reduce_234, - 3, 171, :_reduce_235, - 3, 171, :_reduce_236, - 3, 171, :_reduce_237, - 6, 171, :_reduce_238, - 1, 171, :_reduce_none, - 1, 167, :_reduce_240, - 1, 202, :_reduce_none, - 2, 202, :_reduce_242, - 4, 202, :_reduce_243, - 2, 202, :_reduce_244, - 3, 206, :_reduce_245, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 162, :_reduce_248, - 1, 162, :_reduce_249, - 2, 162, :_reduce_250, - 4, 162, :_reduce_251, - 2, 162, :_reduce_252, - 1, 182, :_reduce_253, - 2, 182, :_reduce_254, - 2, 182, :_reduce_255, - 4, 182, :_reduce_256, - 1, 182, :_reduce_none, - 0, 210, :_reduce_258, - 2, 176, :_reduce_259, - 2, 209, :_reduce_260, - 2, 208, :_reduce_261, - 1, 208, :_reduce_none, - 1, 203, :_reduce_263, - 2, 203, :_reduce_264, - 3, 203, :_reduce_265, - 4, 203, :_reduce_266, - 3, 166, :_reduce_267, - 4, 166, :_reduce_268, - 2, 166, :_reduce_269, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_278, - 0, 232, :_reduce_279, - 4, 201, :_reduce_280, - 0, 233, :_reduce_281, - 4, 201, :_reduce_282, - 3, 201, :_reduce_283, - 3, 201, :_reduce_284, - 2, 201, :_reduce_285, - 3, 201, :_reduce_286, - 0, 234, :_reduce_287, - 4, 201, :_reduce_288, - 1, 201, :_reduce_289, - 4, 201, :_reduce_290, - 3, 201, :_reduce_291, - 1, 201, :_reduce_292, - 5, 201, :_reduce_293, - 4, 201, :_reduce_294, - 3, 201, :_reduce_295, - 2, 201, :_reduce_296, - 1, 201, :_reduce_none, - 2, 201, :_reduce_298, - 2, 201, :_reduce_299, - 6, 201, :_reduce_300, - 6, 201, :_reduce_301, - 0, 235, :_reduce_302, - 0, 236, :_reduce_303, - 7, 201, :_reduce_304, - 0, 237, :_reduce_305, - 0, 238, :_reduce_306, - 7, 201, :_reduce_307, - 5, 201, :_reduce_308, - 4, 201, :_reduce_309, - 0, 239, :_reduce_310, - 0, 240, :_reduce_311, - 9, 201, :_reduce_312, - 0, 241, :_reduce_313, - 0, 242, :_reduce_314, - 7, 201, :_reduce_315, - 0, 243, :_reduce_316, - 0, 244, :_reduce_317, - 0, 245, :_reduce_318, - 9, 201, :_reduce_319, - 0, 246, :_reduce_320, - 0, 247, :_reduce_321, - 6, 201, :_reduce_322, - 0, 248, :_reduce_323, - 6, 201, :_reduce_324, - 0, 249, :_reduce_325, - 0, 250, :_reduce_326, - 9, 201, :_reduce_327, - 1, 201, :_reduce_328, - 1, 201, :_reduce_329, - 1, 201, :_reduce_330, - 1, 201, :_reduce_331, - 1, 161, :_reduce_332, - 1, 251, :_reduce_none, - 1, 252, :_reduce_none, - 1, 253, :_reduce_none, - 1, 254, :_reduce_none, - 1, 255, :_reduce_none, - 1, 256, :_reduce_none, - 1, 257, :_reduce_none, - 1, 258, :_reduce_none, - 1, 259, :_reduce_none, - 1, 260, :_reduce_none, - 1, 261, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 2, 222, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 223, :_reduce_none, - 5, 223, :_reduce_350, - 1, 151, :_reduce_none, - 2, 151, :_reduce_352, - 1, 226, :_reduce_none, - 1, 226, :_reduce_354, - 1, 262, :_reduce_none, - 3, 262, :_reduce_356, - 1, 265, :_reduce_357, - 3, 265, :_reduce_358, - 1, 264, :_reduce_359, - 4, 264, :_reduce_360, - 6, 264, :_reduce_361, - 3, 264, :_reduce_362, - 5, 264, :_reduce_363, - 2, 264, :_reduce_364, - 4, 264, :_reduce_365, - 1, 264, :_reduce_366, - 3, 264, :_reduce_367, - 6, 266, :_reduce_368, - 8, 266, :_reduce_369, - 4, 266, :_reduce_370, - 6, 266, :_reduce_371, - 4, 266, :_reduce_372, - 2, 266, :_reduce_373, - 6, 266, :_reduce_374, - 2, 266, :_reduce_375, - 4, 266, :_reduce_376, - 6, 266, :_reduce_377, - 2, 266, :_reduce_378, - 4, 266, :_reduce_379, - 2, 266, :_reduce_380, - 4, 266, :_reduce_381, - 1, 266, :_reduce_382, - 1, 178, :_reduce_383, - 1, 178, :_reduce_none, - 3, 272, :_reduce_385, - 1, 272, :_reduce_386, - 4, 272, :_reduce_387, - 1, 273, :_reduce_none, - 2, 273, :_reduce_389, - 1, 274, :_reduce_390, - 3, 274, :_reduce_391, - 1, 275, :_reduce_392, - 1, 275, :_reduce_none, - 0, 279, :_reduce_394, - 3, 221, :_reduce_395, - 4, 277, :_reduce_396, - 1, 277, :_reduce_397, - 3, 278, :_reduce_398, - 3, 278, :_reduce_399, - 0, 282, :_reduce_400, - 0, 283, :_reduce_401, - 6, 281, :_reduce_402, - 2, 174, :_reduce_403, - 4, 174, :_reduce_404, - 4, 174, :_reduce_405, - 0, 285, :_reduce_406, - 3, 220, :_reduce_407, - 4, 220, :_reduce_408, - 4, 220, :_reduce_409, - 3, 220, :_reduce_410, - 3, 220, :_reduce_411, - 3, 220, :_reduce_412, - 2, 220, :_reduce_413, - 1, 220, :_reduce_414, - 4, 220, :_reduce_415, - 0, 286, :_reduce_416, - 0, 287, :_reduce_417, - 6, 219, :_reduce_418, - 0, 288, :_reduce_419, - 0, 289, :_reduce_420, - 6, 219, :_reduce_421, - 0, 291, :_reduce_422, - 6, 225, :_reduce_423, - 1, 290, :_reduce_none, - 1, 290, :_reduce_none, - 6, 150, :_reduce_426, - 0, 150, :_reduce_427, - 1, 292, :_reduce_428, - 1, 292, :_reduce_none, - 1, 292, :_reduce_none, - 2, 293, :_reduce_431, - 1, 293, :_reduce_none, - 2, 152, :_reduce_433, - 1, 152, :_reduce_none, - 1, 211, :_reduce_435, - 1, 211, :_reduce_436, - 1, 211, :_reduce_none, - 1, 212, :_reduce_438, - 1, 295, :_reduce_none, - 2, 295, :_reduce_440, - 3, 296, :_reduce_441, - 1, 296, :_reduce_442, - 3, 213, :_reduce_443, - 3, 214, :_reduce_444, - 3, 215, :_reduce_445, - 3, 215, :_reduce_446, - 1, 300, :_reduce_447, - 3, 300, :_reduce_448, - 1, 301, :_reduce_none, - 2, 301, :_reduce_450, - 3, 216, :_reduce_451, - 3, 216, :_reduce_452, - 1, 303, :_reduce_453, - 3, 303, :_reduce_454, - 1, 297, :_reduce_455, - 2, 297, :_reduce_456, - 1, 298, :_reduce_457, - 2, 298, :_reduce_458, - 1, 299, :_reduce_459, - 2, 299, :_reduce_460, - 1, 302, :_reduce_461, - 0, 305, :_reduce_462, - 3, 302, :_reduce_463, - 0, 306, :_reduce_464, - 4, 302, :_reduce_465, - 1, 304, :_reduce_466, - 1, 304, :_reduce_467, - 1, 304, :_reduce_468, - 1, 304, :_reduce_none, - 2, 198, :_reduce_470, - 1, 198, :_reduce_471, - 1, 307, :_reduce_none, - 1, 307, :_reduce_none, - 1, 307, :_reduce_none, - 1, 307, :_reduce_none, - 3, 199, :_reduce_476, - 1, 294, :_reduce_none, - 1, 294, :_reduce_none, - 2, 294, :_reduce_479, - 2, 294, :_reduce_480, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 191, :_reduce_486, - 1, 191, :_reduce_487, - 1, 191, :_reduce_488, - 1, 191, :_reduce_489, - 1, 191, :_reduce_490, - 1, 191, :_reduce_491, - 1, 191, :_reduce_492, - 1, 217, :_reduce_493, - 1, 217, :_reduce_494, - 1, 160, :_reduce_495, - 1, 160, :_reduce_496, - 1, 164, :_reduce_497, - 1, 164, :_reduce_498, - 1, 227, :_reduce_499, - 0, 308, :_reduce_500, - 4, 227, :_reduce_501, - 2, 227, :_reduce_502, - 3, 229, :_reduce_503, - 2, 229, :_reduce_504, - 6, 280, :_reduce_505, - 8, 280, :_reduce_506, - 4, 280, :_reduce_507, - 6, 280, :_reduce_508, - 4, 280, :_reduce_509, - 6, 280, :_reduce_510, - 2, 280, :_reduce_511, - 4, 280, :_reduce_512, - 6, 280, :_reduce_513, - 2, 280, :_reduce_514, - 4, 280, :_reduce_515, - 2, 280, :_reduce_516, - 4, 280, :_reduce_517, - 1, 280, :_reduce_518, - 0, 280, :_reduce_519, - 1, 276, :_reduce_520, - 1, 276, :_reduce_521, - 1, 276, :_reduce_522, - 1, 276, :_reduce_523, - 1, 263, :_reduce_none, - 1, 263, :_reduce_525, - 1, 310, :_reduce_none, - 3, 310, :_reduce_527, - 1, 267, :_reduce_528, - 3, 267, :_reduce_529, - 3, 311, :_reduce_530, - 3, 312, :_reduce_531, - 1, 268, :_reduce_532, - 3, 268, :_reduce_533, - 1, 309, :_reduce_534, - 3, 309, :_reduce_535, - 1, 313, :_reduce_none, - 1, 313, :_reduce_none, - 2, 269, :_reduce_538, - 1, 269, :_reduce_539, - 1, 314, :_reduce_none, - 1, 314, :_reduce_none, - 2, 271, :_reduce_542, - 2, 270, :_reduce_543, - 0, 270, :_reduce_544, - 1, 230, :_reduce_none, - 0, 315, :_reduce_546, - 4, 230, :_reduce_547, - 1, 218, :_reduce_548, - 2, 218, :_reduce_549, - 1, 205, :_reduce_none, - 3, 205, :_reduce_551, - 3, 316, :_reduce_552, - 3, 316, :_reduce_553, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 175, :_reduce_none, - 1, 175, :_reduce_none, - 1, 175, :_reduce_none, - 1, 175, :_reduce_none, - 1, 284, :_reduce_none, - 1, 284, :_reduce_none, - 1, 284, :_reduce_none, - 1, 231, :_reduce_none, - 1, 231, :_reduce_none, - 0, 142, :_reduce_none, - 1, 142, :_reduce_none, - 0, 170, :_reduce_none, - 1, 170, :_reduce_none, - 2, 185, :_reduce_none, - 2, 163, :_reduce_none, - 0, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 228, :_reduce_575, - 1, 228, :_reduce_none, - 1, 145, :_reduce_none, - 2, 145, :_reduce_578, - 0, 143, :_reduce_579 ] - -racc_reduce_n = 580 - -racc_shift_n = 992 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tREGEXP_END => 63, - :tUPLUS => 64, - :tUMINUS => 65, - :tUMINUS_NUM => 66, - :tPOW => 67, - :tCMP => 68, - :tEQ => 69, - :tEQQ => 70, - :tNEQ => 71, - :tGEQ => 72, - :tLEQ => 73, - :tANDOP => 74, - :tOROP => 75, - :tMATCH => 76, - :tNMATCH => 77, - :tDOT => 78, - :tDOT2 => 79, - :tDOT3 => 80, - :tAREF => 81, - :tASET => 82, - :tLSHFT => 83, - :tRSHFT => 84, - :tCOLON2 => 85, - :tCOLON3 => 86, - :tOP_ASGN => 87, - :tASSOC => 88, - :tLPAREN => 89, - :tLPAREN2 => 90, - :tRPAREN => 91, - :tLPAREN_ARG => 92, - :tLBRACK => 93, - :tLBRACK2 => 94, - :tRBRACK => 95, - :tLBRACE => 96, - :tLBRACE_ARG => 97, - :tSTAR => 98, - :tSTAR2 => 99, - :tAMPER => 100, - :tAMPER2 => 101, - :tTILDE => 102, - :tPERCENT => 103, - :tDIVIDE => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tWORDS_BEG => 119, - :tQWORDS_BEG => 120, - :tSTRING_DBEG => 121, - :tSTRING_DVAR => 122, - :tSTRING_END => 123, - :tSTRING => 124, - :tSYMBOL => 125, - :tNL => 126, - :tEH => 127, - :tCOLON => 128, - :tCOMMA => 129, - :tSPACE => 130, - :tSEMI => 131, - :tLAST_TOKEN => 132, - :tLAMBDA => 133, - :tLAMBEG => 134, - :tEQL => 135, - :tLOWEST => 136 } - -racc_nt_base = 137 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tREGEXP_END", - "tUPLUS", - "tUMINUS", - "tUMINUS_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAST_TOKEN", - "tLAMBDA", - "tLAMBEG", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "@1", - "top_stmts", - "opt_terms", - "none", - "top_stmt", - "terms", - "stmt", - "bodystmt", - "@2", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "backref", - "lhs", - "mrhs", - "arg_value", - "expr", - "@3", - "opt_nl", - "arg", - "command", - "block_command", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "opt_block_param", - "@4", - "@5", - "operation", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@6", - "primary", - "aref_args", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@7", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "superclass", - "term", - "f_arglist", - "singleton", - "dot_or_colon", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "@20", - "@21", - "@22", - "@23", - "@24", - "@25", - "@26", - "k_begin", - "k_if", - "k_unless", - "k_while", - "k_until", - "k_case", - "k_for", - "k_class", - "k_module", - "k_def", - "k_end", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_f_block_arg", - "f_block_arg", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@27", - "f_args", - "do_block", - "@28", - "@29", - "operation3", - "@30", - "@31", - "@32", - "@33", - "@34", - "cases", - "@35", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "qword_list", - "string_dvar", - "@36", - "@37", - "sym", - "@38", - "f_optarg", - "f_arg_item", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "@39", - "assoc" ] - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -def _reduce_1(val, _values, result) - self.lexer.lex_state = :expr_beg - - result -end - -def _reduce_2(val, _values, result) - result = new_compstmt val - - result -end - -def _reduce_3(val, _values, result) - result = val[0] - - result -end - -# reduce 4 omitted - -# reduce 5 omitted - -def _reduce_6(val, _values, result) - result = self.block_append val[0], val[2] - - result -end - -# reduce 7 omitted - -# reduce 8 omitted - -def _reduce_9(val, _values, result) - if (self.in_def || self.in_single > 0) then - yyerror "BEGIN in method" - end - self.env.extend - - result -end - -def _reduce_10(val, _values, result) - result = new_iter s(:preexe), nil, val[3] - - result -end - -def _reduce_11(val, _values, result) - result = new_body val - - result -end - -def _reduce_12(val, _values, result) - result = new_compstmt val - - result -end - -# reduce 13 omitted - -# reduce 14 omitted - -def _reduce_15(val, _values, result) - result = self.block_append val[0], val[2] - - result -end - -def _reduce_16(val, _values, result) - result = val[1] - - result -end - -def _reduce_17(val, _values, result) - lexer.lex_state = :expr_fname - result = self.lexer.lineno - - result -end - -def _reduce_18(val, _values, result) - result = s(:alias, val[1], val[3]).line(val[2]) - - result -end - -def _reduce_19(val, _values, result) - result = s(:valias, val[1].to_sym, val[2].to_sym) - - result -end - -def _reduce_20(val, _values, result) - result = s(:valias, val[1].to_sym, :"$#{val[2]}") - - result -end - -def _reduce_21(val, _values, result) - yyerror "can't make alias for the number variables" - - result -end - -def _reduce_22(val, _values, result) - result = val[1] - - result -end - -def _reduce_23(val, _values, result) - result = new_if val[2], val[0], nil - - result -end - -def _reduce_24(val, _values, result) - result = new_if val[2], nil, val[0] - - result -end - -def _reduce_25(val, _values, result) - result = new_while val[0], val[2], true - - result -end - -def _reduce_26(val, _values, result) - result = new_until val[0], val[2], true - - result -end - -def _reduce_27(val, _values, result) - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) - - result -end - -def _reduce_28(val, _values, result) - if (self.in_def || self.in_single > 0) then - yyerror "END in method; use at_exit" - end - result = new_iter s(:postexe), 0, val[2] - - result -end - -# reduce 29 omitted - -def _reduce_30(val, _values, result) - result = new_masgn val[0], val[2], :wrap - - result -end - -def _reduce_31(val, _values, result) - result = new_op_asgn val - - result -end - -def _reduce_32(val, _values, result) - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - - result -end - -def _reduce_33(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - - result -end - -def _reduce_34(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - - result -end - -def _reduce_35(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - - result -end - -def _reduce_36(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - - result -end - -def _reduce_37(val, _values, result) - self.backref_assign_error val[0] - - result -end - -def _reduce_38(val, _values, result) - result = new_assign val[0], s(:svalue, val[2]) - - result -end - -def _reduce_39(val, _values, result) - result = new_masgn val[0], val[2], :wrap - - result -end - -def _reduce_40(val, _values, result) - result = new_masgn val[0], val[2] - - result -end - -# reduce 41 omitted - -def _reduce_42(val, _values, result) - result = new_assign val[0], val[2] - - result -end - -def _reduce_43(val, _values, result) - result = new_assign val[0], val[2] - - result -end - -# reduce 44 omitted - -def _reduce_45(val, _values, result) - result = logical_op :and, val[0], val[2] - - result -end - -def _reduce_46(val, _values, result) - result = logical_op :or, val[0], val[2] - - result -end - -def _reduce_47(val, _values, result) - result = s(:call, val[2], :"!") - - result -end - -def _reduce_48(val, _values, result) - result = s(:call, val[1], :"!") - - result -end - -# reduce 49 omitted - -def _reduce_50(val, _values, result) - result = value_expr(val[0]) - - result -end - -# reduce 51 omitted - -# reduce 52 omitted - -# reduce 53 omitted - -def _reduce_54(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_55(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_56(val, _values, result) - self.env.extend(:dynamic) - result = self.lexer.lineno - - result -end - -def _reduce_57(val, _values, result) - result = nil # self.env.dynamic.keys - - result -end - -def _reduce_58(val, _values, result) - result = new_iter nil, val[2], val[4] - result.line = val[1] - - self.env.unextend - - result -end - -def _reduce_59(val, _values, result) - result = new_call nil, val[0].to_sym, val[1] - - result -end - -def _reduce_60(val, _values, result) - result = new_call nil, val[0].to_sym, val[1] - if val[2] then - block_dup_check result, val[2] - - result, operation = val[2], result - result.insert 1, operation - end - - result -end - -def _reduce_61(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_62(val, _values, result) - recv, _, msg, args, block = val - call = new_call recv, msg.to_sym, args - - block_dup_check call, block - - block.insert 1, call - result = block - - result -end - -def _reduce_63(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_64(val, _values, result) - recv, _, msg, args, block = val - call = new_call recv, msg.to_sym, args - - block_dup_check call, block - - block.insert 1, call - result = block - - result -end - -def _reduce_65(val, _values, result) - result = new_super val[1] - - result -end - -def _reduce_66(val, _values, result) - result = new_yield val[1] - - result -end - -def _reduce_67(val, _values, result) - line = val[0].last - result = s(:return, ret_args(val[1])).line(line) - - result -end - -def _reduce_68(val, _values, result) - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) - - result -end - -def _reduce_69(val, _values, result) - line = val[0].last - result = s(:next, ret_args(val[1])).line(line) - - result -end - -# reduce 70 omitted - -def _reduce_71(val, _values, result) - result = val[1] - - result -end - -# reduce 72 omitted - -def _reduce_73(val, _values, result) - result = s(:masgn, s(:array, val[1])) - - result -end - -def _reduce_74(val, _values, result) - result = s(:masgn, val[0]) - - result -end - -def _reduce_75(val, _values, result) - result = s(:masgn, val[0] << val[1].compact) - - result -end - -def _reduce_76(val, _values, result) - result = s(:masgn, val[0] << s(:splat, val[2])) - - result -end - -def _reduce_77(val, _values, result) - ary = list_append val[0], s(:splat, val[2]) - ary.concat val[4].sexp_body - result = s(:masgn, ary) - - result -end - -def _reduce_78(val, _values, result) - result = s(:masgn, val[0] << s(:splat)) - - result -end - -def _reduce_79(val, _values, result) - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - - result -end - -def _reduce_80(val, _values, result) - result = s(:masgn, s(:array, s(:splat, val[1]))) - - result -end - -def _reduce_81(val, _values, result) - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - - result -end - -def _reduce_82(val, _values, result) - result = s(:masgn, s(:array, s(:splat))) - - result -end - -def _reduce_83(val, _values, result) - ary = s(:array, s(:splat)) - ary.concat val[2].sexp_body - result = s(:masgn, ary) - - result -end - -# reduce 84 omitted - -def _reduce_85(val, _values, result) - result = val[1] - - result -end - -def _reduce_86(val, _values, result) - result = s(:array, val[0]) - - result -end - -def _reduce_87(val, _values, result) - result = val[0] << val[1].compact - - result -end - -def _reduce_88(val, _values, result) - result = s(:array, val[0]) - - result -end - -def _reduce_89(val, _values, result) - result = list_append val[0], val[2] - - result -end - -def _reduce_90(val, _values, result) - result = self.assignable val[0] - - result -end - -def _reduce_91(val, _values, result) - result = self.assignable val[0] - - result -end - -def _reduce_92(val, _values, result) - result = self.aryset val[0], val[2] - - result -end - -def _reduce_93(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_94(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_95(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_96(val, _values, result) - if (self.in_def || self.in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) - - result -end - -def _reduce_97(val, _values, result) - if (self.in_def || self.in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, nil, s(:colon3, val[1].to_sym)) - - result -end - -def _reduce_98(val, _values, result) - self.backref_assign_error val[0] - - result -end - -def _reduce_99(val, _values, result) - result = self.assignable val[0] - - result -end - -def _reduce_100(val, _values, result) - result = self.assignable val[0] - - result -end - -def _reduce_101(val, _values, result) - result = self.aryset val[0], val[2] - - result -end - -def _reduce_102(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_103(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_104(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - - result -end - -def _reduce_105(val, _values, result) - if (self.in_def || self.in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon2, val[0], val[2].to_sym)) - - result -end - -def _reduce_106(val, _values, result) - if (self.in_def || self.in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon3, val[1].to_sym)) - - result -end - -def _reduce_107(val, _values, result) - self.backref_assign_error val[0] - - result -end - -def _reduce_108(val, _values, result) - yyerror "class/module name must be CONSTANT" - - result -end - -# reduce 109 omitted - -def _reduce_110(val, _values, result) - result = s(:colon3, val[1].to_sym) - - result -end - -def _reduce_111(val, _values, result) - result = val[0].to_sym - - result -end - -def _reduce_112(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - - result -end - -# reduce 113 omitted - -# reduce 114 omitted - -# reduce 115 omitted - -def _reduce_116(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - - result -end - -def _reduce_117(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - - result -end - -# reduce 118 omitted - -# reduce 119 omitted - -def _reduce_120(val, _values, result) - result = s(:lit, val[0].to_sym) - result -end - -# reduce 121 omitted - -def _reduce_122(val, _values, result) - result = new_undef val[0] - - result -end - -def _reduce_123(val, _values, result) - lexer.lex_state = :expr_fname - - result -end - -def _reduce_124(val, _values, result) - result = new_undef val[0], val[3] - - result -end - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -def _reduce_195(val, _values, result) - result = new_assign val[0], val[2] - - result -end - -def _reduce_196(val, _values, result) - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - - result -end - -def _reduce_197(val, _values, result) - result = new_op_asgn val - - result -end - -def _reduce_198(val, _values, result) - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) - - result -end - -def _reduce_199(val, _values, result) - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - - result -end - -def _reduce_200(val, _values, result) - result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) - - result -end - -def _reduce_201(val, _values, result) - result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) - - result -end - -def _reduce_202(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - - result -end - -def _reduce_203(val, _values, result) - yyerror "constant re-assignment" - - result -end - -def _reduce_204(val, _values, result) - yyerror "constant re-assignment" - - result -end - -def _reduce_205(val, _values, result) - self.backref_assign_error val[0] - - result -end - -def _reduce_206(val, _values, result) - v1, v2 = val[0], val[2] - if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) - else - result = s(:dot2, v1, v2) - end - - result -end - -def _reduce_207(val, _values, result) - v1, v2 = val[0], val[2] - if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) - else - result = s(:dot3, v1, v2) - end - - result -end - -def _reduce_208(val, _values, result) - result = new_call val[0], :+, argl(val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = new_call val[0], :-, argl(val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = new_call val[0], :*, argl(val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = new_call val[0], :"/", argl(val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = new_call val[0], :"%", argl(val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = new_call val[0], :**, argl(val[2]) - - result -end - -def _reduce_214(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - - result -end - -def _reduce_215(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - - result -end - -def _reduce_216(val, _values, result) - result = new_call val[1], :"+@" - - result -end - -def _reduce_217(val, _values, result) - result = new_call val[1], :"-@" - - result -end - -def _reduce_218(val, _values, result) - result = new_call val[0], :"|", argl(val[2]) - - result -end - -def _reduce_219(val, _values, result) - result = new_call val[0], :"^", argl(val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = new_call val[0], :"&", argl(val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = new_call val[0], :"<=>", argl(val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = new_call val[0], :">", argl(val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = new_call val[0], :">=", argl(val[2]) - - result -end - -def _reduce_224(val, _values, result) - result = new_call val[0], :"<", argl(val[2]) - - result -end - -def _reduce_225(val, _values, result) - result = new_call val[0], :"<=", argl(val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = new_call val[0], :"==", argl(val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = new_call val[0], :"===", argl(val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = new_call val[0], :"!=", argl(val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = new_match val[0], val[2] - - result -end - -def _reduce_230(val, _values, result) - result = s(:not, new_match(val[0], val[2])) - - result -end - -def _reduce_231(val, _values, result) - result = new_call val[1], :"!" - - result -end - -def _reduce_232(val, _values, result) - val[2] = value_expr val[2] - result = new_call val[1], :"~" - - result -end - -def _reduce_233(val, _values, result) - val[0] = value_expr val[0] - val[2] = value_expr val[2] - result = new_call val[0], :"\<\<", argl(val[2]) - - result -end - -def _reduce_234(val, _values, result) - val[0] = value_expr val[0] - val[2] = value_expr val[2] - result = new_call val[0], :">>", argl(val[2]) - - result -end - -def _reduce_235(val, _values, result) - result = logical_op :and, val[0], val[2] - - result -end - -def _reduce_236(val, _values, result) - result = logical_op :or, val[0], val[2] - - result -end - -def _reduce_237(val, _values, result) - result = s(:defined, val[2]) - - result -end - -def _reduce_238(val, _values, result) - result = s(:if, val[0], val[2], val[5]) - - result -end - -# reduce 239 omitted - -def _reduce_240(val, _values, result) - result = value_expr(val[0]) - - result -end - -# reduce 241 omitted - -def _reduce_242(val, _values, result) - result = val[0] - - result -end - -def _reduce_243(val, _values, result) - result = val[0] << s(:hash, *val[2].values) - - result -end - -def _reduce_244(val, _values, result) - result = s(:array, s(:hash, *val[0].values)) - - result -end - -def _reduce_245(val, _values, result) - result = val[1] - - result -end - -# reduce 246 omitted - -# reduce 247 omitted - -def _reduce_248(val, _values, result) - result = val[0] - - result -end - -def _reduce_249(val, _values, result) - result = val[0] - - result -end - -def _reduce_250(val, _values, result) - result = val[0] - - result -end - -def _reduce_251(val, _values, result) - result = val[0] << s(:hash, *val[2].sexp_body) # TODO: self.args - - result -end - -def _reduce_252(val, _values, result) - result = s(:hash, *val[0].values) - - result -end - -def _reduce_253(val, _values, result) - warning "parenthesize argument(s) for future version" - result = s(:array, val[0]) - - result -end - -def _reduce_254(val, _values, result) - result = self.arg_blk_pass val[0], val[1] - - result -end - -def _reduce_255(val, _values, result) - result = s(:array, s(:hash, *val[0].values)) - result = self.arg_blk_pass result, val[1] - - result -end - -def _reduce_256(val, _values, result) - result = val[0] << s(:hash, *val[2].values) - result = self.arg_blk_pass result, val[3] - - result -end - -# reduce 257 omitted - -def _reduce_258(val, _values, result) - result = lexer.cmdarg.stack.dup # TODO: smell? - lexer.cmdarg.push true - - result -end - -def _reduce_259(val, _values, result) - lexer.cmdarg.stack.replace val[0] - result = val[1] - - result -end - -def _reduce_260(val, _values, result) - result = s(:block_pass, val[1]) - - result -end - -def _reduce_261(val, _values, result) - result = val[1] - - result -end - -# reduce 262 omitted - -def _reduce_263(val, _values, result) - result = s(:array, val[0]) - - result -end - -def _reduce_264(val, _values, result) - result = s(:array, s(:splat, val[1])) - - result -end - -def _reduce_265(val, _values, result) - result = self.list_append val[0], val[2] - - result -end - -def _reduce_266(val, _values, result) - result = self.list_append val[0], s(:splat, val[3]) - - result -end - -def _reduce_267(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_268(val, _values, result) - result = self.arg_concat val[0], val[3] - - result -end - -def _reduce_269(val, _values, result) - result = s(:splat, val[1]) - - result -end - -# reduce 270 omitted - -# reduce 271 omitted - -# reduce 272 omitted - -# reduce 273 omitted - -# reduce 274 omitted - -# reduce 275 omitted - -# reduce 276 omitted - -# reduce 277 omitted - -def _reduce_278(val, _values, result) - result = new_call nil, val[0].to_sym - - result -end - -def _reduce_279(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_280(val, _values, result) - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] - - result -end - -def _reduce_281(val, _values, result) - lexer.lex_state = :expr_endarg - - result -end - -def _reduce_282(val, _values, result) - warning "(...) interpreted as grouped expression" - result = val[1] - - result -end - -def _reduce_283(val, _values, result) - result = val[1] || s(:nil) - result.paren = true - - result -end - -def _reduce_284(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - - result -end - -def _reduce_285(val, _values, result) - result = s(:colon3, val[1].to_sym) - - result -end - -def _reduce_286(val, _values, result) - result = val[1] || s(:array) - - result -end - -def _reduce_287(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_288(val, _values, result) - result = new_hash val - - result -end - -def _reduce_289(val, _values, result) - result = s(:return) - - result -end - -def _reduce_290(val, _values, result) - result = new_yield val[2] - - result -end - -def _reduce_291(val, _values, result) - result = new_yield - - result -end - -def _reduce_292(val, _values, result) - result = new_yield - - result -end - -def _reduce_293(val, _values, result) - result = s(:defined, val[3]) - - result -end - -def _reduce_294(val, _values, result) - result = s(:call, val[2], :"!") - - result -end - -def _reduce_295(val, _values, result) - raise "no3\non#{val.inspect}" - - result -end - -def _reduce_296(val, _values, result) - oper, iter = val[0], val[1] - call = new_call nil, oper.to_sym - iter.insert 1, call - result = iter - call.line = iter.line - - result -end - -# reduce 297 omitted - -def _reduce_298(val, _values, result) - call, iter = val[0], val[1] - block_dup_check call, iter - iter.insert 1, call # FIX - result = iter - - result -end - -def _reduce_299(val, _values, result) - result = val[1] # TODO: fix lineno - - result -end - -def _reduce_300(val, _values, result) - result = new_if val[1], val[3], val[4] - - result -end - -def _reduce_301(val, _values, result) - result = new_if val[1], val[4], val[3] - - result -end - -def _reduce_302(val, _values, result) - lexer.cond.push true - - result -end - -def _reduce_303(val, _values, result) - lexer.cond.pop - - result -end - -def _reduce_304(val, _values, result) - result = new_while val[5], val[2], true - - result -end - -def _reduce_305(val, _values, result) - lexer.cond.push true - - result -end - -def _reduce_306(val, _values, result) - lexer.cond.pop - - result -end - -def _reduce_307(val, _values, result) - result = new_until val[5], val[2], true - - result -end - -def _reduce_308(val, _values, result) - (_, line), expr, _, body, _ = val - result = new_case expr, body, line - - result -end - -def _reduce_309(val, _values, result) - (_, line), _, body, _ = val - result = new_case nil, body, line - - result -end - -def _reduce_310(val, _values, result) - lexer.cond.push true - - result -end - -def _reduce_311(val, _values, result) - lexer.cond.pop - - result -end - -def _reduce_312(val, _values, result) - result = new_for val[4], val[1], val[7] - - result -end - -def _reduce_313(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_314(val, _values, result) - self.comments.push self.lexer.comments - if (self.in_def || self.in_single > 0) then - yyerror "class definition in method body" - end - self.env.extend - - result -end - -def _reduce_315(val, _values, result) - result = new_class val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - - result -end - -def _reduce_316(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_317(val, _values, result) - result = self.in_def - self.in_def = false - - result -end - -def _reduce_318(val, _values, result) - result = self.in_single - self.in_single = 0 - self.env.extend - - result -end - -def _reduce_319(val, _values, result) - result = new_sclass val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - - result -end - -def _reduce_320(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_321(val, _values, result) - self.comments.push self.lexer.comments - yyerror "module definition in method body" if - self.in_def or self.in_single > 0 - - self.env.extend - - result -end - -def _reduce_322(val, _values, result) - result = new_module val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - - result -end - -def _reduce_323(val, _values, result) - result = [self.in_def, self.lexer.cmdarg.stack.dup] - - self.comments.push self.lexer.comments - self.in_def = true - self.env.extend - lexer.cmdarg.stack.replace [false] - - result -end - -def _reduce_324(val, _values, result) - in_def, cmdarg = val[2] - - result = new_defn val - - lexer.cmdarg.stack.replace cmdarg - self.env.unextend - self.in_def = in_def - self.lexer.comments # we don't care about comments in the body - - result -end - -def _reduce_325(val, _values, result) - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname - - result -end - -def _reduce_326(val, _values, result) - self.in_single += 1 - self.env.extend - lexer.lex_state = :expr_end # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] - - result -end - -def _reduce_327(val, _values, result) - line, cmdarg = val[5] - result = new_defs val - result[3].line line - - lexer.cmdarg.stack.replace cmdarg - self.env.unextend - self.in_single -= 1 - self.lexer.comments # we don't care about comments in the body - - result -end - -def _reduce_328(val, _values, result) - result = s(:break) - - result -end - -def _reduce_329(val, _values, result) - result = s(:next) - - result -end - -def _reduce_330(val, _values, result) - result = s(:redo) - - result -end - -def _reduce_331(val, _values, result) - result = s(:retry) - - result -end - -def _reduce_332(val, _values, result) - result = value_expr(val[0]) - - result -end - -# reduce 333 omitted - -# reduce 334 omitted - -# reduce 335 omitted - -# reduce 336 omitted - -# reduce 337 omitted - -# reduce 338 omitted - -# reduce 339 omitted - -# reduce 340 omitted - -# reduce 341 omitted - -# reduce 342 omitted - -# reduce 343 omitted - -# reduce 344 omitted - -# reduce 345 omitted - -# reduce 346 omitted - -# reduce 347 omitted - -# reduce 348 omitted - -# reduce 349 omitted - -def _reduce_350(val, _values, result) - result = s(:if, val[1], val[3], val[4]) - - result -end - -# reduce 351 omitted - -def _reduce_352(val, _values, result) - result = val[1] - - result -end - -# reduce 353 omitted - -def _reduce_354(val, _values, result) - val[0].delete_at 1 if val[0][1].nil? # HACK - - result -end - -# reduce 355 omitted - -def _reduce_356(val, _values, result) - result = val[1] - - result -end - -def _reduce_357(val, _values, result) - result = s(:array, val[0]) - - result -end - -def _reduce_358(val, _values, result) - result = list_append val[0], val[2] - - result -end - -def _reduce_359(val, _values, result) - args, = val - - result = block_var args - - result -end - -def _reduce_360(val, _values, result) - args, _, _, splat = val - - result = block_var args, "*#{splat}".to_sym - - result -end - -def _reduce_361(val, _values, result) - args, _, _, splat, _, args2 = val - - result = block_var args, "*#{splat}".to_sym, args2 - - result -end - -def _reduce_362(val, _values, result) - args, _, _ = val - - result = block_var args, :* - - result -end - -def _reduce_363(val, _values, result) - args, _, _, _, args2 = val - - result = block_var args, :*, args2 - - result -end - -def _reduce_364(val, _values, result) - _, splat = val - - result = block_var :"*#{splat}" - - result -end - -def _reduce_365(val, _values, result) - _, splat, _, args = val - - result = block_var :"*#{splat}", args - - result -end - -def _reduce_366(val, _values, result) - result = block_var :* - - result -end - -def _reduce_367(val, _values, result) - _, _, args = val - - result = block_var :*, args - - result -end - -def _reduce_368(val, _values, result) - result = args val - - result -end - -def _reduce_369(val, _values, result) - result = args val - - result -end - -def _reduce_370(val, _values, result) - result = args val - - result -end - -def _reduce_371(val, _values, result) - result = args val - - result -end - -def _reduce_372(val, _values, result) - result = args val - - result -end - -def _reduce_373(val, _values, result) - result = args val - - result -end - -def _reduce_374(val, _values, result) - result = args val - - result -end - -def _reduce_375(val, _values, result) - result = args val - - result -end - -def _reduce_376(val, _values, result) - result = args val - - result -end - -def _reduce_377(val, _values, result) - result = args val - - result -end - -def _reduce_378(val, _values, result) - result = args val - - result -end - -def _reduce_379(val, _values, result) - result = args val - - result -end - -def _reduce_380(val, _values, result) - result = args val - - result -end - -def _reduce_381(val, _values, result) - result = args val - - result -end - -def _reduce_382(val, _values, result) - result = args val - - result -end - -def _reduce_383(val, _values, result) - result = 0 - result -end - -# reduce 384 omitted - -def _reduce_385(val, _values, result) - result = args val - - result -end - -def _reduce_386(val, _values, result) - result = s(:args) - self.lexer.command_start = true - - result -end - -def _reduce_387(val, _values, result) - result = args val - - result -end - -# reduce 388 omitted - -def _reduce_389(val, _values, result) - result = val[1] - - result -end - -def _reduce_390(val, _values, result) - result = args val - - result -end - -def _reduce_391(val, _values, result) - result = args val - - result -end - -def _reduce_392(val, _values, result) - result = s(:shadow, val[0].to_sym) - - result -end - -# reduce 393 omitted - -def _reduce_394(val, _values, result) - # TODO: dyna_push ? hrm - result = lexer.lpar_beg - lexer.paren_nest += 1 - lexer.lpar_beg = lexer.paren_nest - - result -end - -def _reduce_395(val, _values, result) - lpar, args, body = val - lexer.lpar_beg = lpar - - call = new_call nil, :lambda - result = new_iter call, args, body - - result -end - -def _reduce_396(val, _values, result) - result = args val - - result -end - -def _reduce_397(val, _values, result) - result = val[0] - result = 0 if result == s(:args) - - result -end - -def _reduce_398(val, _values, result) - result = val[1] - - result -end - -def _reduce_399(val, _values, result) - result = val[1] - - result -end - -def _reduce_400(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - - result -end - -def _reduce_401(val, _values, result) - result = nil # self.env.dynamic.keys - - result -end - -def _reduce_402(val, _values, result) - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] - - self.env.unextend - - result -end - -def _reduce_403(val, _values, result) - # TODO: - # if (nd_type($1) == NODE_YIELD) { - # compile_error(PARSER_ARG "block given to yield"); - - syntax_error "Both block arg and actual block given." if - val[0].block_pass? - - val = invert_block_call val if inverted? val - - result = val[1] - result.insert 1, val[0] - - result -end - -def _reduce_404(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_405(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_406(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_407(val, _values, result) - result = new_call nil, val[0].to_sym, val[2] - - result -end - -def _reduce_408(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_409(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end - -def _reduce_410(val, _values, result) - result = new_call val[0], val[2].to_sym - - result -end - -def _reduce_411(val, _values, result) - result = new_call val[0], :call, val[2] - - result -end - -def _reduce_412(val, _values, result) - result = new_call val[0], :call, val[2] - - result -end - -def _reduce_413(val, _values, result) - result = new_super val[1] - - result -end - -def _reduce_414(val, _values, result) - result = s(:zsuper) - - result -end - -def _reduce_415(val, _values, result) - result = new_aref val - - result -end - -def _reduce_416(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - - result -end - -def _reduce_417(val, _values, result) - result = nil # self.env.dynamic.keys - - result -end - -def _reduce_418(val, _values, result) - _, line, args, _, body, _ = val - - result = new_iter nil, args, body - result.line = line - - self.env.unextend - - result -end - -def _reduce_419(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - - result -end - -def _reduce_420(val, _values, result) - result = nil # self.env.dynamic.keys - - result -end - -def _reduce_421(val, _values, result) - _, line, args, _, body, _ = val - - result = new_iter nil, args, body - result.line = line - - self.env.unextend - - result -end - -def _reduce_422(val, _values, result) - result = self.lexer.lineno - - result -end - -def _reduce_423(val, _values, result) - result = new_when(val[2], val[4]) - result.line = val[1] - result << val[5] if val[5] - - result -end - -# reduce 424 omitted - -# reduce 425 omitted - -def _reduce_426(val, _values, result) - (_, line), klasses, var, _, body, rest = val - - klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var - klasses.line line - - result = new_resbody(klasses, body) - result << rest if rest # UGH, rewritten above - - result -end - -def _reduce_427(val, _values, result) - result = nil - - result -end - -def _reduce_428(val, _values, result) - result = s(:array, val[0]) - - result -end - -# reduce 429 omitted - -# reduce 430 omitted - -def _reduce_431(val, _values, result) - result = val[1] - - result -end - -# reduce 432 omitted - -def _reduce_433(val, _values, result) - _, body = val - - result = body || s(:nil) - - result -end - -# reduce 434 omitted - -def _reduce_435(val, _values, result) - result = s(:lit, val[0]) - result -end - -def _reduce_436(val, _values, result) - result = s(:lit, val[0]) - result -end - -# reduce 437 omitted - -def _reduce_438(val, _values, result) - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] - - result -end - -# reduce 439 omitted - -def _reduce_440(val, _values, result) - result = self.literal_concat val[0], val[1] - - result -end - -def _reduce_441(val, _values, result) - result = val[1] - - result -end - -def _reduce_442(val, _values, result) - result = new_string val - - result -end - -def _reduce_443(val, _values, result) - result = new_xstring val[1] - - result -end - -def _reduce_444(val, _values, result) - result = new_regexp val - - result -end - -def _reduce_445(val, _values, result) - result = s(:array) - - result -end - -def _reduce_446(val, _values, result) - result = val[1] - - result -end - -def _reduce_447(val, _values, result) - result = new_word_list - - result -end - -def _reduce_448(val, _values, result) - result = val[0] << new_word_list_entry(val) - - result -end - -# reduce 449 omitted - -def _reduce_450(val, _values, result) - result = self.literal_concat val[0], val[1] - - result -end - -def _reduce_451(val, _values, result) - result = s(:array) - - result -end - -def _reduce_452(val, _values, result) - result = val[1] - - result -end - -def _reduce_453(val, _values, result) - result = new_qword_list - - result -end - -def _reduce_454(val, _values, result) - result = val[0] << new_qword_list_entry(val) - - result -end - -def _reduce_455(val, _values, result) - result = s(:str, "") - - result -end - -def _reduce_456(val, _values, result) - result = literal_concat(val[0], val[1]) - - result -end - -def _reduce_457(val, _values, result) - result = nil - - result -end - -def _reduce_458(val, _values, result) - result = literal_concat(val[0], val[1]) - - result -end - -def _reduce_459(val, _values, result) - result = nil - - result -end - -def _reduce_460(val, _values, result) - result = literal_concat(val[0], val[1]) - - result -end - -def _reduce_461(val, _values, result) - result = new_string val - - result -end - -def _reduce_462(val, _values, result) - result = lexer.lex_strterm - - lexer.lex_strterm = nil - lexer.lex_state = :expr_beg - - result -end - -def _reduce_463(val, _values, result) - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) - - result -end - -def _reduce_464(val, _values, result) - result = [lexer.lex_strterm, - lexer.brace_nest, - lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store] - - lexer.lex_strterm = nil - lexer.brace_nest = 0 - lexer.string_nest = 0 - - lexer.lex_state = :expr_beg - - result -end - -def _reduce_465(val, _values, result) - _, memo, stmt, _ = val - - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg = memo - - lexer.lex_strterm = lex_strterm - lexer.brace_nest = brace_nest - lexer.string_nest = string_nest - - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg - - case stmt - when Sexp then - case stmt.sexp_type - when :str, :dstr, :evstr then - result = stmt - else - result = s(:evstr, stmt) - end - when nil then - result = s(:evstr) - else - raise "unknown string body: #{stmt.inspect}" - end - - result -end - -def _reduce_466(val, _values, result) - result = s(:gvar, val[0].to_sym) - result -end - -def _reduce_467(val, _values, result) - result = s(:ivar, val[0].to_sym) - result -end - -def _reduce_468(val, _values, result) - result = s(:cvar, val[0].to_sym) - result -end - -# reduce 469 omitted - -def _reduce_470(val, _values, result) - lexer.lex_state = :expr_end - result = val[1].to_sym - - result -end - -def _reduce_471(val, _values, result) - result = val[0].to_sym - - result -end - -# reduce 472 omitted - -# reduce 473 omitted - -# reduce 474 omitted - -# reduce 475 omitted - -def _reduce_476(val, _values, result) - lexer.lex_state = :expr_end - result = val[1] - - result ||= s(:str, "") - - case result.sexp_type - when :dstr then - result.sexp_type = :dsym - when :str then - result = s(:lit, result.last.intern) - else - result = s(:dsym, "", result) - end - - result -end - -# reduce 477 omitted - -# reduce 478 omitted - -def _reduce_479(val, _values, result) - result = -val[1] # TODO: pt_testcase - - result -end - -def _reduce_480(val, _values, result) - result = -val[1] # TODO: pt_testcase - - result -end - -# reduce 481 omitted - -# reduce 482 omitted - -# reduce 483 omitted - -# reduce 484 omitted - -# reduce 485 omitted - -def _reduce_486(val, _values, result) - result = s(:nil) - result -end - -def _reduce_487(val, _values, result) - result = s(:self) - result -end - -def _reduce_488(val, _values, result) - result = s(:true) - result -end - -def _reduce_489(val, _values, result) - result = s(:false) - result -end - -def _reduce_490(val, _values, result) - result = s(:str, self.file) - result -end - -def _reduce_491(val, _values, result) - result = s(:lit, lexer.lineno) - result -end - -def _reduce_492(val, _values, result) - result = - if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) - else - s(:str, "Unsupported!") - end - - result -end - -def _reduce_493(val, _values, result) - var = val[0] - result = Sexp === var ? var : self.gettable(var) - - result -end - -def _reduce_494(val, _values, result) - var = val[0] - result = Sexp === var ? var : self.gettable(var) - - result -end - -def _reduce_495(val, _values, result) - result = self.assignable val[0] - - result -end - -def _reduce_496(val, _values, result) - result = self.assignable val[0] - - result -end - -def _reduce_497(val, _values, result) - result = s(:nth_ref, val[0]) - result -end - -def _reduce_498(val, _values, result) - result = s(:back_ref, val[0]) - result -end - -def _reduce_499(val, _values, result) - result = nil - - result -end - -def _reduce_500(val, _values, result) - lexer.lex_state = :expr_beg - - result -end - -def _reduce_501(val, _values, result) - result = val[2] - - result -end - -def _reduce_502(val, _values, result) - yyerrok - result = nil - - result -end - -def _reduce_503(val, _values, result) - result = val[1] - lexer.lex_state = :expr_beg - self.lexer.command_start = true - - result -end - -def _reduce_504(val, _values, result) - result = val[0] - - result -end - -def _reduce_505(val, _values, result) - result = args val - - result -end - -def _reduce_506(val, _values, result) - result = args val - - result -end - -def _reduce_507(val, _values, result) - result = args val - - result -end - -def _reduce_508(val, _values, result) - result = args val - - result -end - -def _reduce_509(val, _values, result) - result = args val - - result -end - -def _reduce_510(val, _values, result) - result = args val - - result -end - -def _reduce_511(val, _values, result) - result = args val - - result -end - -def _reduce_512(val, _values, result) - result = args val - - result -end - -def _reduce_513(val, _values, result) - result = args val - - result -end - -def _reduce_514(val, _values, result) - result = args val - - result -end - -def _reduce_515(val, _values, result) - result = args val - - result -end - -def _reduce_516(val, _values, result) - result = args val - - result -end - -def _reduce_517(val, _values, result) - result = args val - - result -end - -def _reduce_518(val, _values, result) - result = args val - - result -end - -def _reduce_519(val, _values, result) - result = args val - - result -end - -def _reduce_520(val, _values, result) - yyerror "formal argument cannot be a constant" - - result -end - -def _reduce_521(val, _values, result) - yyerror "formal argument cannot be an instance variable" - - result -end - -def _reduce_522(val, _values, result) - yyerror "formal argument cannot be a global variable" - - result -end - -def _reduce_523(val, _values, result) - yyerror "formal argument cannot be a class variable" - - result -end - -# reduce 524 omitted - -def _reduce_525(val, _values, result) - identifier = val[0].to_sym - self.env[identifier] = :lvar - - result = identifier - - result -end - -# reduce 526 omitted - -def _reduce_527(val, _values, result) - result = val[1] - - result -end - -def _reduce_528(val, _values, result) - case val[0] - when Symbol then - result = s(:args) - result << val[0] - when Sexp then - result = val[0] - else - raise "Unknown f_arg type: #{val.inspect}" - end - - result -end - -def _reduce_529(val, _values, result) - list, _, item = val - - if list.sexp_type == :args then - result = list - else - result = s(:args, list) - end - - result << item - - result -end - -def _reduce_530(val, _values, result) - result = self.assignable val[0], val[2] - # TODO: detect duplicate names - - result -end - -def _reduce_531(val, _values, result) - result = self.assignable val[0], val[2] - - result -end - -def _reduce_532(val, _values, result) - result = s(:block, val[0]) - - result -end - -def _reduce_533(val, _values, result) - result = val[0] - result << val[2] - - result -end - -def _reduce_534(val, _values, result) - result = s(:block, val[0]) - - result -end - -def _reduce_535(val, _values, result) - result = self.block_append val[0], val[2] - - result -end - -# reduce 536 omitted - -# reduce 537 omitted - -def _reduce_538(val, _values, result) - # TODO: differs from parse.y - needs tests - name = val[1].to_sym - self.assignable name - result = :"*#{name}" - - result -end - -def _reduce_539(val, _values, result) - name = :"*" - self.env[name] = :lvar - result = name - - result -end - -# reduce 540 omitted - -# reduce 541 omitted - -def _reduce_542(val, _values, result) - identifier = val[1].to_sym - - self.env[identifier] = :lvar - result = "&#{identifier}".to_sym - - result -end - -def _reduce_543(val, _values, result) - result = val[1] - - result -end - -def _reduce_544(val, _values, result) - result = nil - - result -end - -# reduce 545 omitted - -def _reduce_546(val, _values, result) - lexer.lex_state = :expr_beg - - result -end - -def _reduce_547(val, _values, result) - result = val[2] - yyerror "Can't define single method for literals." if - result.sexp_type == :lit - - result -end - -def _reduce_548(val, _values, result) - result = s(:array) - - result -end - -def _reduce_549(val, _values, result) - result = val[0] - - result -end - -# reduce 550 omitted - -def _reduce_551(val, _values, result) - list = val[0].dup - more = val[2].sexp_body - list.push(*more) unless more.empty? - result = list - - result -end - -def _reduce_552(val, _values, result) - result = s(:array, val[0], val[2]) - - result -end - -def _reduce_553(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - result = s(:array, s(:lit, label.to_sym), val.last) - - result -end - -# reduce 554 omitted - -# reduce 555 omitted - -# reduce 556 omitted - -# reduce 557 omitted - -# reduce 558 omitted - -# reduce 559 omitted - -# reduce 560 omitted - -# reduce 561 omitted - -# reduce 562 omitted - -# reduce 563 omitted - -# reduce 564 omitted - -# reduce 565 omitted - -# reduce 566 omitted - -# reduce 567 omitted - -# reduce 568 omitted - -# reduce 569 omitted - -# reduce 570 omitted - -# reduce 571 omitted - -# reduce 572 omitted - -# reduce 573 omitted - -# reduce 574 omitted - -def _reduce_575(val, _values, result) - yyerrok - result -end - -# reduce 576 omitted - -# reduce 577 omitted - -def _reduce_578(val, _values, result) - yyerrok - result -end - -def _reduce_579(val, _values, result) - result = nil - result -end - -def _reduce_none(val, _values, result) - val[0] -end - -end # class Ruby19Parser diff -Nru ruby-ruby-parser-3.11.0/lib/ruby19_parser.y ruby-ruby-parser-3.15.1/lib/ruby19_parser.y --- ruby-ruby-parser-3.11.0/lib/ruby19_parser.y 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby19_parser.y 1970-01-01 00:00:00.000000000 +0000 @@ -1,2116 +0,0 @@ -# -*- racc -*- - -class Ruby19Parser - -token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS - kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT - kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER - kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD - kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ - k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT - tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT - tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ - tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF - tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN - tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE - tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE - tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY - tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG - tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END - tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAST_TOKEN - tLAMBDA tLAMBEG - -prechigh - right tBANG tTILDE tUPLUS - right tPOW - right tUMINUS_NUM tUMINUS - left tSTAR2 tDIVIDE tPERCENT - left tPLUS tMINUS - left tLSHFT tRSHFT - left tAMPER2 - left tPIPE tCARET - left tGT tGEQ tLT tLEQ - nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH - left tANDOP - left tOROP - nonassoc tDOT2 tDOT3 - right tEH tCOLON - left kRESCUE_MOD - right tEQL tOP_ASGN - nonassoc kDEFINED - right kNOT - left kOR kAND - nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD - nonassoc tLBRACE_ARG - nonassoc tLOWEST -preclow - -rule - - program: { - self.lexer.lex_state = :expr_beg - } - top_compstmt - { - result = new_compstmt val - } - - top_compstmt: top_stmts opt_terms - { - result = val[0] - } - - top_stmts: none - | top_stmt - | top_stmts terms top_stmt - { - result = self.block_append val[0], val[2] - } - | error top_stmt - - top_stmt: stmt - | klBEGIN - { - if (self.in_def || self.in_single > 0) then - yyerror "BEGIN in method" - end - self.env.extend - } - tLCURLY top_compstmt tRCURLY - { - result = new_iter s(:preexe), nil, val[3] - } - - bodystmt: compstmt opt_rescue opt_else opt_ensure - { - result = new_body val - } - - compstmt: stmts opt_terms - { - result = new_compstmt val - } - - stmts: none - | stmt - | stmts terms stmt - { - result = self.block_append val[0], val[2] - } - | error stmt - { - result = val[1] - } - - stmt: kALIAS fitem - { - lexer.lex_state = :expr_fname - result = self.lexer.lineno - } - fitem - { - result = s(:alias, val[1], val[3]).line(val[2]) - } - | kALIAS tGVAR tGVAR - { - result = s(:valias, val[1].to_sym, val[2].to_sym) - } - | kALIAS tGVAR tBACK_REF - { - result = s(:valias, val[1].to_sym, :"$#{val[2]}") - } - | kALIAS tGVAR tNTH_REF - { - yyerror "can't make alias for the number variables" - } - | kUNDEF undef_list - { - result = val[1] - } - | stmt kIF_MOD expr_value - { - result = new_if val[2], val[0], nil - } - | stmt kUNLESS_MOD expr_value - { - result = new_if val[2], nil, val[0] - } - | stmt kWHILE_MOD expr_value - { - result = new_while val[0], val[2], true - } - | stmt kUNTIL_MOD expr_value - { - result = new_until val[0], val[2], true - } - | stmt kRESCUE_MOD stmt - { - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) - } - | klEND tLCURLY compstmt tRCURLY - { - if (self.in_def || self.in_single > 0) then - yyerror "END in method; use at_exit" - end - result = new_iter s(:postexe), 0, val[2] - } - | command_asgn - | mlhs tEQL command_call - { - result = new_masgn val[0], val[2], :wrap - } - | var_lhs tOP_ASGN command_call - { - result = new_op_asgn val - } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call - { - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - } - | primary_value tDOT tIDENTIFIER tOP_ASGN command_call - { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - } - | primary_value tDOT tCONSTANT tOP_ASGN command_call - { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - } - | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call - { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call - { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - } - | backref tOP_ASGN command_call - { - self.backref_assign_error val[0] - } - | lhs tEQL mrhs - { - result = new_assign val[0], s(:svalue, val[2]) - } - | mlhs tEQL arg_value - { - result = new_masgn val[0], val[2], :wrap - } - | mlhs tEQL mrhs - { - result = new_masgn val[0], val[2] - } - | expr - - command_asgn: lhs tEQL command_call - { - result = new_assign val[0], val[2] - } - | lhs tEQL command_asgn - { - result = new_assign val[0], val[2] - } - - expr: command_call - | expr kAND expr - { - result = logical_op :and, val[0], val[2] - } - | expr kOR expr - { - result = logical_op :or, val[0], val[2] - } - | kNOT opt_nl expr - { - result = s(:call, val[2], :"!") - } - | tBANG command_call - { - result = s(:call, val[1], :"!") - } - | arg - - expr_value: expr - { - result = value_expr(val[0]) - } - - command_call: command - | block_command - - block_command: block_call - | block_call tDOT operation2 command_args # TODO: dot_or_colon - { - result = new_call val[0], val[2].to_sym, val[3] - } - | block_call tCOLON2 operation2 command_args - { - result = new_call val[0], val[2].to_sym, val[3] - } - - cmd_brace_block: tLBRACE_ARG - { - self.env.extend(:dynamic) - result = self.lexer.lineno - } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - result = new_iter nil, val[2], val[4] - result.line = val[1] - - self.env.unextend - } - - command: operation command_args =tLOWEST - { - result = new_call nil, val[0].to_sym, val[1] - } - | operation command_args cmd_brace_block - { - result = new_call nil, val[0].to_sym, val[1] - if val[2] then - block_dup_check result, val[2] - - result, operation = val[2], result - result.insert 1, operation - end - } - | primary_value tDOT operation2 command_args =tLOWEST - { - result = new_call val[0], val[2].to_sym, val[3] - } - | primary_value tDOT operation2 command_args cmd_brace_block - { - recv, _, msg, args, block = val - call = new_call recv, msg.to_sym, args - - block_dup_check call, block - - block.insert 1, call - result = block - } - | primary_value tCOLON2 operation2 command_args =tLOWEST - { - result = new_call val[0], val[2].to_sym, val[3] - } - | primary_value tCOLON2 operation2 command_args cmd_brace_block - { - recv, _, msg, args, block = val - call = new_call recv, msg.to_sym, args - - block_dup_check call, block - - block.insert 1, call - result = block - } - | kSUPER command_args - { - result = new_super val[1] - } - | kYIELD command_args - { - result = new_yield val[1] - } - | kRETURN call_args - { - line = val[0].last - result = s(:return, ret_args(val[1])).line(line) - } - | kBREAK call_args - { - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) - } - | kNEXT call_args - { - line = val[0].last - result = s(:next, ret_args(val[1])).line(line) - } - - mlhs: mlhs_basic - | tLPAREN mlhs_inner rparen - { - result = val[1] - } - - mlhs_inner: mlhs_basic - | tLPAREN mlhs_inner rparen - { - result = s(:masgn, s(:array, val[1])) - } - - mlhs_basic: mlhs_head - { - result = s(:masgn, val[0]) - } - | mlhs_head mlhs_item - { - result = s(:masgn, val[0] << val[1].compact) - } - | mlhs_head tSTAR mlhs_node - { - result = s(:masgn, val[0] << s(:splat, val[2])) - } - | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post - { - ary = list_append val[0], s(:splat, val[2]) - ary.concat val[4].sexp_body - result = s(:masgn, ary) - } - | mlhs_head tSTAR - { - result = s(:masgn, val[0] << s(:splat)) - } - | mlhs_head tSTAR tCOMMA mlhs_post - { - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - } - | tSTAR mlhs_node - { - result = s(:masgn, s(:array, s(:splat, val[1]))) - } - | tSTAR mlhs_node tCOMMA mlhs_post - { - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - } - | tSTAR - { - result = s(:masgn, s(:array, s(:splat))) - } - | tSTAR tCOMMA mlhs_post - { - ary = s(:array, s(:splat)) - ary.concat val[2].sexp_body - result = s(:masgn, ary) - } - - mlhs_item: mlhs_node - | tLPAREN mlhs_inner rparen - { - result = val[1] - } - - mlhs_head: mlhs_item tCOMMA - { - result = s(:array, val[0]) - } - | mlhs_head mlhs_item tCOMMA - { - result = val[0] << val[1].compact - } - - mlhs_post: mlhs_item - { - result = s(:array, val[0]) - } - | mlhs_post tCOMMA mlhs_item - { - result = list_append val[0], val[2] - } - - mlhs_node: user_variable - { - result = self.assignable val[0] - } - | keyword_variable - { - result = self.assignable val[0] - } - | primary_value tLBRACK2 opt_call_args rbracket - { - result = self.aryset val[0], val[2] - } - | primary_value tDOT tIDENTIFIER - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tCOLON2 tIDENTIFIER - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tDOT tCONSTANT - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tCOLON2 tCONSTANT - { - if (self.in_def || self.in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) - } - | tCOLON3 tCONSTANT - { - if (self.in_def || self.in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, nil, s(:colon3, val[1].to_sym)) - } - | backref - { - self.backref_assign_error val[0] - } - - lhs: user_variable - { - result = self.assignable val[0] - } - | keyword_variable - { - result = self.assignable val[0] - } - | primary_value tLBRACK2 opt_call_args rbracket - { - result = self.aryset val[0], val[2] - } - | primary_value tDOT tIDENTIFIER - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tCOLON2 tIDENTIFIER - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tDOT tCONSTANT - { - result = s(:attrasgn, val[0], :"#{val[2]}=") - } - | primary_value tCOLON2 tCONSTANT - { - if (self.in_def || self.in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon2, val[0], val[2].to_sym)) - } - | tCOLON3 tCONSTANT - { - if (self.in_def || self.in_single > 0) then - yyerror "dynamic constant assignment" - end - - result = s(:const, s(:colon3, val[1].to_sym)) - } - | backref - { - self.backref_assign_error val[0] - } - - cname: tIDENTIFIER - { - yyerror "class/module name must be CONSTANT" - } - | tCONSTANT - - cpath: tCOLON3 cname - { - result = s(:colon3, val[1].to_sym) - } - | cname - { - result = val[0].to_sym - } - | primary_value tCOLON2 cname - { - result = s(:colon2, val[0], val[2].to_sym) - } - - fname: tIDENTIFIER | tCONSTANT | tFID - | op - { - lexer.lex_state = :expr_end - result = val[0] - } - - | reswords - { - lexer.lex_state = :expr_end - result = val[0] - } - - fsym: fname | symbol - - fitem: fsym { result = s(:lit, val[0].to_sym) } - | dsym - - undef_list: fitem - { - result = new_undef val[0] - } - | - undef_list tCOMMA - { - lexer.lex_state = :expr_fname - } - fitem - { - result = new_undef val[0], val[3] - } - - op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ - | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ - | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 - | tSTAR | tDIVIDE | tPERCENT | tPOW | tBANG | tTILDE - | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 - - reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND - | kALIAS | kAND | kBEGIN | kBREAK | kCASE - | kCLASS | kDEF | kDEFINED | kDO | kELSE - | kELSIF | kEND | kENSURE | kFALSE | kFOR - | kIN | kMODULE | kNEXT | kNIL | kNOT - | kOR | kREDO | kRESCUE | kRETRY | kRETURN - | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF - | kWHEN | kYIELD | kIF | kUNLESS | kWHILE - | kUNTIL - - arg: lhs tEQL arg - { - result = new_assign val[0], val[2] - } - | lhs tEQL arg kRESCUE_MOD arg - { - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - } - | var_lhs tOP_ASGN arg - { - result = new_op_asgn val - } - | var_lhs tOP_ASGN arg kRESCUE_MOD arg - { - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) - } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg - { - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - } - | primary_value tDOT tIDENTIFIER tOP_ASGN arg - { - result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) - } - | primary_value tDOT tCONSTANT tOP_ASGN arg - { - result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) - } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg - { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - } - | primary_value tCOLON2 tCONSTANT tOP_ASGN arg - { - yyerror "constant re-assignment" - } - | tCOLON3 tCONSTANT tOP_ASGN arg - { - yyerror "constant re-assignment" - } - | backref tOP_ASGN arg - { - self.backref_assign_error val[0] - } - | arg tDOT2 arg - { - v1, v2 = val[0], val[2] - if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) - else - result = s(:dot2, v1, v2) - end - } - | arg tDOT3 arg - { - v1, v2 = val[0], val[2] - if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) - else - result = s(:dot3, v1, v2) - end - } - | arg tPLUS arg - { - result = new_call val[0], :+, argl(val[2]) - } - | arg tMINUS arg - { - result = new_call val[0], :-, argl(val[2]) - } - | arg tSTAR2 arg - { - result = new_call val[0], :*, argl(val[2]) - } - | arg tDIVIDE arg - { - result = new_call val[0], :"/", argl(val[2]) - } - | arg tPERCENT arg - { - result = new_call val[0], :"%", argl(val[2]) - } - | arg tPOW arg - { - result = new_call val[0], :**, argl(val[2]) - } - | tUMINUS_NUM tINTEGER tPOW arg - { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - } - | tUMINUS_NUM tFLOAT tPOW arg - { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - } - | tUPLUS arg - { - result = new_call val[1], :"+@" - } - | tUMINUS arg - { - result = new_call val[1], :"-@" - } - | arg tPIPE arg - { - result = new_call val[0], :"|", argl(val[2]) - } - | arg tCARET arg - { - result = new_call val[0], :"^", argl(val[2]) - } - | arg tAMPER2 arg - { - result = new_call val[0], :"&", argl(val[2]) - } - | arg tCMP arg - { - result = new_call val[0], :"<=>", argl(val[2]) - } - | arg tGT arg - { - result = new_call val[0], :">", argl(val[2]) - } - | arg tGEQ arg - { - result = new_call val[0], :">=", argl(val[2]) - } - | arg tLT arg - { - result = new_call val[0], :"<", argl(val[2]) - } - | arg tLEQ arg - { - result = new_call val[0], :"<=", argl(val[2]) - } - | arg tEQ arg - { - result = new_call val[0], :"==", argl(val[2]) - } - | arg tEQQ arg - { - result = new_call val[0], :"===", argl(val[2]) - } - | arg tNEQ arg - { - result = new_call val[0], :"!=", argl(val[2]) - } - | arg tMATCH arg - { - result = new_match val[0], val[2] - } - | arg tNMATCH arg - { - result = s(:not, new_match(val[0], val[2])) - } - | tBANG arg - { - result = new_call val[1], :"!" - } - | tTILDE arg - { - val[2] = value_expr val[2] - result = new_call val[1], :"~" - } - | arg tLSHFT arg - { - val[0] = value_expr val[0] - val[2] = value_expr val[2] - result = new_call val[0], :"\<\<", argl(val[2]) - } - | arg tRSHFT arg - { - val[0] = value_expr val[0] - val[2] = value_expr val[2] - result = new_call val[0], :">>", argl(val[2]) - } - | arg tANDOP arg - { - result = logical_op :and, val[0], val[2] - } - | arg tOROP arg - { - result = logical_op :or, val[0], val[2] - } - | kDEFINED opt_nl arg - { - result = s(:defined, val[2]) - } - | arg tEH arg opt_nl tCOLON arg - { - result = s(:if, val[0], val[2], val[5]) - } - | primary - - arg_value: arg - { - result = value_expr(val[0]) - } - - aref_args: none - | args trailer - { - result = val[0] - } - | args tCOMMA assocs trailer - { - result = val[0] << s(:hash, *val[2].values) - } - | assocs trailer - { - result = s(:array, s(:hash, *val[0].values)) - } - - paren_args: tLPAREN2 opt_call_args rparen - { - result = val[1] - } - - opt_paren_args: none - | paren_args - - opt_call_args: none - { - result = val[0] - } - | call_args - { - result = val[0] - } - | args tCOMMA - { - result = val[0] - } - | args tCOMMA assocs tCOMMA - { - result = val[0] << s(:hash, *val[2].sexp_body) # TODO: self.args - } - | assocs tCOMMA - { - result = s(:hash, *val[0].values) - } - - call_args: command - { - warning "parenthesize argument(s) for future version" - result = s(:array, val[0]) - } - | args opt_block_arg - { - result = self.arg_blk_pass val[0], val[1] - } - | assocs opt_block_arg - { - result = s(:array, s(:hash, *val[0].values)) - result = self.arg_blk_pass result, val[1] - } - | args tCOMMA assocs opt_block_arg - { - result = val[0] << s(:hash, *val[2].values) - result = self.arg_blk_pass result, val[3] - } - | block_arg - - command_args: { - result = lexer.cmdarg.stack.dup # TODO: smell? - lexer.cmdarg.push true - } - call_args - { - lexer.cmdarg.stack.replace val[0] - result = val[1] - } - - block_arg: tAMPER arg_value - { - result = s(:block_pass, val[1]) - } - - opt_block_arg: tCOMMA block_arg - { - result = val[1] - } - | none - - args: arg_value - { - result = s(:array, val[0]) - } - | tSTAR arg_value - { - result = s(:array, s(:splat, val[1])) - } - | args tCOMMA arg_value - { - result = self.list_append val[0], val[2] - } - | args tCOMMA tSTAR arg_value - { - result = self.list_append val[0], s(:splat, val[3]) - } - - mrhs: args tCOMMA arg_value - { - result = val[0] << val[2] - } - | args tCOMMA tSTAR arg_value - { - result = self.arg_concat val[0], val[3] - } - | tSTAR arg_value - { - result = s(:splat, val[1]) - } - - primary: literal - | strings - | xstring - | regexp - | words - | qwords - | var_ref - | backref - | tFID - { - result = new_call nil, val[0].to_sym - } - | kBEGIN - { - result = self.lexer.lineno - } - bodystmt kEND - { - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] - } - | tLPAREN_ARG expr - { - lexer.lex_state = :expr_endarg - } - rparen - { - warning "(...) interpreted as grouped expression" - result = val[1] - } - | tLPAREN compstmt tRPAREN - { - result = val[1] || s(:nil) - result.paren = true - } - | primary_value tCOLON2 tCONSTANT - { - result = s(:colon2, val[0], val[2].to_sym) - } - | tCOLON3 tCONSTANT - { - result = s(:colon3, val[1].to_sym) - } - | tLBRACK aref_args tRBRACK - { - result = val[1] || s(:array) - } - | tLBRACE - { - result = self.lexer.lineno - } - assoc_list tRCURLY - { - result = new_hash val - } - | kRETURN - { - result = s(:return) - } - | kYIELD tLPAREN2 call_args rparen - { - result = new_yield val[2] - } - | kYIELD tLPAREN2 rparen - { - result = new_yield - } - | kYIELD - { - result = new_yield - } - | kDEFINED opt_nl tLPAREN2 expr rparen - { - result = s(:defined, val[3]) - } - | kNOT tLPAREN2 expr rparen - { - result = s(:call, val[2], :"!") - } - | kNOT tLPAREN2 rparen - { - raise "no3\non#{val.inspect}" - } - | operation brace_block - { - oper, iter = val[0], val[1] - call = new_call nil, oper.to_sym - iter.insert 1, call - result = iter - call.line = iter.line - } - | method_call - | method_call brace_block - { - call, iter = val[0], val[1] - block_dup_check call, iter - iter.insert 1, call # FIX - result = iter - } - | tLAMBDA lambda - { - result = val[1] # TODO: fix lineno - } - | kIF expr_value then compstmt if_tail kEND - { - result = new_if val[1], val[3], val[4] - } - | kUNLESS expr_value then compstmt opt_else kEND - { - result = new_if val[1], val[4], val[3] - } - | kWHILE - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND - { - result = new_while val[5], val[2], true - } - | kUNTIL - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND - { - result = new_until val[5], val[2], true - } - | kCASE expr_value opt_terms case_body kEND - { - (_, line), expr, _, body, _ = val - result = new_case expr, body, line - } - | kCASE opt_terms case_body kEND - { - (_, line), _, body, _ = val - result = new_case nil, body, line - } - | kFOR for_var kIN - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND - { - result = new_for val[4], val[1], val[7] - } - | kCLASS - { - result = self.lexer.lineno - } - cpath superclass - { - self.comments.push self.lexer.comments - if (self.in_def || self.in_single > 0) then - yyerror "class definition in method body" - end - self.env.extend - } - bodystmt kEND - { - result = new_class val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - } - | kCLASS tLSHFT - { - result = self.lexer.lineno - } - expr - { - result = self.in_def - self.in_def = false - } - term - { - result = self.in_single - self.in_single = 0 - self.env.extend - } - bodystmt kEND - { - result = new_sclass val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - } - | kMODULE - { - result = self.lexer.lineno - } - cpath - { - self.comments.push self.lexer.comments - yyerror "module definition in method body" if - self.in_def or self.in_single > 0 - - self.env.extend - } - bodystmt kEND - { - result = new_module val - self.env.unextend - self.lexer.comments # we don't care about comments in the body - } - | kDEF fname - { - result = [self.in_def, self.lexer.cmdarg.stack.dup] - - self.comments.push self.lexer.comments - self.in_def = true - self.env.extend - lexer.cmdarg.stack.replace [false] - } - f_arglist bodystmt kEND - { - in_def, cmdarg = val[2] - - result = new_defn val - - lexer.cmdarg.stack.replace cmdarg - self.env.unextend - self.in_def = in_def - self.lexer.comments # we don't care about comments in the body - } - | kDEF singleton dot_or_colon - { - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname - } - fname - { - self.in_single += 1 - self.env.extend - lexer.lex_state = :expr_end # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] - } - f_arglist bodystmt kEND - { - line, cmdarg = val[5] - result = new_defs val - result[3].line line - - lexer.cmdarg.stack.replace cmdarg - self.env.unextend - self.in_single -= 1 - self.lexer.comments # we don't care about comments in the body - } - | kBREAK - { - result = s(:break) - } - | kNEXT - { - result = s(:next) - } - | kREDO - { - result = s(:redo) - } - | kRETRY - { - result = s(:retry) - } - - primary_value: primary - { - result = value_expr(val[0]) - } - - # These are really stupid - k_begin: kBEGIN - k_if: kIF - k_unless: kUNLESS - k_while: kWHILE - k_until: kUNTIL - k_case: kCASE - k_for: kFOR - k_class: kCLASS - k_module: kMODULE - k_def: kDEF - k_end: kEND - - then: term - | kTHEN - | term kTHEN - - do: term - | kDO_COND - - if_tail: opt_else - | kELSIF expr_value then compstmt if_tail - { - result = s(:if, val[1], val[3], val[4]) - } - - opt_else: none - | kELSE compstmt - { - result = val[1] - } - - for_var: lhs - | mlhs - { - val[0].delete_at 1 if val[0][1].nil? # HACK - } - - f_marg: f_norm_arg - | tLPAREN f_margs rparen - { - result = val[1] - } - - f_marg_list: f_marg - { - result = s(:array, val[0]) - } - | f_marg_list tCOMMA f_marg - { - result = list_append val[0], val[2] - } - - f_margs: f_marg_list - { - args, = val - - result = block_var args - } - | f_marg_list tCOMMA tSTAR f_norm_arg - { - args, _, _, splat = val - - result = block_var args, "*#{splat}".to_sym - } - | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list - { - args, _, _, splat, _, args2 = val - - result = block_var args, "*#{splat}".to_sym, args2 - } - | f_marg_list tCOMMA tSTAR - { - args, _, _ = val - - result = block_var args, :* - } - | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list - { - args, _, _, _, args2 = val - - result = block_var args, :*, args2 - } - | tSTAR f_norm_arg - { - _, splat = val - - result = block_var :"*#{splat}" - } - | tSTAR f_norm_arg tCOMMA f_marg_list - { - _, splat, _, args = val - - result = block_var :"*#{splat}", args - } - | tSTAR - { - result = block_var :* - } - | tSTAR tCOMMA f_marg_list - { - _, _, args = val - - result = block_var :*, args - } - - block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_block_optarg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_rest_arg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA - { - result = args val - } - | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_arg opt_f_block_arg - { - result = args val - } - | f_block_optarg tCOMMA f_rest_arg opt_f_block_arg - { - result = args val - } - | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_block_optarg opt_f_block_arg - { - result = args val - } - | f_block_optarg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_rest_arg opt_f_block_arg - { - result = args val - } - | f_rest_arg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_block_arg - { - result = args val - } - - opt_block_param: none { result = 0 } - | block_param_def - - block_param_def: tPIPE opt_bv_decl tPIPE - { - result = args val - } - | tOROP - { - result = s(:args) - self.lexer.command_start = true - } - | tPIPE block_param opt_bv_decl tPIPE - { - result = args val - } - - opt_bv_decl: none - | tSEMI bv_decls - { - result = val[1] - } - - bv_decls: bvar - { - result = args val - } - | bv_decls tCOMMA bvar - { - result = args val - } - - bvar: tIDENTIFIER - { - result = s(:shadow, val[0].to_sym) - } - | f_bad_arg - - lambda: { - # TODO: dyna_push ? hrm - result = lexer.lpar_beg - lexer.paren_nest += 1 - lexer.lpar_beg = lexer.paren_nest - } - f_larglist lambda_body - { - lpar, args, body = val - lexer.lpar_beg = lpar - - call = new_call nil, :lambda - result = new_iter call, args, body - } - - f_larglist: tLPAREN2 f_args opt_bv_decl rparen - { - result = args val - } - | f_args - { - result = val[0] - result = 0 if result == s(:args) - } - - lambda_body: tLAMBEG compstmt tRCURLY - { - result = val[1] - } - | kDO_LAMBDA compstmt kEND - { - result = val[1] - } - - do_block: kDO_BLOCK - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt kEND - { - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] - - self.env.unextend - } - - block_call: command do_block - { - # TODO: - # if (nd_type($1) == NODE_YIELD) { - # compile_error(PARSER_ARG "block given to yield"); - - syntax_error "Both block arg and actual block given." if - val[0].block_pass? - - val = invert_block_call val if inverted? val - - result = val[1] - result.insert 1, val[0] - } - | block_call tDOT operation2 opt_paren_args - { - result = new_call val[0], val[2].to_sym, val[3] - } - | block_call tCOLON2 operation2 opt_paren_args - { - result = new_call val[0], val[2].to_sym, val[3] - } - - method_call: operation - { - result = self.lexer.lineno - } - paren_args - { - result = new_call nil, val[0].to_sym, val[2] - } - | primary_value tDOT operation2 opt_paren_args - { - result = new_call val[0], val[2].to_sym, val[3] - } - | primary_value tCOLON2 operation2 paren_args - { - result = new_call val[0], val[2].to_sym, val[3] - } - | primary_value tCOLON2 operation3 - { - result = new_call val[0], val[2].to_sym - } - | primary_value tDOT paren_args - { - result = new_call val[0], :call, val[2] - } - | primary_value tCOLON2 paren_args - { - result = new_call val[0], :call, val[2] - } - | kSUPER paren_args - { - result = new_super val[1] - } - | kSUPER - { - result = s(:zsuper) - } - | primary_value tLBRACK2 opt_call_args rbracket - { - result = new_aref val - } - - brace_block: tLCURLY - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - _, line, args, _, body, _ = val - - result = new_iter nil, args, body - result.line = line - - self.env.unextend - } - | kDO - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt kEND - { - _, line, args, _, body, _ = val - - result = new_iter nil, args, body - result.line = line - - self.env.unextend - } - - case_body: kWHEN - { - result = self.lexer.lineno - } - args then compstmt cases - { - result = new_when(val[2], val[4]) - result.line = val[1] - result << val[5] if val[5] - } - - cases: opt_else | case_body - - opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue - { - (_, line), klasses, var, _, body, rest = val - - klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var - klasses.line line - - result = new_resbody(klasses, body) - result << rest if rest # UGH, rewritten above - } - | - { - result = nil - } - - exc_list: arg_value - { - result = s(:array, val[0]) - } - | mrhs - | none - - exc_var: tASSOC lhs - { - result = val[1] - } - | none - - opt_ensure: kENSURE compstmt - { - _, body = val - - result = body || s(:nil) - } - | none - - literal: numeric { result = s(:lit, val[0]) } - | symbol { result = s(:lit, val[0]) } - | dsym - - strings: string - { - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] - } - - string: string1 - | string string1 - { - result = self.literal_concat val[0], val[1] - } - - string1: tSTRING_BEG string_contents tSTRING_END - { - result = val[1] - } - | tSTRING - { - result = new_string val - } - - xstring: tXSTRING_BEG xstring_contents tSTRING_END - { - result = new_xstring val[1] - } - - regexp: tREGEXP_BEG regexp_contents tREGEXP_END - { - result = new_regexp val - } - - words: tWORDS_BEG tSPACE tSTRING_END - { - result = s(:array) - } - | tWORDS_BEG word_list tSTRING_END - { - result = val[1] - } - - word_list: none - { - result = new_word_list - } - | word_list word tSPACE - { - result = val[0] << new_word_list_entry(val) - } - - word: string_content - | word string_content - { - result = self.literal_concat val[0], val[1] - } - - qwords: tQWORDS_BEG tSPACE tSTRING_END - { - result = s(:array) - } - | tQWORDS_BEG qword_list tSTRING_END - { - result = val[1] - } - - qword_list: none - { - result = new_qword_list - } - | qword_list tSTRING_CONTENT tSPACE - { - result = val[0] << new_qword_list_entry(val) - } - - string_contents: none - { - result = s(:str, "") - } - | string_contents string_content - { - result = literal_concat(val[0], val[1]) - } - -xstring_contents: none - { - result = nil - } - | xstring_contents string_content - { - result = literal_concat(val[0], val[1]) - } - -regexp_contents: none - { - result = nil - } - | regexp_contents string_content - { - result = literal_concat(val[0], val[1]) - } - - string_content: tSTRING_CONTENT - { - result = new_string val - } - | tSTRING_DVAR - { - result = lexer.lex_strterm - - lexer.lex_strterm = nil - lexer.lex_state = :expr_beg - } - string_dvar - { - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) - } - | tSTRING_DBEG - { - result = [lexer.lex_strterm, - lexer.brace_nest, - lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store] - - lexer.lex_strterm = nil - lexer.brace_nest = 0 - lexer.string_nest = 0 - - lexer.lex_state = :expr_beg - } - compstmt tRCURLY - { - _, memo, stmt, _ = val - - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg = memo - - lexer.lex_strterm = lex_strterm - lexer.brace_nest = brace_nest - lexer.string_nest = string_nest - - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg - - case stmt - when Sexp then - case stmt.sexp_type - when :str, :dstr, :evstr then - result = stmt - else - result = s(:evstr, stmt) - end - when nil then - result = s(:evstr) - else - raise "unknown string body: #{stmt.inspect}" - end - } - - string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } - | tIVAR { result = s(:ivar, val[0].to_sym) } - | tCVAR { result = s(:cvar, val[0].to_sym) } - | backref - - symbol: tSYMBEG sym - { - lexer.lex_state = :expr_end - result = val[1].to_sym - } - | tSYMBOL - { - result = val[0].to_sym - } - - sym: fname | tIVAR | tGVAR | tCVAR - - dsym: tSYMBEG xstring_contents tSTRING_END - { - lexer.lex_state = :expr_end - result = val[1] - - result ||= s(:str, "") - - case result.sexp_type - when :dstr then - result.sexp_type = :dsym - when :str then - result = s(:lit, result.last.intern) - else - result = s(:dsym, "", result) - end - } - - numeric: tINTEGER - | tFLOAT - | tUMINUS_NUM tINTEGER =tLOWEST - { - result = -val[1] # TODO: pt_testcase - } - | tUMINUS_NUM tFLOAT =tLOWEST - { - result = -val[1] # TODO: pt_testcase - } - - user_variable: tIDENTIFIER - | tIVAR - | tGVAR - | tCONSTANT - | tCVAR - -keyword_variable: kNIL { result = s(:nil) } - | kSELF { result = s(:self) } - | kTRUE { result = s(:true) } - | kFALSE { result = s(:false) } - | k__FILE__ { result = s(:str, self.file) } - | k__LINE__ { result = s(:lit, lexer.lineno) } - | k__ENCODING__ - { - result = - if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) - else - s(:str, "Unsupported!") - end - } - - var_ref: user_variable - { - var = val[0] - result = Sexp === var ? var : self.gettable(var) - } - | keyword_variable - { - var = val[0] - result = Sexp === var ? var : self.gettable(var) - } - - var_lhs: user_variable - { - result = self.assignable val[0] - } - | keyword_variable - { - result = self.assignable val[0] - } - - backref: tNTH_REF { result = s(:nth_ref, val[0]) } - | tBACK_REF { result = s(:back_ref, val[0]) } - - superclass: term - { - result = nil - } - | tLT - { - lexer.lex_state = :expr_beg - } - expr_value term - { - result = val[2] - } - | error term - { - yyerrok - result = nil - } - - f_arglist: tLPAREN2 f_args rparen - { - result = val[1] - lexer.lex_state = :expr_beg - self.lexer.command_start = true - } - | f_args term - { - result = val[0] - } - - f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_optarg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_optarg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_rest_arg opt_f_block_arg - { - result = args val - } - | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_arg opt_f_block_arg - { - result = args val - } - | f_optarg tCOMMA f_rest_arg opt_f_block_arg - { - result = args val - } - | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_optarg opt_f_block_arg - { - result = args val - } - | f_optarg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_rest_arg opt_f_block_arg - { - result = args val - } - | f_rest_arg tCOMMA f_arg opt_f_block_arg - { - result = args val - } - | f_block_arg - { - result = args val - } - | - { - result = args val - } - - f_bad_arg: tCONSTANT - { - yyerror "formal argument cannot be a constant" - } - | tIVAR - { - yyerror "formal argument cannot be an instance variable" - } - | tGVAR - { - yyerror "formal argument cannot be a global variable" - } - | tCVAR - { - yyerror "formal argument cannot be a class variable" - } - - f_norm_arg: f_bad_arg - | tIDENTIFIER - { - identifier = val[0].to_sym - self.env[identifier] = :lvar - - result = identifier - } - - f_arg_item: f_norm_arg - | tLPAREN f_margs rparen - { - result = val[1] - } - - f_arg: f_arg_item - { - case val[0] - when Symbol then - result = s(:args) - result << val[0] - when Sexp then - result = val[0] - else - raise "Unknown f_arg type: #{val.inspect}" - end - } - | f_arg tCOMMA f_arg_item - { - list, _, item = val - - if list.sexp_type == :args then - result = list - else - result = s(:args, list) - end - - result << item - } - - f_opt: tIDENTIFIER tEQL arg_value - { - result = self.assignable val[0], val[2] - # TODO: detect duplicate names - } - - f_block_opt: tIDENTIFIER tEQL primary_value - { - result = self.assignable val[0], val[2] - } - - f_block_optarg: f_block_opt - { - result = s(:block, val[0]) - } - | f_block_optarg tCOMMA f_block_opt - { - result = val[0] - result << val[2] - } - - f_optarg: f_opt - { - result = s(:block, val[0]) - } - | f_optarg tCOMMA f_opt - { - result = self.block_append val[0], val[2] - } - - restarg_mark: tSTAR2 | tSTAR - - f_rest_arg: restarg_mark tIDENTIFIER - { - # TODO: differs from parse.y - needs tests - name = val[1].to_sym - self.assignable name - result = :"*#{name}" - } - | restarg_mark - { - name = :"*" - self.env[name] = :lvar - result = name - } - - blkarg_mark: tAMPER2 | tAMPER - - f_block_arg: blkarg_mark tIDENTIFIER - { - identifier = val[1].to_sym - - self.env[identifier] = :lvar - result = "&#{identifier}".to_sym - } - - opt_f_block_arg: tCOMMA f_block_arg - { - result = val[1] - } - | - { - result = nil - } - - singleton: var_ref - | tLPAREN2 - { - lexer.lex_state = :expr_beg - } - expr rparen - { - result = val[2] - yyerror "Can't define single method for literals." if - result.sexp_type == :lit - } - - assoc_list: none # [!nil] - { - result = s(:array) - } - | assocs trailer # [!nil] - { - result = val[0] - } - - assocs: assoc - | assocs tCOMMA assoc - { - list = val[0].dup - more = val[2].sexp_body - list.push(*more) unless more.empty? - result = list - } - - assoc: arg_value tASSOC arg_value - { - result = s(:array, val[0], val[2]) - } - | tLABEL opt_nl arg_value - { - label, _ = val[0] # TODO: fix lineno? - result = s(:array, s(:lit, label.to_sym), val.last) - } - - operation: tIDENTIFIER | tCONSTANT | tFID - operation2: tIDENTIFIER | tCONSTANT | tFID | op - operation3: tIDENTIFIER | tFID | op - dot_or_colon: tDOT | tCOLON2 - opt_terms: | terms - opt_nl: | tNL - rparen: opt_nl tRPAREN - rbracket: opt_nl tRBRACK - trailer: | tNL | tCOMMA - - term: tSEMI { yyerrok } - | tNL - - terms: term - | terms tSEMI { yyerrok } - - none: { result = nil } -end - ----- inner - -require "ruby_lexer" -require "ruby_parser_extras" - -# :stopdoc: - -# Local Variables: ** -# racc-token-length-max:14 ** -# End: ** diff -Nru ruby-ruby-parser-3.11.0/lib/ruby20_parser.rb ruby-ruby-parser-3.15.1/lib/ruby20_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby20_parser.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby20_parser.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,7 +1,7 @@ # # DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.4.14 -# from Racc grammer file "". +# This file is automatically generated by Racc 1.5.0 +# from Racc grammar file "". # require 'racc/parser.rb' @@ -10,6 +10,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: @@ -19,854 +20,866 @@ ##### State transition tables begin ### clist = [ -'-600,-102,-104,578,659,578,269,-600,-600,-600,216,217,524,-600,-600', -'998,-600,751,-608,213,216,217,-85,-102,240,-600,528,269,604,-101,578', -'578,659,-71,604,450,-600,-600,658,-600,-600,-600,-600,-600,742,109,216', -'217,743,-104,-100,-99,-106,220,-107,578,237,-103,731,269,239,238,235', -'236,207,-106,658,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600', -'-600,-600,-600,731,731,-600,-600,-600,-101,643,269,606,605,-600,-419', -'268,-600,606,605,624,763,-600,220,-600,702,-600,-600,-600,-600,-600', -'-600,-600,220,-600,-600,-600,268,-102,-104,113,-103,113,-102,-104,112', -'750,112,-290,-600,-600,-93,-94,208,-600,-290,-290,-290,-596,220,-290', -'-290,-290,-103,-290,113,-101,113,113,268,112,-101,112,112,-290,-290', -'-290,-95,-91,-90,-97,113,-98,209,-290,-290,112,-290,-290,-290,-290,-290', -'113,-93,-103,932,-105,112,268,-103,620,219,215,83,113,113,-95,-596,623', -'112,112,84,216,217,-92,-290,-290,-290,-290,-290,-290,-290,-290,-290', -'-290,-290,-290,-290,-290,113,701,-290,-290,-290,112,788,-290,220,604', -'-290,636,609,-290,-290,-517,-290,-94,-290,259,-290,880,-290,-290,-290', -'-290,-290,-290,-290,316,-290,-93,-290,-597,619,720,604,557,556,555,317', -'558,622,-593,-95,-290,-290,-290,-290,-503,-290,-518,-290,-93,452,220', -'-503,-503,-503,-105,659,-503,-503,-503,-102,-503,-93,659,-99,-93,606', -'605,-96,-503,-101,-503,-503,-503,-428,-95,-93,537,-95,354,539,-503,-503', -'378,-503,-503,-503,-503,-503,-95,658,-508,-503,606,605,381,113,658,-508', -'-503,-100,112,761,-107,-593,405,785,786,-503,844,407,406,-503,-503,-503', -'-503,-503,-503,-503,-503,-503,-503,-503,-503,-503,-503,-593,-428,-503', -'-503,-503,604,-503,-503,-428,604,-503,524,262,-503,-503,384,-503,-428', -'-503,263,-503,387,-503,-503,-503,-503,-503,-503,-503,819,-503,584,-503', -'-102,-104,-428,720,604,557,556,555,403,558,-594,-600,-503,-503,-503', -'-503,-506,-503,537,-503,-97,536,113,-506,-506,-506,-503,112,-506,-506', -'-506,-106,-506,606,605,602,408,606,605,607,-506,240,-506,-506,-506,113', -'113,-513,451,-600,112,112,-506,-506,-513,-506,-506,-506,-506,-506,453', -'802,454,-506,-600,606,605,612,219,604,-506,-600,566,237,485,-594,-596', -'239,238,-506,-600,978,271,-506,-506,-506,-506,-506,-506,-506,-506,-506', -'-506,-506,-506,-506,-506,-594,-600,-506,-506,-506,-600,-506,-506,574', -'573,-506,495,-600,-506,-506,498,-506,-596,-506,771,-506,-600,-506,-506', -'-506,-506,-506,-506,-506,564,-506,-512,-506,606,605,617,-509,-506,-512', -'-600,566,214,567,-509,-506,-506,-506,-506,-506,-290,-506,-517,-506,-518', -'500,637,-290,-290,-290,-506,220,-92,-290,-290,801,-290,557,556,555,802', -'558,-338,-101,574,573,-510,113,262,-338,-70,566,112,-510,-98,263,-290', -'-290,-338,-290,-290,-290,-290,-290,-90,-107,-91,-514,-95,537,318,319', -'539,562,-514,-99,240,-100,567,-104,220,113,571,570,574,573,112,-290', -'-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,509', -'-511,-290,-290,-290,510,642,237,-511,220,-290,239,238,-290,-503,517', -'220,567,-290,1002,-290,-503,-290,-290,-290,-290,-290,-290,-290,274,-290', -'537,-290,213,539,720,220,557,556,555,745,558,574,573,-600,-290,-290', -'271,-96,747,-290,-600,-600,-600,848,819,-600,-600,-600,-105,-600,720', -'521,557,556,555,240,558,525,-600,-600,-600,-600,716,116,117,118,119', -'120,526,-600,-600,719,-600,-600,-600,-600,-600,720,240,557,556,555,-281', -'558,519,520,534,237,716,-281,540,239,238,235,236,216,217,924,-281,584', -'-600,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600', -'397,716,-600,-600,-600,213,787,-600,216,217,-600,588,516,-600,-600,589', -'-600,240,-600,611,-600,514,-600,-600,-600,-600,-600,-600,-600,615,-600', -'-600,-600,254,255,956,618,557,556,555,621,558,216,217,628,-600,-600', -'-600,-600,237,-600,243,-600,239,238,235,236,848,819,-103,174,185,175', -'198,171,191,181,180,201,202,196,179,178,173,199,203,204,183,172,186', -'190,192,184,177,-265,630,220,193,200,195,194,187,197,182,170,189,188', -'116,117,118,119,120,169,176,167,168,164,165,166,124,126,634,635,125', -'271,956,240,557,556,555,646,558,158,159,240,154,136,137,138,145,142', -'144,254,255,139,140,240,240,240,160,161,146,147,720,220,557,556,555', -'237,558,220,220,239,238,235,236,151,150,-85,135,157,153,152,148,149', -'143,141,133,156,134,-290,677,162,91,871,872,220,-290,873,107,108,716', -'-597,92,530,720,-290,557,556,555,719,558,155,688,694,695,698,163,174', -'185,175,198,171,191,181,180,201,202,196,179,178,173,199,203,204,183', -'172,186,190,192,184,177,500,716,704,193,200,195,194,187,197,182,170', -'189,188,116,117,118,119,120,169,176,167,168,164,165,166,124,126,707', -'708,125,710,712,240,116,117,118,119,120,158,159,714,154,136,137,138', -'145,142,144,254,255,139,140,723,724,725,160,161,146,147,720,727,557', -'556,555,237,558,243,584,239,238,235,236,151,150,734,135,157,153,152', -'148,149,143,141,133,156,134,764,765,162,-290,766,213,-266,772,485,485', -'-290,716,587,220,720,-597,557,556,555,-290,558,585,155,790,259,498,500', -'163,174,185,175,198,171,191,181,180,201,202,196,179,178,173,199,203', -'204,183,172,186,190,192,184,177,716,688,220,193,200,195,194,187,197', -'182,170,189,188,271,271,688,240,240,169,176,167,168,164,165,166,124', -'126,819,720,125,557,556,555,213,558,220,220,842,158,159,959,154,136', -'137,138,145,142,144,220,747,139,140,-515,-516,-515,160,161,146,147,-515', -'-516,-515,819,852,220,-267,716,879,-515,-516,-515,882,151,150,707,135', -'157,153,152,148,149,143,141,133,156,134,-516,213,162,91,-291,-281,885', -'-516,1009,888,890,-291,-281,92,892,220,-516,1007,894,895,-291,-281,155', -'688,903,-265,907,163,174,185,175,198,171,191,181,180,201,202,196,179', -'178,173,199,203,204,183,172,186,190,192,184,177,909,910,220,193,200', -'195,194,187,197,182,170,189,188,707,913,915,917,919,169,176,167,168', -'164,165,166,124,126,919,220,125,925,927,929,213,220,939,940,220,158', -'159,212,154,136,137,138,145,142,144,943,210,139,140,-290,-291,-291,160', -'161,146,147,-290,-291,-291,-268,953,-597,960,961,963,-290,-291,-291', -'964,151,150,980,135,157,153,152,148,149,143,141,133,156,134,213,213', -'162,91,982,983,987,959,449,707,992,994,996,92,998,998,747,450,1005,1010', -'1011,919,155,919,919,1016,980,163,174,185,175,198,171,191,181,180,201', -'202,196,179,178,173,199,203,204,183,172,186,190,192,184,177,-597,-596', -'694,193,200,195,194,187,197,182,170,189,188,980,1039,1040,1041,1042', -'169,176,167,168,164,165,166,124,126,394,393,125,998,395,998,998,220', -'919,980,3,158,159,,154,136,137,138,145,142,144,,,139,140,,,,160,161', -'146,147,,,,,,,,,,,,,,151,150,,135,157,153,152,148,149,143,141,133,156', -'134,,,162,,,,,,,,,,,,,,,,,,,,155,,,,,163,174,185,175,198,171,191,181', -'180,201,202,196,179,178,173,199,203,204,183,172,186,190,192,184,177', -',,,193,200,195,363,362,364,361,170,189,188,,,,,,169,176,167,168,358', -'359,360,356,126,97,96,357,,99,,,,,,,158,159,,154,136,137,138,145,142', -'144,,,139,140,,,,160,161,146,147,,,,,,370,,,,,,,,151,150,,135,157,153', -'152,148,149,143,141,133,156,134,,,162,,,,,,,,,,,,,,,,,,,,155,,,,,163', -'174,185,175,198,171,191,181,180,201,202,196,179,178,173,199,203,204', -'183,172,186,190,192,184,177,,,,193,200,195,194,187,197,182,170,189,188', -',,,,,169,176,167,168,164,165,166,124,126,123,,125,,,,,,,,,158,159,,154', -'136,137,138,145,142,144,,,139,140,,,,160,161,146,147,,,,,,,,,,,,,,151', -'150,,135,157,153,152,148,149,143,141,133,156,134,,,162,91,,,,,,,,,,92', -'292,72,73,74,12,60,,,155,66,67,,,163,70,,68,69,71,33,34,75,76,,,,,,32', -'31,30,101,100,102,103,,,22,,,,,647,11,48,,13,105,104,106,95,59,97,96', -'98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257', -'252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239', -'238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,-242', -',,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,101,100,102,103,,,22,,,,,631,11,48,,13,105,104,106', -'95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246', -'248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237', -',243,47,239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84', -'92,,258,,,,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,647,11,48,,13,105', -'104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250', -'251,246,248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63', -',38,237,,243,47,239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87', -'89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48', -',13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244', -'249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61', -'62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242,,,,91,83', -'85,86,87,89,,,,84,92,220,258,,,,,65,,,81,88,90,292,72,73,74,12,60,,', -',66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22', -',,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,43', -',,294,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242', -',,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', -'46,44,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255', -',43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23', -'242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74', -'12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102', -'103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94', -',45,46,44,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254', -'255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241', -'23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90,8,72,73', -'74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100', -'102,103,,,22,,,,,,11,48,10,13,105,104,106,95,59,97,96,98,,99,107,108', -',93,94,,45,46,44,240,244,249,250,251,246,248,256,257,252,253,,233,234', -',,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247', -'245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90', -'292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107', -'108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257,252,253,,233', -'234,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236', -'247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88', -'90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99', -'107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257,252,253', -',233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235', -'236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81', -'88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32', -'31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98', -',99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257,252', -'253,,233,234,,,254,255,,43,,,294,,,61,62,,,63,,38,237,,243,47,239,238', -'235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65', -',,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', -',,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97', -'96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257', -'252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239', -'238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,', -',,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95', -'59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248', -'256,257,252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243', -'47,239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92', -',258,,,,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106', -'95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246', -'248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237', -',243,47,239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84', -'92,,258,,,,,65,,,81,88,90,8,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,10,13,105', -'104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250', -'251,246,248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63', -',38,237,,243,47,239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87', -'89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48', -',13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244', -'249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61', -'62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242,,,,91,83', -'85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74,12,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,', -',,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44', -'240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,43,', -',36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242', -',,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', -'46,44,240,-620,-620,-620,-620,246,248,,,-620,-620,,,,,,254,255,,43,', -',36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,292,72,73,74,12,60', -',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,', -',22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', -'46,44,240,-620,-620,-620,-620,246,248,,,-620,-620,,,,,,254,255,,43,', -',36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,292,72,73,74,12,60', -',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,', -',22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', -'46,44,240,244,249,250,251,246,248,256,257,252,253,,-620,-620,,,254,255', -',43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23', -'242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,292,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', -'46,44,240,,,,,,,,,,,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243', -'47,239,238,235,236,,,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,', -'65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59', -'97,96,98,,99,107,108,,93,94,,45,46,44,240,-620,-620,-620,-620,246,248', -',,-620,-620,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238', -'235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,', -',,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97', -'96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,,,252', -'253,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236', -'247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -'292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107', -'108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,,252,253,,,,,,254', -'255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241', -'23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,292,72,73,74', -'12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102', -'103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94', -',45,46,44,240,,,,,,,,,,,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,', -'243,47,239,238,235,236,,,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,', -',,,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106', -'95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,,,,,,,,,,,,,,,,254,255', -',43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,,,241,23,242,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,292,72,73,74,12,60', -',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,', -',22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', -'46,44,240,,,,,,,,,,,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243', -'47,239,238,235,236,,,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,', -'65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59', -'97,96,98,,99,107,108,,93,94,,45,46,44,240,-620,-620,-620,-620,246,248', -',,-620,-620,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238', -'235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,', -',,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97', -'96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257', -'252,253,,-620,-620,,,254,255,,43,,,294,,,61,62,,,63,,38,237,,243,47', -'239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,', -',,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95', -'59,97,96,98,,99,107,108,,93,94,,45,46,44,240,-620,-620,-620,-620,246', -'248,,,-620,-620,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239', -'238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,', -'305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96', -'98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62', -',720,63,557,556,555,564,558,47,,,,,,,,230,566,,,,91,83,85,86,87,89,', -',,84,92,,,,,,,65,562,,81,88,90,72,73,74,,60,,574,573,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,567,,,48,,,105', -'104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', -',,,225,,,231,,,61,62,,720,63,557,556,555,802,558,47,,,,,,,,23,566,,', -',91,83,85,86,87,89,,,,84,92,,,,,,,65,562,,81,88,90,72,73,74,,60,,574', -'573,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,232,,,,567,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94', -',45,46,44,240,-620,-620,-620,-620,246,248,,,-620,-620,,,,,,254,255,', -'225,,,231,,,61,62,,,63,,283,237,281,243,47,239,238,235,236,247,245,241', -'230,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', -'102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93', -'94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,720,63,557,556,555', -'564,558,47,,,,,,,,230,566,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,562', -',81,88,90,72,73,74,,60,,574,573,66,67,,,,70,,68,69,71,309,310,75,76', -',,,,,305,306,312,101,100,102,103,,,232,,,,567,,,48,,,105,104,106,95', -'59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', -',,61,62,,720,63,557,556,555,564,558,47,,,,,,,,230,566,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,562,,81,88,90,72,73,74,,60,,574,573,66,67,,', -',70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,232,,,,567', -',,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,', -',,,,,,,,,,,,,,225,,,231,,,61,62,,720,63,557,556,555,564,558,47,,,,,', -',,230,566,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,562,,81,88,90,72,73', -'74,,60,,574,573,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312', -'101,100,102,103,,,232,,,,567,,,48,,,105,104,106,95,59,97,96,98,,99,107', -'108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,720,63,557', -'556,555,802,558,47,,,,,,,,230,566,,,,91,83,85,86,87,89,,,,84,92,,,,', -',,65,562,,81,88,90,72,73,74,,60,,574,573,66,67,,,,70,,68,69,71,309,310', -'75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,567,,,48,,,105,104,106', -'95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', -',231,,,61,62,,720,63,557,556,555,802,558,47,,,,,,,,230,566,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,562,,81,88,90,72,73,74,,60,,574,573,66', -'67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', -'232,,,,567,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', -'46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,720,63,557,556,555,802,558', -'47,,,,,,,,230,566,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,562,,81,88', -'90,72,73,74,,60,,574,573,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', -'306,312,101,100,102,103,,,232,,,,567,,,48,,,105,104,106,95,59,97,96', -'98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62', -',720,63,557,556,555,564,558,47,,,,,,,,230,566,,,,91,83,85,86,87,89,', -',,84,92,,,,,,,65,562,,81,88,90,72,73,74,,60,,574,573,66,67,,,,70,,68', -'69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,567,,', -'48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,', -',,,,,,,,,,,,225,,,231,,,61,62,,720,63,557,556,555,802,558,47,,,,,,,', -'230,566,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,562,,81,88,90,72,73,74', -',60,,574,573,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101', -'100,102,103,,,232,,,,567,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', -',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', -',,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45', -'46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,,,,,', -',230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45', -'46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,,,,,', -',230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45', -'46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,,,,,', -',230,,,,,91,83,85,86,87,89,,,,84,92,220,,,,,,65,,286,81,88,90,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102', -'103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94', -',45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,', -',,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102', -'103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94', -',45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,', -',,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', -'102,103,,,232,,,,,,,307,,,105,104,106,95,59,97,96,98,,99,107,108,,93', -'94,,,,313,,,,,,,,,,,,,,,,,,,,897,,,231,,,61,62,,,63,,,,,,,,,,,,,,,,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', -'232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,232,,,,', -',,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44,,', -',,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,,,,,,,230,,,', -',91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', -'232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', -',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', -',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,12,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11', -'48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,', -',,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,307', -',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,,,,,,', -',,,,,,303,,,299,,,61,62,,,63,,298,,,,,,,,,,,,,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', -'310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,307,,,105,104', -'106,95,59,97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,303', -',,231,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,315', -',,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76', -',,,,,305,306,312,101,100,102,103,,,232,,,,,,,307,,,105,104,106,95,59', -'97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,303,,,231,,,61', -'62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,512,,,65,,,81', -'88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', -',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,', -',70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,', -',,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44', -',,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,281,,47,,,,,,,,230,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', -'232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', -',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', -',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70', -',68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,', -',307,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,', -',,,,,,,,,,,897,,,231,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', -'310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104', -'106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225', -',,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', -'76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,307,,,105,104,106,95', -'59,97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,', -',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', -'306,312,101,100,102,103,,,232,,,,,,,307,,,105,104,106,95,59,97,96,98', -',99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,970,,,231,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72', -'73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101', -'100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', -',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', -',,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', -'102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93', -'94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,671,,,,47,,', -',,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', -'102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93', -'94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,530,,61,62,,,63,,,,,,47,,', -',,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,', -',70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,', -',,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44', -',,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,', -',48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,', -',,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104', -'106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225', -',,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', -'76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', -'59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', -',231,,,61,62,,,63,,283,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', -'59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', -',231,,,61,62,,,63,,283,,281,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,', -'84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106,95', -'59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', -',,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', -'65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98', -',99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,', -'63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306', -'312,101,100,102,103,,,232,,,,,,,307,,,105,104,106,590,59,97,96,591,', -'99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,592,,,231,,,61,62,,,63,', -',,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', -'102,103,,,232,,,,,,,307,,,105,104,106,590,59,97,96,591,,99,107,108,', -'93,94,,,,313,,,,,,,,,,,,,,,,,,,,592,,,231,,,61,62,,,63,,,,,,,,,,,,,', -',,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22', -',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', -',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,113,,,,,112,65,,,81,88,90,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', -',,,,,,307,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,,,313,,,', -',,,,,,,,,,,,,,,,348,,,36,,,61,62,,,63,,38,,,,,,,,,,,,,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,10,13', -'105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,', -',,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', -'310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104', -'106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225', -',,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', -'96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,', -',61,62,,,63,,283,,281,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310', -'75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106', -'95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', -',231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', -'76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', -'59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', -',,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,', -',,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', -'96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', -'62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32', -'31,30,101,100,102,103,,,22,,,,,,11,48,10,13,105,104,106,95,59,97,96', -'98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,', -',63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,397,65,', -',81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32', -'31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99', -'107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,', -',,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101', -'100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,', -'93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,', -',,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,', -',70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48', -',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', -',,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,12,60,,,,66,67,,,,70,,68,69', -'71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105', -'104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', -',,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', -'310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104', -'106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,', -',,225,,,231,,,61,62,,,63,,671,,281,,47,,,,,,,,230,,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105', -'104,106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,', -',,,,,,225,,,231,,,61,62,,,63,,,,281,,47,,,,,,,,230,,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105', -'104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', -',,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,', -',,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', -'310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104', -'106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225', -',,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95', -'59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36', -',,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,', -',397,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', -'96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', -'62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', -'306,312,101,100,102,103,,,232,,,,,,,307,,,105,104,106,95,59,97,96,98', -',99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72', -'73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100', -'102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,', -'93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281', -',47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101', -'100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', -',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,413,,,,47', -',,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', -'102,103,,,232,,,,,,,307,,,105,104,106,95,59,97,96,98,,99,107,108,,93', -'94,,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,,,61,62,,,63,,,,,,,,,,,,,,,,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,232,', -',,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,', -',,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70', -',68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,', -',48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,', -',,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48', -',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', -',,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105', -'104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', -',,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,', -',,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106,95', -'59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', -',,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', -'65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98', -'285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62', -',,63,,283,,281,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,', -',,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', -'96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,', -',61,62,,,63,,671,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,', -',,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', -'76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', -'59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', -',231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59', -'97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,', -',61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', -'65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98', -',99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,', -'63,,413,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', -',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', -',,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,', -',70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48', -',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', -',,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106', -'95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', -',231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,220', -',,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', -'76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', -'59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', -',,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,', -',,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96', -'98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', -'62,,,63,,283,,281,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,', -',,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96', -'98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62', -',,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', -',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', -'102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93', -'94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,', -',,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102', -'103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,', -'45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', -'232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,769,,,,47,,,,,,,,230,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', -'232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', -',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', -',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70', -',68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,', -',48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,', -',,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,671,,281,,47,,,,,,,,230,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', -'232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45', -'46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,281,,47,,,,,,,,230', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,', -',,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,', -'232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,232,,,,', -',,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,', -',,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48', -',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', -',,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106', -'95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', -',231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', -'96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', -'62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', -'306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98', -',99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,', -'63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101', -'100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', -',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', -',,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', -'102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93', -'94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,', -',,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102', -'103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,', -'45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', -'232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', -',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', -',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70', -',68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,', -',48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,', -',,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48', -',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', -',,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105', -'104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', -',,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,', -',,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', -'310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,307,,,105,104', -'106,95,59,97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,303', -',,299,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,', -',,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76', -',,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59', -'97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,', -',61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', -'65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,', -',,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', -'96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', -'62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', -'306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98', -',99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,', -'63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306', -'312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99', -'107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,', -',,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312', -'101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107', -'108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,', -'47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72', -'73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101', -'100,102,103,,,232,,,,,,,307,,,105,104,106,95,59,97,96,98,,99,107,108', -',93,94,,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,,,61,62,,,63,,,,,,,,,,,,', -',,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,', -',66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103', -',,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', -'44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', -',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', -',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70', -',68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,', -',48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,', -',,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48', -',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', -',,,,,,,,,225,,,231,,,61,62,,,63,,413,,,,47,,,,,,,,230,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105', -'104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', -',,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,', -',,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', -'310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104', -'106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225', -',,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', -'76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', -'59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', -',,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,', -',,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', -'96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', -'62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', -'306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98', -',99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,', -'63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306', -'312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99', -'107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,', -',,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312', -'101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107', -'108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,', -'47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72', -'73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101', -'100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', -',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,,,47', -',,,,,,,230,,,,-282,91,83,85,86,87,89,-282,-282,-282,84,92,-282,-282', -'-282,,-282,,65,,,81,88,90,,,-282,-282,-282,,,,,,,,-282,-282,,-282,-282', -'-282,-282,-282,,,,,,,,,,,,,,,,,,,,,,,,-282,-282,-282,-282,-282,-282', -'-282,-282,-282,-282,-282,-282,-282,-282,,,-282,-282,-282,,,-282,,,-282', -',,-282,-282,,-282,,-282,,-282,,-282,-282,-282,-282,-282,-282,-282,,-282', -',-282,,,,,,,,,,,,,-282,-282,-282,-282,-602,-282,,-282,,,,-602,-602,-602', -',,-602,-602,-602,560,-602,557,556,555,564,558,,,,-602,-602,-602,-602', -',,566,,,,,-602,-602,,-602,-602,-602,-602,-602,,,,,,,,,,562,755,,,,,', -',,571,570,574,573,,-602,-602,-602,-602,-602,-602,-602,-602,-602,-602', -'-602,-602,-602,-602,,,-602,-602,-602,,,-602,,,-602,,,-602,-602,,-602', -'567,-602,,-602,,-602,-602,-602,-602,-602,-602,-602,,-602,-602,-602,', -',,,,,,,,,,,-602,-602,-602,-602,-601,-602,,-602,,,,-601,-601,-601,,,-601', -'-601,-601,801,-601,557,556,555,802,558,,,,-601,-601,-601,-601,,,566', -',,,,-601,-601,,-601,-601,-601,-601,-601,,,,,,,,,,562,,,,,,,,,571,570', -'574,573,,-601,-601,-601,-601,-601,-601,-601,-601,-601,-601,-601,-601', -'-601,-601,,,-601,-601,-601,,,-601,,,-601,,,-601,-601,,-601,567,-601', -',-601,,-601,-601,-601,-601,-601,-601,-601,,-601,-601,-601,,,,,,,,,,', -',,-601,-601,-601,-601,-298,-601,,-601,,,,-298,-298,-298,,,-298,-298', -'-298,560,-298,557,556,555,564,558,,,,,-298,-298,,,,566,,,,,-298,-298', -',-298,-298,-298,-298,-298,,,,,,,,,,562,,,,,,,,,571,570,574,573,,-298', -'-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,,,-298', -'-298,-298,,,-298,,274,-298,,,-298,-298,,-298,567,-298,,-298,,-298,-298', -'-298,-298,-298,-298,-298,,-298,,-298,,,,,,,,,,,,-619,-298,-298,,-298', -',-298,-619,-619,-619,,,-619,-619,-619,801,-619,557,556,555,802,558,', -',,-619,-619,-619,,,,566,,,,,-619,-619,,-619,-619,-619,-619,-619,,,,', -',,,,,562,,,,,,,,,571,570,574,573,,-619,-619,-619,-619,-619,-619,-619', -'-619,-619,-619,-619,-619,-619,-619,,,-619,-619,-619,,,-619,,271,-619', -',,-619,-619,,-619,567,-619,,-619,,-619,-619,-619,-619,-619,-619,-619', -',-619,-619,-619,,,,,,,,,,,,-427,-619,-619,,-619,,-619,-427,-427,-427', -',,-427,-427,-427,801,-427,557,556,555,802,558,,,,-427,-427,-427,,,,566', -',,,,-427,-427,,-427,-427,-427,-427,-427,,,,,,,,,,562,,,,,,,,,571,570', -'574,573,,-427,-427,-427,-427,-427,-427,-427,-427,-427,-427,-427,-427', -'-427,-427,,,-427,-427,-427,,,-427,,271,-427,,,-427,-427,,-427,567,-427', -',-427,,-427,-427,-427,-427,-427,-427,-427,,-427,-427,-427,,,,,,,,,,', -',-619,-427,-427,,-427,,-427,-619,-619,-619,,,-619,-619,-619,560,-619', -'557,556,555,564,558,,,,-619,-619,,,,,566,,,,,-619,-619,,-619,-619,-619', -'-619,-619,,,,,,,,,,562,,,,,,,,,571,570,574,573,,,,,,,,,,,,,-619,,,,', -',,-619,,,,,271,-619,,,,,,,567,,,,1034,433,,,1035,,,,,,-619,-619,,158', -'159,,154,136,137,138,145,142,144,,-619,139,140,,,-619,160,161,146,147', -',,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141,133,156,134', -',,162,,,,,,,,,,684,433,,,685,,,,,,155,,,158,159,163,154,136,137,138', -'145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135', -'157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,,,737,426,,,738', -',,,,,155,,,158,159,163,154,136,137,138,145,142,144,,,139,140,,,,160', -'161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141', -'133,156,134,,,162,,,,,,,,,,1004,433,,,1003,,,,,,155,,,158,159,163,154', -'136,137,138,145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,', -',151,150,,135,157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,', -',483,426,,,484,,,,,,155,,,158,159,163,154,136,137,138,145,142,144,,', -'139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152', -'148,149,143,141,133,156,134,,,162,,,,,,,,,,1032,426,,,1033,,,,,,155', -',,158,159,163,154,136,137,138,145,142,144,,,139,140,,,,160,161,146,147', -',,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141,133,156,134', -',,162,,,,,,,,,,649,426,,,650,,,,,,155,,,158,159,163,154,136,137,138', -'145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135', -'157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,,,651,433,,,652', -',,,,,155,,,158,159,163,154,136,137,138,145,142,144,,,139,140,,,,160', -'161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141', -'133,156,134,,,162,,,,,,,,,,649,426,,,650,,,,,,155,,,158,159,163,154', -'136,137,138,145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,', -',151,150,,135,157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,', -',856,433,,,857,,,,,,155,,,158,159,163,154,136,137,138,145,142,144,,', -'139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152', -'148,149,143,141,133,156,134,,,162,,,,,,,,,,681,426,,,682,,,,,,155,,', -'158,159,163,154,136,137,138,145,142,144,,,139,140,,,,160,161,146,147', -',,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141,133,156,134', -',,162,,,,,,,,,,429,433,,,428,,,,,,155,,,158,159,163,154,136,137,138', -'145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135', -'157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,,,422,426,,,423', -',,,,,155,,,158,159,163,154,136,137,138,145,142,144,,,139,140,,,,160', -'161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141', -'133,156,134,,,162,,,,,,,,,,651,433,,,652,,,,,,155,,,158,159,163,154', -'136,137,138,145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,', -',151,150,,135,157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,', -',739,433,,,740,,,,,,155,,,158,159,163,154,136,137,138,145,142,144,,', -'139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152', -'148,149,143,141,133,156,134,,560,162,557,556,555,564,558,,,,,483,426', -',,484,566,,,,,155,,,158,159,163,154,136,137,138,145,142,144,,,139,140', -'562,,,160,161,146,147,,,571,570,574,573,,,,,,,,151,150,,135,157,153', -'152,148,149,143,141,133,156,134,,560,162,557,556,555,564,558,,,,567', -',,,,,566,,,,,155,,,,560,163,557,556,555,564,558,,,,,,,562,,560,566,557', -'556,555,564,558,571,570,574,573,,,,,560,566,557,556,555,564,558,,562', -'755,,,,,,,566,571,570,574,573,,,562,546,,,,567,,,,571,570,574,573,,', -'562,,,,,,,,,571,570,574,573,,,567,,,,,,,,,,,,,,,567,,,,,,,,,,,,,,,567' ] - racc_action_table = arr = ::Array.new(25662, nil) +'-621,-113,-111,-112,596,596,281,-621,-621,-621,816,596,662,-621,-621', +'281,-621,231,596,645,-110,825,-536,281,825,-621,596,95,-111,-536,769', +'-113,663,-94,770,96,-621,-621,-536,-621,-621,-621,-621,-621,125,-80', +'803,757,-112,124,-115,-116,-110,232,853,824,-108,-109,824,999,832,575', +'574,573,-111,576,-111,-621,-621,-621,-621,-621,-621,-621,-621,-621,-621', +'-621,-621,-621,-621,-617,644,-621,-621,-621,-113,669,-101,222,223,-621', +'-114,283,-621,222,223,222,223,-621,-110,-621,283,-621,-621,-621,-621', +'-621,-621,-621,283,-621,-621,-621,-617,-113,-111,-112,125,125,-113,-111', +'-112,124,124,125,-621,-621,958,-621,124,-621,125,-102,-110,-621,-104', +'124,-621,-110,125,-112,-621,-621,-621,124,232,125,-621,-621,-104,-621', +'124,-103,-102,-106,-107,-101,-618,852,-621,-99,-100,-621,642,722,-304', +'878,724,603,473,-621,-621,-304,-621,-621,-621,-621,-621,232,842,-530', +'-304,229,420,232,843,232,-530,422,421,663,746,281,575,574,573,-105,576', +'878,-444,718,-621,-621,-621,-621,-621,-621,-621,-621,-621,-621,-621', +'-621,-621,-621,-621,-104,-621,-621,-621,-102,669,-621,-116,-107,-621', +'641,-617,-621,742,803,-621,-104,-621,-615,-621,-116,-621,-621,-621,-621', +'-621,-621,-621,-113,-621,-621,-621,662,-621,-539,-104,-444,229,-104', +'-102,582,-435,-102,-444,-621,-621,830,-103,-621,-621,-104,584,-444,-303', +'-102,232,-621,-538,911,-112,-303,-303,-303,283,272,-539,-303,-303,-110', +'-303,-444,-527,821,746,-102,575,574,573,-527,576,232,-614,504,-615,592', +'591,-111,-527,-109,-303,-303,-116,-303,-303,-303,-303,-303,504,923,-99', +'746,-621,575,574,573,-615,576,-100,-621,584,125,-108,-110,-617,804,124', +'-213,-621,585,-109,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303', +'-303,-303,-303,-303,-524,-621,-303,-303,-303,-538,668,-524,592,591,-303', +'817,-614,-303,626,-279,-524,1006,-303,792,-303,791,-303,-303,-303,-303', +'-303,-303,-303,-213,-303,781,-303,776,-614,746,-115,575,574,573,582', +'576,585,626,871,-303,-303,626,-105,626,-303,584,722,626,-524,721,718', +'-303,603,-108,-114,-524,-524,-524,125,-113,-524,-524,-524,124,-524,-106', +'228,580,718,628,627,634,-524,656,-524,-524,-524,-115,592,591,722,718', +'654,724,-524,-524,-529,-524,-524,-524,-524,-524,125,-529,269,270,125', +'124,628,627,753,124,628,627,628,627,624,787,628,627,646,904,585,222', +'223,-524,-524,-524,-524,-524,-524,-524,-524,-524,-524,-524,-524,-524', +'-524,268,267,-524,-524,-524,-303,-524,-524,722,751,-524,724,-303,-524', +'-524,626,-524,-618,-524,750,-524,-303,-524,-524,-524,-524,-524,-524', +'-524,-532,-524,232,-524,905,1037,746,-532,575,574,573,923,576,626,-280', +'125,-524,-524,-524,-524,124,-524,584,-524,626,-303,749,631,-524,-534', +'232,-524,-303,-303,-303,-533,-534,-303,-303,-303,740,-303,-533,-347', +'580,252,738,628,627,790,-347,-303,-303,-303,736,592,591,874,878,-347', +'734,-303,-303,-304,-303,-303,-303,-303,-303,733,-304,-304,730,228,628', +'627,629,249,-304,-304,277,251,250,247,248,628,627,-304,910,585,874,878', +'-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303', +'519,-535,-303,-303,-303,-303,819,-303,-535,3,-303,726,-303,-303,-303', +'725,-303,-618,-303,252,-303,-303,-303,-303,-303,-303,-303,-303,-303', +'-527,-303,621,-303,538,539,232,-527,922,622,575,574,573,923,576,718', +'-303,-303,-303,-303,715,-303,249,-303,584,-527,251,250,-303,228,710', +'-114,-527,-527,-527,-531,1028,-527,-527,-527,927,-527,-531,-524,709', +'774,580,-303,709,-527,-524,-527,-527,-527,-303,589,588,592,591,-618', +'550,-527,-527,-303,-527,-527,-527,-527,-527,746,232,575,574,573,228', +'576,746,-278,575,574,573,227,576,746,932,575,574,573,121,576,225,585', +'-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-527', +'698,742,-527,-527,-527,-294,-527,-527,742,-94,-527,937,-294,-527,-527', +'742,-527,745,-527,252,-527,-294,-527,-527,-527,-527,-527,-527,-527,232', +'-527,733,-527,922,940,575,574,573,923,576,128,129,130,131,132,-527,-527', +'-527,-527,584,-527,249,-527,942,-303,251,250,-527,222,223,-527,-303', +'-303,-303,335,336,944,-303,-303,946,-303,580,746,946,575,574,573,232', +'576,232,589,588,592,591,952,228,592,591,222,223,-303,-303,1034,-303', +'-303,-303,-303,-303,232,718,232,1032,746,680,575,574,573,718,576,746', +'742,575,574,573,252,576,585,252,718,951,252,-303,-303,-303,-303,-303', +'-303,-303,-303,-303,-303,-303,-303,-303,-303,-537,228,-303,-303,-303', +'742,668,-537,470,252,-303,232,742,-303,745,673,-537,471,-303,286,-303', +'661,-303,-303,-303,-303,-303,-303,-303,718,-303,232,-303,660,970,746', +'228,575,574,573,582,576,-536,1028,-281,-303,-303,232,-303,-536,-303', +'584,774,653,-621,652,-278,-303,-536,971,-114,-621,-621,-621,733,974', +'-621,-621,-621,977,-621,252,979,580,981,232,-537,983,650,-621,-621,-621', +'-621,-537,592,591,643,262,263,640,-621,-621,-537,-621,-621,-621,-621', +'-621,746,637,575,574,573,249,576,255,633,251,250,247,248,995,996,253', +'609,254,608,411,585,603,232,-621,-621,-621,-621,-621,-621,-621,-621', +'-621,-621,-621,-621,-621,-621,252,742,-621,-621,-621,228,818,-621,1008', +'545,-621,544,535,-621,-621,540,-621,718,-621,718,-621,533,-621,-621', +'-621,-621,-621,-621,-621,781,-621,-621,-621,286,232,289,536,578,1026', +'575,574,573,582,576,529,-621,-621,-621,-621,-294,-621,528,-621,584,-622', +'1029,-294,-621,842,232,-112,-622,-622,-622,-79,-294,-622,-622,-622,519', +'-622,517,252,1035,514,580,228,1058,1038,-622,-622,-622,-622,547,589', +'588,592,591,262,263,-622,-622,471,-622,-622,-622,-622,-622,946,999,946', +'575,574,573,249,576,255,946,251,250,247,248,1043,286,253,1008,254,504', +'231,475,585,-622,-622,-622,-622,-622,-622,-622,-622,-622,-622,-622,-622', +'-622,-622,474,228,-622,-622,-622,228,733,-622,772,1052,-622,1054,607', +'-622,-622,1056,-622,774,-622,1058,-622,605,-622,-622,-622,-622,-622', +'-622,-622,1058,-622,-622,-622,922,472,575,574,573,923,576,128,129,130', +'131,132,-622,-622,-622,-622,584,-622,-642,-622,423,715,418,401,-622', +'-642,-642,-642,398,396,-642,-642,-642,393,-642,252,899,900,580,369,901', +'119,120,-642,-642,232,1008,589,588,592,591,262,263,252,-642,-642,718', +'-642,-642,-642,-642,-642,718,252,334,333,272,249,-618,262,263,251,250', +'247,248,-617,232,224,221,262,263,220,946,585,1008,249,1081,255,1058', +'251,250,247,248,1058,1058,249,-642,255,-642,251,250,247,248,-642,219', +'-642,-642,-642,286,-642,-642,-642,-642,746,-642,575,574,573,923,576', +'252,252,709,-642,-642,-642,252,232,286,584,-642,-642,286,232,-642,-642', +'709,-642,-642,-642,-642,-642,519,517,-642,869,,,,-642,,580,,249,,,-642', +'251,250,247,248,,592,591,,-642,-642,-642,-642,-642,-642,-642,-642,-642', +'-642,-642,-642,-642,-642,,,-642,-642,-642,,,-642,,286,-642,,,-642,-642', +',-642,585,-642,,-642,,-642,-642,-642,-642,-642,-642,-642,,-642,-642', +'-642,128,129,130,131,132,128,129,130,131,132,,,-642,-642,-443,-642,', +'-642,,,,-443,-443,-443,-642,,-443,-443,-443,578,-443,575,574,573,582', +'576,,,,-443,-443,-443,,,,584,,,,,-443,-443,,-443,-443,-443,-443,-443', +',,,,,,,,,580,564,,,,,,,,589,588,592,591,,-443,-443,-443,-443,-443,-443', +'-443,-443,-443,-443,-443,-443,-443,-443,,,-443,-443,-443,,,-443,,286', +'-443,,,-443,-443,,-443,585,-443,,-443,,-443,-443,-443,-443,-443,-443', +'-443,,-443,-443,-443,,,,,,,,,,,,,-443,-443,-312,-443,,-443,,,,-312,-312', +'-312,-443,,-312,-312,-312,746,-312,575,574,573,582,576,,,,,-312,-312', +',,,584,,,,,-312,-312,,-312,-312,-312,-312,-312,,,,,,,,,,580,,,,,,,,', +',,592,591,,-312,-312,-312,-312,-312,-312,-312,-312,-312,-312,-312,-312', +'-312,-312,,,-312,-312,-312,,,-312,,289,-312,,,-312,-312,,-312,585,-312', +',-312,,-312,-312,-312,-312,-312,-312,-312,,-312,,-312,,,,,,,,,,,,,-312', +'-312,-295,-312,,-312,,,,-295,-295,-295,-312,,-295,-295,-295,746,-295', +'575,574,573,582,576,,,,,-295,-295,-295,,,584,,,,,-295,-295,,-295,-295', +'-295,-295,-295,,,,,,,,,,580,,,,,,,,,,,592,591,,-295,-295,-295,-295,-295', +'-295,-295,-295,-295,-295,-295,-295,-295,-295,,,-295,-295,-295,,,-295', +',,-295,,,-295,-295,,-295,585,-295,,-295,,-295,-295,-295,-295,-295,-295', +'-295,,-295,,-295,746,,575,574,573,923,576,,,,,,-295,-295,-295,-295,584', +'-295,-623,-295,,,,,-295,-623,-623,-623,,,-623,-623,-623,,-623,,,,580', +',,,,-623,-623,-623,-623,,,592,591,,,,-623,-623,,-623,-623,-623,-623', +'-623,,,,,,,,,,,,,,,,,,,,,,585,,-623,-623,-623,-623,-623,-623,-623,-623', +'-623,-623,-623,-623,-623,-623,,,-623,-623,-623,,,-623,,,-623,,,-623', +'-623,,-623,,-623,,-623,,-623,-623,-623,-623,-623,-623,-623,,-623,-623', +'-623,,,,,,,,,,,,,-623,-623,-623,-623,,-623,,-623,,,,,-623,186,197,187', +'210,183,203,193,192,213,214,208,191,190,185,211,215,216,195,184,198', +'202,204,196,189,,,,205,212,207,206,199,209,194,182,201,200,,,,,,181', +'188,179,180,176,177,178,136,138,,,137,,,,,,,,,170,171,,166,148,149,150', +'157,154,156,,,151,152,,,,172,173,158,159,,,,,,,,,,,,,,163,162,,147,169', +'165,164,160,161,155,153,145,168,146,,,174,103,,,,,,,,,,104,,,,,,,,,167', +',,,,175,186,197,187,210,183,203,193,192,213,214,208,191,190,185,211', +'215,216,195,184,198,202,204,196,189,,,,205,212,207,206,199,209,194,182', +'201,200,,,,,,181,188,179,180,176,177,178,136,138,408,407,137,,409,,', +',,,,170,171,,166,148,149,150,157,154,156,,,151,152,,,,172,173,158,159', +',,,,,,,,,,,,,163,162,,147,169,165,164,160,161,155,153,145,168,146,,', +'174,,,,,,,,,,,,,,,,,,,,167,,,,,175,186,197,187,210,183,203,193,192,213', +'214,208,191,190,185,211,215,216,195,184,198,202,204,196,189,,,,205,212', +'207,206,199,209,194,182,201,200,,,,,,181,188,179,180,176,177,178,136', +'138,135,,137,,,,,,,,,170,171,,166,148,149,150,157,154,156,,,151,152', +',,,172,173,158,159,,,,,,,,,,,,,,163,162,,147,169,165,164,160,161,155', +'153,145,168,146,,,174,103,,,,,,,,,,104,,,,,,,,,167,,,,,175,186,197,187', +'210,183,203,193,192,213,214,208,191,190,185,211,215,216,195,184,198', +'202,204,196,189,,,,205,212,207,206,199,209,194,182,201,200,,,,,,181', +'188,179,180,176,177,178,136,138,,,137,,,,,,,,,170,171,,166,148,149,150', +'157,154,156,,,151,152,,,,172,173,158,159,,,,,,,,,,,,,,163,162,,147,169', +'165,164,160,161,155,153,145,168,146,,,174,103,,,,,,,,,,104,,,,,,,,,167', +',,,,175,186,197,187,210,183,203,193,192,213,214,208,191,190,185,211', +'215,216,195,184,198,202,204,196,189,,,,205,212,207,206,199,209,194,182', +'201,200,,,,,,181,188,179,180,176,177,178,136,138,,,137,,,,,,,,,170,171', +',166,148,149,150,157,154,156,,,151,152,,,,172,173,158,159,,,,,,,,,,', +',,,163,162,,147,169,165,164,160,161,155,153,145,168,146,,,174,103,,', +',,,,,,,104,,,,,,,,,167,,,,,175,186,197,187,210,183,203,193,192,213,214', +'208,191,190,185,211,215,216,195,184,198,202,204,196,189,,,,205,212,207', +'206,199,209,194,182,201,200,,,,,,181,188,179,180,176,177,178,136,138', +',,137,,,,,,,,,170,171,,166,148,149,150,157,154,156,,,151,152,,,,172', +'173,158,159,,,,,,,,,,,,,,163,162,,147,169,165,164,160,161,155,153,145', +'168,146,,,174,,,,,,,,,,,,,,,,,,,,167,,,,,175,186,197,187,210,183,203', +'193,192,213,214,208,191,190,185,211,215,216,195,184,198,202,204,196', +'189,,,,205,212,207,378,377,379,376,182,201,200,,,,,,181,188,179,180', +'373,374,375,371,138,109,108,372,,111,,,,,,,170,171,,166,148,149,150', +'157,154,156,,,151,152,,,,172,173,158,159,,,,,,385,,,,,,,,163,162,,147', +'169,165,164,160,161,155,153,145,168,146,,,174,,,,,,,,,,,,307,85,86,87', +'12,78,,,167,79,80,,,175,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112', +'114,115,,,22,,,,,657,11,49,309,13,117,116,118,107,60,109,108,110,,111', +'119,120,,105,106,,45,46,44,252,256,257,258,259,269,270,264,265,260,261', +',245,246,,,262,263,,43,,,36,,,62,63,,,64,,38,249,,255,48,251,250,247', +'248,268,267,253,23,254,,,,103,95,97,98,99,101,,,,96,104,,266,,-253,', +',66,,,93,100,102,307,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,113,112,114,115,,,22,,,,,657,11,49,309,13,117,116,118', +'107,60,109,108,110,,111,119,120,,105,106,,45,46,44,252,256,257,258,259', +'269,270,264,265,260,261,,245,246,,,262,263,,43,,,311,,,62,63,,,64,,38', +'249,,255,48,251,250,247,248,268,267,253,23,254,,,,103,95,97,98,99,101', +',,,96,104,,266,,,,,66,,,93,100,102,307,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49', +'309,13,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44', +'252,256,257,258,259,269,270,264,265,260,261,,245,246,,,262,263,,43,', +',36,,,62,63,,,64,,38,249,,255,48,251,250,247,248,268,267,253,23,254', +',,,103,95,97,98,99,101,,,,96,104,,266,,,,,66,,,93,100,102,307,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112', +'114,115,,,22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110,,111,119', +'120,,105,106,,45,46,44,252,256,257,258,259,269,270,264,265,260,261,', +'245,246,,,262,263,,43,,,36,,,62,63,,,64,,38,249,,255,48,251,250,247', +'248,268,267,253,23,254,,,,103,95,97,98,99,101,,,,96,104,,266,,,,,66', +',,93,100,102,307,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49,309,13,117,116,118,107', +'60,109,108,110,,111,119,120,,105,106,,45,46,44,252,256,257,258,259,269', +'270,264,265,260,261,,245,246,,,262,263,,43,,,36,,,62,63,,,64,,38,249', +',255,48,251,250,247,248,268,267,253,23,254,,,,103,95,97,98,99,101,,', +',96,104,,266,,,,,66,,,93,100,102,307,85,86,87,12,78,,,,79,80,,,,83,', +'81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49,309', +'13,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,252', +'256,257,258,259,269,270,264,265,260,261,,245,246,,,262,263,,43,,,36', +',,62,63,,,64,,38,249,,255,48,251,250,247,248,268,267,253,23,254,,,,103', +'95,97,98,99,101,,,,96,104,,266,,,,,66,,,93,100,102,307,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,', +',22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110,,111,119,120,,105', +'106,,45,46,44,252,256,257,258,259,269,270,264,265,260,261,,245,246,', +',262,263,,43,,,311,,,62,63,,,64,,38,249,,255,48,251,250,247,248,268', +'267,253,23,254,,,,103,95,97,98,99,101,,,,96,104,,266,,,,,66,,,93,100', +'102,307,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,113,112,114,115,,,22,,,,,,11,49,309,13,117,116,118,107,60,109', +'108,110,,111,119,120,,105,106,,45,46,44,252,256,257,258,259,269,270', +'264,265,260,261,,245,246,,,262,263,,43,,,36,,,62,63,,,64,,38,249,,255', +'48,251,250,247,248,268,267,253,23,254,,,,103,95,97,98,99,101,,,,96,104', +'232,266,,,,,66,,,93,100,102,307,85,86,87,12,78,,,,79,80,,,,83,,81,82', +'84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49,309,13', +'117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,252,-643', +'-643,-643,-643,269,270,,,-643,-643,,,,,,262,263,,43,,,36,,,62,63,,,64', +',38,249,,255,48,251,250,247,248,268,267,253,23,254,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,307,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49', +'309,13,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44', +'252,-643,-643,-643,-643,269,270,,,-643,-643,,,,,,262,263,,43,,,36,,', +'62,63,,,64,,38,249,,255,48,251,250,247,248,268,267,253,23,254,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,307,85,86,87,12,78,', +',,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,', +'22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110,,111,119,120,,105', +'106,,45,46,44,252,-643,-643,-643,-643,269,270,,,-643,-643,,,,,,262,263', +',43,,,36,,,62,63,,,64,,38,249,,255,48,251,250,247,248,268,267,253,23', +'254,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,307,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112', +'114,115,,,22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110,,111,119', +'120,,105,106,,45,46,44,252,-643,-643,-643,-643,269,270,,,-643,-643,', +',,,,262,263,,43,,,36,,,62,63,,,64,,38,249,,255,48,251,250,247,248,268', +'267,253,23,254,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +'8,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'113,112,114,115,,,22,,,,,,11,49,10,13,117,116,118,107,60,109,108,110', +',111,119,120,,105,106,,45,46,44,252,256,257,258,259,269,270,,,260,261', +',,,,,262,263,,43,,,36,,,62,63,,,64,,38,249,,255,48,251,250,247,248,268', +'267,253,23,254,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +'307,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'113,112,114,115,,,22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110', +',111,119,120,,105,106,,45,46,44,252,256,257,258,259,269,270,264,265', +'260,261,,-643,-643,,,262,263,,43,,,36,,,62,63,,,64,,38,249,,255,48,251', +'250,247,248,268,267,253,23,254,,,,103,95,97,98,99,101,,,,96,104,,,,', +',,66,,,93,100,102,307,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49,309,13,117,116,118', +'107,60,109,108,110,,111,119,120,,105,106,,45,46,44,252,256,257,258,259', +'269,270,264,265,260,261,,-643,-643,,,262,263,,43,,,36,,,62,63,,,64,', +'38,249,,255,48,251,250,247,248,268,267,253,23,254,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,307,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49', +'309,13,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44', +'252,256,257,258,259,269,270,264,,260,261,,,,,,262,263,,43,,,36,,,62', +'63,,,64,,38,249,,255,48,251,250,247,248,268,267,253,23,254,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,307,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,', +',,,11,49,309,13,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,252,-643,-643,-643,-643,269,270,,,-643,-643,,,,,,262,263,', +'43,,,36,,,62,63,,,64,,38,249,,255,48,251,250,247,248,268,267,253,23', +'254,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,307,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112', +'114,115,,,22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110,,111,119', +'120,,105,106,,45,46,44,252,-643,-643,-643,-643,269,270,,,-643,-643,', +',,,,262,263,,43,,,36,,,62,63,,,64,,38,249,,255,48,251,250,247,248,268', +'267,253,23,254,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +'307,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'113,112,114,115,,,22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110', +',111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,', +',64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,307,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49,309,13,117,116,118,107', +'60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,43', +',,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,307,85,86,87,12,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49,309,13,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,', +',,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,307,85,86,87,12,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11', +'49,309,13,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46', +'44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,307,85,86,87,12,78,', +',,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,', +'22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110,,111,119,120,,105', +'106,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,307,85', +'86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112', +'114,115,,,22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110,,111,119', +'120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +'8,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'113,112,114,115,,,22,,,,,,11,49,10,13,117,116,118,107,60,109,108,110', +',111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,', +',64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,307,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49,309,13,117,116,118,107', +'60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,43', +',,311,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,307,85,86,87,12,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49,309,13,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,', +',,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,307,85,86,87,12,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11', +'49,309,13,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46', +'44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,307,85,86,87,12,78,', +',,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,', +'22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110,,111,119,120,,105', +'106,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112', +'114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120', +',105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,746,64,575', +'574,573,582,576,48,,,,,,,,242,584,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,580,,93,100,102,85,86,87,,78,,592,591,79,80,,,,83,,81,82,84', +'326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,585,,,49,,,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,', +',,,,,,,,,,237,,,243,,,62,63,,,64,,428,,,,48,,,,,,,,242,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,12,78,,,,79,80,,', +',83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11', +'49,10,13,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46', +'44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,244,,,,', +',,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44', +',,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,746,64,575,574,573,923,576,48', +',,,,,,,242,584,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,580,,93,100', +'102,85,86,87,,78,,592,591,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,113,112,114,115,,,244,,,,585,,,49,,,117,116,118,107,60,109,108', +'110,300,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243', +',,62,63,,,64,,298,,296,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,301,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33', +'34,76,77,,,,,,88,31,30,113,112,114,115,,,244,,,,,,,49,,,117,116,118', +'107,60,109,108,110,300,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,', +',,,,,237,,,243,,,62,63,,,64,,298,,296,,48,,,,,,,,242,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,301,93,100,102,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,244,,,,,,,49,', +',117,116,118,107,60,109,108,110,300,111,119,120,,105,106,,45,46,44,', +',,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,298,,296,,48,,,,,,,,242,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,301,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,324,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',,,330,,,,,,,,,,,,,,,,,,,,320,,,316,,,62,63,,,64,,315,,,,,,,,,,,,,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,', +',,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,324,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',,,330,,,,,,,,,,,,,,,,,,,,320,,,243,,,62,63,,746,64,575,574,573,923', +'576,,,,,,,,,,584,,,,103,95,97,98,99,101,,,,96,104,,,,332,,,66,580,,93', +'100,102,85,86,87,,78,,592,591,79,80,,,,83,,81,82,84,326,327,76,77,,', +',,,88,323,329,113,112,114,115,,,244,,,,585,,,49,,,117,116,118,107,60', +'109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,', +',243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327', +'76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107', +'60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237', +',,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326', +'327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118', +'107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,', +',,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,12,78,,,,79,80,,,,83,,81,82', +'84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,11,49,,13,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,', +',,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,,49,,,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,', +',,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,,49,,,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,', +',,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,,49,,,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,', +',,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,125,,,,,124,66,,,93,100,102,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,', +',,,,,324,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,,,330', +',,,,,,,,,,,,,,,,,,,363,,,36,,,62,63,,,64,,38,,,,,,,,,,,,,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,', +'11,49,10,13,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45', +'46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,411,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,', +',22,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,', +',22,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,', +',22,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,', +',22,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,12', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115', +',,22,,,,,,11,49,,13,117,116,118,107,60,109,108,110,,111,119,120,,105', +'106,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114', +'115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,300,111,119,120', +',105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,298,,296', +',48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,301,93,100', +'102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111', +'119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64', +',428,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,', +'111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63', +',,64,,428,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,', +'88,31,30,113,112,114,115,,,22,,,,,,,49,,,117,116,118,107,60,109,108', +'110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,', +'88,31,30,113,112,114,115,,,22,,,,,,,49,,,117,116,118,107,60,109,108', +'110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,', +'88,31,30,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108', +'110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62', +'63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,', +'88,31,30,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108', +'110,300,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243', +',,62,63,,,64,,298,,296,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,301,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33', +'34,76,77,,,,,,88,31,30,113,112,114,115,,,244,,,,,,,49,,,117,116,118', +'107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,', +',,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,,49,,,117,116,118', +'107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,', +',,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,,49,,,117,116,118', +'107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,', +',,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,232,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,', +',,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49', +',,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,', +',,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,', +',,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46', +'44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,', +',244,,,,,,,49,,,117,116,118,107,60,109,108,110,300,111,119,120,,105', +'106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,298,,296,,48', +',,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,301,93,100,102', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113', +'112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,300,111', +'119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64', +',298,,296,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',301,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109', +'108,110,300,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,', +'243,,,62,63,,,64,,298,,296,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,', +',96,104,232,,,,,,66,,301,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,', +',117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,', +',,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,', +',,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46', +'44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,12', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115', +',,22,,,,,,11,49,,13,117,116,118,107,60,109,108,110,,111,119,120,,105', +'106,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112', +'114,115,,,244,,,,,,,324,,,117,116,118,107,60,109,108,110,,111,119,120', +',105,106,,,,330,,,,,,,,,,,,,,,,,,,,985,,,243,,,62,63,,,64,,,,,,,,,,', +',,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87', +',78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114', +'115,,,244,,,,,,,324,,,117,116,118,107,60,109,108,110,,111,119,120,,105', +'106,,,,330,,,,,,,,,,,,,,,,,,,,320,,,243,,,62,63,,,64,,,,,,,,,,,,,,,', +',,,103,95,97,98,99,101,,,,96,104,,,,531,,,66,,,93,100,102,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114', +'115,,,244,,,,,,,324,,,117,116,118,107,60,109,108,110,,111,119,120,,105', +'106,,,,330,,,,,,,,,,,,,,,,,,,,320,,,316,,,62,63,,,64,,,,,,,,,,,,,,,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,693,,,,48,,,,,', +',,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112', +'114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120', +',105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48', +',,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113', +'112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119', +'120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,550,,62,63,,,64', +',,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323', +'329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110', +'300,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62', +'63,,,64,,298,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,', +',,66,,301,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76', +'77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107', +'60,109,108,110,300,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,', +',237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,301,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,,49,,,117,116', +'118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,', +',,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,324,,,117', +'116,118,610,60,109,108,611,,111,119,120,,105,106,,,,330,,,,,,,,,,,,', +',,,,,,,612,,,243,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,324,,,117', +'116,118,610,60,109,108,611,,111,119,120,,105,106,,,,330,,,,,,,,,,,,', +',,,,,,,612,,,243,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,324,,,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,,,330,,,,,,,,,,,,', +',,,,,,,992,,,243,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,324,,,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,,,330,,,,,,,,,,,,', +',,,,,,,985,,,243,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116', +'118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,', +',,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,', +',117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,', +',,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,', +',,,,,49,,,117,116,118,107,60,109,108,110,300,111,119,120,,105,106,,45', +'46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,296,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,301,93,100,102,85,86,87', +',78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115', +',,22,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,', +',244,,,,,,,49,,,117,116,118,107,60,109,108,110,300,111,119,120,,105', +'106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,298,,296,,48', +',,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,301,93,100,102', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329', +'113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111', +'119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64', +',,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323', +'329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110', +',111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63', +',,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,', +',88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109', +'108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243', +',,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,113,112,114,115,,,22,,,,,,,49,,,117,116,118,107,60,109', +'108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243', +',,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,', +',,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76', +'77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107', +'60,109,108,110,300,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,', +',237,,,243,,,62,63,,,64,,693,,296,,48,,,,,,,,242,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,301,93,100,102,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49', +',,117,116,118,107,60,109,108,110,300,111,119,120,,105,106,,45,46,44', +',,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,296,,48,,,,,,,,242,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,301,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,12', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115', +',,22,,,,,,11,49,309,13,117,116,118,107,60,109,108,110,,111,119,120,', +'105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,411,66,,,93,100,102', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329', +'113,112,114,115,,,244,,,,,,,324,,,117,116,118,107,60,109,108,110,,111', +'119,120,,105,106,,,,330,,,,,,,,,,,,,,,,,,,,320,,,316,,,62,63,,,64,,', +',,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113', +'112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,300,111', +'119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64', +',298,,296,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',301,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77', +',,,,,88,323,329,113,112,114,115,,,244,,,,,,,324,,,117,116,118,107,60', +'109,108,110,,111,119,120,,105,106,,,,330,,,,,,,,,,,,,,,,,,,,320,,,316', +',,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,', +',,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109', +'108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243', +',,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76', +'77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107', +'60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237', +',,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,113,112,114,115,,,22,,,,,,,49,,,117,116,118,107', +'60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237', +',,243,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327', +'76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107', +'60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237', +',,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326', +'327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118', +'107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,', +',,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116', +'118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,', +',,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,', +',117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,', +',,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,', +',,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46', +'44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,,,244', +',,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45', +'46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115', +',,244,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119,120,,105,106', +',45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113,112,114,115,', +',244,,,,,,,49,,,117,116,118,107,60,109,108,110,300,111,119,120,,105', +'106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,298,,296,,48', +',,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,301,93,100,102', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113', +'112,114,115,,,22,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119', +'120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113', +'112,114,115,,,22,,,,,,,49,,,117,116,118,107,60,109,108,110,,111,119', +'120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,113', +'112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,300,111', +'119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64', +',298,,296,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',301,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77', +',,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60', +'109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,', +',243,,,62,63,,,64,,796,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107', +'60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237', +',,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107', +'60,109,108,110,300,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,', +',237,,,243,,,62,63,,,64,,298,,296,,48,,,,,,,,242,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,301,93,100,102,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49', +',,117,116,118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,', +',,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,', +',,,,,49,,,117,116,118,107,60,109,108,110,300,111,119,120,,105,106,,45', +'46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,693,,296,,48,,,,,,', +',242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,301,93,100,102,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112', +'114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,300,111,119', +'120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,', +'296,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,301,93', +'100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110,', +'111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63', +',,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110', +',111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63', +',,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110', +',111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63', +',,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109,108,110', +',111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63', +',,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327,76,77,,,,', +',88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107,60,109', +'108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243', +',,62,63,,,64,,298,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326,327', +'76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118,107', +'60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,,,,237', +',,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84,326', +'327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116,118', +'107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,,,,,', +',,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,324,,,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,,,330,,,,,,,,,,,,', +',,,,,,,320,,,316,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,324,,,117', +'116,118,107,60,109,108,110,,111,119,120,,105,106,,,,330,,,,,,,,,,,,', +',,,,,,,320,,,316,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,,,117,116', +'118,107,60,109,108,110,,111,119,120,,105,106,,45,46,44,,,,,,,,,,,,,', +',,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244,,,,,,,49,', +',117,116,118,107,60,109,108,110,300,111,119,120,,105,106,,45,46,44,', +',,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,,,,,48,,,,,,,,242,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,301,93,100,102,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,326,327,76,77,,,,,,88,323,329,113,112,114,115,,,244', +',,,,,,49,,,117,116,118,107,60,109,108,110,300,111,119,120,,105,106,', +'45,46,44,,,,,,,,,,,,,,,,,,,,237,,,243,,,62,63,,,64,,693,,,,48,,,,,,', +',242,,,,,103,95,97,98,99,101,,,,96,104,457,461,,,456,,66,,301,93,100', +'102,,170,171,,166,148,149,150,157,154,156,,,151,152,,,,172,173,158,159', +',,,,,286,,,,,,,,163,162,,147,169,165,164,160,161,155,153,145,168,146', +',,174,,,,,,,,,,674,454,,,675,,,,,,167,,,170,171,175,166,148,149,150', +'157,154,156,,,151,152,,,,172,173,158,159,,,,,,286,,,,,,,,163,162,,147', +'169,165,164,160,161,155,153,145,168,146,,,174,,,,,,,,,,502,454,,,503', +',,,,,167,,,170,171,175,166,148,149,150,157,154,156,,,151,152,,,,172', +'173,158,159,,,,,,286,,,,,,,,163,162,,147,169,165,164,160,161,155,153', +'145,168,146,,,174,,,,,,,,,,1062,461,,,1061,,,,,,167,,,170,171,175,166', +'148,149,150,157,154,156,,,151,152,,,,172,173,158,159,,,,,,286,,,,,,', +',163,162,,147,169,165,164,160,161,155,153,145,168,146,,,174,,,,,,,,', +',676,461,,,677,,,,,,167,,,170,171,175,166,148,149,150,157,154,156,,', +'151,152,,,,172,173,158,159,,,,,,286,,,,,,,,163,162,,147,169,165,164', +'160,161,155,153,145,168,146,,,174,,,,,,,,,,450,454,,,451,,,,,,167,,', +'170,171,175,166,148,149,150,157,154,156,,,151,152,,,,172,173,158,159', +',,,,,286,,,,,,,,163,162,,147,169,165,164,160,161,155,153,145,168,146', +',,174,,,,,,,,,,1065,454,,,1066,,,,,,167,,,170,171,175,166,148,149,150', +'157,154,156,,,151,152,,,,172,173,158,159,,,,,,286,,,,,,,,163,162,,147', +'169,165,164,160,161,155,153,145,168,146,,,174,,,,,,,,,,702,454,,,703', +',,,,,167,,,170,171,175,166,148,149,150,157,154,156,,,151,152,,,,172', +'173,158,159,,,,,,286,,,,,,,,163,162,,147,169,165,164,160,161,155,153', +'145,168,146,,,174,,,,,,,,,,798,454,,,799,,,,,,167,,,170,171,175,166', +'148,149,150,157,154,156,,,151,152,,,,172,173,158,159,,,,,,286,,,,,,', +',163,162,,147,169,165,164,160,161,155,153,145,168,146,,,174,,,,,,,,', +',676,461,,,677,,,,,,167,,,170,171,175,166,148,149,150,157,154,156,,', +'151,152,,,,172,173,158,159,,,,,,286,,,,,,,,163,162,,147,169,165,164', +'160,161,155,153,145,168,146,,,174,,,,,,,,,,674,454,,,675,,,,,,167,,', +'170,171,175,166,148,149,150,157,154,156,,,151,152,,,,172,173,158,159', +',,,,,286,,,,,,,,163,162,,147,169,165,164,160,161,155,153,145,168,146', +',,174,,,,,,,,,,766,461,,,767,,,,,,167,,,170,171,175,166,148,149,150', +'157,154,156,,,151,152,,,,172,173,158,159,,,,,,286,,,,,,,,163,162,,147', +'169,165,164,160,161,155,153,145,168,146,,,174,,,,,,,,,,1067,461,,,1068', +',,,,,167,,,170,171,175,166,148,149,150,157,154,156,,,151,152,,,,172', +'173,158,159,,,,,,286,,,,,,,,163,162,,147,169,165,164,160,161,155,153', +'145,168,146,,,174,,,,,,,,,,885,461,,,886,,,,,,167,,,170,171,175,166', +'148,149,150,157,154,156,,,151,152,,,,172,173,158,159,,,,,,286,,,,,,', +',163,162,,147,169,165,164,160,161,155,153,145,168,146,,,174,,,,,,,,', +',705,461,,,706,,,,,,167,,,170,171,175,166,148,149,150,157,154,156,,', +'151,152,,,,172,173,158,159,,,,,,286,,,,,,,,163,162,,147,169,165,164', +'160,161,155,153,145,168,146,,,174,,,,,,,,,,801,461,,,800,,,,,,167,,', +'170,171,175,166,148,149,150,157,154,156,,,151,152,,,,172,173,158,159', +',,,,,286,,,,,,,,163,162,,147,169,165,164,160,161,155,153,145,168,146', +',578,174,575,574,573,582,576,,,,,502,454,,,503,584,,,,,167,,,170,171', +'175,166,148,149,150,157,154,156,,,151,152,580,,,172,173,158,159,,,589', +'588,592,591,,,,,,,,163,162,,147,169,165,164,160,161,155,153,145,168', +'146,,,174,,,,,,,,,585,764,454,,,765,,,,,,167,,,170,171,175,166,148,149', +'150,157,154,156,,,151,152,,,,172,173,158,159,,,,,,286,,,,,,,,163,162', +',147,169,165,164,160,161,155,153,145,168,146,,578,174,575,574,573,582', +'576,922,,575,574,573,923,576,,,584,,,,,167,,584,,578,175,575,574,573', +'582,576,,,,,,,580,,,584,,,,580,,589,588,592,591,,,,589,588,592,591,', +',,,578,580,575,574,573,582,576,,,,589,588,592,591,,,584,,,,232,585,', +',,,,578,585,575,574,573,582,576,,,,,580,,,,,584,,,585,589,588,592,591', +',,,,,,,,,,,,,,580,,,,,,,,,589,588,592,591,,,,,,585,,,,,,,,,,,,,,,,,', +',,,,,,,,,585' ] + racc_action_table = arr = ::Array.new(25472, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -876,919 +889,907 @@ end clist = [ -'429,1032,1033,339,663,906,308,429,429,429,446,446,451,429,429,1049,429', -'596,61,320,758,758,676,737,476,429,320,29,616,1047,928,338,490,676,390', -'320,429,429,663,429,429,429,429,429,592,3,692,692,592,738,346,345,588', -'61,349,853,476,1034,581,64,476,476,476,476,13,451,490,429,429,429,429', -'429,429,429,429,429,429,429,429,429,429,580,855,429,429,429,854,429', -'662,616,616,429,29,308,429,390,390,390,616,429,446,429,545,429,429,429', -'429,429,429,429,758,429,429,429,29,1032,1033,339,739,906,1032,1033,339', -'596,906,652,429,429,737,429,15,429,652,652,652,1034,692,652,652,652', -'429,652,596,1047,928,338,64,596,1047,928,338,652,652,652,738,346,345', -'588,581,349,16,652,652,581,652,652,652,652,652,853,681,1034,853,740', -'853,662,1034,385,22,19,80,580,855,682,739,388,580,855,80,752,752,854', -'652,652,652,652,652,652,652,652,652,652,652,652,652,652,5,545,652,652', -'652,5,652,652,22,376,652,422,376,652,652,223,652,739,652,25,652,789', -'652,652,652,652,652,652,652,40,652,681,652,740,385,719,613,719,719,719', -'43,719,388,590,682,652,652,652,652,95,652,224,652,422,226,48,95,95,95', -'652,489,95,95,95,422,95,681,481,223,681,376,376,740,95,789,95,95,95', -'814,682,681,331,682,72,331,95,95,87,95,95,95,95,95,682,489,362,590,613', -'613,88,756,481,362,590,224,756,613,226,590,123,649,650,590,719,123,123', -'95,95,95,95,95,95,95,95,95,95,95,95,95,95,590,814,95,95,95,372,95,95', -'814,374,95,317,27,95,95,89,95,814,95,27,95,90,95,95,95,95,95,95,95,985', -'95,985,95,649,650,814,924,379,924,924,924,121,924,591,684,95,95,95,95', -'98,95,330,95,317,330,289,98,98,98,95,289,98,98,98,317,98,372,372,372', -'205,374,374,374,98,458,98,98,98,937,863,358,225,856,937,863,98,98,358', -'98,98,98,98,98,227,882,228,591,684,379,379,379,232,382,591,684,882,458', -'264,591,684,458,458,591,684,924,267,98,98,98,98,98,98,98,98,98,98,98', -'98,98,98,591,684,98,98,98,856,98,98,882,882,98,278,856,98,98,279,98', -'856,98,632,98,856,98,98,98,98,98,98,98,704,98,359,98,382,382,382,363', -'357,359,856,704,18,882,363,357,98,98,98,98,428,98,41,98,42,282,423,428', -'428,428,98,285,632,428,428,658,428,658,658,658,658,658,49,632,704,704', -'364,751,366,49,293,658,751,364,18,366,428,428,49,428,428,428,428,428', -'41,18,42,360,423,697,44,44,697,658,360,41,457,42,704,423,295,342,658', -'658,658,658,342,428,428,428,428,428,428,428,428,428,428,428,428,428', -'428,296,361,428,428,428,297,428,457,361,658,428,457,457,428,356,303', -'954,658,428,954,428,356,428,428,428,428,428,428,428,306,428,543,428', -'594,543,562,307,562,562,562,594,562,707,707,651,428,428,312,428,594', -'428,651,651,651,726,726,651,651,651,428,651,842,314,842,842,842,477', -'842,318,651,651,651,651,562,506,506,506,506,506,319,651,651,562,651', -'651,651,651,651,978,322,978,978,978,304,978,313,313,328,477,842,304', -'332,477,477,477,477,337,337,842,304,343,651,651,651,651,651,651,651', -'651,651,651,651,651,651,651,344,978,651,651,651,302,651,651,20,20,651', -'348,302,651,651,350,651,463,651,378,651,302,651,651,651,651,651,651', -'651,381,651,651,651,463,463,1002,384,1002,1002,1002,387,1002,533,533', -'409,651,651,651,651,463,651,463,651,463,463,463,463,1018,1018,651,404', -'404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404', -'404,404,404,404,404,404,411,414,417,404,404,404,404,404,404,404,404', -'404,404,291,291,291,291,291,404,404,404,404,404,404,404,404,404,420', -'421,404,430,894,465,894,894,894,438,894,404,404,459,404,404,404,404', -'404,404,404,465,465,404,404,460,461,462,404,404,404,404,716,491,716', -'716,716,465,716,492,507,465,465,465,465,404,404,508,404,404,404,404', -'404,404,404,404,404,404,404,685,511,404,404,759,759,513,685,759,759', -'759,716,685,404,518,980,685,980,980,980,716,980,404,522,531,532,541', -'404,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757', -'757,757,757,757,757,757,757,757,544,980,548,757,757,757,757,757,757', -'757,757,757,757,9,9,9,9,9,757,757,757,757,757,757,757,757,757,549,551', -'757,552,553,464,675,675,675,675,675,757,757,560,757,757,757,757,757', -'757,757,464,464,757,757,568,572,575,757,757,757,757,844,577,844,844', -'844,464,844,464,582,464,464,464,464,757,757,583,757,757,757,757,757', -'757,757,757,757,757,757,620,623,757,857,625,347,629,633,638,644,857', -'844,347,653,925,857,925,925,925,857,925,347,757,655,661,668,670,757', -'627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627', -'627,627,627,627,627,627,627,925,678,680,627,627,627,627,627,627,627', -'627,627,627,683,686,687,690,691,627,627,627,627,627,627,627,627,627', -'693,1016,627,1016,1016,1016,958,1016,696,703,718,627,627,958,627,627', -'627,627,627,627,627,721,958,627,627,300,301,967,627,627,627,627,300', -'301,967,728,733,736,768,1016,773,300,301,967,791,627,627,792,627,627', -'627,627,627,627,627,627,627,627,627,968,969,627,627,1010,971,794,968', -'969,795,796,1010,971,627,798,799,968,969,800,801,1010,971,627,813,817', -'820,821,627,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12', -'12,12,12,12,12,826,827,828,12,12,12,12,12,12,12,12,12,12,829,833,834', -'836,837,12,12,12,12,12,12,12,12,12,839,841,12,843,846,849,17,859,864', -'865,866,12,12,17,12,12,12,12,12,12,12,875,17,12,12,1035,743,517,12,12', -'12,12,1035,743,517,876,893,1035,897,898,900,1035,743,517,901,12,12,926', -'12,12,12,12,12,12,12,12,12,12,12,896,222,12,12,930,931,936,896,222,944', -'947,948,949,12,950,952,896,222,962,970,973,974,12,975,976,977,979,12', -'91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91', -'91,1003,1004,1006,91,91,91,91,91,91,91,91,91,91,1017,1022,1023,1024', -'1025,91,91,91,91,91,91,91,91,91,91,91,91,1026,91,1027,1028,1031,1036', -'1037,1,91,91,,91,91,91,91,91,91,91,,,91,91,,,,91,91,91,91,,,,,,,,,,', -',,,91,91,,91,91,91,91,91,91,91,91,91,91,91,,,91,,,,,,,,,,,,,,,,,,,,91', -',,,,91,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74', -'74,74,74,,,,74,74,74,74,74,74,74,74,74,74,,,,,,74,74,74,74,74,74,74', -'74,74,74,74,74,,74,,,,,,,74,74,,74,74,74,74,74,74,74,,,74,74,,,,74,74', -'74,74,,,,,,74,,,,,,,,74,74,,74,74,74,74,74,74,74,74,74,74,74,,,74,,', -',,,,,,,,,,,,,,,,,74,,,,,74,11,11,11,11,11,11,11,11,11,11,11,11,11,11', -'11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11,11,,,,,', -'11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11', -',,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11', -'11,11,,,11,11,,,,,,,,,,11,810,810,810,810,810,810,,,11,810,810,,,11', -'810,,810,810,810,810,810,810,810,,,,,,810,810,810,810,810,810,810,,', -'810,,,,,441,810,810,,810,810,810,810,810,810,810,810,810,,810,810,810', -',810,810,,810,810,810,441,441,441,441,441,441,441,441,441,441,441,,441', -'441,,,441,441,,810,,,810,,,810,810,,,810,,810,441,,441,810,441,441,441', -'441,441,441,441,810,441,,,,810,810,810,810,810,810,,,,810,810,,441,', -'441,,,810,,,810,810,810,899,899,899,899,899,899,,,,899,899,,,,899,,899', -'899,899,899,899,899,899,,,,,,899,899,899,899,899,899,899,,,899,,,,,416', -'899,899,,899,899,899,899,899,899,899,899,899,,899,899,899,,899,899,', -'899,899,899,416,416,416,416,416,416,416,416,416,416,416,,416,416,,,416', -'416,,899,,,899,,,899,899,,,899,,899,416,,416,899,416,416,416,416,416', -'416,416,899,416,,,,899,899,899,899,899,899,,,,899,899,,416,,,,,899,', -',899,899,899,809,809,809,809,809,809,,,,809,809,,,,809,,809,809,809', -'809,809,809,809,,,,,,809,809,809,809,809,809,809,,,809,,,,,654,809,809', -',809,809,809,809,809,809,809,809,809,,809,809,809,,809,809,,809,809', -'809,654,654,654,654,654,654,654,654,654,654,654,,654,654,,,654,654,', -'809,,,809,,,809,809,,,809,,809,654,,654,809,654,654,654,654,654,654', -'654,809,654,,,,809,809,809,809,809,809,,,,809,809,,654,,,,,809,,,809', -'809,809,702,702,702,702,702,702,,,,702,702,,,,702,,702,702,702,702,702', -'702,702,,,,,,702,702,702,702,702,702,702,,,702,,,,,,702,702,,702,702', -'702,702,702,702,702,702,702,,702,702,702,,702,702,,702,702,702,480,480', -'480,480,480,480,480,480,480,480,480,,480,480,,,480,480,,702,,,702,,', -'702,702,,,702,,702,480,,480,702,480,480,480,480,480,480,480,702,480', -',,,702,702,702,702,702,702,,,,702,702,480,480,,,,,702,,,702,702,702', -'294,294,294,294,294,294,,,,294,294,,,,294,,294,294,294,294,294,294,294', -',,,,,294,294,294,294,294,294,294,,,294,,,,,,294,294,,294,294,294,294', -'294,294,294,294,294,,294,294,294,,294,294,,294,294,294,780,780,780,780', -'780,780,780,780,780,780,780,,780,780,,,780,780,,294,,,294,,,294,294', -',,294,,294,780,,780,294,780,780,780,780,780,780,780,294,780,,,,294,294', -'294,294,294,294,,,,294,294,,780,,,,,294,,,294,294,294,753,753,753,753', -'753,753,,,,753,753,,,,753,,753,753,753,753,753,753,753,,,,,,753,753', -'753,753,753,753,753,,,753,,,,,,753,753,,753,753,753,753,753,753,753', -'753,753,,753,753,753,,753,753,,753,753,753,777,777,777,777,777,777,777', -'777,777,777,777,,777,777,,,777,777,,753,,,753,,,753,753,,,753,,753,777', -',777,753,777,777,777,777,777,777,777,753,777,,,,753,753,753,753,753', -'753,,,,753,753,,777,,,,,753,,,753,753,753,966,966,966,966,966,966,,', -',966,966,,,,966,,966,966,966,966,966,966,966,,,,,,966,966,966,966,966', -'966,966,,,966,,,,,,966,966,,966,966,966,966,966,966,966,966,966,,966', -'966,966,,966,966,,966,966,966,784,784,784,784,784,784,784,784,784,784', -'784,,784,784,,,784,784,,966,,,966,,,966,966,,,966,,966,784,,784,966', -'784,784,784,784,784,784,784,966,784,,,,966,966,966,966,966,966,,,,966', -'966,,784,,,,,966,,,966,966,966,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2', -'2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,,2', -'2,2,782,782,782,782,782,782,782,782,782,782,782,,782,782,,,782,782,', -'2,,,2,,,2,2,,,2,,2,782,,782,2,782,782,782,782,782,782,782,2,782,,,,2', -'2,2,2,2,2,,,,2,2,,782,,,,,2,,,2,2,2,754,754,754,754,754,754,,,,754,754', -',,,754,,754,754,754,754,754,754,754,,,,,,754,754,754,754,754,754,754', -',,754,,,,,,754,754,,754,754,754,754,754,754,754,754,754,,754,754,754', -',754,754,,754,754,754,436,436,436,436,436,436,436,436,436,436,436,,436', -'436,,,436,436,,754,,,754,,,754,754,,,754,,754,436,,436,754,436,436,436', -'436,436,436,436,754,436,,,,754,754,754,754,754,754,,,,754,754,,436,', -',,,754,,,754,754,754,860,860,860,860,860,860,,,,860,860,,,,860,,860', -'860,860,860,860,860,860,,,,,,860,860,860,860,860,860,860,,,860,,,,,', -'860,860,,860,860,860,860,860,860,860,860,860,,860,860,860,,860,860,', -'860,860,860,881,881,881,881,881,881,881,881,881,881,881,,881,881,,,881', -'881,,860,,,860,,,860,860,,,860,,860,881,,881,860,881,881,881,881,881', -'881,881,860,881,,,,860,860,860,860,860,860,,,,860,860,,881,,,,,860,', -',860,860,860,299,299,299,299,299,299,,,,299,299,,,,299,,299,299,299', -'299,299,299,299,,,,,,299,299,299,299,299,299,299,,,299,,,,,,299,299', -',299,299,299,299,299,299,299,299,299,,299,299,299,,299,299,,299,299', -'299,775,775,775,775,775,775,775,775,775,775,775,,775,775,,,775,775,', -'299,,,299,,,299,299,,,299,,299,775,,775,299,775,775,775,775,775,775', -'775,299,775,,,,299,299,299,299,299,299,,,,299,299,,775,,,,,299,,,299', -'299,299,851,851,851,851,851,851,,,,851,851,,,,851,,851,851,851,851,851', -'851,851,,,,,,851,851,851,851,851,851,851,,,851,,,,,,851,851,,851,851', -'851,851,851,851,851,851,851,,851,851,851,,851,851,,851,851,851,770,770', -'770,770,770,770,770,770,770,770,770,,770,770,,,770,770,,851,,,851,,', -'851,851,,,851,,851,770,,770,851,770,770,770,770,770,770,770,851,770', -',,,851,851,851,851,851,851,,,,851,851,,770,,,,,851,,,851,851,851,850', -'850,850,850,850,850,,,,850,850,,,,850,,850,850,850,850,850,850,850,', -',,,,850,850,850,850,850,850,850,,,850,,,,,,850,850,,850,850,850,850', -'850,850,850,850,850,,850,850,850,,850,850,,850,850,850,689,689,689,689', -'689,689,689,689,689,689,689,,689,689,,,689,689,,850,,,850,,,850,850', -',,850,,850,689,,689,850,689,689,689,689,689,689,689,850,689,,,,850,850', -'850,850,850,850,,,,850,850,,689,,,,,850,,,850,850,850,805,805,805,805', -'805,805,,,,805,805,,,,805,,805,805,805,805,805,805,805,,,,,,805,805', -'805,805,805,805,805,,,805,,,,,,805,805,,805,805,805,805,805,805,805', -'805,805,,805,805,805,,805,805,,805,805,805,24,24,24,24,24,24,24,24,24', -'24,24,,24,24,,,24,24,,805,,,805,,,805,805,,,805,,805,24,,24,805,24,24', -'24,24,24,24,24,805,24,,,,805,805,805,805,805,805,,,,805,805,,24,,,,', -'805,,,805,805,805,403,403,403,403,403,403,,,,403,403,,,,403,,403,403', -'403,403,403,403,403,,,,,,403,403,403,403,403,403,403,,,403,,,,,,403', -'403,403,403,403,403,403,403,403,403,403,403,,403,403,403,,403,403,,403', -'403,403,276,276,276,276,276,276,276,276,276,276,276,,276,276,,,276,276', -',403,,,403,,,403,403,,,403,,403,276,,276,403,276,276,276,276,276,276', -'276,403,276,,,,403,403,403,403,403,403,,,,403,403,,276,,,,,403,,,403', -'403,403,207,207,207,207,207,207,,,,207,207,,,,207,,207,207,207,207,207', -'207,207,,,,,,207,207,207,207,207,207,207,,,207,,,,,,207,207,,207,207', -'207,207,207,207,207,207,207,,207,207,207,,207,207,,207,207,207,529,529', -'529,529,529,529,529,529,529,529,529,,529,529,,,529,529,,207,,,207,,', -'207,207,,,207,,207,529,,529,207,529,529,529,529,529,529,529,207,529', -',,,207,207,207,207,207,207,,,,207,207,,529,,,,,207,,,207,207,207,990', -'990,990,990,990,990,,,,990,990,,,,990,,990,990,990,990,990,990,990,', -',,,,990,990,990,990,990,990,990,,,990,,,,,,990,990,,990,990,990,990', -'990,990,990,990,990,,990,990,990,,990,990,,990,990,990,878,878,878,878', -'878,878,878,878,878,878,878,,878,878,,,878,878,,990,,,990,,,990,990', -',,990,,990,878,,878,990,878,878,878,878,878,878,878,990,878,,,,990,990', -'990,990,990,990,,,,990,990,,878,,,,,990,,,990,990,990,231,231,231,231', -'231,231,,,,231,231,,,,231,,231,231,231,231,231,231,231,,,,,,231,231', -'231,231,231,231,231,,,231,,,,,,231,231,,231,231,231,231,231,231,231', -'231,231,,231,231,231,,231,231,,231,231,231,473,473,473,473,473,473,473', -',,473,473,,,,,,473,473,,231,,,231,,,231,231,,,231,,231,473,,473,231', -'473,473,473,473,473,473,473,231,473,,,,231,231,231,231,231,231,,,,231', -'231,,,,,,,231,,,231,231,231,325,325,325,325,325,325,,,,325,325,,,,325', -',325,325,325,325,325,325,325,,,,,,325,325,325,325,325,325,325,,,325', -',,,,,325,325,,325,325,325,325,325,325,325,325,325,,325,325,325,,325', -'325,,325,325,325,471,471,471,471,471,471,471,,,471,471,,,,,,471,471', -',325,,,325,,,325,325,,,325,,325,471,,471,325,471,471,471,471,471,471', -'471,325,471,,,,325,325,325,325,325,325,,,,325,325,,,,,,,325,,,325,325', -'325,701,701,701,701,701,701,,,,701,701,,,,701,,701,701,701,701,701,701', -'701,,,,,,701,701,701,701,701,701,701,,,701,,,,,,701,701,,701,701,701', -'701,701,701,701,701,701,,701,701,701,,701,701,,701,701,701,455,455,455', -'455,455,455,455,455,455,455,455,,455,455,,,455,455,,701,,,701,,,701', -'701,,,701,,701,455,,455,701,455,455,455,455,455,455,455,701,455,,,,701', -'701,701,701,701,701,,,,701,701,,,,,,,701,,,701,701,701,579,579,579,579', -'579,579,,,,579,579,,,,579,,579,579,579,579,579,579,579,,,,,,579,579', -'579,579,579,579,579,,,579,,,,,,579,579,,579,579,579,579,579,579,579', -'579,579,,579,579,579,,579,579,,579,579,579,470,,,,,,,,,,,,,,,,470,470', -',579,,,579,,,579,579,,,579,,579,470,,470,579,470,470,470,470,,,470,579', -'470,,,,579,579,579,579,579,579,,,,579,579,,,,,,,579,,,579,579,579,989', -'989,989,989,989,989,,,,989,989,,,,989,,989,989,989,989,989,989,989,', -',,,,989,989,989,989,989,989,989,,,989,,,,,,989,989,,989,989,989,989', -'989,989,989,989,989,,989,989,989,,989,989,,989,989,989,475,475,475,475', -'475,475,475,,,475,475,,,,,,475,475,,989,,,989,,,989,989,,,989,,989,475', -',475,989,475,475,475,475,475,475,475,989,475,,,,989,989,989,989,989', -'989,,,,989,989,,,,,,,989,,,989,989,989,576,576,576,576,576,576,,,,576', -'576,,,,576,,576,576,576,576,576,576,576,,,,,,576,576,576,576,576,576', -'576,,,576,,,,,,576,576,,576,576,576,576,576,576,576,576,576,,576,576', -'576,,576,576,,576,576,576,478,478,478,478,478,478,478,,,478,478,,,,', -',478,478,,576,,,576,,,576,576,,,576,,576,478,,478,576,478,478,478,478', -'478,478,478,576,478,,,,576,576,576,576,576,576,,,,576,576,,,,,,,576', -',,576,576,576,986,986,986,986,986,986,,,,986,986,,,,986,,986,986,986', -'986,986,986,986,,,,,,986,986,986,986,986,986,986,,,986,,,,,,986,986', -',986,986,986,986,986,986,986,986,986,,986,986,986,,986,986,,986,986', -'986,479,479,479,479,479,479,479,479,,479,479,,,,,,479,479,,986,,,986', -',,986,986,,,986,,986,479,,479,986,479,479,479,479,479,479,479,986,479', -',,,986,986,986,986,986,986,,,,986,986,,,,,,,986,,,986,986,986,981,981', -'981,981,981,981,,,,981,981,,,,981,,981,981,981,981,981,981,981,,,,,', -'981,981,981,981,981,981,981,,,981,,,,,,981,981,,981,981,981,981,981', -'981,981,981,981,,981,981,981,,981,981,,981,981,981,469,,,,,,,,,,,,,', -',,469,469,,981,,,981,,,981,981,,,981,,981,469,,469,981,469,469,469,469', -',,469,981,469,,,,981,981,981,981,981,981,,,,981,981,,,,,,,981,,,981', -'981,981,760,760,760,760,760,760,,,,760,760,,,,760,,760,760,760,760,760', -'760,760,,,,,,760,760,760,760,760,760,760,,,760,,,,,,760,760,,760,760', -'760,760,760,760,760,760,760,,760,760,760,,760,760,,760,760,760,468,', -',,,,,,,,,,,,,,468,468,,760,,,760,,,760,760,,,760,,760,468,,468,760,468', -'468,468,468,,,468,760,468,,,,760,760,760,760,760,760,,,,760,760,,,,', -',,760,,,760,760,760,819,819,819,819,819,819,,,,819,819,,,,819,,819,819', -'819,819,819,819,819,,,,,,819,819,819,819,819,819,819,,,819,,,,,,819', -'819,,819,819,819,819,819,819,819,819,819,,819,819,819,,819,819,,819', -'819,819,467,,,,,,,,,,,,,,,,467,467,,819,,,819,,,819,819,,,819,,819,467', -',467,819,467,467,467,467,,,467,819,467,,,,819,819,819,819,819,819,,', -',819,819,,,,,,,819,,,819,819,819,933,933,933,933,933,933,,,,933,933', -',,,933,,933,933,933,933,933,933,933,,,,,,933,933,933,933,933,933,933', -',,933,,,,,,933,933,,933,933,933,933,933,933,933,933,933,,933,933,933', -',933,933,,933,933,933,466,466,466,466,466,466,466,,,466,466,,,,,,466', -'466,,933,,,933,,,933,933,,,933,,933,466,,466,933,466,466,466,466,466', -'466,466,933,466,,,,933,933,933,933,933,933,,,,933,933,,,,,,,933,,,933', -'933,933,36,36,36,36,36,36,,,,36,36,,,,36,,36,36,36,36,36,36,36,,,,,', -'36,36,36,36,36,36,36,,,36,,,,,,36,36,,36,36,36,36,36,36,36,36,36,,36', -'36,36,,36,36,,36,36,36,456,456,456,456,456,456,456,456,456,456,456,', -'456,456,,,456,456,,36,,,36,,,36,36,,,36,,36,456,,456,36,456,456,456', -'456,456,456,456,36,456,,,,36,36,36,36,36,36,,,,36,36,,,,,,,36,,,36,36', -'36,903,903,903,903,903,903,,,,903,903,,,,903,,903,903,903,903,903,903', -'903,,,,,,903,903,903,903,903,903,903,,,903,,,,,,903,903,,903,903,903', -'903,903,903,903,903,903,,903,903,903,,903,903,,903,903,903,474,474,474', -'474,474,474,474,,,474,474,,,,,,474,474,,903,,,903,,,903,903,,,903,,903', -'474,,474,903,474,474,474,474,474,474,474,903,474,,,,903,903,903,903', -'903,903,,,,903,903,,,,,,,903,,,903,903,903,256,256,256,,256,,,,256,256', -',,,256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256,256,256', -',,256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256,256,,256', -'256,,256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,917,256,917', -'917,917,917,917,256,,,,,,,,256,917,,,,256,256,256,256,256,256,,,,256', -'256,,,,,,,256,917,,256,256,256,741,741,741,,741,,917,917,741,741,,,', -'741,,741,741,741,741,741,741,741,,,,,,741,741,741,741,741,741,741,,', -'741,,,,917,,,741,,,741,741,741,741,741,741,741,741,,741,741,741,,741', -'741,,741,741,741,,,,,,,,,,,,,,,,,,,,741,,,741,,,741,741,,998,741,998', -'998,998,998,998,741,,,,,,,,741,998,,,,741,741,741,741,741,741,,,,741', -'741,,,,,,,741,998,,741,741,741,747,747,747,,747,,998,998,747,747,,,', -'747,,747,747,747,747,747,747,747,,,,,,747,747,747,747,747,747,747,,', -'747,,,,998,,,747,,,747,747,747,747,747,747,747,747,747,747,747,747,', -'747,747,,747,747,747,472,472,472,472,472,472,472,,,472,472,,,,,,472', -'472,,747,,,747,,,747,747,,,747,,747,472,747,472,747,472,472,472,472', -'472,472,472,747,472,,,,747,747,747,747,747,747,,,,747,747,,,,,,,747', -',747,747,747,747,257,257,257,,257,,,,257,257,,,,257,,257,257,257,257', -'257,257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257', -'257,257,257,257,257,257,,257,257,257,,257,257,,257,257,257,,,,,,,,,', -',,,,,,,,,,257,,,257,,,257,257,,919,257,919,919,919,919,919,257,,,,,', -',,257,919,,,,257,257,257,257,257,257,,,,257,257,,,,,,,257,919,,257,257', -'257,769,769,769,,769,,919,919,769,769,,,,769,,769,769,769,769,769,769', -'769,,,,,,769,769,769,769,769,769,769,,,769,,,,919,,,769,,,769,769,769', -'769,769,769,769,769,,769,769,769,,769,769,,769,769,769,,,,,,,,,,,,,', -',,,,,,769,,,769,,,769,769,,1011,769,1011,1011,1011,1011,1011,769,,,', -',,,,769,1011,,,,769,769,769,769,769,769,,,,769,769,,,,,,,769,1011,,769', -'769,769,771,771,771,,771,,1011,1011,771,771,,,,771,,771,771,771,771', -'771,771,771,,,,,,771,771,771,771,771,771,771,,,771,,,,1011,,,771,,,771', -'771,771,771,771,771,771,771,,771,771,771,,771,771,,771,771,771,,,,,', -',,,,,,,,,,,,,,771,,,771,,,771,771,,712,771,712,712,712,712,712,771,', -',,,,,,771,712,,,,771,771,771,771,771,771,,,,771,771,,,,,,,771,712,,771', -'771,771,258,258,258,,258,,712,712,258,258,,,,258,,258,258,258,258,258', -'258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,712,,,258,,,258,258', -'258,258,258,258,258,258,,258,258,258,,258,258,,258,258,258,,,,,,,,,', -',,,,,,,,,,258,,,258,,,258,258,,890,258,890,890,890,890,890,258,,,,,', -',,258,890,,,,258,258,258,258,258,258,,,,258,258,,,,,,,258,890,,258,258', -'258,785,785,785,,785,,890,890,785,785,,,,785,,785,785,785,785,785,785', -'785,,,,,,785,785,785,785,785,785,785,,,785,,,,890,,,785,,,785,785,785', -'785,785,785,785,785,,785,785,785,,785,785,,785,785,785,,,,,,,,,,,,,', -',,,,,,785,,,785,,,785,785,,994,785,994,994,994,994,994,785,,,,,,,,785', -'994,,,,785,785,785,785,785,785,,,,785,785,,,,,,,785,994,,785,785,785', -'786,786,786,,786,,994,994,786,786,,,,786,,786,786,786,786,786,786,786', -',,,,,786,786,786,786,786,786,786,,,786,,,,994,,,786,,,786,786,786,786', +'801,1066,1065,1067,352,353,683,801,801,801,674,882,798,801,801,65,801', +'22,931,402,1079,681,989,325,831,801,955,92,764,989,612,765,799,697,612', +'92,801,801,989,801,801,801,801,801,304,697,658,598,766,304,608,364,883', +'22,728,681,360,361,831,937,687,937,937,937,674,937,798,801,801,801,801', +'801,801,801,801,801,801,801,801,801,801,1067,402,801,801,801,799,801', +'658,784,784,801,767,683,801,713,713,466,466,801,658,801,65,801,801,801', +'801,801,801,801,325,801,801,801,766,1066,1065,1067,352,353,1066,1065', +'1067,352,353,882,801,801,882,801,882,801,931,764,1079,457,765,931,801', +'1079,955,801,457,457,457,955,747,598,457,457,703,457,598,766,702,608', +'364,883,767,728,457,360,361,705,399,561,1035,1011,561,1011,238,457,457', +'1035,457,457,457,457,457,784,714,378,1035,20,135,713,714,466,378,135', +'135,451,952,29,952,952,952,767,952,754,836,760,457,457,457,457,457,457', +'457,457,457,457,457,457,457,457,705,703,457,457,457,702,457,705,238', +'20,457,399,705,457,952,907,705,451,457,611,457,20,457,457,457,457,457', +'457,457,451,457,457,457,450,705,236,703,836,434,703,702,730,29,702,836', +'457,457,685,457,885,457,703,730,836,456,702,763,457,41,820,457,456,456', +'456,29,682,42,456,456,907,456,836,611,679,951,450,951,951,951,611,951', +'678,610,670,611,730,730,450,611,236,456,456,434,456,456,456,456,456', +'664,971,41,745,885,745,745,745,611,745,42,885,971,5,41,820,885,659,5', +'472,885,730,42,456,456,456,456,456,456,456,456,456,456,456,456,456,456', +'610,885,456,456,456,235,456,610,971,971,456,675,610,456,394,651,610', +'951,456,645,456,642,456,456,456,456,456,456,456,334,456,619,456,616', +'610,946,472,946,946,946,946,946,971,635,745,456,456,789,456,387,456', +'946,556,404,107,556,602,456,601,235,456,107,107,107,891,675,107,107', +'107,891,107,334,433,946,600,394,394,394,107,433,107,107,107,334,946', +'946,557,599,433,557,107,107,377,107,107,107,107,107,895,377,47,47,357', +'895,635,635,595,357,789,789,387,387,387,635,404,404,404,789,946,778', +'778,107,107,107,107,107,107,107,107,107,107,107,107,107,107,47,47,107', +'107,107,1068,107,107,850,593,107,850,1068,107,107,638,107,1068,107,590', +'107,1068,107,107,107,107,107,107,107,376,107,997,107,793,997,979,376', +'979,979,979,979,979,389,795,963,107,107,107,107,963,107,979,107,391', +'677,586,391,107,373,797,107,677,677,677,374,373,677,677,677,578,677', +'374,50,979,494,571,638,638,638,50,677,677,677,570,979,979,1045,1045', +'50,569,677,677,770,677,677,677,677,677,567,770,536,566,27,389,389,389', +'494,536,770,27,494,494,494,494,391,391,536,805,979,752,752,677,677,677', +'677,677,677,677,677,677,677,677,677,677,677,562,375,677,677,677,706', +'677,677,375,1,677,559,706,677,677,558,677,706,677,478,677,706,677,677', +'677,677,677,677,677,372,677,381,677,330,330,553,372,977,381,977,977', +'977,977,977,552,677,677,677,677,551,677,478,677,977,110,478,478,677', +'1027,543,677,110,110,110,379,1027,110,110,110,829,110,379,371,541,1027', +'977,886,835,110,371,110,110,110,886,977,977,977,977,886,537,110,110', +'886,110,110,110,110,110,1008,532,1008,1008,1008,19,1008,742,846,742', +'742,742,19,742,871,847,871,871,871,3,871,19,977,110,110,110,110,110', +'110,110,110,110,110,110,110,110,110,530,1008,110,110,110,993,110,110', +'742,527,110,854,993,110,110,871,110,742,110,479,110,993,110,110,110', +'110,110,110,110,855,110,856,110,974,860,974,974,974,974,974,9,9,9,9', +'9,110,110,110,110,974,110,479,110,861,800,479,479,110,17,17,110,800', +'800,800,44,44,863,800,800,864,800,974,869,866,869,869,869,868,869,526', +'974,974,974,974,870,991,733,733,351,351,800,800,991,800,800,800,800', +'800,511,873,510,991,580,499,580,580,580,879,580,1043,869,1043,1043,1043', +'483,1043,974,482,884,869,481,800,800,800,800,800,800,800,800,800,800', +'800,800,800,800,990,234,800,800,800,580,800,990,234,480,800,888,1043', +'800,580,468,990,234,800,458,800,449,800,800,800,800,800,800,800,892', +'800,894,800,448,903,1038,984,1038,1038,1038,1038,1038,317,984,906,800', +'800,445,800,317,800,1038,984,431,676,429,426,800,317,913,800,676,676', +'676,914,916,676,676,676,917,676,498,918,1038,920,921,318,922,424,676', +'676,676,676,318,1038,1038,401,498,498,398,676,676,318,676,676,676,676', +'676,1006,396,1006,1006,1006,498,1006,498,393,498,498,498,498,935,936', +'498,365,498,363,359,1038,358,345,676,676,676,676,676,676,676,676,676', +'676,676,676,676,676,339,1006,676,676,676,319,676,676,953,336,676,335', +'319,676,676,331,676,962,676,966,676,319,676,676,676,676,676,676,676', +'969,676,676,676,329,324,323,320,940,982,940,940,940,940,940,314,676', +'676,676,676,321,676,313,676,940,461,985,321,676,987,312,676,461,461', +'461,310,321,461,461,461,297,461,294,548,992,293,940,337,1086,1001,461', +'461,461,461,337,940,940,940,940,548,548,461,461,337,461,461,461,461', +'461,1002,1037,1003,1037,1037,1037,548,1037,548,1004,548,548,548,548', +'1005,282,548,1007,548,278,244,240,940,461,461,461,461,461,461,461,461', +'461,461,461,461,461,461,239,614,461,461,461,362,1017,461,614,1020,461', +'1021,362,461,461,1022,461,614,461,1023,461,362,461,461,461,461,461,461', +'461,1025,461,461,461,1052,237,1052,1052,1052,1052,1052,344,344,344,344', +'344,461,461,461,461,1052,461,501,461,217,1031,133,102,461,501,501,501', +'101,100,501,501,501,99,501,486,785,785,1052,73,785,785,785,501,501,49', +'1044,1052,1052,1052,1052,486,486,485,501,501,1049,501,501,501,501,501', +'1050,484,43,40,25,486,1061,485,485,486,486,486,486,1062,1064,18,16,484', +'484,15,1070,1052,1071,485,1075,485,1076,485,485,485,485,1077,1078,484', +'501,484,452,484,484,484,484,501,13,452,452,452,501,501,452,452,452,1054', +'452,1054,1054,1054,1054,1054,712,493,708,452,452,452,711,729,707,1054', +'501,501,704,701,452,452,699,452,452,452,452,452,692,690,501,744,,,,501', +',1054,,493,,,501,493,493,493,493,,1054,1054,,452,452,452,452,452,452', +'452,452,452,452,452,452,452,452,,,452,452,452,,,452,,452,452,,,452,452', +',452,1054,452,,452,,452,452,452,452,452,452,452,,452,452,452,308,308', +'308,308,308,525,525,525,525,525,,,452,452,30,452,,452,,,,30,30,30,452', +',30,30,30,350,30,350,350,350,350,350,,,,30,30,30,,,,350,,,,,30,30,,30', +'30,30,30,30,,,,,,,,,,350,350,,,,,,,,350,350,350,350,,30,30,30,30,30', +'30,30,30,30,30,30,30,30,30,,,30,30,30,,,30,,30,30,,,30,30,,30,350,30', +',30,,30,30,30,30,30,30,30,,30,30,30,,,,,,,,,,,,,30,30,31,30,,30,,,,31', +'31,31,30,,31,31,31,942,31,942,942,942,942,942,,,,,31,31,,,,942,,,,,31', +'31,,31,31,31,31,31,,,,,,,,,,942,,,,,,,,,,,942,942,,31,31,31,31,31,31', +'31,31,31,31,31,31,31,31,,,31,31,31,,,31,,31,31,,,31,31,,31,942,31,,31', +',31,31,31,31,31,31,31,,31,,31,,,,,,,,,,,,,31,31,60,31,,31,,,,60,60,60', +'31,,60,60,60,738,60,738,738,738,738,738,,,,,60,60,60,,,738,,,,,60,60', +',60,60,60,60,60,,,,,,,,,,738,,,,,,,,,,,738,738,,60,60,60,60,60,60,60', +'60,60,60,60,60,60,60,,,60,60,60,,,60,,,60,,,60,60,,60,738,60,,60,,60', +'60,60,60,60,60,60,,60,,60,1056,,1056,1056,1056,1056,1056,,,,,,60,60', +'60,60,1056,60,462,60,,,,,60,462,462,462,,,462,462,462,,462,,,,1056,', +',,,462,462,462,462,,,1056,1056,,,,462,462,,462,462,462,462,462,,,,,', +',,,,,,,,,,,,,,,,1056,,462,462,462,462,462,462,462,462,462,462,462,462', +'462,462,,,462,462,462,,,462,,,462,,,462,462,,462,,462,,462,,462,462', +'462,462,462,462,462,,462,462,462,,,,,,,,,,,,,462,462,462,462,,462,,462', +',,,,462,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419', +'419,419,419,419,419,419,419,419,419,,,,419,419,419,419,419,419,419,419', +'419,419,,,,,,419,419,419,419,419,419,419,419,419,,,419,,,,,,,,,419,419', +',419,419,419,419,419,419,419,,,419,419,,,,419,419,419,419,,,,,,,,,,', +',,,419,419,,419,419,419,419,419,419,419,419,419,419,419,,,419,419,,', +',,,,,,,419,,,,,,,,,419,,,,,419,103,103,103,103,103,103,103,103,103,103', +'103,103,103,103,103,103,103,103,103,103,103,103,103,103,,,,103,103,103', +'103,103,103,103,103,103,103,,,,,,103,103,103,103,103,103,103,103,103', +'103,103,103,,103,,,,,,,103,103,,103,103,103,103,103,103,103,,,103,103', +',,,103,103,103,103,,,,,,,,,,,,,,103,103,,103,103,103,103,103,103,103', +'103,103,103,103,,,103,,,,,,,,,,,,,,,,,,,,103,,,,,103,11,11,11,11,11', +'11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,,,,11,11,11', +'11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,', +'11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11', +',11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,,11,,,,,,,,,11,,,', +',11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12', +'12,12,,,,12,12,12,12,12,12,12,12,12,12,,,,,,12,12,12,12,12,12,12,12', +'12,,,12,,,,,,,,,12,12,,12,12,12,12,12,12,12,,,12,12,,,,12,12,12,12,', +',,,,,,,,,,,,12,12,,12,12,12,12,12,12,12,12,12,12,12,,,12,12,,,,,,,,', +',12,,,,,,,,,12,,,,,12,649,649,649,649,649,649,649,649,649,649,649,649', +'649,649,649,649,649,649,649,649,649,649,649,649,,,,649,649,649,649,649', +'649,649,649,649,649,,,,,,649,649,649,649,649,649,649,649,649,,,649,', +',,,,,,,649,649,,649,649,649,649,649,649,649,,,649,649,,,,649,649,649', +'649,,,,,,,,,,,,,,649,649,,649,649,649,649,649,649,649,649,649,649,649', +',,649,649,,,,,,,,,,649,,,,,,,,,649,,,,,649,783,783,783,783,783,783,783', +'783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783', +',,,783,783,783,783,783,783,783,783,783,783,,,,,,783,783,783,783,783', +'783,783,783,783,,,783,,,,,,,,,783,783,,783,783,783,783,783,783,783,', +',783,783,,,,783,783,783,783,,,,,,,,,,,,,,783,783,,783,783,783,783,783', +'783,783,783,783,783,783,,,783,,,,,,,,,,,,,,,,,,,,783,,,,,783,75,75,75', +'75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,,,,75', +'75,75,75,75,75,75,75,75,75,,,,,,75,75,75,75,75,75,75,75,75,75,75,75', +',75,,,,,,,75,75,,75,75,75,75,75,75,75,,,75,75,,,,75,75,75,75,,,,,,75', +',,,,,,,75,75,,75,75,75,75,75,75,75,75,75,75,75,,,75,,,,,,,,,,,,844,844', +'844,844,844,844,,,75,844,844,,,75,844,,844,844,844,844,844,844,844,', +',,,,844,844,844,844,844,844,844,,,844,,,,,438,844,844,844,844,844,844', +'844,844,844,844,844,844,,844,844,844,,844,844,,844,844,844,438,438,438', +'438,438,438,438,438,438,438,438,,438,438,,,438,438,,844,,,844,,,844', +'844,,,844,,844,438,,438,844,438,438,438,438,438,438,438,844,438,,,,844', +'844,844,844,844,844,,,,844,844,,438,,438,,,844,,,844,844,844,316,316', +'316,316,316,316,,,,316,316,,,,316,,316,316,316,316,316,316,316,,,,,', +'316,316,316,316,316,316,316,,,316,,,,,444,316,316,316,316,316,316,316', +'316,316,316,316,316,,316,316,316,,316,316,,316,316,316,444,444,444,444', +'444,444,444,444,444,444,444,,444,444,,,444,444,,316,,,316,,,316,316', +',,316,,316,444,,444,316,444,444,444,444,444,444,444,316,444,,,,316,316', +'316,316,316,316,,,,316,316,,444,,,,,316,,,316,316,316,852,852,852,852', +'852,852,,,,852,852,,,,852,,852,852,852,852,852,852,852,,,,,,852,852', +'852,852,852,852,852,,,852,,,,,,852,852,852,852,852,852,852,852,852,852', +'852,852,,852,852,852,,852,852,,852,852,852,291,291,291,291,291,291,291', +'291,291,291,291,,291,291,,,291,291,,852,,,852,,,852,852,,,852,,852,291', +',291,852,291,291,291,291,291,291,291,852,291,,,,852,852,852,852,852', +'852,,,,852,852,,291,,,,,852,,,852,852,852,853,853,853,853,853,853,,', +',853,853,,,,853,,853,853,853,853,853,853,853,,,,,,853,853,853,853,853', +'853,853,,,853,,,,,,853,853,853,853,853,853,853,853,853,853,853,853,', +'853,853,853,,853,853,,853,853,853,549,549,549,549,549,549,549,549,549', +'549,549,,549,549,,,549,549,,853,,,853,,,853,853,,,853,,853,549,,549', +'853,549,549,549,549,549,549,549,853,549,,,,853,853,853,853,853,853,', +',,853,853,,549,,,,,853,,,853,853,853,768,768,768,768,768,768,,,,768', +'768,,,,768,,768,768,768,768,768,768,768,,,,,,768,768,768,768,768,768', +'768,,,768,,,,,,768,768,768,768,768,768,768,768,768,768,768,768,,768', +'768,768,,768,768,,768,768,768,912,912,912,912,912,912,912,912,912,912', +'912,,912,912,,,912,912,,768,,,768,,,768,768,,,768,,768,912,,912,768', +'912,912,912,912,912,912,912,768,912,,,,768,768,768,768,768,768,,,,768', +'768,,912,,,,,768,,,768,768,768,988,988,988,988,988,988,,,,988,988,,', +',988,,988,988,988,988,988,988,988,,,,,,988,988,988,988,988,988,988,', +',988,,,,,,988,988,988,988,988,988,988,988,988,988,988,988,,988,988,988', +',988,988,,988,988,988,802,802,802,802,802,802,802,802,802,802,802,,802', +'802,,,802,802,,988,,,988,,,988,988,,,988,,988,802,,802,988,802,802,802', +'802,802,802,802,988,802,,,,988,988,988,988,988,988,,,,988,988,,802,', +',,,988,,,988,988,988,311,311,311,311,311,311,,,,311,311,,,,311,,311', +'311,311,311,311,311,311,,,,,,311,311,311,311,311,311,311,,,311,,,,,', +'311,311,311,311,311,311,311,311,311,311,311,311,,311,311,311,,311,311', +',311,311,311,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,311,,', +'311,,,311,311,,,311,,311,24,,24,311,24,24,24,24,24,24,24,311,24,,,,311', +'311,311,311,311,311,,,,311,311,,24,,,,,311,,,311,311,311,1009,1009,1009', +'1009,1009,1009,,,,1009,1009,,,,1009,,1009,1009,1009,1009,1009,1009,1009', +',,,,,1009,1009,1009,1009,1009,1009,1009,,,1009,,,,,,1009,1009,1009,1009', +'1009,1009,1009,1009,1009,1009,1009,1009,,1009,1009,1009,,1009,1009,', +'1009,1009,1009,497,497,497,497,497,497,497,497,497,497,497,,497,497', +',,497,497,,1009,,,1009,,,1009,1009,,,1009,,1009,497,,497,1009,497,497', +'497,497,497,497,497,1009,497,,,,1009,1009,1009,1009,1009,1009,,,,1009', +'1009,497,497,,,,,1009,,,1009,1009,1009,243,243,243,243,243,243,,,,243', +'243,,,,243,,243,243,243,243,243,243,243,,,,,,243,243,243,243,243,243', +'243,,,243,,,,,,243,243,243,243,243,243,243,243,243,243,243,243,,243', +'243,243,,243,243,,243,243,243,488,488,488,488,488,488,488,,,488,488', +',,,,,488,488,,243,,,243,,,243,243,,,243,,243,488,,488,243,488,488,488', +'488,488,488,488,243,488,,,,243,243,243,243,243,243,,,,243,243,,,,,,', +'243,,,243,243,243,1014,1014,1014,1014,1014,1014,,,,1014,1014,,,,1014', +',1014,1014,1014,1014,1014,1014,1014,,,,,,1014,1014,1014,1014,1014,1014', +'1014,,,1014,,,,,,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014', +'1014,,1014,1014,1014,,1014,1014,,1014,1014,1014,490,490,490,490,490', +'490,490,,,490,490,,,,,,490,490,,1014,,,1014,,,1014,1014,,,1014,,1014', +'490,,490,1014,490,490,490,490,490,490,490,1014,490,,,,1014,1014,1014', +'1014,1014,1014,,,,1014,1014,,,,,,,1014,,,1014,1014,1014,1016,1016,1016', +'1016,1016,1016,,,,1016,1016,,,,1016,,1016,1016,1016,1016,1016,1016,1016', +',,,,,1016,1016,1016,1016,1016,1016,1016,,,1016,,,,,,1016,1016,1016,1016', +'1016,1016,1016,1016,1016,1016,1016,1016,,1016,1016,1016,,1016,1016,', +'1016,1016,1016,491,491,491,491,491,491,491,,,491,491,,,,,,491,491,,1016', +',,1016,,,1016,1016,,,1016,,1016,491,,491,1016,491,491,491,491,491,491', +'491,1016,491,,,,1016,1016,1016,1016,1016,1016,,,,1016,1016,,,,,,,1016', +',,1016,1016,1016,878,878,878,878,878,878,,,,878,878,,,,878,,878,878', +'878,878,878,878,878,,,,,,878,878,878,878,878,878,878,,,878,,,,,,878', +'878,878,878,878,878,878,878,878,878,878,878,,878,878,878,,878,878,,878', +'878,878,492,492,492,492,492,492,492,,,492,492,,,,,,492,492,,878,,,878', +',,878,878,,,878,,878,492,,492,878,492,492,492,492,492,492,492,878,492', +',,,878,878,878,878,878,878,,,,878,878,,,,,,,878,,,878,878,878,647,647', +'647,647,647,647,,,,647,647,,,,647,,647,647,647,647,647,647,647,,,,,', +'647,647,647,647,647,647,647,,,647,,,,,,647,647,647,647,647,647,647,647', +'647,647,647,647,,647,647,647,,647,647,,647,647,647,495,495,495,495,495', +'495,495,,,495,495,,,,,,495,495,,647,,,647,,,647,647,,,647,,647,495,', +'495,647,495,495,495,495,495,495,495,647,495,,,,647,647,647,647,647,647', +',,,647,647,,,,,,,647,,,647,647,647,779,779,779,779,779,779,,,,779,779', +',,,779,,779,779,779,779,779,779,779,,,,,,779,779,779,779,779,779,779', +',,779,,,,,,779,779,779,779,779,779,779,779,779,779,779,779,,779,779', +'779,,779,779,,779,779,779,476,476,476,476,476,476,476,476,476,476,476', +',476,476,,,476,476,,779,,,779,,,779,779,,,779,,779,476,,476,779,476', +'476,476,476,476,476,476,779,476,,,,779,779,779,779,779,779,,,,779,779', +',,,,,,779,,,779,779,779,889,889,889,889,889,889,,,,889,889,,,,889,,889', +'889,889,889,889,889,889,,,,,,889,889,889,889,889,889,889,,,889,,,,,', +'889,889,889,889,889,889,889,889,889,889,889,889,,889,889,889,,889,889', +',889,889,889,477,477,477,477,477,477,477,477,477,477,477,,477,477,,', +'477,477,,889,,,889,,,889,889,,,889,,889,477,,477,889,477,477,477,477', +'477,477,477,889,477,,,,889,889,889,889,889,889,,,,889,889,,,,,,,889', +',,889,889,889,780,780,780,780,780,780,,,,780,780,,,,780,,780,780,780', +'780,780,780,780,,,,,,780,780,780,780,780,780,780,,,780,,,,,,780,780', +'780,780,780,780,780,780,780,780,780,780,,780,780,780,,780,780,,780,780', +'780,496,496,496,496,496,496,496,496,,496,496,,,,,,496,496,,780,,,780', +',,780,780,,,780,,780,496,,496,780,496,496,496,496,496,496,496,780,496', +',,,780,780,780,780,780,780,,,,780,780,,,,,,,780,,,780,780,780,219,219', +'219,219,219,219,,,,219,219,,,,219,,219,219,219,219,219,219,219,,,,,', +'219,219,219,219,219,219,219,,,219,,,,,,219,219,219,219,219,219,219,219', +'219,219,219,219,,219,219,219,,219,219,,219,219,219,487,487,487,487,487', +'487,487,,,487,487,,,,,,487,487,,219,,,219,,,219,219,,,219,,219,487,', +'487,219,487,487,487,487,487,487,487,219,487,,,,219,219,219,219,219,219', +',,,219,219,,,,,,,219,,,219,219,219,343,343,343,343,343,343,,,,343,343', +',,,343,,343,343,343,343,343,343,343,,,,,,343,343,343,343,343,343,343', +',,343,,,,,,343,343,343,343,343,343,343,343,343,343,343,343,,343,343', +'343,,343,343,,343,343,343,489,489,489,489,489,489,489,,,489,489,,,,', +',489,489,,343,,,343,,,343,343,,,343,,343,489,,489,343,489,489,489,489', +'489,489,489,343,489,,,,343,343,343,343,343,343,,,,343,343,,,,,,,343', +',,343,343,343,355,355,355,355,355,355,,,,355,355,,,,355,,355,355,355', +'355,355,355,355,,,,,,355,355,355,355,355,355,355,,,355,,,,,,355,355', +'355,355,355,355,355,355,355,355,355,355,,355,355,355,,355,355,,355,355', +'355,,,,,,,,,,,,,,,,,,,,355,,,355,,,355,355,,,355,,355,,,,355,,,,,,,', +'355,,,,,355,355,355,355,355,355,,,,355,355,,,,,,,355,,,355,355,355,929', +'929,929,929,929,929,,,,929,929,,,,929,,929,929,929,929,929,929,929,', +',,,,929,929,929,929,929,929,929,,,929,,,,,,929,929,929,929,929,929,929', +'929,929,929,929,929,,929,929,929,,929,929,,929,929,929,,,,,,,,,,,,,', +',,,,,,929,,,929,,,929,929,,,929,,929,,,,929,,,,,,,,929,,,,,929,929,929', +'929,929,929,,,,929,929,,,,,,,929,,,929,929,929,826,826,826,826,826,826', +',,,826,826,,,,826,,826,826,826,826,826,826,826,,,,,,826,826,826,826', +'826,826,826,,,826,,,,,,826,826,826,826,826,826,826,826,826,826,826,826', +',826,826,826,,826,826,,826,826,826,,,,,,,,,,,,,,,,,,,,826,,,826,,,826', +'826,,,826,,826,,,,826,,,,,,,,826,,,,,826,826,826,826,826,826,,,,826', +'826,,,,,,,826,,,826,826,826,597,597,597,597,597,597,,,,597,597,,,,597', +',597,597,597,597,597,597,597,,,,,,597,597,597,597,597,597,597,,,597', +',,,,,597,597,597,597,597,597,597,597,597,597,597,597,,597,597,597,,597', +'597,,597,597,597,,,,,,,,,,,,,,,,,,,,597,,,597,,,597,597,,,597,,597,', +',,597,,,,,,,,597,,,,,597,597,597,597,597,597,,,,597,597,,,,,,,597,,', +'597,597,597,594,594,594,594,594,594,,,,594,594,,,,594,,594,594,594,594', +'594,594,594,,,,,,594,594,594,594,594,594,594,,,594,,,,,,594,594,594', +'594,594,594,594,594,594,594,594,594,,594,594,594,,594,594,,594,594,594', +',,,,,,,,,,,,,,,,,,,594,,,594,,,594,594,,,594,,594,,,,594,,,,,,,,594', +',,,,594,594,594,594,594,594,,,,594,594,,,,,,,594,,,594,594,594,786,786', +'786,786,786,786,,,,786,786,,,,786,,786,786,786,786,786,786,786,,,,,', +'786,786,786,786,786,786,786,,,786,,,,,,786,786,786,786,786,786,786,786', '786,786,786,786,,786,786,786,,786,786,,786,786,786,,,,,,,,,,,,,,,,,', -',,786,,,786,,,786,786,,996,786,996,996,996,996,996,786,,,,,,,,786,996', -',,,786,786,786,786,786,786,,,,786,786,,,,,,,786,996,,786,786,786,787', -'787,787,,787,,996,996,787,787,,,,787,,787,787,787,787,787,787,787,,', -',,,787,787,787,787,787,787,787,,,787,,,,996,,,787,,,787,787,787,787', -'787,787,787,787,,787,787,787,,787,787,,787,787,787,,,,,,,,,,,,,,,,,', -',,787,,,787,,,787,787,,915,787,915,915,915,915,915,787,,,,,,,,787,915', -',,,787,787,787,787,787,787,,,,787,787,,,,,,,787,915,,787,787,787,788', -'788,788,,788,,915,915,788,788,,,,788,,788,788,788,788,788,788,788,,', -',,,788,788,788,788,788,788,788,,,788,,,,915,,,788,,,788,788,788,788', -'788,788,788,788,,788,788,788,,788,788,,788,788,788,,,,,,,,,,,,,,,,,', -',,788,,,788,,,788,788,,1042,788,1042,1042,1042,1042,1042,788,,,,,,,', -'788,1042,,,,788,788,788,788,788,788,,,,788,788,,,,,,,788,1042,,788,788', -'788,790,790,790,,790,,1042,1042,790,790,,,,790,,790,790,790,790,790', -'790,790,,,,,,790,790,790,790,790,790,790,,,790,,,,1042,,,790,,,790,790', -'790,790,790,790,790,790,,790,790,790,,790,790,,790,790,790,,,,,,,,,', -',,,,,,,,,,790,,,790,,,790,790,,,790,,,,,,790,,,,,,,,790,,,,,790,790', -'790,790,790,790,,,,790,790,,,,,,,790,,,790,790,790,265,265,265,,265', -',,,265,265,,,,265,,265,265,265,265,265,265,265,,,,,,265,265,265,265', -'265,265,265,,,265,,,,,,,265,,,265,265,265,265,265,265,265,265,265,265', -'265,265,,265,265,,265,265,265,,,,,,,,,,,,,,,,,,,,265,,,265,,,265,265', -',,265,,265,,265,,265,,,,,,,,265,,,,,265,265,265,265,265,265,,,,265,265', -',,,,,,265,,265,265,265,265,271,271,271,,271,,,,271,271,,,,271,,271,271', -'271,271,271,271,271,,,,,,271,271,271,271,271,271,271,,,271,,,,,,,271', -',,271,271,271,271,271,271,271,271,271,271,271,271,,271,271,,271,271', -'271,,,,,,,,,,,,,,,,,,,,271,,,271,,,271,271,,,271,,271,,271,,271,,,,', -',,,271,,,,,271,271,271,271,271,271,,,,271,271,,,,,,,271,,271,271,271', -'271,274,274,274,,274,,,,274,274,,,,274,,274,274,274,274,274,274,274', -',,,,,274,274,274,274,274,274,274,,,274,,,,,,,274,,,274,274,274,274,274', -'274,274,274,274,274,274,274,,274,274,,274,274,274,,,,,,,,,,,,,,,,,,', -',274,,,274,,,274,274,,,274,,274,,274,,274,,,,,,,,274,,,,,274,274,274', -'274,274,274,,,,274,274,274,,,,,,274,,274,274,274,274,32,32,32,,32,,', -',32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32,32,32,32,32,32,,,32,,', -',,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,,32,32,,32,32,32,,,,,,', -',,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32,,,,,,,,32,,,,,32,32,32', -'32,32,32,,,,32,32,,,,,,,32,,32,32,32,32,33,33,33,,33,,,,33,33,,,,33', -',33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,,33,,,33,33', -'33,33,33,33,33,33,33,33,33,33,,33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33', -',,33,,,33,33,,,33,,33,,33,,33,,,,,,,,33,,,,,33,33,33,33,33,33,,,,33', -'33,,,,,,,33,,33,33,33,33,802,802,802,,802,,,,802,802,,,,802,,802,802', -'802,802,802,802,802,,,,,,802,802,802,802,802,802,802,,,802,,,,,,,802', -',,802,802,802,802,802,802,802,802,,802,802,802,,802,802,,,,802,,,,,', -',,,,,,,,,,,,,,802,,,802,,,802,802,,,802,,,,,,,,,,,,,,,,,,,802,802,802', -'802,802,802,,,,802,802,,,,,,,802,,,802,802,802,281,281,281,,281,,,,281', -'281,,,,281,,281,281,281,281,281,281,281,,,,,,281,281,281,281,281,281', -'281,,,281,,,,,,,281,,,281,281,281,281,281,281,281,281,,281,281,281,', -'281,281,,281,281,281,,,,,,,,,,,,,,,,,,,,281,,,281,,,281,281,,,281,,', -',,,281,,,,,,,,281,,,,,281,281,281,281,281,281,,,,281,281,,,,,,,281,', -',281,281,281,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,', -'34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34', -'34,,34,34,,34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34', -',34,,,,,,,,34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,283', -'283,283,,283,,,,283,283,,,,283,,283,283,283,283,283,283,283,,,,,,283', -'283,283,283,283,283,283,,,283,,,,,,,283,,,283,283,283,283,283,283,283', -'283,,283,283,283,,283,283,,283,283,283,,,,,,,,,,,,,,,,,,,,283,,,283', -',,283,283,,,283,,,,,,283,,,,,,,,283,,,,,283,283,283,283,283,283,,,,283', -'283,,,,,,,283,,,283,283,283,286,286,286,,286,,,,286,286,,,,286,,286', +',,786,,,786,,,786,786,,,786,,786,,,,786,,,,,,,,786,,,,,786,786,786,786', +'786,786,,,,786,786,,,,,,,786,,,786,786,786,2,2,2,2,2,2,,,,2,2,,,,2,', +'2,2,2,2,2,2,2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2', +'2,2,,2,2,,2,2,2,,,,,,,,,,,,,,,,,,,,2,,,2,,,2,2,,,2,,2,,,,2,,,,,,,,2', +',,,,2,2,2,2,2,2,,,,2,2,,,,,,,2,,,2,2,2,36,36,36,36,36,36,,,,36,36,,', +',36,,36,36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36', +'36,36,36,36,36,36,36,36,36,36,,36,36,36,,36,36,,36,36,36,,,,,,,,,,,', +',,,,,,,,36,,,36,,,36,36,,,36,,36,,,,36,,,,,,,,36,,,,,36,36,36,36,36', +'36,,,,36,36,,,,,,,36,,,36,36,36,356,356,356,356,356,356,,,,356,356,', +',,356,,356,356,356,356,356,356,356,,,,,,356,356,356,356,356,356,356', +',,356,,,,,,356,356,356,356,356,356,356,356,356,356,356,356,,356,356', +'356,,356,356,,356,356,356,,,,,,,,,,,,,,,,,,,,356,,,356,,,356,356,,,356', +',356,,,,356,,,,,,,,356,,,,,356,356,356,356,356,356,,,,356,356,,,,,,', +'356,,,356,356,356,928,928,928,928,928,928,,,,928,928,,,,928,,928,928', +'928,928,928,928,928,,,,,,928,928,928,928,928,928,928,,,928,,,,,,928', +'928,928,928,928,928,928,928,928,928,928,928,,928,928,928,,928,928,,928', +'928,928,,,,,,,,,,,,,,,,,,,,928,,,928,,,928,928,,,928,,928,,,,928,,,', +',,,,928,,,,,928,928,928,928,928,928,,,,928,928,,,,,,,928,,,928,928,928', +'959,959,959,959,959,959,,,,959,959,,,,959,,959,959,959,959,959,959,959', +',,,,,959,959,959,959,959,959,959,,,959,,,,,,959,959,959,959,959,959', +'959,959,959,959,959,959,,959,959,959,,959,959,,959,959,959,,,,,,,,,', +',,,,,,,,,,959,,,959,,,959,959,,,959,,959,,,,959,,,,,,,,959,,,,,959,959', +'959,959,959,959,,,,959,959,,,,,,,959,,,959,959,959,249,249,249,,249', +',,,249,249,,,,249,,249,249,249,249,249,249,249,,,,,,249,249,249,249', +'249,249,249,,,249,,,,,,,249,,,249,249,249,249,249,249,249,249,,249,249', +'249,,249,249,,249,249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,944', +'249,944,944,944,944,944,249,,,,,,,,249,944,,,,249,249,249,249,249,249', +',,,249,249,,,,,,,249,944,,249,249,249,716,716,716,,716,,944,944,716', +'716,,,,716,,716,716,716,716,716,716,716,,,,,,716,716,716,716,716,716', +'716,,,716,,,,944,,,716,,,716,716,716,716,716,716,716,716,,716,716,716', +',716,716,,716,716,716,,,,,,,,,,,,,,,,,,,,716,,,716,,,716,716,,,716,', +'716,,,,716,,,,,,,,716,,,,,716,716,716,716,716,716,,,,716,716,,,,,,,716', +',,716,716,716,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8', +'8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8,,8,8,,8,8,8,,,,,,,,,,,,,,', +',,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8,8,8,8,,,,8,8,,,,,,,8', +',,8,8,8,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23,23,23,23,,,,,,23,23', +'23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23,23,23,,23,23,23,,23', +'23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23,,1081,23,1081,1081,1081', +'1081,1081,23,,,,,,,,23,1081,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,1081', +',23,23,23,32,32,32,,32,,1081,1081,32,32,,,,32,,32,32,32,32,32,32,32', +',,,,,32,32,32,32,32,32,32,,,32,,,,1081,,,32,,,32,32,32,32,32,32,32,32', +'32,32,32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32', +',32,,32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32', +'32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33', +'33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,,33', +'33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33,,,', +',,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,34,34,34', +',34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34,34,', +',34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,,34,34,34', +',,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,,,34,,,,,34', +'34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,37,37,37,,37,,,,37,37', +',,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37,,,,,,,37', +',,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,,,,,,,,,,,,,', +'37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37,37,,,,37,37', +',,,,,,37,,,37,37,37,38,38,38,,38,,,,38,38,,,,38,,38,38,38,38,38,38,38', +',,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38,38,38,38,38,38,38,,38', +'38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38,,,38,38,,1058,38,1058', +'1058,1058,1058,1058,,,,,,,,,,1058,,,,38,38,38,38,38,38,,,,38,38,,,,38', +',,38,1058,,38,38,38,45,45,45,,45,,1058,1058,45,45,,,,45,,45,45,45,45', +'45,45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,1058,,,45,,,45,45,45,45,45', +'45,45,45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45', +'45,,,45,,,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,', +'45,45,45,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46', +'46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46', +'46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,', +'46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,48,48,48,,48,', +',,48,48,,,,48,,48,48,48,48,48,48,48,,,,,,48,48,48,48,48,48,48,,,48,', +',,,,,48,,,48,48,48,48,48,48,48,48,,48,48,48,,48,48,,48,48,48,,,,,,,', +',,,,,,,,,,,,48,,,48,,,48,48,,,48,,,,,,48,,,,,,,,48,,,,,48,48,48,48,48', +'48,,,,48,48,,,,,,,48,,,48,48,48,62,62,62,62,62,,,,62,62,,,,62,,62,62', +'62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,62,62,,62,62,62,62', +'62,62,62,62,62,,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62', +',,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,', +',,62,,,62,62,62,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67,,', +',,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67', +'67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,', +'67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,68,68', +'68,,68,,,,68,68,,,,68,,68,68,68,68,68,68,68,,,,,,68,68,68,68,68,68,68', +',,68,,,,,,,68,,,68,68,68,68,68,68,68,68,,68,68,68,,68,68,,68,68,68,', +',,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68,,,,,,68,,,,,,,,68,,,,,68,68,68', +'68,68,68,,,,68,68,,,,,,,68,,,68,68,68,71,71,71,,71,,,,71,71,,,,71,,71', +'71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71,,,,,,,71,,,71,71,71', +'71,71,71,71,71,,71,71,71,,71,71,,71,71,71,,,,,,,,,,,,,,,,,,,,71,,,71', +',,71,71,,,71,,,,,,71,,,,,,,,71,,,,,71,71,71,71,71,71,,,,71,71,71,,,', +',71,71,,,71,71,71,72,72,72,,72,,,,72,72,,,,72,,72,72,72,72,72,72,72', +',,,,,72,72,72,72,72,72,72,,,72,,,,,,,72,,,72,72,72,72,72,72,72,72,,72', +'72,72,,72,72,,,,72,,,,,,,,,,,,,,,,,,,,72,,,72,,,72,72,,,72,,72,,,,,', +',,,,,,,,,,,72,72,72,72,72,72,,,,72,72,,,,,,,72,,,72,72,72,123,123,123', +'123,123,,,,123,123,,,,123,,123,123,123,123,123,123,123,,,,,,123,123', +'123,123,123,123,123,,,123,,,,,,123,123,123,123,123,123,123,123,123,123', +'123,123,,123,123,123,,123,123,,123,123,123,,,,,,,,,,,,,,,,,,,,123,,', +'123,,,123,123,,,123,,123,,,,123,,,,,,,,123,,,,,123,123,123,123,123,123', +',,,123,123,,,,,,123,123,,,123,123,123,128,128,128,,128,,,,128,128,,', +',128,,128,128,128,128,128,128,128,,,,,,128,128,128,128,128,128,128,', +',128,,,,,,,128,,,128,128,128,128,128,128,128,128,,128,128,128,,128,128', +',128,128,128,,,,,,,,,,,,,,,,,,,,128,,,128,,,128,128,,,128,,,,,,128,', +',,,,,,128,,,,,128,128,128,128,128,128,,,,128,128,,,,,,,128,,,128,128', +'128,129,129,129,,129,,,,129,129,,,,129,,129,129,129,129,129,129,129', +',,,,,129,129,129,129,129,129,129,,,129,,,,,,,129,,,129,129,129,129,129', +'129,129,129,,129,129,129,,129,129,,129,129,129,,,,,,,,,,,,,,,,,,,,129', +',,129,,,129,129,,,129,,,,,,129,,,,,,,,129,,,,,129,129,129,129,129,129', +',,,129,129,,,,,,,129,,,129,129,129,130,130,130,,130,,,,130,130,,,,130', +',130,130,130,130,130,130,130,,,,,,130,130,130,130,130,130,130,,,130', +',,,,,,130,,,130,130,130,130,130,130,130,130,,130,130,130,,130,130,,130', +'130,130,,,,,,,,,,,,,,,,,,,,130,,,130,,,130,130,,,130,,,,,,130,,,,,,', +',130,,,,,130,130,130,130,130,130,,,,130,130,,,,,,,130,,,130,130,130', +'131,131,131,,131,,,,131,131,,,,131,,131,131,131,131,131,131,131,,,,', +',131,131,131,131,131,131,131,,,131,,,,,,,131,,,131,131,131,131,131,131', +'131,131,,131,131,131,,131,131,,131,131,131,,,,,,,,,,,,,,,,,,,,131,,', +'131,,,131,131,,,131,,,,,,131,,,,,,,,131,,,,,131,131,131,131,131,131', +',,,131,131,,,,,,,131,,,131,131,131,132,132,132,132,132,,,,132,132,,', +',132,,132,132,132,132,132,132,132,,,,,,132,132,132,132,132,132,132,', +',132,,,,,,132,132,,132,132,132,132,132,132,132,132,132,,132,132,132', +',132,132,,132,132,132,,,,,,,,,,,,,,,,,,,,132,,,132,,,132,132,,,132,', +'132,,,,132,,,,,,,,132,,,,,132,132,132,132,132,132,,,,132,132,,,,,,,132', +',,132,132,132,1032,1032,1032,,1032,,,,1032,1032,,,,1032,,1032,1032,1032', +'1032,1032,1032,1032,,,,,,1032,1032,1032,1032,1032,1032,1032,,,1032,', +',,,,,1032,,,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032', +',1032,1032,,1032,1032,1032,,,,,,,,,,,,,,,,,,,,1032,,,1032,,,1032,1032', +',,1032,,1032,,1032,,1032,,,,,,,,1032,,,,,1032,1032,1032,1032,1032,1032', +',,,1032,1032,,,,,,,1032,,1032,1032,1032,1032,220,220,220,,220,,,,220', +'220,,,,220,,220,220,220,220,220,220,220,,,,,,220,220,220,220,220,220', +'220,,,220,,,,,,,220,,,220,220,220,220,220,220,220,220,,220,220,220,', +'220,220,,220,220,220,,,,,,,,,,,,,,,,,,,,220,,,220,,,220,220,,,220,,220', +',,,220,,,,,,,,220,,,,,220,220,220,220,220,220,,,,220,220,,,,,,,220,', +',220,220,220,221,221,221,,221,,,,221,221,,,,221,,221,221,221,221,221', +'221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,,,221,,,221,221,221', +'221,221,221,221,221,,221,221,221,,221,221,,221,221,221,,,,,,,,,,,,,', +',,,,,,221,,,221,,,221,221,,,221,,221,,,,221,,,,,,,,221,,,,,221,221,221', +'221,221,221,,,,221,221,,,,,,,221,,,221,221,221,222,222,222,,222,,,,222', +'222,,,,222,,222,222,222,222,222,222,222,,,,,,222,222,222,222,222,222', +'222,,,222,,,,,,,222,,,222,222,222,222,222,222,222,222,,222,222,222,', +'222,222,,222,222,222,,,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222,,', +',,,222,,,,,,,,222,,,,,222,222,222,222,222,222,,,,222,222,,,,,,,222,', +',222,222,222,223,223,223,,223,,,,223,223,,,,223,,223,223,223,223,223', +'223,223,,,,,,223,223,223,223,223,223,223,,,223,,,,,,,223,,,223,223,223', +'223,223,223,223,223,,223,223,223,,223,223,,223,223,223,,,,,,,,,,,,,', +',,,,,,223,,,223,,,223,223,,,223,,,,,,223,,,,,,,,223,,,,,223,223,223', +'223,223,223,,,,223,223,,,,,,,223,,,223,223,223,224,224,224,,224,,,,224', +'224,,,,224,,224,224,224,224,224,224,224,,,,,,224,224,224,224,224,224', +'224,,,224,,,,,,,224,,,224,224,224,224,224,224,224,224,,224,224,224,', +'224,224,,224,224,224,,,,,,,,,,,,,,,,,,,,224,,,224,,,224,224,,,224,,', +',,,224,,,,,,,,224,,,,,224,224,224,224,224,224,,,,224,224,,,,,,,224,', +',224,224,224,225,225,225,,225,,,,225,225,,,,225,,225,225,225,225,225', +'225,225,,,,,,225,225,225,225,225,225,225,,,225,,,,,,,225,,,225,225,225', +'225,225,225,225,225,225,225,225,225,,225,225,,225,225,225,,,,,,,,,,', +',,,,,,,,,225,,,225,,,225,225,,,225,,225,,225,,225,,,,,,,,225,,,,,225', +'225,225,225,225,225,,,,225,225,,,,,,,225,,225,225,225,225,229,229,229', +',229,,,,229,229,,,,229,,229,229,229,229,229,229,229,,,,,,229,229,229', +'229,229,229,229,,,229,,,,,,,229,,,229,229,229,229,229,229,229,229,,229', +'229,229,,229,229,,229,229,229,,,,,,,,,,,,,,,,,,,,229,,,229,,,229,229', +',,229,,,,,,229,,,,,,,,229,,,,,229,229,229,229,229,229,,,,229,229,,,', +',,,229,,,229,229,229,230,230,230,,230,,,,230,230,,,,230,,230,230,230', +'230,230,230,230,,,,,,230,230,230,230,230,230,230,,,230,,,,,,,230,,,230', +'230,230,230,230,230,230,230,,230,230,230,,230,230,,230,230,230,,,,,', +',,,,,,,,,,,,,,230,,,230,,,230,230,,,230,,,,,,230,,,,,,,,230,,,,,230', +'230,230,230,230,230,,,,230,230,,,,,,,230,,,230,230,230,231,231,231,', +'231,,,,231,231,,,,231,,231,231,231,231,231,231,231,,,,,,231,231,231', +'231,231,231,231,,,231,,,,,,,231,,,231,231,231,231,231,231,231,231,,231', +'231,231,,231,231,,231,231,231,,,,,,,,,,,,,,,,,,,,231,,,231,,,231,231', +',,231,,,,,,231,,,,,,,,231,,,,,231,231,231,231,231,231,,,,231,231,231', +',,,,,231,,,231,231,231,242,242,242,,242,,,,242,242,,,,242,,242,242,242', +'242,242,242,242,,,,,,242,242,242,242,242,242,242,,,242,,,,,,,242,,,242', +'242,242,242,242,242,242,242,,242,242,242,,242,242,,242,242,242,,,,,', +',,,,,,,,,,,,,,242,,,242,,,242,242,,,242,,,,,,242,,,,,,,,242,,,,,242', +'242,242,242,242,242,,,,242,242,,,,,,,242,,,242,242,242,245,245,245,', +'245,,,,245,245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245,245', +'245,245,245,245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245,,245', +'245,245,,245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245,245', +',,245,,,,,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245,245,,,', +',,,245,,,245,245,245,246,246,246,,246,,,,246,246,,,,246,,246,246,246', +'246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246', +'246,246,246,246,246,246,246,,246,246,246,,246,246,,246,246,246,,,,,', +',,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246', +'246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246,247,247,247,', +'247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,,247,247,247', +'247,247,247,247,,,247,,,,,,,247,,,247,247,247,247,247,247,247,247,,247', +'247,247,,247,247,,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247,,,247,247', +',,247,,,,,,247,,,,,,,,247,,,,,247,247,247,247,247,247,,,,247,247,,,', +',,,247,,,247,247,247,248,248,248,,248,,,,248,248,,,,248,,248,248,248', +'248,248,248,248,,,,,,248,248,248,248,248,248,248,,,248,,,,,,,248,,,248', +'248,248,248,248,248,248,248,,248,248,248,,248,248,,248,248,248,,,,,', +',,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,,,,,248,,,,,,,,248,,,,,248', +'248,248,248,248,248,,,,248,248,,,,,,,248,,,248,248,248,250,250,250,', +'250,,,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250', +'250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250', +'250,250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250', +',,250,,,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,', +',,,250,,,250,250,250,251,251,251,,251,,,,251,251,,,,251,,251,251,251', +'251,251,251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,,,251,,,251', +'251,251,251,251,251,251,251,,251,251,251,,251,251,,251,251,251,,,,,', +',,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,251,,,,,251', +'251,251,251,251,251,,,,251,251,,,,,,,251,,,251,251,251,252,252,252,', +'252,,,,252,252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252', +'252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252', +'252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252', +',,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252,252,,,', +',,,252,,,252,252,252,253,253,253,,253,,,,253,253,,,,253,,253,253,253', +'253,253,253,253,,,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253', +'253,253,253,253,253,253,253,,253,253,253,,253,253,,253,253,253,,,,,', +',,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,,,253', +'253,253,253,253,253,,,,253,253,,,,,,,253,,,253,253,253,254,254,254,', +'254,,,,254,254,,,,254,,254,254,254,254,254,254,254,,,,,,254,254,254', +'254,254,254,254,,,254,,,,,,,254,,,254,254,254,254,254,254,254,254,,254', +'254,254,,254,254,,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254,254', +',,254,,,,,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254,254,,,', +',,,254,,,254,254,254,255,255,255,,255,,,,255,255,,,,255,,255,255,255', +'255,255,255,255,,,,,,255,255,255,255,255,255,255,,,255,,,,,,,255,,,255', +'255,255,255,255,255,255,255,,255,255,255,,255,255,,255,255,255,,,,,', +',,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255', +'255,255,255,255,255,,,,255,255,,,,,,,255,,,255,255,255,256,256,256,', +'256,,,,256,256,,,,256,,256,256,256,256,256,256,256,,,,,,256,256,256', +'256,256,256,256,,,256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256', +'256,256,,256,256,,256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256', +',,256,,,,,,256,,,,,,,,256,,,,,256,256,256,256,256,256,,,,256,256,,,', +',,,256,,,256,256,256,257,257,257,,257,,,,257,257,,,,257,,257,257,257', +'257,257,257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257', +'257,257,257,257,257,257,257,,257,257,257,,257,257,,257,257,257,,,,,', +',,,,,,,,,,,,,,257,,,257,,,257,257,,,257,,,,,,257,,,,,,,,257,,,,,257', +'257,257,257,257,257,,,,257,257,,,,,,,257,,,257,257,257,258,258,258,', +'258,,,,258,258,,,,258,,258,258,258,258,258,258,258,,,,,,258,258,258', +'258,258,258,258,,,258,,,,,,,258,,,258,258,258,258,258,258,258,258,,258', +'258,258,,258,258,,258,258,258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258', +',,258,,,,,,258,,,,,,,,258,,,,,258,258,258,258,258,258,,,,258,258,,,', +',,,258,,,258,258,258,259,259,259,,259,,,,259,259,,,,259,,259,259,259', +'259,259,259,259,,,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259', +'259,259,259,259,259,259,259,,259,259,259,,259,259,,259,259,259,,,,,', +',,,,,,,,,,,,,,259,,,259,,,259,259,,,259,,,,,,259,,,,,,,,259,,,,,259', +'259,259,259,259,259,,,,259,259,,,,,,,259,,,259,259,259,260,260,260,', +'260,,,,260,260,,,,260,,260,260,260,260,260,260,260,,,,,,260,260,260', +'260,260,260,260,,,260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260', +'260,260,,260,260,,260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260', +',,260,,,,,,260,,,,,,,,260,,,,,260,260,260,260,260,260,,,,260,260,,,', +',,,260,,,260,260,260,261,261,261,,261,,,,261,261,,,,261,,261,261,261', +'261,261,261,261,,,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261', +'261,261,261,261,261,261,261,,261,261,261,,261,261,,261,261,261,,,,,', +',,,,,,,,,,,,,,261,,,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261', +'261,261,261,261,261,,,,261,261,,,,,,,261,,,261,261,261,262,262,262,', +'262,,,,262,262,,,,262,,262,262,262,262,262,262,262,,,,,,262,262,262', +'262,262,262,262,,,262,,,,,,,262,,,262,262,262,262,262,262,262,262,,262', +'262,262,,262,262,,262,262,262,,,,,,,,,,,,,,,,,,,,262,,,262,,,262,262', +',,262,,,,,,262,,,,,,,,262,,,,,262,262,262,262,262,262,,,,262,262,,,', +',,,262,,,262,262,262,263,263,263,,263,,,,263,263,,,,263,,263,263,263', +'263,263,263,263,,,,,,263,263,263,263,263,263,263,,,263,,,,,,,263,,,263', +'263,263,263,263,263,263,263,,263,263,263,,263,263,,263,263,263,,,,,', +',,,,,,,,,,,,,,263,,,263,,,263,263,,,263,,,,,,263,,,,,,,,263,,,,,263', +'263,263,263,263,263,,,,263,263,,,,,,,263,,,263,263,263,264,264,264,', +'264,,,,264,264,,,,264,,264,264,264,264,264,264,264,,,,,,264,264,264', +'264,264,264,264,,,264,,,,,,,264,,,264,264,264,264,264,264,264,264,,264', +'264,264,,264,264,,264,264,264,,,,,,,,,,,,,,,,,,,,264,,,264,,,264,264', +',,264,,,,,,264,,,,,,,,264,,,,,264,264,264,264,264,264,,,,264,264,,,', +',,,264,,,264,264,264,265,265,265,,265,,,,265,265,,,,265,,265,265,265', +'265,265,265,265,,,,,,265,265,265,265,265,265,265,,,265,,,,,,,265,,,265', +'265,265,265,265,265,265,265,,265,265,265,,265,265,,265,265,265,,,,,', +',,,,,,,,,,,,,,265,,,265,,,265,265,,,265,,,,,,265,,,,,,,,265,,,,,265', +'265,265,265,265,265,,,,265,265,,,,,,,265,,,265,265,265,266,266,266,', +'266,,,,266,266,,,,266,,266,266,266,266,266,266,266,,,,,,266,266,266', +'266,266,266,266,,,266,,,,,,,266,,,266,266,266,266,266,266,266,266,,266', +'266,266,,266,266,,266,266,266,,,,,,,,,,,,,,,,,,,,266,,,266,,,266,266', +',,266,,,,,,266,,,,,,,,266,,,,,266,266,266,266,266,266,,,,266,266,,,', +',,,266,,,266,266,266,271,271,271,,271,,,,271,271,,,,271,,271,271,271', +'271,271,271,271,,,,,,271,271,271,271,271,271,271,,,271,,,,,,,271,,,271', +'271,271,271,271,271,271,271,,271,271,271,,271,271,,271,271,271,,,,,', +',,,,,,,,,,,,,,271,,,271,,,271,271,,,271,,,,,,271,,,,,,,,271,,,,,271', +'271,271,271,271,271,,,,271,271,,,,,,,271,,,271,271,271,279,279,279,', +'279,,,,279,279,,,,279,,279,279,279,279,279,279,279,,,,,,279,279,279', +'279,279,279,279,,,279,,,,,,,279,,,279,279,279,279,279,279,279,279,279', +'279,279,279,,279,279,,279,279,279,,,,,,,,,,,,,,,,,,,,279,,,279,,,279', +'279,,,279,,279,,279,,279,,,,,,,,279,,,,,279,279,279,279,279,279,,,,279', +'279,,,,,,,279,,279,279,279,279,286,286,286,,286,,,,286,286,,,,286,,286', '286,286,286,286,286,286,,,,,,286,286,286,286,286,286,286,,,286,,,,,', -',286,,,286,286,286,286,286,286,286,286,,286,286,286,,286,286,,286,286', -'286,,,,,,,,,,,,,,,,,,,,286,,,286,,,286,286,,,286,,,,,,286,,,,,,,,286', -',,,,286,286,286,286,286,286,,,,286,286,,,,,,,286,,,286,286,286,292,292', -'292,292,292,,,,292,292,,,,292,,292,292,292,292,292,292,292,,,,,,292', -'292,292,292,292,292,292,,,292,,,,,,292,292,,292,292,292,292,292,292', -'292,292,292,,292,292,292,,292,292,,292,292,292,,,,,,,,,,,,,,,,,,,,292', -',,292,,,292,292,,,292,,292,,,,292,,,,,,,,292,,,,,292,292,292,292,292', -'292,,,,292,292,,,,,,,292,,,292,292,292,37,37,37,,37,,,,37,37,,,,37,', -'37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37,,,,,,,37,,,37,37', -'37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,,,,,,,,,,,,,,37,,,37', -',,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37,37,,,,37,37,,,,,,,37', -',,37,37,37,38,38,38,,38,,,,38,38,,,,38,,38,38,38,38,38,38,38,,,,,,38', -'38,38,38,38,38,38,,,38,,,,,,,38,,,38,38,38,38,38,38,38,38,,38,38,38', -',38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38,,,38,38,,,38,,,,,,,,,,,,,,,', -',,,38,38,38,38,38,38,,,,38,38,,,,38,,,38,,,38,38,38,298,298,298,,298', -',,,298,298,,,,298,,298,298,298,298,298,298,298,,,,,,298,298,298,298', -'298,298,298,,,298,,,,,,,298,,,298,298,298,298,298,298,298,298,,298,298', -'298,,298,298,,,,298,,,,,,,,,,,,,,,,,,,,298,,,298,,,298,298,,,298,,,', -',,,,,,,,,,,,,,,298,298,298,298,298,298,,,,298,298,,,,298,,,298,,,298', -'298,298,848,848,848,,848,,,,848,848,,,,848,,848,848,848,848,848,848', -'848,,,,,,848,848,848,848,848,848,848,,,848,,,,,,,848,,,848,848,848,848', -'848,848,848,848,,848,848,848,,848,848,,848,848,848,,,,,,,,,,,,,,,,,', -',,848,,,848,,,848,848,,,848,,,,,,848,,,,,,,,848,,,,,848,848,848,848', -'848,848,,,,848,848,,,,,,,848,,,848,848,848,861,861,861,,861,,,,861,861', -',,,861,,861,861,861,861,861,861,861,,,,,,861,861,861,861,861,861,861', -',,861,,,,,,,861,,,861,861,861,861,861,861,861,861,,861,861,861,,861', -'861,,861,861,861,,,,,,,,,,,,,,,,,,,,861,,,861,,,861,861,,,861,,,,,,861', -',,,,,,,861,,,,,861,861,861,861,861,861,,,,861,861,,,,,,,861,,,861,861', -'861,879,879,879,,879,,,,879,879,,,,879,,879,879,879,879,879,879,879', -',,,,,879,879,879,879,879,879,879,,,879,,,,,,,879,,,879,879,879,879,879', -'879,879,879,879,879,879,879,,879,879,,879,879,879,,,,,,,,,,,,,,,,,,', -',879,,,879,,,879,879,,,879,,,,879,,879,,,,,,,,879,,,,,879,879,879,879', -'879,879,,,,879,879,,,,,,,879,,879,879,879,879,880,880,880,,880,,,,880', -'880,,,,880,,880,880,880,880,880,880,880,,,,,,880,880,880,880,880,880', -'880,,,880,,,,,,,880,,,880,880,880,880,880,880,880,880,,880,880,880,', -'880,880,,880,880,880,,,,,,,,,,,,,,,,,,,,880,,,880,,,880,880,,,880,,', -',,,880,,,,,,,,880,,,,,880,880,880,880,880,880,,,,880,880,,,,,,,880,', -',880,880,880,45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45,45,45,,,,,', -'45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45,45,,45,45', -'45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45,,,,,,45', -',,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45,895,895', -'895,,895,,,,895,895,,,,895,,895,895,895,895,895,895,895,,,,,,895,895', -'895,895,895,895,895,,,895,,,,,,,895,,,895,895,895,895,895,895,895,895', -',895,895,895,,895,895,,,,895,,,,,,,,,,,,,,,,,,,,895,,,895,,,895,895', -',,895,,,,,,,,,,,,,,,,,,,895,895,895,895,895,895,,,,895,895,,,,,,,895', -',,895,895,895,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,', -',46,46,46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46', -'46,,46,46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46', -',,,,,,,46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,315,315', -'315,,315,,,,315,315,,,,315,,315,315,315,315,315,315,315,,,,,,315,315', -'315,315,315,315,315,,,315,,,,,,,315,,,315,315,315,315,315,315,315,315', -',315,315,315,,315,315,,,,315,,,,,,,,,,,,,,,,,,,,315,,,315,,,315,315', -',,315,,,,,,,,,,,,,,,,,,,315,315,315,315,315,315,,,,315,315,,,,,,,315', -',,315,315,315,907,907,907,,907,,,,907,907,,,,907,,907,907,907,907,907', -'907,907,,,,,,907,907,907,907,907,907,907,,,907,,,,,,,907,,,907,907,907', -'907,907,907,907,907,,907,907,907,,907,907,,,,907,,,,,,,,,,,,,,,,,,,', -'907,,,907,,,907,907,,,907,,,,,,,,,,,,,,,,,,,907,907,907,907,907,907', -',,,907,907,,,,,,,907,,,907,907,907,47,47,47,,47,,,,47,47,,,,47,,47,47', -'47,47,47,47,47,,,,,,47,47,47,47,47,47,47,,,47,,,,,,,47,,,47,47,47,47', -'47,47,47,47,,47,47,47,,47,47,,47,47,47,,,,,,,,,,,,,,,,,,,,47,,,47,,', -'47,47,,,47,,,,,,47,,,,,,,,47,,,,,47,47,47,47,47,47,,,,47,47,,,,,,,47', -',,47,47,47,932,932,932,,932,,,,932,932,,,,932,,932,932,932,932,932,932', -'932,,,,,,932,932,932,932,932,932,932,,,932,,,,,,,932,,,932,932,932,932', -'932,932,932,932,,932,932,932,,932,932,,932,932,932,,,,,,,,,,,,,,,,,', -',,932,,,932,,,932,932,,,932,,932,,,,932,,,,,,,,932,,,,,932,932,932,932', -'932,932,,,,932,932,,,,,,,932,,,932,932,932,324,324,324,,324,,,,324,324', -',,,324,,324,324,324,324,324,324,324,,,,,,324,324,324,324,324,324,324', -',,324,,,,,,,324,,,324,324,324,324,324,324,324,324,,324,324,324,,324', -'324,,324,324,324,,,,,,,,,,,,,,,,,,,,324,,,324,324,,324,324,,,324,,,', -',,324,,,,,,,,324,,,,,324,324,324,324,324,324,,,,324,324,,,,,,,324,,', -'324,324,324,327,327,327,,327,,,,327,327,,,,327,,327,327,327,327,327', -'327,327,,,,,,327,327,327,327,327,327,327,,,327,,,,,,,327,,,327,327,327', -'327,327,327,327,327,,327,327,327,,327,327,,327,327,327,,,,,,,,,,,,,', -',,,,,,327,,,327,,,327,327,,,327,,,,,,327,,,,,,,,327,,,,,327,327,327', -'327,327,327,,,,327,327,,,,,,,327,,,327,327,327,333,333,333,,333,,,,333', -'333,,,,333,,333,333,333,333,333,333,333,,,,,,333,333,333,333,333,333', -'333,,,333,,,,,,,333,,,333,333,333,333,333,333,333,333,333,333,333,333', -',333,333,,333,333,333,,,,,,,,,,,,,,,,,,,,333,,,333,,,333,333,,,333,', -',,,,333,,,,,,,,333,,,,,333,333,333,333,333,333,,,,333,333,,,,,,,333', -',333,333,333,333,340,340,340,,340,,,,340,340,,,,340,,340,340,340,340', -'340,340,340,,,,,,340,340,340,340,340,340,340,,,340,,,,,,,340,,,340,340', -'340,340,340,340,340,340,,340,340,340,,340,340,,340,340,340,,,,,,,,,', -',,,,,,,,,,340,,,340,,,340,340,,,340,,,,,,340,,,,,,,,340,,,,,340,340', -'340,340,340,340,,,,340,340,,,,,,,340,,,340,340,340,341,341,341,,341', -',,,341,341,,,,341,,341,341,341,341,341,341,341,,,,,,341,341,341,341', -'341,341,341,,,341,,,,,,,341,,,341,341,341,341,341,341,341,341,,341,341', -'341,,341,341,,341,341,341,,,,,,,,,,,,,,,,,,,,341,,,341,,,341,341,,,341', -',,,,,341,,,,,,,,341,,,,,341,341,341,341,341,341,,,,341,341,,,,,,,341', -',,341,341,341,62,62,62,,62,,,,62,62,,,,62,,62,62,62,62,62,62,62,,,,', -',62,62,62,62,62,62,62,,,62,,,,,,,62,,,62,62,62,62,62,62,62,62,62,62', -'62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62,,,62,62,,,62,,62,', -',,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,,,,62,,62,62,62,62', -'1007,1007,1007,,1007,,,,1007,1007,,,,1007,,1007,1007,1007,1007,1007', -'1007,1007,,,,,,1007,1007,1007,1007,1007,1007,1007,,,1007,,,,,,,1007', -',,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,,1007', -'1007,,1007,1007,1007,,,,,,,,,,,,,,,,,,,,1007,,,1007,,,1007,1007,,,1007', -',1007,,1007,,1007,,,,,,,,1007,,,,,1007,1007,1007,1007,1007,1007,,,,1007', -'1007,,,,,,,1007,,1007,1007,1007,1007,66,66,66,,66,,,,66,66,,,,66,,66', -'66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66,66', -'66,66,66,66,66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,,,,,,66,,,66', -',,66,66,,,66,,,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,,66,66,,,,,,', -'66,,,66,66,66,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67,,,,', -',67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67', -'67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67', -',,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,353,353', -'353,,353,,,,353,353,,,,353,,353,353,353,353,353,353,353,,,,,,353,353', -'353,353,353,353,353,,,353,,,,,,,353,,,353,353,353,353,353,353,353,353', -',353,353,353,,353,353,,,,353,,,,,,,,,,,,,,,,,,,,353,,,353,,,353,353', -',,353,,,,,,,,,,,,,,,,,,,353,353,353,353,353,353,,,,353,353,,,,,,,353', -',,353,353,353,355,355,355,,355,,,,355,355,,,,355,,355,355,355,355,355', -'355,355,,,,,,355,355,355,355,355,355,355,,,355,,,,,,,355,,,355,355,355', -'355,355,355,355,355,,355,355,355,,355,355,,,,355,,,,,,,,,,,,,,,,,,,', -'355,,,355,,,355,355,,,355,,,,,,,,,,,,,,,,,,,355,355,355,355,355,355', -',,,355,355,,,,,,,355,,,355,355,355,70,70,70,,70,,,,70,70,,,,70,,70,70', -'70,70,70,70,70,,,,,,70,70,70,70,70,70,70,,,70,,,,,,,70,,,70,70,70,70', -'70,70,70,70,,70,70,70,,70,70,,70,70,70,,,,,,,,,,,,,,,,,,,,70,,,70,,', -'70,70,,,70,,,,,,70,,,,,,,,70,,,,,70,70,70,70,70,70,,,,70,70,70,,,,,70', -'70,,,70,70,70,71,71,71,,71,,,,71,71,,,,71,,71,71,71,71,71,71,71,,,,', -',71,71,71,71,71,71,71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71', -'71,,71,71,,,,71,,,,,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,71,,,,,,,,', -',,,,,,,,71,71,71,71,71,71,,,,71,71,,,,,,,71,,,71,71,71,8,8,8,8,8,,,', -'8,8,,,,8,,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8', -'8,8,8,8,,8,8,8,,8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,', -'8,,,,,,,,8,,,,,8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,413,413,413,,413,', -',,413,413,,,,413,,413,413,413,413,413,413,413,,,,,,413,413,413,413,413', -'413,413,,,413,,,,,,,413,,,413,413,413,413,413,413,413,413,,413,413,413', -',413,413,,413,413,413,,,,,,,,,,,,,,,,,,,,413,,,413,,,413,413,,,413,', -',,,,413,,,,,,,,413,,,,,413,413,413,413,413,413,,,,413,413,,,,,,,413', -',,413,413,413,450,450,450,,450,,,,450,450,,,,450,,450,450,450,450,450', -'450,450,,,,,,450,450,450,450,450,450,450,,,450,,,,,,,450,,,450,450,450', -'450,450,450,450,450,450,450,450,450,,450,450,,450,450,450,,,,,,,,,,', -',,,,,,,,,450,,,450,,,450,450,,,450,,450,,450,,450,,,,,,,,450,,,,,450', -'450,450,450,450,450,,,,450,450,,,,,,,450,,450,450,450,450,452,452,452', -',452,,,,452,452,,,,452,,452,452,452,452,452,452,452,,,,,,452,452,452', -'452,452,452,452,,,452,,,,,,,452,,,452,452,452,452,452,452,452,452,,452', -'452,452,,452,452,,452,452,452,,,,,,,,,,,,,,,,,,,,452,,,452,,,452,452', -',,452,,,,,,452,,,,,,,,452,,,,,452,452,452,452,452,452,,,,452,452,,,', -',,,452,,,452,452,452,453,453,453,,453,,,,453,453,,,,453,,453,453,453', -'453,453,453,453,,,,,,453,453,453,453,453,453,453,,,453,,,,,,,453,,,453', -'453,453,453,453,453,453,453,,453,453,453,,453,453,,453,453,453,,,,,', -',,,,,,,,,,,,,,453,,,453,,,453,453,,,453,,,,,,453,,,,,,,,453,,,,,453', -'453,453,453,453,453,,,,453,453,,,,,,,453,,,453,453,453,454,454,454,', -'454,,,,454,454,,,,454,,454,454,454,454,454,454,454,,,,,,454,454,454', -'454,454,454,454,,,454,,,,,,,454,,,454,454,454,454,454,454,454,454,,454', -'454,454,,454,454,,454,454,454,,,,,,,,,,,,,,,,,,,,454,,,454,,,454,454', -',,454,,,,,,454,,,,,,,,454,,,,,454,454,454,454,454,454,,,,454,454,,,', -',,,454,,,454,454,454,111,111,111,111,111,,,,111,111,,,,111,,111,111', -'111,111,111,111,111,,,,,,111,111,111,111,111,111,111,,,111,,,,,,111', -'111,111,111,111,111,111,111,111,111,111,111,,111,111,111,,111,111,,111', -'111,111,,,,,,,,,,,,,,,,,,,,111,,,111,,,111,111,,,111,,111,,,,111,,,', -',,,,111,,,,,111,111,111,111,111,111,,,,111,111,,,,,,111,111,,,111,111', -'111,116,116,116,,116,,,,116,116,,,,116,,116,116,116,116,116,116,116', -',,,,,116,116,116,116,116,116,116,,,116,,,,,,,116,,,116,116,116,116,116', -'116,116,116,,116,116,116,,116,116,,116,116,116,,,,,,,,,,,,,,,,,,,,116', -',,116,,,116,116,,,116,,,,,,116,,,,,,,,116,,,,,116,116,116,116,116,116', -',,,116,116,,,,,,,116,,,116,116,116,117,117,117,,117,,,,117,117,,,,117', -',117,117,117,117,117,117,117,,,,,,117,117,117,117,117,117,117,,,117', -',,,,,,117,,,117,117,117,117,117,117,117,117,,117,117,117,,117,117,,117', -'117,117,,,,,,,,,,,,,,,,,,,,117,,,117,,,117,117,,,117,,,,,,117,,,,,,', -',117,,,,,117,117,117,117,117,117,,,,117,117,,,,,,,117,,,117,117,117', -'118,118,118,,118,,,,118,118,,,,118,,118,118,118,118,118,118,118,,,,', -',118,118,118,118,118,118,118,,,118,,,,,,,118,,,118,118,118,118,118,118', -'118,118,,118,118,118,,118,118,,118,118,118,,,,,,,,,,,,,,,,,,,,118,,', -'118,,,118,118,,,118,,,,,,118,,,,,,,,118,,,,,118,118,118,118,118,118', -',,,118,118,,,,,,,118,,,118,118,118,119,119,119,,119,,,,119,119,,,,119', -',119,119,119,119,119,119,119,,,,,,119,119,119,119,119,119,119,,,119', -',,,,,,119,,,119,119,119,119,119,119,119,119,,119,119,119,,119,119,,119', -'119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119,119,,,119,,,,,,119,,,,,,', -',119,,,,,119,119,119,119,119,119,,,,119,119,,,,,,,119,,,119,119,119', -'120,120,120,120,120,,,,120,120,,,,120,,120,120,120,120,120,120,120,', -',,,,120,120,120,120,120,120,120,,,120,,,,,,120,120,,120,120,120,120', -'120,120,120,120,120,,120,120,120,,120,120,,120,120,120,,,,,,,,,,,,,', -',,,,,,120,,,120,,,120,120,,,120,,120,,,,120,,,,,,,,120,,,,,120,120,120', -'120,120,120,,,,120,120,,,,,,,120,,,120,120,120,495,495,495,,495,,,,495', -'495,,,,495,,495,495,495,495,495,495,495,,,,,,495,495,495,495,495,495', -'495,,,495,,,,,,,495,,,495,495,495,495,495,495,495,495,495,495,495,495', -',495,495,,495,495,495,,,,,,,,,,,,,,,,,,,,495,,,495,,,495,495,,,495,', -'495,,495,,495,,,,,,,,495,,,,,495,495,495,495,495,495,,,,495,495,,,,', -',,495,,495,495,495,495,498,498,498,,498,,,,498,498,,,,498,,498,498,498', -'498,498,498,498,,,,,,498,498,498,498,498,498,498,,,498,,,,,,,498,,,498', -'498,498,498,498,498,498,498,498,498,498,498,,498,498,,498,498,498,,', -',,,,,,,,,,,,,,,,,498,,,498,,,498,498,,,498,,,,498,,498,,,,,,,,498,,', -',,498,498,498,498,498,498,,,,498,498,,,,,,,498,,498,498,498,498,500', -'500,500,,500,,,,500,500,,,,500,,500,500,500,500,500,500,500,,,,,,500', -'500,500,500,500,500,500,,,500,,,,,,,500,,,500,500,500,500,500,500,500', -'500,,500,500,500,,500,500,,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500', -',,500,500,,,500,,,,,,500,,,,,,,,500,,,,,500,500,500,500,500,500,,,,500', -'500,,,,,,,500,,,500,500,500,502,502,502,,502,,,,502,502,,,,502,,502', -'502,502,502,502,502,502,,,,,,502,502,502,502,502,502,502,,,502,,,,,', -',502,,,502,502,502,502,502,502,502,502,,502,502,502,,502,502,,502,502', -'502,,,,,,,,,,,,,,,,,,,,502,,,502,,,502,502,,,502,,,,,,502,,,,,,,,502', -',,,,502,502,502,502,502,502,,,,502,502,,,,,,,502,,,502,502,502,505,505', -'505,505,505,,,,505,505,,,,505,,505,505,505,505,505,505,505,,,,,,505', -'505,505,505,505,505,505,,,505,,,,,,505,505,,505,505,505,505,505,505', -'505,505,505,,505,505,505,,505,505,,505,505,505,,,,,,,,,,,,,,,,,,,,505', -',,505,,,505,505,,,505,,505,,,,505,,,,,,,,505,,,,,505,505,505,505,505', -'505,,,,505,505,,,,,,505,505,,,505,505,505,23,23,23,,23,,,,23,23,,,,23', -',23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23', -'23,23,23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,', -',23,,,23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,', -',,,,23,,,23,23,23,512,512,512,,512,,,,512,512,,,,512,,512,512,512,512', -'512,512,512,,,,,,512,512,512,512,512,512,512,,,512,,,,,,,512,,,512,512', -'512,512,512,512,512,512,,512,512,512,,512,512,,,,512,,,,,,,,,,,,,,,', -',,,,512,,,512,,,512,512,,,512,,,,,,,,,,,,,,,,,,,512,512,512,512,512', -'512,,,,512,512,,,,,,,512,,,512,512,512,514,514,514,,514,,,,514,514,', -',,514,,514,514,514,514,514,514,514,,,,,,514,514,514,514,514,514,514', -',,514,,,,,,,514,,,514,514,514,514,514,514,514,514,514,514,514,514,,514', -'514,,514,514,514,,,,,,,,,,,,,,,,,,,,514,,,514,,,514,514,,,514,,514,', -'514,,514,,,,,,,,514,,,,,514,514,514,514,514,514,,,,514,514,,,,,,,514', -',514,514,514,514,208,208,208,,208,,,,208,208,,,,208,,208,208,208,208', -'208,208,208,,,,,,208,208,208,208,208,208,208,,,208,,,,,,,208,,,208,208', -'208,208,208,208,208,208,,208,208,208,,208,208,,208,208,208,,,,,,,,,', -',,,,,,,,,,208,,,208,,,208,208,,,208,,208,,,,208,,,,,,,,208,,,,,208,208', -'208,208,208,208,,,,208,208,,,,,,,208,,,208,208,208,521,521,521,,521', -',,,521,521,,,,521,,521,521,521,521,521,521,521,,,,,,521,521,521,521', -'521,521,521,,,521,,,,,,,521,,,521,521,521,521,521,521,521,521,,521,521', -'521,,521,521,,,,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,,,', -',,,,,,,,,,,,,,,521,521,521,521,521,521,,,,521,521,,,,,,,521,,,521,521', -'521,209,209,209,,209,,,,209,209,,,,209,,209,209,209,209,209,209,209', -',,,,,209,209,209,209,209,209,209,,,209,,,,,,,209,,,209,209,209,209,209', -'209,209,209,,209,209,209,,209,209,,209,209,209,,,,,,,,,,,,,,,,,,,,209', -',,209,,,209,209,,,209,,,,,,209,,,,,,,,209,,,,,209,209,209,209,209,209', -',,,209,209,,,,,,,209,,,209,209,209,524,524,524,,524,,,,524,524,,,,524', -',524,524,524,524,524,524,524,,,,,,524,524,524,524,524,524,524,,,524', -',,,,,,524,,,524,524,524,524,524,524,524,524,,524,524,524,,524,524,,524', -'524,524,,,,,,,,,,,,,,,,,,,,524,,,524,,,524,524,,,524,,,,,,524,,,,,,', -',524,,,,,524,524,524,524,524,524,,,,524,524,,,,,,,524,,,524,524,524', -'525,525,525,,525,,,,525,525,,,,525,,525,525,525,525,525,525,525,,,,', -',525,525,525,525,525,525,525,,,525,,,,,,,525,,,525,525,525,525,525,525', -'525,525,,525,525,525,,525,525,,525,525,525,,,,,,,,,,,,,,,,,,,,525,,', -'525,,,525,525,,,525,,,,,,525,,,,,,,,525,,,,,525,525,525,525,525,525', -',,,525,525,,,,,,,525,,,525,525,525,526,526,526,,526,,,,526,526,,,,526', -',526,526,526,526,526,526,526,,,,,,526,526,526,526,526,526,526,,,526', -',,,,,,526,,,526,526,526,526,526,526,526,526,,526,526,526,,526,526,,526', -'526,526,,,,,,,,,,,,,,,,,,,,526,,,526,,,526,526,,,526,,,,,,526,,,,,,', -',526,,,,,526,526,526,526,526,526,,,,526,526,,,,,,,526,,,526,526,526', -'530,530,530,,530,,,,530,530,,,,530,,530,530,530,530,530,530,530,,,,', -',530,530,530,530,530,530,530,,,530,,,,,,,530,,,530,530,530,530,530,530', -'530,530,,530,530,530,,530,530,,530,530,530,,,,,,,,,,,,,,,,,,,,530,,', -'530,,,530,530,,,530,,,,,,530,,,,,,,,530,,,,,530,530,530,530,530,530', -',,,530,530,,,,,,,530,,,530,530,530,210,210,210,,210,,,,210,210,,,,210', -',210,210,210,210,210,210,210,,,,,,210,210,210,210,210,210,210,,,210', -',,,,,,210,,,210,210,210,210,210,210,210,210,210,210,210,210,,210,210', -',210,210,210,,,,,,,,,,,,,,,,,,,,210,,,210,,,210,210,,,210,,210,,210', -',210,,,,,,,,210,,,,,210,210,210,210,210,210,,,,210,210,,,,,,,210,,210', -'210,210,210,536,536,536,,536,,,,536,536,,,,536,,536,536,536,536,536', -'536,536,,,,,,536,536,536,536,536,536,536,,,536,,,,,,,536,,,536,536,536', -'536,536,536,536,536,536,536,536,536,,536,536,,536,536,536,,,,,,,,,,', -',,,,,,,,,536,,,536,,,536,536,,,536,,536,,,,536,,,,,,,,536,,,,,536,536', -'536,536,536,536,,,,536,536,,,,,,,536,,536,536,536,536,539,539,539,,539', -',,,539,539,,,,539,,539,539,539,539,539,539,539,,,,,,539,539,539,539', -'539,539,539,,,539,,,,,,,539,,,539,539,539,539,539,539,539,539,539,539', -'539,539,,539,539,,539,539,539,,,,,,,,,,,,,,,,,,,,539,,,539,,,539,539', -',,539,,,,,,539,,,,,,,,539,,,,,539,539,539,539,539,539,,,,539,539,,,', -',,,539,,539,539,539,539,214,214,214,,214,,,,214,214,,,,214,,214,214', -'214,214,214,214,214,,,,,,214,214,214,214,214,214,214,,,214,,,,,,,214', -',,214,214,214,214,214,214,214,214,,214,214,214,,214,214,,214,214,214', -',,,,,,,,,,,,,,,,,,,214,,,214,,,214,214,,,214,,,,,,214,,,,,,,,214,,,', -',214,214,214,214,214,214,,,,214,214,,,,,,,214,,,214,214,214,215,215', -'215,,215,,,,215,215,,,,215,,215,215,215,215,215,215,215,,,,,,215,215', -'215,215,215,215,215,,,215,,,,,,,215,,,215,215,215,215,215,215,215,215', -',215,215,215,,215,215,,215,215,215,,,,,,,,,,,,,,,,,,,,215,,,215,,,215', -'215,,,215,,215,,,,215,,,,,,,,215,,,,,215,215,215,215,215,215,,,,215', -'215,,,,,,,215,,,215,215,215,216,216,216,,216,,,,216,216,,,,216,,216', -'216,216,216,216,216,216,,,,,,216,216,216,216,216,216,216,,,216,,,,,', -',216,,,216,216,216,216,216,216,216,216,,216,216,216,,216,216,,216,216', -'216,,,,,,,,,,,,,,,,,,,,216,,,216,,,216,216,,,216,,,,,,216,,,,,,,,216', -',,,,216,216,216,216,216,216,,,,216,216,,,,,,,216,,,216,216,216,217,217', -'217,,217,,,,217,217,,,,217,,217,217,217,217,217,217,217,,,,,,217,217', -'217,217,217,217,217,,,217,,,,,,,217,,,217,217,217,217,217,217,217,217', -',217,217,217,,217,217,,217,217,217,,,,,,,,,,,,,,,,,,,,217,,,217,,,217', -'217,,,217,,,,,,217,,,,,,,,217,,,,,217,217,217,217,217,217,,,,217,217', -',,,,,,217,,,217,217,217,218,218,218,,218,,,,218,218,,,,218,,218,218', -'218,218,218,218,218,,,,,,218,218,218,218,218,218,218,,,218,,,,,,,218', -',,218,218,218,218,218,218,218,218,,218,218,218,,218,218,,218,218,218', -',,,,,,,,,,,,,,,,,,,218,,,218,,,218,218,,,218,,,,,,218,,,,,,,,218,,,', -',218,218,218,218,218,218,,,,218,218,,,,,,,218,,,218,218,218,219,219', -'219,,219,,,,219,219,,,,219,,219,219,219,219,219,219,219,,,,,,219,219', -'219,219,219,219,219,,,219,,,,,,,219,,,219,219,219,219,219,219,219,219', -',219,219,219,,219,219,,219,219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219', -'219,,,219,,,,,,219,,,,,,,,219,,,,,219,219,219,219,219,219,,,,219,219', -'219,,,,,,219,,,219,219,219,564,564,564,,564,,,,564,564,,,,564,,564,564', -'564,564,564,564,564,,,,,,564,564,564,564,564,564,564,,,564,,,,,,,564', -',,564,564,564,564,564,564,564,564,,564,564,564,,564,564,,564,564,564', -',,,,,,,,,,,,,,,,,,,564,,,564,,,564,564,,,564,,,,,,564,,,,,,,,564,,,', -',564,564,564,564,564,564,,,,564,564,,,,,,,564,,,564,564,564,585,585', -'585,,585,,,,585,585,,,,585,,585,585,585,585,585,585,585,,,,,,585,585', -'585,585,585,585,585,,,585,,,,,,,585,,,585,585,585,585,585,585,585,585', -'585,585,585,585,,585,585,,585,585,585,,,,,,,,,,,,,,,,,,,,585,,,585,', -',585,585,,,585,,585,,585,,585,,,,,,,,585,,,,,585,585,585,585,585,585', -',,,585,585,,,,,,,585,,585,585,585,585,597,597,597,,597,,,,597,597,,', -',597,,597,597,597,597,597,597,597,,,,,,597,597,597,597,597,597,597,', -',597,,,,,,,597,,,597,597,597,597,597,597,597,597,,597,597,597,,597,597', -',597,597,597,,,,,,,,,,,,,,,,,,,,597,,,597,,,597,597,,,597,,,,,,597,', -',,,,,,597,,,,,597,597,597,597,597,597,,,,597,597,,,,,,,597,,,597,597', -'597,601,601,601,,601,,,,601,601,,,,601,,601,601,601,601,601,601,601', -',,,,,601,601,601,601,601,601,601,,,601,,,,,,,601,,,601,601,601,601,601', -'601,601,601,,601,601,601,,601,601,,601,601,601,,,,,,,,,,,,,,,,,,,,601', -',,601,,,601,601,,,601,,,,,,601,,,,,,,,601,,,,,601,601,601,601,601,601', -',,,601,601,,,,,,,601,,,601,601,601,230,230,230,,230,,,,230,230,,,,230', -',230,230,230,230,230,230,230,,,,,,230,230,230,230,230,230,230,,,230', -',,,,,,230,,,230,230,230,230,230,230,230,230,,230,230,230,,230,230,,230', -'230,230,,,,,,,,,,,,,,,,,,,,230,,,230,,,230,230,,,230,,,,,,230,,,,,,', -',230,,,,,230,230,230,230,230,230,,,,230,230,,,,,,,230,,,230,230,230', -'233,233,233,,233,,,,233,233,,,,233,,233,233,233,233,233,233,233,,,,', -',233,233,233,233,233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233', -'233,233,,233,233,233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,', -'233,,,233,233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233', -',,,233,233,,,,,,,233,,,233,233,233,630,630,630,,630,,,,630,630,,,,630', -',630,630,630,630,630,630,630,,,,,,630,630,630,630,630,630,630,,,630', -',,,,,,630,,,630,630,630,630,630,630,630,630,,630,630,630,,630,630,,630', -'630,630,,,,,,,,,,,,,,,,,,,,630,,,630,,,630,630,,,630,,630,,,,630,,,', -',,,,630,,,,,630,630,630,630,630,630,,,,630,630,,,,,,,630,,,630,630,630', -'631,631,631,,631,,,,631,631,,,,631,,631,631,631,631,631,631,631,,,,', -',631,631,631,631,631,631,631,,,631,,,,,,,631,,,631,631,631,631,631,631', -'631,631,,631,631,631,,631,631,,631,631,631,,,,,,,,,,,,,,,,,,,,631,,', -'631,,,631,631,,,631,,,,,,631,,,,,,,,631,,,,,631,631,631,631,631,631', -',,,631,631,,,,,,,631,,,631,631,631,234,234,234,,234,,,,234,234,,,,234', -',234,234,234,234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234', -',,,,,,234,,,234,234,234,234,234,234,234,234,,234,234,234,,234,234,,234', -'234,234,,,,,,,,,,,,,,,,,,,,234,,,234,,,234,234,,,234,,,,,,234,,,,,,', -',234,,,,,234,234,234,234,234,234,,,,234,234,,,,,,,234,,,234,234,234', -'634,634,634,,634,,,,634,634,,,,634,,634,634,634,634,634,634,634,,,,', -',634,634,634,634,634,634,634,,,634,,,,,,,634,,,634,634,634,634,634,634', -'634,634,634,634,634,634,,634,634,,634,634,634,,,,,,,,,,,,,,,,,,,,634', -',,634,,,634,634,,,634,,634,,634,,634,,,,,,,,634,,,,,634,634,634,634', -'634,634,,,,634,634,,,,,,,634,,634,634,634,634,635,635,635,,635,,,,635', -'635,,,,635,,635,635,635,635,635,635,635,,,,,,635,635,635,635,635,635', -'635,,,635,,,,,,,635,,,635,635,635,635,635,635,635,635,635,635,635,635', -',635,635,,635,635,635,,,,,,,,,,,,,,,,,,,,635,,,635,,,635,635,,,635,', -',,635,,635,,,,,,,,635,,,,,635,635,635,635,635,635,,,,635,635,,,,,,,635', -',635,635,635,635,636,636,636,,636,,,,636,636,,,,636,,636,636,636,636', -'636,636,636,,,,,,636,636,636,636,636,636,636,,,636,,,,,,,636,,,636,636', -'636,636,636,636,636,636,,636,636,636,,636,636,,636,636,636,,,,,,,,,', -',,,,,,,,,,636,,,636,,,636,636,,,636,,,,,,636,,,,,,,,636,,,,,636,636', -'636,636,636,636,,,,636,636,,,,,,,636,,,636,636,636,637,637,637,,637', -',,,637,637,,,,637,,637,637,637,637,637,637,637,,,,,,637,637,637,637', -'637,637,637,,,637,,,,,,,637,,,637,637,637,637,637,637,637,637,,637,637', -'637,,637,637,,637,637,637,,,,,,,,,,,,,,,,,,,,637,,,637,,,637,637,,,637', -',,,,,637,,,,,,,,637,,,,,637,637,637,637,637,637,,,,637,637,,,,,,,637', -',,637,637,637,235,235,235,,235,,,,235,235,,,,235,,235,235,235,235,235', -'235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,,,235,,,235,235,235', -'235,235,235,235,235,,235,235,235,,235,235,,235,235,235,,,,,,,,,,,,,', -',,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,,,235,,,,,235,235,235', -'235,235,235,,,,235,235,,,,,,,235,,,235,235,235,642,642,642,,642,,,,642', -'642,,,,642,,642,642,642,642,642,642,642,,,,,,642,642,642,642,642,642', -'642,,,642,,,,,,,642,,,642,642,642,642,642,642,642,642,,642,642,642,', -'642,642,,642,642,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642,,,642,,', -',,,642,,,,,,,,642,,,,,642,642,642,642,642,642,,,,642,642,,,,,,,642,', -',642,642,642,643,643,643,,643,,,,643,643,,,,643,,643,643,643,643,643', -'643,643,,,,,,643,643,643,643,643,643,643,,,643,,,,,,,643,,,643,643,643', -'643,643,643,643,643,,643,643,643,,643,643,,643,643,643,,,,,,,,,,,,,', -',,,,,,643,,,643,,,643,643,,,643,,,,,,643,,,,,,,,643,,,,,643,643,643', -'643,643,643,,,,643,643,,,,,,,643,,,643,643,643,236,236,236,,236,,,,236', -'236,,,,236,,236,236,236,236,236,236,236,,,,,,236,236,236,236,236,236', -'236,,,236,,,,,,,236,,,236,236,236,236,236,236,236,236,,236,236,236,', -'236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236,,,236,,,236,236,,,236,,', -',,,236,,,,,,,,236,,,,,236,236,236,236,236,236,,,,236,236,,,,,,,236,', -',236,236,236,646,646,646,,646,,,,646,646,,,,646,,646,646,646,646,646', -'646,646,,,,,,646,646,646,646,646,646,646,,,646,,,,,,,646,,,646,646,646', -'646,646,646,646,646,,646,646,646,,646,646,,646,646,646,,,,,,,,,,,,,', -',,,,,,646,,,646,,,646,646,,,646,,,,,,646,,,,,,,,646,,,,,646,646,646', -'646,646,646,,,,646,646,,,,,,,646,,,646,646,646,647,647,647,,647,,,,647', -'647,,,,647,,647,647,647,647,647,647,647,,,,,,647,647,647,647,647,647', -'647,,,647,,,,,,,647,,,647,647,647,647,647,647,647,647,,647,647,647,', -'647,647,,647,647,647,,,,,,,,,,,,,,,,,,,,647,,,647,,,647,647,,,647,,', -',,,647,,,,,,,,647,,,,,647,647,647,647,647,647,,,,647,647,,,,,,,647,', -',647,647,647,237,237,237,,237,,,,237,237,,,,237,,237,237,237,237,237', -'237,237,,,,,,237,237,237,237,237,237,237,,,237,,,,,,,237,,,237,237,237', -'237,237,237,237,237,,237,237,237,,237,237,,237,237,237,,,,,,,,,,,,,', -',,,,,,237,,,237,,,237,237,,,237,,,,,,237,,,,,,,,237,,,,,237,237,237', -'237,237,237,,,,237,237,,,,,,,237,,,237,237,237,238,238,238,,238,,,,238', -'238,,,,238,,238,238,238,238,238,238,238,,,,,,238,238,238,238,238,238', -'238,,,238,,,,,,,238,,,238,238,238,238,238,238,238,238,,238,238,238,', -'238,238,,238,238,238,,,,,,,,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,', -',,,238,,,,,,,,238,,,,,238,238,238,238,238,238,,,,238,238,,,,,,,238,', -',238,238,238,239,239,239,,239,,,,239,239,,,,239,,239,239,239,239,239', -'239,239,,,,,,239,239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239', -'239,239,239,239,239,,239,239,239,,239,239,,239,239,239,,,,,,,,,,,,,', -',,,,,,239,,,239,,,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239,239,239', -'239,239,239,,,,239,239,,,,,,,239,,,239,239,239,240,240,240,,240,,,,240', -'240,,,,240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240,240', -'240,,,240,,,,,,,240,,,240,240,240,240,240,240,240,240,,240,240,240,', -'240,240,,240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,240,,,240,,', -',,,240,,,,,,,,240,,,,,240,240,240,240,240,240,,,,240,240,,,,,,,240,', -',240,240,240,241,241,241,,241,,,,241,241,,,,241,,241,241,241,241,241', -'241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241', -'241,241,241,241,241,,241,241,241,,241,241,,241,241,241,,,,,,,,,,,,,', -',,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,,,241,241,241', -'241,241,241,,,,241,241,,,,,,,241,,,241,241,241,671,671,671,,671,,,,671', -'671,,,,671,,671,671,671,671,671,671,671,,,,,,671,671,671,671,671,671', -'671,,,671,,,,,,,671,,,671,671,671,671,671,671,671,671,,671,671,671,', -'671,671,,671,671,671,,,,,,,,,,,,,,,,,,,,671,,,671,,,671,671,,,671,,', -',,,671,,,,,,,,671,,,,,671,671,671,671,671,671,,,,671,671,,,,,,,671,', -',671,671,671,677,677,677,,677,,,,677,677,,,,677,,677,677,677,677,677', -'677,677,,,,,,677,677,677,677,677,677,677,,,677,,,,,,,677,,,677,677,677', -'677,677,677,677,677,,677,677,677,,677,677,,,,677,,,,,,,,,,,,,,,,,,,', -'677,,,677,,,677,677,,,677,,,,,,,,,,,,,,,,,,,677,677,677,677,677,677', -',,,677,677,,,,,,,677,,,677,677,677,242,242,242,,242,,,,242,242,,,,242', -',242,242,242,242,242,242,242,,,,,,242,242,242,242,242,242,242,,,242', -',,,,,,242,,,242,242,242,242,242,242,242,242,,242,242,242,,242,242,,242', -'242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242,,,242,,,,,,242,,,,,,', -',242,,,,,242,242,242,242,242,242,,,,242,242,,,,,,,242,,,242,242,242', -'243,243,243,,243,,,,243,243,,,,243,,243,243,243,243,243,243,243,,,,', -',243,243,243,243,243,243,243,,,243,,,,,,,243,,,243,243,243,243,243,243', -'243,243,,243,243,243,,243,243,,243,243,243,,,,,,,,,,,,,,,,,,,,243,,', -'243,,,243,243,,,243,,,,,,243,,,,,,,,243,,,,,243,243,243,243,243,243', -',,,243,243,,,,,,,243,,,243,243,243,244,244,244,,244,,,,244,244,,,,244', -',244,244,244,244,244,244,244,,,,,,244,244,244,244,244,244,244,,,244', -',,,,,,244,,,244,244,244,244,244,244,244,244,,244,244,244,,244,244,,244', -'244,244,,,,,,,,,,,,,,,,,,,,244,,,244,,,244,244,,,244,,,,,,244,,,,,,', -',244,,,,,244,244,244,244,244,244,,,,244,244,,,,,,,244,,,244,244,244', -'245,245,245,,245,,,,245,245,,,,245,,245,245,245,245,245,245,245,,,,', -',245,245,245,245,245,245,245,,,245,,,,,,,245,,,245,245,245,245,245,245', -'245,245,,245,245,245,,245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,', -'245,,,245,245,,,245,,,,,,245,,,,,,,,245,,,,,245,245,245,245,245,245', -',,,245,245,,,,,,,245,,,245,245,245,246,246,246,,246,,,,246,246,,,,246', -',246,246,246,246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246', -',,,,,,246,,,246,246,246,246,246,246,246,246,,246,246,246,,246,246,,246', -'246,246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,', -',246,,,,,246,246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246', -'688,688,688,,688,,,,688,688,,,,688,,688,688,688,688,688,688,688,,,,', -',688,688,688,688,688,688,688,,,688,,,,,,,688,,,688,688,688,688,688,688', -'688,688,,688,688,688,,688,688,,,,688,,,,,,,,,,,,,,,,,,,,688,,,688,,', -'688,688,,,688,,,,,,,,,,,,,,,,,,,688,688,688,688,688,688,,,,688,688,', -',,,,,688,,,688,688,688,247,247,247,,247,,,,247,247,,,,247,,247,247,247', -'247,247,247,247,,,,,,247,247,247,247,247,247,247,,,247,,,,,,,247,,,247', -'247,247,247,247,247,247,247,,247,247,247,,247,247,,247,247,247,,,,,', -',,,,,,,,,,,,,,247,,,247,,,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247', -'247,247,247,247,247,,,,247,247,,,,,,,247,,,247,247,247,248,248,248,', -'248,,,,248,248,,,,248,,248,248,248,248,248,248,248,,,,,,248,248,248', -'248,248,248,248,,,248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248', -'248,248,,248,248,,248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248', -',,248,,,,,,248,,,,,,,,248,,,,,248,248,248,248,248,248,,,,248,248,,,', -',,,248,,,248,248,248,249,249,249,,249,,,,249,249,,,,249,,249,249,249', -'249,249,249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249', -'249,249,249,249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,', -',,,,,,,,,,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249', -'249,249,249,249,249,,,,249,249,,,,,,,249,,,249,249,249,694,694,694,', -'694,,,,694,694,,,,694,,694,694,694,694,694,694,694,,,,,,694,694,694', -'694,694,694,694,,,694,,,,,,,694,,,694,694,694,694,694,694,694,694,,694', -'694,694,,694,694,,694,694,694,,,,,,,,,,,,,,,,,,,,694,,,694,,,694,694', -',,694,,694,,,,694,,,,,,,,694,,,,,694,694,694,694,694,694,,,,694,694', -',,,,,,694,,,694,694,694,250,250,250,,250,,,,250,250,,,,250,,250,250', -'250,250,250,250,250,,,,,,250,250,250,250,250,250,250,,,250,,,,,,,250', -',,250,250,250,250,250,250,250,250,,250,250,250,,250,250,,250,250,250', -',,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250,,,,,,250,,,,,,,,250,,,', -',250,250,250,250,250,250,,,,250,250,,,,,,,250,,,250,250,250,251,251', -'251,,251,,,,251,251,,,,251,,251,251,251,251,251,251,251,,,,,,251,251', -'251,251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251,251,251,251', -',251,251,251,,251,251,,251,251,251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251', -'251,,,251,,,,,,251,,,,,,,,251,,,,,251,251,251,251,251,251,,,,251,251', -',,,,,,251,,,251,251,251,714,714,714,,714,,,,714,714,,,,714,,714,714', -'714,714,714,714,714,,,,,,714,714,714,714,714,714,714,,,714,,,,,,,714', -',,714,714,714,714,714,714,714,714,,714,714,714,,714,714,,714,714,714', -',,,,,,,,,,,,,,,,,,,714,,,714,,,714,714,,,714,,,,,,714,,,,,,,,714,,,', -',714,714,714,714,714,714,,,,714,714,,,,,,,714,,,714,714,714,252,252', -'252,,252,,,,252,252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252', -'252,252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252', -',252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252', -'252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252,252', -',,,,,,252,,,252,252,252,253,253,253,,253,,,,253,253,,,,253,,253,253', -'253,253,253,253,253,,,,,,253,253,253,253,253,253,253,,,253,,,,,,,253', -',,253,253,253,253,253,253,253,253,,253,253,253,,253,253,,253,253,253', -',,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,', -',253,253,253,253,253,253,,,,253,253,,,,,,,253,,,253,253,253,254,254', -'254,,254,,,,254,254,,,,254,,254,254,254,254,254,254,254,,,,,,254,254', -'254,254,254,254,254,,,254,,,,,,,254,,,254,254,254,254,254,254,254,254', -',254,254,254,,254,254,,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254', -'254,,,254,,,,,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254,254', -',,,,,,254,,,254,254,254,255,255,255,,255,,,,255,255,,,,255,,255,255', -'255,255,255,255,255,,,,,,255,255,255,255,255,255,255,,,255,,,,,,,255', -',,255,255,255,255,255,255,255,255,,255,255,255,,255,255,,255,255,255', -',,,,,,,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,,,,,255,,,,,,,,255,,,', -',255,255,255,255,255,255,,,,255,255,,,,,,,255,,,255,255,255,735,735', -'735,,735,,,,735,735,,,,735,,735,735,735,735,735,735,735,,,,,,735,735', -'735,735,735,735,735,,,735,,,,,,,735,,,735,735,735,735,735,735,735,735', -',735,735,735,,735,735,,735,735,735,,,,,,,,,,,,,,,,,,,,735,,,735,,,735', -'735,,,735,,735,,,,735,,,,,,,,735,,,,59,735,735,735,735,735,735,59,59', -'59,735,735,59,59,59,,59,,735,,,735,735,735,,,59,59,59,,,,,,,,59,59,', -'59,59,59,59,59,,,,,,,,,,,,,,,,,,,,,,,,59,59,59,59,59,59,59,59,59,59', -'59,59,59,59,,,59,59,59,,,59,,,59,,,59,59,,59,,59,,59,,59,59,59,59,59', -'59,59,,59,,59,,,,,,,,,,,,,59,59,59,59,434,59,,59,,,,434,434,434,,,434', -'434,434,942,434,942,942,942,942,942,,,,434,434,434,434,,,942,,,,,434', -'434,,434,434,434,434,434,,,,,,,,,,942,942,,,,,,,,942,942,942,942,,434', -'434,434,434,434,434,434,434,434,434,434,434,434,434,,,434,434,434,,', -'434,,,434,,,434,434,,434,942,434,,434,,434,434,434,434,434,434,434,', -'434,434,434,,,,,,,,,,,,,434,434,434,434,433,434,,434,,,,433,433,433', -',,433,433,433,992,433,992,992,992,992,992,,,,433,433,433,433,,,992,', -',,,433,433,,433,433,433,433,433,,,,,,,,,,992,,,,,,,,,992,992,992,992', -',433,433,433,433,433,433,433,433,433,433,433,433,433,433,,,433,433,433', -',,433,,,433,,,433,433,,433,992,433,,433,,433,433,433,433,433,433,433', -',433,433,433,,,,,,,,,,,,,433,433,433,433,31,433,,433,,,,31,31,31,,,31', -'31,31,708,31,708,708,708,708,708,,,,,31,31,,,,708,,,,,31,31,,31,31,31', -'31,31,,,,,,,,,,708,,,,,,,,,708,708,708,708,,31,31,31,31,31,31,31,31', -'31,31,31,31,31,31,,,31,31,31,,,31,,31,31,,,31,31,,31,708,31,,31,,31', -'31,31,31,31,31,31,,31,,31,,,,,,,,,,,,424,31,31,,31,,31,424,424,424,', -',424,424,424,888,424,888,888,888,888,888,,,,424,424,424,,,,888,,,,,424', -'424,,424,424,424,424,424,,,,,,,,,,888,,,,,,,,,888,888,888,888,,424,424', -'424,424,424,424,424,424,424,424,424,424,424,424,,,424,424,424,,,424', -',424,424,,,424,424,,424,888,424,,424,,424,424,424,424,424,424,424,,424', -'424,424,,,,,,,,,,,,30,424,424,,424,,424,30,30,30,,,30,30,30,885,30,885', -'885,885,885,885,,,,30,30,30,,,,885,,,,,30,30,,30,30,30,30,30,,,,,,,', -',,885,,,,,,,,,885,885,885,885,,30,30,30,30,30,30,30,30,30,30,30,30,30', -'30,,,30,30,30,,,30,,30,30,,,30,30,,30,885,30,,30,,30,30,30,30,30,30', -'30,,30,30,30,,,,,,,,,,,,482,30,30,,30,,30,482,482,482,,,482,482,482', -'755,482,755,755,755,755,755,,,,482,482,,,,,755,,,,,482,482,,482,482', -'482,482,482,,,,,,,,,,755,,,,,,,,,755,755,755,755,,,,,,,,,,,,,482,,,', -',,,482,,,,,482,482,,,,,,,755,,,,1009,1009,,,1009,,,,,,482,482,,1009', -'1009,,1009,1009,1009,1009,1009,1009,1009,,482,1009,1009,,,482,1009,1009', -'1009,1009,,,,,,1009,,,,,,,,1009,1009,,1009,1009,1009,1009,1009,1009', -'1009,1009,1009,1009,1009,,,1009,,,,,,,,,,516,516,,,516,,,,,,1009,,,516', -'516,1009,516,516,516,516,516,516,516,,,516,516,,,,516,516,516,516,,', -',,,516,,,,,,,,516,516,,516,516,516,516,516,516,516,516,516,516,516,', -',516,,,,,,,,,,586,586,,,586,,,,,,516,,,586,586,516,586,586,586,586,586', -'586,586,,,586,586,,,,586,586,586,586,,,,,,586,,,,,,,,586,586,,586,586', -'586,586,586,586,586,586,586,586,586,,,586,,,,,,,,,,959,959,,,959,,,', -',,586,,,959,959,586,959,959,959,959,959,959,959,,,959,959,,,,959,959', -'959,959,,,,,,959,,,,,,,,959,959,,959,959,959,959,959,959,959,959,959', -'959,959,,,959,,,,,,,,,,746,746,,,746,,,,,,959,,,746,746,959,746,746', -'746,746,746,746,746,,,746,746,,,,746,746,746,746,,,,,,746,,,,,,,,746', -'746,,746,746,746,746,746,746,746,746,746,746,746,,,746,,,,,,,,,,1008', -'1008,,,1008,,,,,,746,,,1008,1008,746,1008,1008,1008,1008,1008,1008,1008', -',,1008,1008,,,,1008,1008,1008,1008,,,,,,1008,,,,,,,,1008,1008,,1008', -'1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,,,1008,,,,,,,,,,448', -'448,,,448,,,,,,1008,,,448,448,1008,448,448,448,448,448,448,448,,,448', -'448,,,,448,448,448,448,,,,,,448,,,,,,,,448,448,,448,448,448,448,448', -'448,448,448,448,448,448,,,448,,,,,,,,,,449,449,,,449,,,,,,448,,,449', -'449,448,449,449,449,449,449,449,449,,,449,449,,,,449,449,449,449,,,', -',,449,,,,,,,,449,449,,449,449,449,449,449,449,449,449,449,449,449,,', -'449,,,,,,,,,,527,527,,,527,,,,,,449,,,527,527,449,527,527,527,527,527', -'527,527,,,527,527,,,,527,527,527,527,,,,,,527,,,,,,,,527,527,,527,527', -'527,527,527,527,527,527,527,527,527,,,527,,,,,,,,,,745,745,,,745,,,', -',,527,,,745,745,527,745,745,745,745,745,745,745,,,745,745,,,,745,745', -'745,745,,,,,,745,,,,,,,,745,745,,745,745,745,745,745,745,745,745,745', -'745,745,,,745,,,,,,,,,,515,515,,,515,,,,,,745,,,515,515,745,515,515', -'515,515,515,515,515,,,515,515,,,,515,515,515,515,,,,,,515,,,,,,,,515', -'515,,515,515,515,515,515,515,515,515,515,515,515,,,515,,,,,,,,,,212', -'212,,,212,,,,,,515,,,212,212,515,212,212,212,212,212,212,212,,,212,212', -',,,212,212,212,212,,,,,,212,,,,,,,,212,212,,212,212,212,212,212,212', -'212,212,212,212,212,,,212,,,,,,,,,,211,211,,,211,,,,,,212,,,211,211', -'212,211,211,211,211,211,211,211,,,211,211,,,,211,211,211,211,,,,,,211', -',,,,,,,211,211,,211,211,211,211,211,211,211,211,211,211,211,,,211,,', -',,,,,,,528,528,,,528,,,,,,211,,,528,528,211,528,528,528,528,528,528', -'528,,,528,528,,,,528,528,528,528,,,,,,528,,,,,,,,528,528,,528,528,528', -'528,528,528,528,528,528,528,528,,,528,,,,,,,,,,587,587,,,587,,,,,,528', -',,587,587,528,587,587,587,587,587,587,587,,,587,587,,,,587,587,587,587', -',,,,,587,,,,,,,,587,587,,587,587,587,587,587,587,587,587,587,587,587', -',710,587,710,710,710,710,710,,,,,261,261,,,261,710,,,,,587,,,261,261', -'587,261,261,261,261,261,261,261,,,261,261,710,,,261,261,261,261,,,710', -'710,710,710,,,,,,,,261,261,,261,261,261,261,261,261,261,261,261,261', -'261,,913,261,913,913,913,913,913,,,,710,,,,,,913,,,,,261,,,,599,261', -'599,599,599,599,599,,,,,,,913,,336,599,336,336,336,336,336,913,913,913', -'913,,,,,546,336,546,546,546,546,546,,599,599,,,,,,,546,599,599,599,599', -',,336,336,,,,913,,,,336,336,336,336,,,546,,,,,,,,,546,546,546,546,,', -'599,,,,,,,,,,,,,,,336,,,,,,,,,,,,,,,546' ] - racc_action_check = arr = ::Array.new(25662, nil) +',286,,,286,286,286,286,286,286,286,286,286,286,286,286,,286,286,,286', +'286,286,,,,,,,,,,,,,,,,,,,,286,,,286,,,286,286,,,286,,286,,286,,286', +',,,,,,,286,,,,,286,286,286,286,286,286,,,,286,286,,,,,,,286,,286,286', +'286,286,289,289,289,,289,,,,289,289,,,,289,,289,289,289,289,289,289', +'289,,,,,,289,289,289,289,289,289,289,,,289,,,,,,,289,,,289,289,289,289', +'289,289,289,289,289,289,289,289,,289,289,,289,289,289,,,,,,,,,,,,,,', +',,,,,289,,,289,,,289,289,,,289,,289,,289,,289,,,,,,,,289,,,,,289,289', +'289,289,289,289,,,,289,289,289,,,,,,289,,289,289,289,289,296,296,296', +',296,,,,296,296,,,,296,,296,296,296,296,296,296,296,,,,,,296,296,296', +'296,296,296,296,,,296,,,,,,,296,,,296,296,296,296,296,296,296,296,,296', +'296,296,,296,296,,296,296,296,,,,,,,,,,,,,,,,,,,,296,,,296,,,296,296', +',,296,,,,,,296,,,,,,,,296,,,,,296,296,296,296,296,296,,,,296,296,,,', +',,,296,,,296,296,296,298,298,298,,298,,,,298,298,,,,298,,298,298,298', +'298,298,298,298,,,,,,298,298,298,298,298,298,298,,,298,,,,,,,298,,,298', +'298,298,298,298,298,298,298,,298,298,298,,298,298,,298,298,298,,,,,', +',,,,,,,,,,,,,,298,,,298,,,298,298,,,298,,,,,,298,,,,,,,,298,,,,,298', +'298,298,298,298,298,,,,298,298,,,,,,,298,,,298,298,298,300,300,300,', +'300,,,,300,300,,,,300,,300,300,300,300,300,300,300,,,,,,300,300,300', +'300,300,300,300,,,300,,,,,,,300,,,300,300,300,300,300,300,300,300,,300', +'300,300,,300,300,,300,300,300,,,,,,,,,,,,,,,,,,,,300,,,300,,,300,300', +',,300,,,,,,300,,,,,,,,300,,,,,300,300,300,300,300,300,,,,300,300,,,', +',,,300,,,300,300,300,301,301,301,,301,,,,301,301,,,,301,,301,301,301', +'301,301,301,301,,,,,,301,301,301,301,301,301,301,,,301,,,,,,,301,,,301', +'301,301,301,301,301,301,301,,301,301,301,,301,301,,301,301,301,,,,,', +',,,,,,,,,,,,,,301,,,301,,,301,301,,,301,,,,,,301,,,,,,,,301,,,,,301', +'301,301,301,301,301,,,,301,301,,,,,,,301,,,301,301,301,307,307,307,307', +'307,,,,307,307,,,,307,,307,307,307,307,307,307,307,,,,,,307,307,307', +'307,307,307,307,,,307,,,,,,307,307,,307,307,307,307,307,307,307,307', +'307,,307,307,307,,307,307,,307,307,307,,,,,,,,,,,,,,,,,,,,307,,,307', +',,307,307,,,307,,307,,,,307,,,,,,,,307,,,,,307,307,307,307,307,307,', +',,307,307,,,,,,,307,,,307,307,307,983,983,983,,983,,,,983,983,,,,983', +',983,983,983,983,983,983,983,,,,,,983,983,983,983,983,983,983,,,983', +',,,,,,983,,,983,983,983,983,983,983,983,983,,983,983,983,,983,983,,', +',983,,,,,,,,,,,,,,,,,,,,983,,,983,,,983,983,,,983,,,,,,,,,,,,,,,,,,', +'983,983,983,983,983,983,,,,983,983,,,,,,,983,,,983,983,983,315,315,315', +',315,,,,315,315,,,,315,,315,315,315,315,315,315,315,,,,,,315,315,315', +'315,315,315,315,,,315,,,,,,,315,,,315,315,315,315,315,315,315,315,,315', +'315,315,,315,315,,,,315,,,,,,,,,,,,,,,,,,,,315,,,315,,,315,315,,,315', +',,,,,,,,,,,,,,,,,,315,315,315,315,315,315,,,,315,315,,,,315,,,315,,', +'315,315,315,332,332,332,,332,,,,332,332,,,,332,,332,332,332,332,332', +'332,332,,,,,,332,332,332,332,332,332,332,,,332,,,,,,,332,,,332,332,332', +'332,332,332,332,332,,332,332,332,,332,332,,,,332,,,,,,,,,,,,,,,,,,,', +'332,,,332,,,332,332,,,332,,,,,,,,,,,,,,,,,,,332,332,332,332,332,332', +',,,332,332,,,,,,,332,,,332,332,332,958,958,958,,958,,,,958,958,,,,958', +',958,958,958,958,958,958,958,,,,,,958,958,958,958,958,958,958,,,958', +',,,,,,958,,,958,958,958,958,958,958,958,958,,958,958,958,,958,958,,958', +'958,958,,,,,,,,,,,,,,,,,,,,958,,,958,,,958,958,,,958,,958,,,,958,,,', +',,,,958,,,,,958,958,958,958,958,958,,,,958,958,,,,,,,958,,,958,958,958', +'340,340,340,,340,,,,340,340,,,,340,,340,340,340,340,340,340,340,,,,', +',340,340,340,340,340,340,340,,,340,,,,,,,340,,,340,340,340,340,340,340', +'340,340,,340,340,340,,340,340,,340,340,340,,,,,,,,,,,,,,,,,,,,340,,', +'340,,,340,340,,,340,,,,,,340,,,,,,,,340,,,,,340,340,340,340,340,340', +',,,340,340,,,,,,,340,,,340,340,340,342,342,342,,342,,,,342,342,,,,342', +',342,342,342,342,342,342,342,,,,,,342,342,342,342,342,342,342,,,342', +',,,,,,342,,,342,342,342,342,342,342,342,342,,342,342,342,,342,342,,342', +'342,342,,,,,,,,,,,,,,,,,,,,342,,,342,342,,342,342,,,342,,,,,,342,,,', +',,,,342,,,,,342,342,342,342,342,342,,,,342,342,,,,,,,342,,,342,342,342', +'346,346,346,,346,,,,346,346,,,,346,,346,346,346,346,346,346,346,,,,', +',346,346,346,346,346,346,346,,,346,,,,,,,346,,,346,346,346,346,346,346', +'346,346,346,346,346,346,,346,346,,346,346,346,,,,,,,,,,,,,,,,,,,,346', +',,346,,,346,346,,,346,,346,,,,346,,,,,,,,346,,,,,346,346,346,346,346', +'346,,,,346,346,,,,,,,346,,346,346,346,346,347,347,347,,347,,,,347,347', +',,,347,,347,347,347,347,347,347,347,,,,,,347,347,347,347,347,347,347', +',,347,,,,,,,347,,,347,347,347,347,347,347,347,347,347,347,347,347,,347', +'347,,347,347,347,,,,,,,,,,,,,,,,,,,,347,,,347,,,347,347,,,347,,,,,,347', +',,,,,,,347,,,,,347,347,347,347,347,347,,,,347,347,,,,,,,347,,347,347', +'347,347,354,354,354,,354,,,,354,354,,,,354,,354,354,354,354,354,354', +'354,,,,,,354,354,354,354,354,354,354,,,354,,,,,,,354,,,354,354,354,354', +'354,354,354,354,,354,354,354,,354,354,,354,354,354,,,,,,,,,,,,,,,,,', +',,354,,,354,,,354,354,,,354,,,,,,354,,,,,,,,354,,,,,354,354,354,354', +'354,354,,,,354,354,,,,,,,354,,,354,354,354,368,368,368,,368,,,,368,368', +',,,368,,368,368,368,368,368,368,368,,,,,,368,368,368,368,368,368,368', +',,368,,,,,,,368,,,368,368,368,368,368,368,368,368,,368,368,368,,368', +'368,,,,368,,,,,,,,,,,,,,,,,,,,368,,,368,,,368,368,,,368,,,,,,,,,,,,', +',,,,,,368,368,368,368,368,368,,,,368,368,,,,,,,368,,,368,368,368,370', +'370,370,,370,,,,370,370,,,,370,,370,370,370,370,370,370,370,,,,,,370', +'370,370,370,370,370,370,,,370,,,,,,,370,,,370,370,370,370,370,370,370', +'370,,370,370,370,,370,370,,,,370,,,,,,,,,,,,,,,,,,,,370,,,370,,,370', +'370,,,370,,,,,,,,,,,,,,,,,,,370,370,370,370,370,370,,,,370,370,,,,,', +',370,,,370,370,370,932,932,932,,932,,,,932,932,,,,932,,932,932,932,932', +'932,932,932,,,,,,932,932,932,932,932,932,932,,,932,,,,,,,932,,,932,932', +'932,932,932,932,932,932,,932,932,932,,932,932,,,,932,,,,,,,,,,,,,,,', +',,,,932,,,932,,,932,932,,,932,,,,,,,,,,,,,,,,,,,932,932,932,932,932', +'932,,,,932,932,,,,,,,932,,,932,932,932,923,923,923,,923,,,,923,923,', +',,923,,923,923,923,923,923,923,923,,,,,,923,923,923,923,923,923,923', +',,923,,,,,,,923,,,923,923,923,923,923,923,923,923,,923,923,923,,923', +'923,,,,923,,,,,,,,,,,,,,,,,,,,923,,,923,,,923,923,,,923,,,,,,,,,,,,', +',,,,,,923,923,923,923,923,923,,,,923,923,,,,,,,923,,,923,923,923,428', +'428,428,,428,,,,428,428,,,,428,,428,428,428,428,428,428,428,,,,,,428', +'428,428,428,428,428,428,,,428,,,,,,,428,,,428,428,428,428,428,428,428', +'428,,428,428,428,,428,428,,428,428,428,,,,,,,,,,,,,,,,,,,,428,,,428', +',,428,428,,,428,,,,,,428,,,,,,,,428,,,,,428,428,428,428,428,428,,,,428', +'428,,,,,,,428,,,428,428,428,911,911,911,,911,,,,911,911,,,,911,,911', +'911,911,911,911,911,911,,,,,,911,911,911,911,911,911,911,,,911,,,,,', +',911,,,911,911,911,911,911,911,911,911,,911,911,911,,911,911,,911,911', +'911,,,,,,,,,,,,,,,,,,,,911,,,911,,,911,911,,,911,,,,,,911,,,,,,,,911', +',,,,911,911,911,911,911,911,,,,911,911,,,,,,,911,,,911,911,911,910,910', +'910,,910,,,,910,910,,,,910,,910,910,910,910,910,910,910,,,,,,910,910', +'910,910,910,910,910,,,910,,,,,,,910,,,910,910,910,910,910,910,910,910', +'910,910,910,910,,910,910,,910,910,910,,,,,,,,,,,,,,,,,,,,910,,,910,', +',910,910,,,910,,,,910,,910,,,,,,,,910,,,,,910,910,910,910,910,910,,', +',910,910,,,,,,,910,,910,910,910,910,890,890,890,,890,,,,890,890,,,,890', +',890,890,890,890,890,890,890,,,,,,890,890,890,890,890,890,890,,,890', +',,,,,,890,,,890,890,890,890,890,890,890,890,,890,890,890,,890,890,,890', +'890,890,,,,,,,,,,,,,,,,,,,,890,,,890,,,890,890,,,890,,,,,,890,,,,,,', +',890,,,,,890,890,890,890,890,890,,,,890,890,,,,,,,890,,,890,890,890', +'471,471,471,,471,,,,471,471,,,,471,,471,471,471,471,471,471,471,,,,', +',471,471,471,471,471,471,471,,,471,,,,,,,471,,,471,471,471,471,471,471', +'471,471,471,471,471,471,,471,471,,471,471,471,,,,,,,,,,,,,,,,,,,,471', +',,471,,,471,471,,,471,,471,,471,,471,,,,,,,,471,,,,,471,471,471,471', +'471,471,,,,471,471,,,,,,,471,,471,471,471,471,473,473,473,,473,,,,473', +'473,,,,473,,473,473,473,473,473,473,473,,,,,,473,473,473,473,473,473', +'473,,,473,,,,,,,473,,,473,473,473,473,473,473,473,473,,473,473,473,', +'473,473,,473,473,473,,,,,,,,,,,,,,,,,,,,473,,,473,,,473,473,,,473,,', +',,,473,,,,,,,,473,,,,,473,473,473,473,473,473,,,,473,473,,,,,,,473,', +',473,473,473,474,474,474,,474,,,,474,474,,,,474,,474,474,474,474,474', +'474,474,,,,,,474,474,474,474,474,474,474,,,474,,,,,,,474,,,474,474,474', +'474,474,474,474,474,,474,474,474,,474,474,,474,474,474,,,,,,,,,,,,,', +',,,,,,474,,,474,,,474,474,,,474,,,,,,474,,,,,,,,474,,,,,474,474,474', +'474,474,474,,,,474,474,,,,,,,474,,,474,474,474,475,475,475,,475,,,,475', +'475,,,,475,,475,475,475,475,475,475,475,,,,,,475,475,475,475,475,475', +'475,,,475,,,,,,,475,,,475,475,475,475,475,475,475,475,,475,475,475,', +'475,475,,475,475,475,,,,,,,,,,,,,,,,,,,,475,,,475,,,475,475,,,475,,', +',,,475,,,,,,,,475,,,,,475,475,475,475,475,475,,,,475,475,,,,,,,475,', +',475,475,475,876,876,876,,876,,,,876,876,,,,876,,876,876,876,876,876', +'876,876,,,,,,876,876,876,876,876,876,876,,,876,,,,,,,876,,,876,876,876', +'876,876,876,876,876,,876,876,876,,876,876,,876,876,876,,,,,,,,,,,,,', +',,,,,,876,,,876,,,876,876,,,876,,,,,,876,,,,,,,,876,,,,,876,876,876', +'876,876,876,,,,876,876,,,,,,,876,,,876,876,876,514,514,514,,514,,,,514', +'514,,,,514,,514,514,514,514,514,514,514,,,,,,514,514,514,514,514,514', +'514,,,514,,,,,,,514,,,514,514,514,514,514,514,514,514,514,514,514,514', +',514,514,,514,514,514,,,,,,,,,,,,,,,,,,,,514,,,514,,,514,514,,,514,', +'514,,514,,514,,,,,,,,514,,,,,514,514,514,514,514,514,,,,514,514,,,,', +',,514,,514,514,514,514,517,517,517,,517,,,,517,517,,,,517,,517,517,517', +'517,517,517,517,,,,,,517,517,517,517,517,517,517,,,517,,,,,,,517,,,517', +'517,517,517,517,517,517,517,517,517,517,517,,517,517,,517,517,517,,', +',,,,,,,,,,,,,,,,,517,,,517,,,517,517,,,517,,,,517,,517,,,,,,,,517,,', +',,517,517,517,517,517,517,,,,517,517,,,,,,,517,,517,517,517,517,519', +'519,519,,519,,,,519,519,,,,519,,519,519,519,519,519,519,519,,,,,,519', +'519,519,519,519,519,519,,,519,,,,,,,519,,,519,519,519,519,519,519,519', +'519,,519,519,519,,519,519,,519,519,519,,,,,,,,,,,,,,,,,,,,519,,,519', +',,519,519,,,519,,,,,,519,,,,,,,,519,,,,,519,519,519,519,519,519,,,,519', +'519,,,,,,,519,,,519,519,519,524,524,524,524,524,,,,524,524,,,,524,,524', +'524,524,524,524,524,524,,,,,,524,524,524,524,524,524,524,,,524,,,,,', +'524,524,524,524,524,524,524,524,524,524,524,524,,524,524,524,,524,524', +',524,524,524,,,,,,,,,,,,,,,,,,,,524,,,524,,,524,524,,,524,,524,,,,524', +',,,,,,,524,,,,,524,524,524,524,524,524,,,,524,524,,,,,,524,524,,,524', +'524,524,531,531,531,,531,,,,531,531,,,,531,,531,531,531,531,531,531', +'531,,,,,,531,531,531,531,531,531,531,,,531,,,,,,,531,,,531,531,531,531', +'531,531,531,531,,531,531,531,,531,531,,,,531,,,,,,,,,,,,,,,,,,,,531', +',,531,,,531,531,,,531,,,,,,,,,,,,,,,,,,,531,531,531,531,531,531,,,,531', +'531,,,,,,,531,,,531,531,531,533,533,533,,533,,,,533,533,,,,533,,533', +'533,533,533,533,533,533,,,,,,533,533,533,533,533,533,533,,,533,,,,,', +',533,,,533,533,533,533,533,533,533,533,533,533,533,533,,533,533,,533', +'533,533,,,,,,,,,,,,,,,,,,,,533,,,533,,,533,533,,,533,,533,,533,,533', +',,,,,,,533,,,,,533,533,533,533,533,533,,,,533,533,,,,,,,533,,533,533', +'533,533,540,540,540,,540,,,,540,540,,,,540,,540,540,540,540,540,540', +'540,,,,,,540,540,540,540,540,540,540,,,540,,,,,,,540,,,540,540,540,540', +'540,540,540,540,,540,540,540,,540,540,,,,540,,,,,,,,,,,,,,,,,,,,540', +',,540,,,540,540,,,540,,,,,,,,,,,,,,,,,,,540,540,540,540,540,540,,,,540', +'540,,,,,,,540,,,540,540,540,544,544,544,,544,,,,544,544,,,,544,,544', +'544,544,544,544,544,544,,,,,,544,544,544,544,544,544,544,,,544,,,,,', +',544,,,544,544,544,544,544,544,544,544,,544,544,544,,544,544,,544,544', +'544,,,,,,,,,,,,,,,,,,,,544,,,544,,,544,544,,,544,,,,,,544,,,,,,,,544', +',,,,544,544,544,544,544,544,,,,544,544,,,,,,,544,,,544,544,544,545,545', +'545,,545,,,,545,545,,,,545,,545,545,545,545,545,545,545,,,,,,545,545', +'545,545,545,545,545,,,545,,,,,,,545,,,545,545,545,545,545,545,545,545', +',545,545,545,,545,545,,545,545,545,,,,,,,,,,,,,,,,,,,,545,,,545,,,545', +'545,,,545,,,,,,545,,,,,,,,545,,,,,545,545,545,545,545,545,,,,545,545', +',,,,,,545,,,545,545,545,550,550,550,,550,,,,550,550,,,,550,,550,550', +'550,550,550,550,550,,,,,,550,550,550,550,550,550,550,,,550,,,,,,,550', +',,550,550,550,550,550,550,550,550,,550,550,550,,550,550,,550,550,550', +',,,,,,,,,,,,,,,,,,,550,,,550,,,550,550,,,550,,,,,,550,,,,,,,,550,,,', +',550,550,550,550,550,550,,,,550,550,,,,,,,550,,,550,550,550,821,821', +'821,,821,,,,821,821,,,,821,,821,821,821,821,821,821,821,,,,,,821,821', +'821,821,821,821,821,,,821,,,,,,,821,,,821,821,821,821,821,821,821,821', +',821,821,821,,821,821,,821,821,821,,,,,,,,,,,,,,,,,,,,821,,,821,,,821', +'821,,,821,,,,,,821,,,,,,,,821,,,,,821,821,821,821,821,821,,,,821,821', +',,,,,,821,,,821,821,821,819,819,819,,819,,,,819,819,,,,819,,819,819', +'819,819,819,819,819,,,,,,819,819,819,819,819,819,819,,,819,,,,,,,819', +',,819,819,819,819,819,819,819,819,,819,819,819,,819,819,,819,819,819', +',,,,,,,,,,,,,,,,,,,819,,,819,,,819,819,,,819,,,,,,819,,,,,,,,819,,,', +',819,819,819,819,819,819,,,,819,819,,,,,,,819,,,819,819,819,818,818', +'818,,818,,,,818,818,,,,818,,818,818,818,818,818,818,818,,,,,,818,818', +'818,818,818,818,818,,,818,,,,,,,818,,,818,818,818,818,818,818,818,818', +',818,818,818,,818,818,,818,818,818,,,,,,,,,,,,,,,,,,,,818,,,818,,,818', +'818,,,818,,,,,,818,,,,,,,,818,,,,,818,818,818,818,818,818,,,,818,818', +',,,,,,818,,,818,818,818,817,817,817,,817,,,,817,817,,,,817,,817,817', +'817,817,817,817,817,,,,,,817,817,817,817,817,817,817,,,817,,,,,,,817', +',,817,817,817,817,817,817,817,817,,817,817,817,,817,817,,817,817,817', +',,,,,,,,,,,,,,,,,,,817,,,817,,,817,817,,,817,,,,,,817,,,,,,,,817,,,', +',817,817,817,817,817,817,,,,817,817,,,,,,,817,,,817,817,817,816,816', +'816,,816,,,,816,816,,,,816,,816,816,816,816,816,816,816,,,,,,816,816', +'816,816,816,816,816,,,816,,,,,,,816,,,816,816,816,816,816,816,816,816', +',816,816,816,,816,816,,816,816,816,,,,,,,,,,,,,,,,,,,,816,,,816,,,816', +'816,,,816,,,,,,816,,,,,,,,816,,,,,816,816,816,816,816,816,,,,816,816', +',,,,,,816,,,816,816,816,803,803,803,,803,,,,803,803,,,,803,,803,803', +'803,803,803,803,803,,,,,,803,803,803,803,803,803,803,,,803,,,,,,,803', +',,803,803,803,803,803,803,803,803,,803,803,803,,803,803,,803,803,803', +',,,,,,,,,,,,,,,,,,,803,,,803,,,803,803,,,803,,,,,,803,,,,,,,,803,,,', +',803,803,803,803,803,803,,,,803,803,,,,,,,803,,,803,803,803,582,582', +'582,,582,,,,582,582,,,,582,,582,582,582,582,582,582,582,,,,,,582,582', +'582,582,582,582,582,,,582,,,,,,,582,,,582,582,582,582,582,582,582,582', +',582,582,582,,582,582,,582,582,582,,,,,,,,,,,,,,,,,,,,582,,,582,,,582', +'582,,,582,,,,,,582,,,,,,,,582,,,,,582,582,582,582,582,582,,,,582,582', +',,,,,,582,,,582,582,582,796,796,796,,796,,,,796,796,,,,796,,796,796', +'796,796,796,796,796,,,,,,796,796,796,796,796,796,796,,,796,,,,,,,796', +',,796,796,796,796,796,796,796,796,,796,796,796,,796,796,,796,796,796', +',,,,,,,,,,,,,,,,,,,796,,,796,,,796,796,,,796,,,,,,796,,,,,,,,796,,,', +',796,796,796,796,796,796,,,,796,796,,,,,,,796,,,796,796,796,605,605', +'605,,605,,,,605,605,,,,605,,605,605,605,605,605,605,605,,,,,,605,605', +'605,605,605,605,605,,,605,,,,,,,605,,,605,605,605,605,605,605,605,605', +'605,605,605,605,,605,605,,605,605,605,,,,,,,,,,,,,,,,,,,,605,,,605,', +',605,605,,,605,,605,,605,,605,,,,,,,,605,,,,,605,605,605,605,605,605', +',,,605,605,,,,,,,605,,605,605,605,605,617,617,617,,617,,,,617,617,,', +',617,,617,617,617,617,617,617,617,,,,,,617,617,617,617,617,617,617,', +',617,,,,,,,617,,,617,617,617,617,617,617,617,617,,617,617,617,,617,617', +',617,617,617,,,,,,,,,,,,,,,,,,,,617,,,617,,,617,617,,,617,,,,,,617,', +',,,,,,617,,,,,617,617,617,617,617,617,,,,617,617,,,,,,,617,,,617,617', +'617,623,623,623,,623,,,,623,623,,,,623,,623,623,623,623,623,623,623', +',,,,,623,623,623,623,623,623,623,,,623,,,,,,,623,,,623,623,623,623,623', +'623,623,623,,623,623,623,,623,623,,623,623,623,,,,,,,,,,,,,,,,,,,,623', +',,623,,,623,623,,,623,,,,,,623,,,,,,,,623,,,,,623,623,623,623,623,623', +',,,623,623,,,,,,,623,,,623,623,623,774,774,774,,774,,,,774,774,,,,774', +',774,774,774,774,774,774,774,,,,,,774,774,774,774,774,774,774,,,774', +',,,,,,774,,,774,774,774,774,774,774,774,774,774,774,774,774,,774,774', +',774,774,774,,,,,,,,,,,,,,,,,,,,774,,,774,,,774,774,,,774,,774,,774', +',774,,,,,,,,774,,,,,774,774,774,774,774,774,,,,774,774,,,,,,,774,,774', +'774,774,774,652,652,652,,652,,,,652,652,,,,652,,652,652,652,652,652', +'652,652,,,,,,652,652,652,652,652,652,652,,,652,,,,,,,652,,,652,652,652', +'652,652,652,652,652,,652,652,652,,652,652,,652,652,652,,,,,,,,,,,,,', +',,,,,,652,,,652,,,652,652,,,652,,652,,,,652,,,,,,,,652,,,,,652,652,652', +'652,652,652,,,,652,652,,,,,,,652,,,652,652,652,653,653,653,,653,,,,653', +'653,,,,653,,653,653,653,653,653,653,653,,,,,,653,653,653,653,653,653', +'653,,,653,,,,,,,653,,,653,653,653,653,653,653,653,653,,653,653,653,', +'653,653,,653,653,653,,,,,,,,,,,,,,,,,,,,653,,,653,,,653,653,,,653,,', +',,,653,,,,,,,,653,,,,,653,653,653,653,653,653,,,,653,653,,,,,,,653,', +',653,653,653,654,654,654,,654,,,,654,654,,,,654,,654,654,654,654,654', +'654,654,,,,,,654,654,654,654,654,654,654,,,654,,,,,,,654,,,654,654,654', +'654,654,654,654,654,654,654,654,654,,654,654,,654,654,654,,,,,,,,,,', +',,,,,,,,,654,,,654,,,654,654,,,654,,654,,654,,654,,,,,,,,654,,,,,654', +'654,654,654,654,654,,,,654,654,,,,,,,654,,654,654,654,654,657,657,657', +',657,,,,657,657,,,,657,,657,657,657,657,657,657,657,,,,,,657,657,657', +'657,657,657,657,,,657,,,,,,,657,,,657,657,657,657,657,657,657,657,,657', +'657,657,,657,657,,657,657,657,,,,,,,,,,,,,,,,,,,,657,,,657,,,657,657', +',,657,,,,,,657,,,,,,,,657,,,,,657,657,657,657,657,657,,,,657,657,,,', +',,,657,,,657,657,657,660,660,660,,660,,,,660,660,,,,660,,660,660,660', +'660,660,660,660,,,,,,660,660,660,660,660,660,660,,,660,,,,,,,660,,,660', +'660,660,660,660,660,660,660,660,660,660,660,,660,660,,660,660,660,,', +',,,,,,,,,,,,,,,,,660,,,660,,,660,660,,,660,,660,,660,,660,,,,,,,,660', +',,,,660,660,660,660,660,660,,,,660,660,,,,,,,660,,660,660,660,660,661', +'661,661,,661,,,,661,661,,,,661,,661,661,661,661,661,661,661,,,,,,661', +'661,661,661,661,661,661,,,661,,,,,,,661,,,661,661,661,661,661,661,661', +'661,661,661,661,661,,661,661,,661,661,661,,,,,,,,,,,,,,,,,,,,661,,,661', +',,661,661,,,661,,,,661,,661,,,,,,,,661,,,,,661,661,661,661,661,661,', +',,661,661,,,,,,,661,,661,661,661,661,662,662,662,,662,,,,662,662,,,', +'662,,662,662,662,662,662,662,662,,,,,,662,662,662,662,662,662,662,,', +'662,,,,,,,662,,,662,662,662,662,662,662,662,662,,662,662,662,,662,662', +',662,662,662,,,,,,,,,,,,,,,,,,,,662,,,662,,,662,662,,,662,,,,,,662,', +',,,,,,662,,,,,662,662,662,662,662,662,,,,662,662,,,,,,,662,,,662,662', +'662,663,663,663,,663,,,,663,663,,,,663,,663,663,663,663,663,663,663', +',,,,,663,663,663,663,663,663,663,,,663,,,,,,,663,,,663,663,663,663,663', +'663,663,663,,663,663,663,,663,663,,663,663,663,,,,,,,,,,,,,,,,,,,,663', +',,663,,,663,663,,,663,,,,,,663,,,,,,,,663,,,,,663,663,663,663,663,663', +',,,663,663,,,,,,,663,,,663,663,663,668,668,668,,668,,,,668,668,,,,668', +',668,668,668,668,668,668,668,,,,,,668,668,668,668,668,668,668,,,668', +',,,,,,668,,,668,668,668,668,668,668,668,668,,668,668,668,,668,668,,668', +'668,668,,,,,,,,,,,,,,,,,,,,668,,,668,,,668,668,,,668,,,,,,668,,,,,,', +',668,,,,,668,668,668,668,668,668,,,,668,668,,,,,,,668,,,668,668,668', +'669,669,669,,669,,,,669,669,,,,669,,669,669,669,669,669,669,669,,,,', +',669,669,669,669,669,669,669,,,669,,,,,,,669,,,669,669,669,669,669,669', +'669,669,,669,669,669,,669,669,,669,669,669,,,,,,,,,,,,,,,,,,,,669,,', +'669,,,669,669,,,669,,,,,,669,,,,,,,,669,,,,,669,669,669,669,669,669', +',,,669,669,,,,,,,669,,,669,669,669,762,762,762,,762,,,,762,762,,,,762', +',762,762,762,762,762,762,762,,,,,,762,762,762,762,762,762,762,,,762', +',,,,,,762,,,762,762,762,762,762,762,762,762,,762,762,762,,762,762,,762', +'762,762,,,,,,,,,,,,,,,,,,,,762,,,762,,,762,762,,,762,,762,,,,762,,,', +',,,,762,,,,,762,762,762,762,762,762,,,,762,762,,,,,,,762,,,762,762,762', +'740,740,740,,740,,,,740,740,,,,740,,740,740,740,740,740,740,740,,,,', +',740,740,740,740,740,740,740,,,740,,,,,,,740,,,740,740,740,740,740,740', +'740,740,,740,740,740,,740,740,,740,740,740,,,,,,,,,,,,,,,,,,,,740,,', +'740,,,740,740,,,740,,,,,,740,,,,,,,,740,,,,,740,740,740,740,740,740', +',,,740,740,,,,,,,740,,,740,740,740,693,693,693,,693,,,,693,693,,,,693', +',693,693,693,693,693,693,693,,,,,,693,693,693,693,693,693,693,,,693', +',,,,,,693,,,693,693,693,693,693,693,693,693,,693,693,693,,693,693,,693', +'693,693,,,,,,,,,,,,,,,,,,,,693,,,693,,,693,693,,,693,,,,,,693,,,,,,', +',693,,,,,693,693,693,693,693,693,,,,693,693,,,,,,,693,,,693,693,693', +'698,698,698,,698,,,,698,698,,,,698,,698,698,698,698,698,698,698,,,,', +',698,698,698,698,698,698,698,,,698,,,,,,,698,,,698,698,698,698,698,698', +'698,698,,698,698,698,,698,698,,,,698,,,,,,,,,,,,,,,,,,,,698,,,698,,', +'698,698,,,698,,,,,,,,,,,,,,,,,,,698,698,698,698,698,698,,,,698,698,', +',,,,,698,,,698,698,698,709,709,709,,709,,,,709,709,,,,709,,709,709,709', +'709,709,709,709,,,,,,709,709,709,709,709,709,709,,,709,,,,,,,709,,,709', +'709,709,709,709,709,709,709,,709,709,709,,709,709,,,,709,,,,,,,,,,,', +',,,,,,,,709,,,709,,,709,709,,,709,,,,,,,,,,,,,,,,,,,709,709,709,709', +'709,709,,,,709,709,,,,,,,709,,,709,709,709,710,710,710,,710,,,,710,710', +',,,710,,710,710,710,710,710,710,710,,,,,,710,710,710,710,710,710,710', +',,710,,,,,,,710,,,710,710,710,710,710,710,710,710,,710,710,710,,710', +'710,,710,710,710,,,,,,,,,,,,,,,,,,,,710,,,710,,,710,710,,,710,,,,,,710', +',,,,,,,710,,,,,710,710,710,710,710,710,,,,710,710,,,,,,,710,,,710,710', +'710,724,724,724,,724,,,,724,724,,,,724,,724,724,724,724,724,724,724', +',,,,,724,724,724,724,724,724,724,,,724,,,,,,,724,,,724,724,724,724,724', +'724,724,724,724,724,724,724,,724,724,,724,724,724,,,,,,,,,,,,,,,,,,', +',724,,,724,,,724,724,,,724,,,,,,724,,,,,,,,724,,,,,724,724,724,724,724', +'724,,,,724,724,,,,,,,724,,724,724,724,724,721,721,721,,721,,,,721,721', +',,,721,,721,721,721,721,721,721,721,,,,,,721,721,721,721,721,721,721', +',,721,,,,,,,721,,,721,721,721,721,721,721,721,721,721,721,721,721,,721', +'721,,721,721,721,,,,,,,,,,,,,,,,,,,,721,,,721,,,721,721,,,721,,721,', +',,721,,,,,,,,721,,,,,721,721,721,721,721,721,,,,721,721,227,227,,,227', +',721,,721,721,721,721,,227,227,,227,227,227,227,227,227,227,,,227,227', +',,,227,227,227,227,,,,,,227,,,,,,,,227,227,,227,227,227,227,227,227', +'227,227,227,227,227,,,227,,,,,,,,,,469,469,,,469,,,,,,227,,,469,469', +'227,469,469,469,469,469,469,469,,,469,469,,,,469,469,469,469,,,,,,469', +',,,,,,,469,469,,469,469,469,469,469,469,469,469,469,469,469,,,469,,', +',,,,,,,773,773,,,773,,,,,,469,,,773,773,469,773,773,773,773,773,773', +'773,,,773,773,,,,773,773,773,773,,,,,,773,,,,,,,,773,773,,773,773,773', +'773,773,773,773,773,773,773,773,,,773,,,,,,,,,,1028,1028,,,1028,,,,', +',773,,,1028,1028,773,1028,1028,1028,1028,1028,1028,1028,,,1028,1028', +',,,1028,1028,1028,1028,,,,,,1028,,,,,,,,1028,1028,,1028,1028,1028,1028', +'1028,1028,1028,1028,1028,1028,1028,,,1028,,,,,,,,,,470,470,,,470,,,', +',,1028,,,470,470,1028,470,470,470,470,470,470,470,,,470,470,,,,470,470', +'470,470,,,,,,470,,,,,,,,470,470,,470,470,470,470,470,470,470,470,470', +'470,470,,,470,,,,,,,,,,226,226,,,226,,,,,,470,,,226,226,470,226,226', +'226,226,226,226,226,,,226,226,,,,226,226,226,226,,,,,,226,,,,,,,,226', +'226,,226,226,226,226,226,226,226,226,226,226,226,,,226,,,,,,,,,,1033', +'1033,,,1033,,,,,,226,,,1033,1033,226,1033,1033,1033,1033,1033,1033,1033', +',,1033,1033,,,,1033,1033,1033,1033,,,,,,1033,,,,,,,,1033,1033,,1033', +'1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,,,1033,,,,,,,,,,534', +'534,,,534,,,,,,1033,,,534,534,1033,534,534,534,534,534,534,534,,,534', +'534,,,,534,534,534,534,,,,,,534,,,,,,,,534,534,,534,534,534,534,534', +'534,534,534,534,534,534,,,534,,,,,,,,,,655,655,,,655,,,,,,534,,,655', +'655,534,655,655,655,655,655,655,655,,,655,655,,,,655,655,655,655,,,', +',,655,,,,,,,,655,655,,655,655,655,655,655,655,655,655,655,655,655,,', +'655,,,,,,,,,,547,547,,,547,,,,,,655,,,547,547,655,547,547,547,547,547', +'547,547,,,547,547,,,,547,547,547,547,,,,,,547,,,,,,,,547,547,,547,547', +'547,547,547,547,547,547,547,547,547,,,547,,,,,,,,,,546,546,,,546,,,', +',,547,,,546,546,547,546,546,546,546,546,546,546,,,546,546,,,,546,546', +'546,546,,,,,,546,,,,,,,,546,546,,546,546,546,546,546,546,546,546,546', +'546,546,,,546,,,,,,,,,,607,607,,,607,,,,,,546,,,607,607,546,607,607', +'607,607,607,607,607,,,607,607,,,,607,607,607,607,,,,,,607,,,,,,,,607', +'607,,607,607,607,607,607,607,607,607,607,607,607,,,607,,,,,,,,,,1034', +'1034,,,1034,,,,,,607,,,1034,1034,607,1034,1034,1034,1034,1034,1034,1034', +',,1034,1034,,,,1034,1034,1034,1034,,,,,,1034,,,,,,,,1034,1034,,1034', +'1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,,,1034,,,,,,,,,,772', +'772,,,772,,,,,,1034,,,772,772,1034,772,772,772,772,772,772,772,,,772', +'772,,,,772,772,772,772,,,,,,772,,,,,,,,772,772,,772,772,772,772,772', +'772,772,772,772,772,772,,,772,,,,,,,,,,535,535,,,535,,,,,,772,,,535', +'535,772,535,535,535,535,535,535,535,,,535,535,,,,535,535,535,535,,,', +',,535,,,,,,,,535,535,,535,535,535,535,535,535,535,535,535,535,535,,', +'535,,,,,,,,,,656,656,,,656,,,,,,535,,,656,656,535,656,656,656,656,656', +'656,656,,,656,656,,,,656,656,656,656,,,,,,656,,,,,,,,656,656,,656,656', +'656,656,656,656,656,656,656,656,656,,736,656,736,736,736,736,736,,,', +',275,275,,,275,736,,,,,656,,,275,275,656,275,275,275,275,275,275,275', +',,275,275,736,,,275,275,275,275,,,736,736,736,736,,,,,,,,275,275,,275', +'275,275,275,275,275,275,275,275,275,275,,,275,,,,,,,,,736,606,606,,', +'606,,,,,,275,,,606,606,275,606,606,606,606,606,606,606,,,606,606,,,', +'606,606,606,606,,,,,,606,,,,,,,,606,606,,606,606,606,606,606,606,606', +'606,606,606,606,,734,606,734,734,734,734,734,824,,824,824,824,824,824', +',,734,,,,,606,,824,,564,606,564,564,564,564,564,,,,,,,734,,,564,,,,824', +',734,734,734,734,,,,824,824,824,824,,,,,782,564,782,782,782,782,782', +',,,564,564,564,564,,,782,,,,824,734,,,,,,781,824,781,781,781,781,781', +',,,,782,,,,,781,,,564,782,782,782,782,,,,,,,,,,,,,,,781,,,,,,,,,781', +'781,781,781,,,,,,782,,,,,,,,,,,,,,,,,,,,,,,,,,,781' ] + racc_action_check = arr = ::Array.new(25472, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -1798,19 +1799,20 @@ end racc_action_pointer = [ - nil, 1394, 2691, 45, nil, 80, nil, nil, 12641, 917, - nil, 1607, 1193, -48, nil, -10, 73, 1174, 420, 39, - 693, nil, 88, 14953, 3513, 198, nil, 270, nil, 2, - 24139, 23889, 7881, 8017, 8425, nil, 5568, 8969, 9105, nil, - 106, 430, 432, 191, 504, 9921, 10193, 10601, 135, 459, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 23499, - nil, -73, 11553, nil, 34, nil, 11825, 11961, nil, nil, - 12369, 12505, 206, nil, 1469, nil, nil, nil, nil, nil, - 64, nil, nil, nil, nil, nil, nil, 163, 175, 221, - 227, 1331, nil, nil, nil, 255, nil, nil, 385, nil, + nil, 630, 6186, 738, nil, 201, nil, nil, 7142, 757, + nil, 2221, 2359, 1186, nil, 1134, 1131, 778, 1184, 646, + 96, nil, -73, 7278, 3720, 1233, nil, 510, nil, 168, + 1420, 1548, 7414, 7550, 7686, nil, 6323, 7822, 7958, nil, + 1130, 187, 195, 1203, 759, 8094, 8230, 379, 8366, 1113, + 480, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 1676, nil, 8502, nil, nil, -10, nil, 8638, 8774, nil, + nil, 8910, 9046, 1150, nil, 2773, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 13457, nil, nil, nil, nil, 13593, 13729, 13865, 14001, - 14137, 265, nil, 262, nil, nil, nil, nil, nil, nil, + nil, nil, -89, nil, nil, nil, nil, nil, nil, 1097, + 1093, 1092, 1087, 2083, nil, nil, nil, 405, nil, nil, + 675, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 9182, nil, nil, nil, nil, 9318, 9454, + 9590, 9726, 9862, 1104, nil, 131, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, @@ -1818,290 +1820,312 @@ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 276, nil, 3787, 15361, 15633, - 16313, 25191, 25118, nil, 16721, 16857, 16993, 17129, 17265, 17401, - nil, nil, 1228, 134, 170, 362, 173, 289, 344, nil, - 18081, 4061, 347, 18217, 18625, 19305, 19713, 20121, 20257, 20393, - 20529, 20665, 21073, 21209, 21345, 21481, 21617, 21889, 22025, 22161, - 22433, 22569, 22841, 22977, 23113, 23249, 5841, 6249, 6657, nil, - nil, 25410, nil, nil, 346, 7473, nil, 361, nil, nil, - nil, 7609, nil, nil, 7745, nil, 3650, nil, 348, 352, - nil, 8289, 432, 8561, nil, 400, 8697, nil, nil, 265, - nil, 779, 8833, 405, 2280, 449, 505, 472, 9241, 3102, - 1055, 1056, 648, 556, 611, nil, 535, 506, -19, nil, - nil, nil, 553, 630, 529, 10329, nil, 260, 597, 608, - -59, nil, 618, nil, 10873, 4198, nil, 11009, 602, nil, - 261, 161, 602, 11145, nil, nil, 25512, 666, 19, -9, - 11281, 11417, 450, 690, 590, 27, 26, 956, 677, 30, - 712, nil, nil, 12097, nil, 12233, 532, 425, 338, 419, - 484, 519, 223, 424, 463, nil, 465, nil, nil, nil, - nil, nil, 281, nil, 285, nil, 155, nil, 617, 313, - nil, 627, 378, nil, 634, 117, nil, 638, 125, nil, - -26, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 3650, 779, nil, nil, nil, nil, 652, - nil, 676, nil, 12777, 677, nil, 1869, 681, nil, nil, - 703, 704, 130, 434, 24014, nil, nil, nil, 515, 0, - 745, nil, nil, 23759, 23629, nil, 2828, nil, 701, nil, - nil, 1732, nil, nil, nil, nil, -26, nil, 24753, 24826, - 12913, -75, 13049, 13185, 13321, 4335, 5568, 504, 343, 778, - 790, 791, 792, 671, 908, 770, 5431, 5294, 5157, 5020, - 4472, 4198, 6113, 4061, 5705, 4609, -43, 595, 4746, 4883, - 2143, 198, 24264, nil, nil, nil, nil, nil, nil, 191, - -43, 739, 745, nil, nil, 14273, nil, nil, 14409, nil, - 14545, nil, 14681, nil, nil, 14817, 631, 746, 750, nil, - nil, 763, 15089, 771, 15225, 25045, 24388, 1195, 815, nil, - nil, 15497, 785, nil, 15769, 15905, 16041, 24899, 25264, 3787, - 16177, 908, 907, 727, nil, nil, 16449, nil, nil, 16585, - nil, 804, nil, 501, 855, 74, 25527, nil, 816, 841, - nil, 842, 844, 845, nil, nil, nil, nil, nil, nil, - 843, nil, 580, nil, 17537, nil, nil, nil, 944, nil, - nil, nil, 945, nil, nil, 946, 4746, 991, nil, 4472, - 55, 32, 994, 1008, nil, 17673, 24461, 25337, 28, nil, - 224, 354, -7, nil, 551, nil, 16, 17809, nil, 25497, - nil, 17945, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 182, nil, nil, -32, nil, nil, nil, - 899, nil, nil, 900, nil, 920, nil, 1055, nil, 906, - 18353, 18489, 398, 941, 18761, 18897, 19033, 19169, 940, nil, - nil, nil, 19441, 19577, 941, nil, 19849, 19985, nil, 229, - 230, 640, 125, 916, 2006, 924, nil, nil, 479, nil, - nil, 1026, 63, -71, nil, nil, nil, nil, 925, nil, - 967, 20801, nil, nil, nil, 937, -107, 20937, 953, nil, - 957, 146, 159, 1004, 355, 813, 1005, 967, 21753, 3376, - 1030, 1031, 10, 1094, 22297, nil, 990, 438, nil, nil, - nil, 4335, 2143, 991, 439, nil, nil, 538, 23853, nil, - 25399, nil, 6565, nil, 22705, nil, 813, nil, 989, 190, - nil, 1003, nil, nil, nil, nil, 637, nil, 1129, nil, - nil, nil, nil, 1135, nil, 23385, 1019, -1, 25, 94, - 149, 5977, nil, 1194, nil, 24972, 24607, 6113, nil, nil, - nil, 416, 153, 2417, 2828, 24228, 180, 917, -16, 842, - 5157, nil, nil, nil, nil, nil, nil, nil, 1017, 6385, - 3239, 6521, nil, 1019, nil, 3102, nil, 2417, nil, nil, - 2280, nil, 2691, nil, 2554, 6793, 6929, 7065, 7201, 140, - 7337, 1023, 1026, nil, 1044, 1047, 1048, nil, 1072, 1056, - 1054, 1046, 8153, nil, nil, 3513, nil, nil, nil, 2006, - 1732, nil, nil, 1061, 259, nil, nil, 1183, nil, 5294, - 1063, 1105, nil, nil, nil, nil, 1106, 1211, 1095, 1103, - nil, nil, nil, 1104, 1105, nil, 1106, 1107, nil, 1117, - nil, 1121, 606, 1120, 951, nil, 1241, nil, 9377, 1242, - 3376, 3239, nil, 43, 62, 56, 393, 954, nil, 1127, - 2965, 9513, nil, 289, 1245, 1246, 1130, nil, nil, nil, - nil, nil, nil, nil, nil, 1154, 1152, nil, 3924, 9649, - 9785, 2965, 374, nil, nil, 24103, nil, nil, 23978, nil, - 6701, nil, nil, 1173, 785, 10057, 1227, 1229, 1276, 1869, - 1173, 1281, nil, 5705, nil, nil, -7, 10465, nil, nil, - nil, nil, nil, 25472, nil, 7109, nil, 5885, nil, 6293, - nil, nil, nil, nil, 321, 992, 1164, nil, 18, nil, - 1300, 1301, 10737, 5431, nil, nil, 1302, 288, nil, nil, - nil, nil, 23593, nil, 1185, nil, nil, 1186, 1187, 1188, - 1190, nil, 1191, nil, 486, nil, nil, nil, 1036, 24534, - nil, nil, 1210, nil, nil, nil, 2554, 1057, 1089, 1090, - 1269, 1094, nil, 1196, 1197, 1199, 1200, 1201, 633, 1202, - 855, 5020, nil, nil, nil, 351, 4883, nil, nil, 4609, - 3924, nil, 23723, nil, 6837, nil, 6973, nil, 6021, nil, - nil, nil, 705, 1267, 1268, nil, 1352, 11689, 24680, 24315, - 1093, 6429, nil, nil, nil, nil, 1058, 1241, 765, nil, - nil, nil, 1362, 1363, 1364, 1245, 1258, 1260, 1261, nil, - nil, 1265, -11, -10, 45, 1193, 1263, 1264, nil, nil, - nil, nil, 7245, nil, nil, nil, nil, 17, nil, -114, - nil ] + nil, nil, nil, nil, nil, nil, nil, 1085, nil, 5090, + 10134, 10270, 10406, 10542, 10678, 10814, 24310, 23945, nil, 10950, + 11086, 11222, nil, nil, 814, 269, 164, 1140, 83, 1020, + 1058, nil, 11358, 3994, 1054, 11494, 11630, 11766, 11902, 6870, + 12038, 12174, 12310, 12446, 12582, 12718, 12854, 12990, 13126, 13262, + 13398, 13534, 13670, 13806, 13942, 14078, 14214, nil, nil, nil, + nil, 14350, nil, nil, nil, 25113, nil, nil, 1046, 14486, + nil, nil, 1049, nil, nil, nil, 14622, nil, nil, 14758, + nil, 3172, nil, 971, 968, nil, 14894, 1007, 15030, nil, + 15166, 15302, nil, nil, -82, nil, nil, 15438, 1367, nil, + 949, 3720, 959, 986, 941, 15710, 3035, 855, 889, 953, + 1007, 997, nil, 971, 934, -2, nil, nil, nil, 969, + 593, 912, 15846, nil, 293, 970, 968, 1024, nil, 959, + 16118, nil, 16254, 5227, 1162, 885, 16390, 16526, nil, nil, + 1384, 808, -8, -7, 16662, 5364, 6460, 327, 994, 877, + 32, 33, 1088, 952, 27, 981, nil, nil, 16798, nil, + 16934, 615, 572, 466, 472, 544, 437, 365, 103, 607, + nil, 574, nil, nil, nil, nil, nil, 340, nil, 468, + nil, 479, nil, 874, 305, nil, 867, nil, 857, 104, + nil, 854, -41, nil, 344, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 1945, + nil, nil, nil, nil, 856, nil, 818, nil, 17342, 817, + nil, 803, nil, 345, 167, nil, nil, nil, 2898, nil, + nil, nil, nil, nil, 3035, 812, nil, nil, 795, 783, + 162, 104, 1292, nil, nil, nil, 270, 135, 820, nil, + nil, 1080, 1808, nil, nil, nil, 61, nil, 815, 24018, + 24237, 17886, 246, 18022, 18158, 18294, 4679, 4816, 573, 708, + 833, 809, 806, 803, 1190, 1180, 1162, 5090, 3994, 5227, + 4131, 4268, 4405, 1248, 493, 4542, 4953, 3857, 895, 850, + nil, 1212, nil, nil, nil, nil, nil, nil, nil, nil, + 730, 728, nil, nil, 18566, nil, nil, 18702, nil, 18838, + nil, nil, nil, nil, 18974, 1372, 709, 636, nil, nil, + 627, 19110, 594, 19246, 24456, 24967, 508, 620, nil, nil, + 19382, 565, nil, 593, 19518, 19654, 24675, 24602, 1031, 3309, + 19790, 663, 656, 530, nil, nil, 277, 311, 541, 519, + nil, 39, 533, nil, 25273, nil, 458, 455, nil, 446, + 440, 432, nil, nil, nil, nil, nil, nil, 414, nil, + 807, nil, 20742, nil, nil, nil, 490, nil, nil, nil, + 454, nil, nil, 444, 5912, 445, nil, 5775, 21, 429, + 416, 393, 398, nil, nil, 21014, 25186, 24748, 26, nil, + 273, 210, -21, nil, 1084, nil, 277, 21150, nil, 292, + nil, nil, nil, 21286, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 334, nil, nil, 441, nil, + nil, nil, 242, nil, nil, 240, nil, 4542, nil, 2497, + nil, 237, 21558, 21694, 21830, 24529, 25040, 21966, -41, 236, + 22102, 22238, 22374, 22510, 217, nil, nil, nil, 22646, 22782, + 202, nil, nil, nil, -77, 275, 945, 540, 171, 161, + nil, -54, 254, -19, nil, 150, nil, 51, nil, nil, + 1208, nil, 1248, 23190, nil, nil, nil, -96, 23326, 1201, + nil, 1201, 130, 126, 1236, 138, 548, 1232, 1187, 23462, + 23598, 1253, 1247, 59, 172, nil, 7006, nil, nil, nil, + nil, 23870, nil, nil, 23734, nil, nil, nil, 26, 1195, + 201, nil, nil, 742, 25248, nil, 25102, nil, 1640, nil, + 23054, nil, 675, nil, 1210, 266, nil, 20, nil, nil, + nil, nil, 592, nil, 185, nil, nil, nil, nil, nil, + 192, nil, 22918, 146, 4, 7, 24, 68, 3446, nil, + 500, nil, 24894, 24091, 21422, nil, nil, nil, 434, 4679, + 4953, 25337, 25310, 2635, 53, 1177, 6049, nil, nil, 338, + nil, nil, nil, 406, nil, 400, 20878, 419, -75, -55, + 810, 0, 3583, 20606, nil, 474, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 20470, 20334, 20198, 20062, + 188, 19926, nil, nil, 25255, nil, 5638, nil, nil, 577, + nil, -51, nil, nil, nil, 569, 175, nil, nil, nil, + nil, nil, nil, nil, 2898, nil, 598, 646, nil, nil, + 368, nil, 3172, 3309, 636, 659, 658, nil, nil, nil, + 661, 680, nil, 693, 696, nil, 700, nil, 707, 777, + 711, 682, nil, 846, nil, nil, 18430, nil, 4405, 854, + nil, nil, -1, 28, 865, 240, 619, nil, 776, 4816, + 17750, 289, 911, nil, 796, 323, nil, nil, nil, nil, + nil, nil, nil, 787, nil, nil, 806, 144, nil, nil, + 17614, 17478, 3446, 821, 826, nil, 827, 831, 834, nil, + 856, 840, 827, 17206, nil, nil, nil, nil, 6597, 5501, + nil, 6, 17070, nil, nil, 889, 994, 8, nil, nil, + 1012, nil, 1512, nil, 6914, nil, 335, nil, nil, nil, + nil, 239, 141, 905, nil, 14, nil, nil, 15982, 6734, + nil, nil, 1034, 404, nil, nil, 1036, nil, nil, 965, + nil, 259, nil, nil, 738, nil, nil, 607, nil, 470, + nil, nil, 955, 15574, 849, 1026, nil, 1076, 3583, -56, + 813, 763, 1044, 683, nil, nil, nil, 391, nil, nil, + nil, 975, 995, 997, 1004, 1009, 938, 1012, 668, 3857, + nil, 153, nil, nil, 4131, nil, 4268, 1038, nil, nil, + 1041, 1043, 1047, 1051, nil, 1061, nil, 601, 24164, nil, + nil, 1208, 9998, 24383, 24821, 88, nil, 1074, 875, nil, + nil, nil, nil, 814, 1111, 559, nil, nil, nil, 1241, + 1247, nil, 1143, nil, 1256, nil, 1739, nil, 8002, nil, + nil, 1172, 1179, nil, 1144, -10, -11, -9, 413, nil, + 1147, 1149, nil, nil, nil, 1151, 1153, 1158, 1159, 8, + nil, 7322, nil, nil, nil, nil, 974, nil ] racc_action_default = [ - -1, -620, -619, -620, -2, -606, -4, -5, -620, -8, - -9, -620, -620, -620, -29, -620, -620, -620, -281, -620, - -41, -44, -608, -620, -49, -51, -52, -53, -58, -260, - -260, -260, -295, -334, -335, -70, -619, -74, -82, -84, - -620, -515, -516, -620, -620, -620, -620, -620, -608, -241, - -272, -273, -274, -275, -276, -277, -278, -279, -280, -595, - -283, -286, -619, -293, -303, -406, -620, -620, -308, -311, - -606, -620, -319, -326, -620, -336, -337, -448, -449, -450, - -451, -452, -453, -619, -456, -619, -619, -619, -619, -619, - -619, -619, -493, -499, -500, -593, -504, -505, -594, -507, - -508, -509, -510, -511, -512, -513, -514, -519, -520, 1051, - -3, -607, -615, -616, -617, -7, -620, -620, -620, -620, - -620, -620, -17, -620, -113, -114, -115, -116, -117, -118, - -119, -120, -121, -125, -126, -127, -128, -129, -130, -131, - -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, - -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, - -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, - -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, - -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, - -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, - -192, -193, -194, -195, -196, -22, -122, -619, -620, -620, - -619, -620, -620, -605, -620, -620, -620, -620, -620, -608, - -609, -48, -620, -515, -516, -620, -281, -620, -620, -233, - -620, -619, -620, -620, -620, -620, -620, -620, -620, -620, - -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, - -620, -620, -620, -620, -620, -620, -620, -620, -620, -412, - -415, -620, -603, -604, -59, -620, -302, -620, -429, -432, - -65, -619, -426, -66, -608, -67, -242, -255, -619, -619, - -259, -620, -265, -620, -588, -608, -620, -68, -69, -606, - -13, -14, -620, -72, -619, -608, -620, -75, -78, -619, - -90, -91, -620, -620, -98, -295, -298, -608, -419, -334, - -335, -338, -427, -620, -80, -620, -86, -291, -501, -502, - -620, -218, -219, -234, -620, -619, -285, -620, -620, -243, - -612, -612, -620, -619, -304, -305, -547, -50, -620, -620, - -620, -620, -606, -620, -607, -515, -516, -620, -620, -281, - -620, -359, -360, -620, -322, -620, -113, -114, -156, -157, - -158, -174, -179, -186, -189, -329, -620, -515, -516, -583, - -584, -454, -620, -477, -620, -479, -620, -481, -620, -620, - -461, -620, -620, -467, -620, -620, -473, -620, -620, -475, - -620, -492, -494, -495, -496, -497, -6, -618, -23, -24, - -25, -26, -27, -619, -620, -19, -20, -21, -123, -620, - -30, -39, -40, -620, -620, -31, -199, -608, -250, -251, - -619, -619, -596, -597, -260, -424, -598, -599, -597, -596, - -260, -423, -425, -598, -599, -37, -207, -38, -620, -42, - -43, -197, -265, -45, -46, -47, -608, -301, -620, -620, - -619, -291, -620, -620, -620, -208, -209, -210, -211, -212, - -213, -214, -215, -220, -221, -222, -223, -224, -225, -226, - -227, -228, -229, -230, -231, -232, -235, -236, -237, -238, - -608, -619, -260, -596, -597, -55, -60, -261, -420, -619, - -619, -608, -608, -297, -256, -620, -264, -257, -620, -262, - -620, -266, -620, -592, -12, -607, -16, -608, -71, -289, - -87, -76, -620, -608, -619, -620, -620, -97, -620, -501, - -502, -620, -83, -88, -620, -620, -620, -620, -620, -239, - -620, -440, -620, -287, -610, -244, -614, -613, -246, -614, - -292, -620, -586, -612, -620, -620, -547, -409, -582, -582, - -530, -532, -532, -532, -546, -548, -549, -550, -551, -552, - -553, -554, -620, -556, -620, -562, -564, -565, -567, -572, - -574, -575, -577, -578, -579, -620, -619, -350, -351, -619, - -620, -620, -620, -620, -435, -619, -620, -620, -291, -316, - -108, -109, -620, -111, -620, -281, -620, -620, -327, -547, - -331, -620, -455, -478, -483, -484, -486, -457, -480, -458, - -482, -459, -460, -620, -463, -465, -620, -466, -469, -470, - -620, -471, -472, -620, -498, -620, -18, -620, -28, -271, - -620, -620, -428, -620, -252, -254, -620, -620, -61, -248, - -249, -421, -620, -620, -63, -422, -620, -620, -300, -596, - -597, -596, -597, -608, -197, -620, -395, -396, -608, -398, - -413, -54, -416, -619, -430, -433, -247, -296, -619, -263, - -267, -620, -589, -590, -591, -15, -73, -620, -79, -85, - -608, -596, -597, -619, -94, -96, -620, -81, -620, -206, - -216, -217, -608, -619, -619, -284, -608, -612, -294, -587, - -407, -619, -619, -608, -620, -528, -529, -620, -620, -539, - -620, -542, -620, -544, -620, -361, -620, -363, -365, -372, - -553, -608, -558, -566, -576, -580, -619, -352, -619, -309, - -353, -354, -312, -620, -315, -620, -608, -596, -597, -600, - -290, -620, -108, -109, -110, -620, -620, -619, -320, -521, - -522, -620, -323, -619, -619, -547, -620, -620, -608, -620, - -619, -462, -464, -468, -474, -476, -10, -124, -269, -620, - -200, -620, -611, -619, -33, -202, -34, -203, -62, -35, - -205, -36, -204, -64, -198, -620, -620, -620, -620, -428, - -620, -582, -582, -377, -619, -619, -619, -394, -620, -608, - -400, -553, -620, -560, -570, -619, -418, -417, -56, -619, - -619, -258, -268, -77, -92, -89, -299, -619, -357, -619, - -441, -619, -442, -443, -288, -245, -620, -620, -608, -582, - -563, -581, -531, -532, -532, -557, -532, -532, -573, -532, - -568, -608, -620, -370, -620, -555, -620, -355, -620, -620, - -619, -619, -314, -620, -428, -620, -108, -109, -112, -608, - -619, -620, -524, -620, -620, -620, -608, -526, -332, -585, - -485, -488, -489, -490, -491, -620, -270, -32, -201, -253, - -620, -240, -620, -375, -376, -385, -379, -387, -620, -390, - -620, -392, -397, -620, -620, -620, -559, -620, -620, -619, - -620, -620, -11, -619, -447, -358, -620, -620, -445, -410, - -411, -408, -527, -620, -535, -620, -537, -620, -540, -620, - -543, -545, -362, -364, -368, -620, -373, -306, -620, -307, - -620, -620, -620, -619, -317, -428, -620, -620, -324, -328, - -330, -525, -547, -487, -582, -561, -378, -619, -619, -619, - -619, -571, -619, -399, -608, -402, -404, -405, -569, -620, - -291, -414, -620, -431, -434, -446, -619, -99, -100, -620, - -620, -107, -444, -532, -532, -532, -532, -366, -620, -371, - -620, -619, -310, -313, -267, -619, -619, -321, -523, -619, - -619, -374, -620, -382, -620, -384, -620, -388, -620, -391, - -393, -401, -620, -290, -600, -57, -440, -619, -620, -620, - -106, -620, -533, -536, -538, -541, -620, -369, -619, -436, - -437, -438, -620, -620, -620, -619, -619, -619, -619, -403, - -439, -608, -596, -597, -600, -105, -532, -367, -356, -318, - -325, -333, -620, -380, -383, -386, -389, -428, -534, -619, - -381 ] + -1, -643, -642, -643, -2, -629, -4, -5, -643, -8, + -9, -643, -643, -643, -35, -643, -643, -40, -643, -643, + -294, -51, -631, -643, -56, -61, -62, -63, -67, -273, + -273, -273, -309, -343, -344, -79, -642, -83, -91, -93, + -643, -536, -537, -643, -643, -643, -643, -232, -643, -631, + -246, -285, -286, -287, -288, -289, -290, -291, -292, -293, + -616, -296, -298, -305, -307, -317, -423, -643, -643, -58, + -58, -629, -643, -327, -334, -643, -345, -346, -348, -349, + -350, -351, -352, -353, -354, -355, -356, -357, -366, -468, + -469, -470, -471, -472, -473, -642, -476, -642, -642, -642, + -486, -642, -642, -642, -514, -520, -521, -614, -525, -526, + -615, -528, -529, -530, -531, -532, -533, -534, -535, -540, + -541, 1088, -3, -630, -638, -639, -640, -7, -643, -643, + -643, -643, -643, -643, -23, -643, -122, -123, -124, -125, + -126, -127, -128, -129, -130, -134, -135, -136, -137, -138, + -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, + -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, + -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, + -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, + -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, + -189, -190, -191, -192, -193, -194, -195, -196, -197, -198, + -199, -200, -201, -202, -203, -204, -205, -28, -131, -642, + -643, -643, -643, -643, -643, -642, -643, -643, -626, -643, + -643, -631, -632, -55, -643, -536, -537, -643, -294, -643, + -643, -238, -643, -642, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -247, -248, -249, + -250, -643, -359, -452, -431, -643, -627, -628, -68, -643, + -316, -358, -643, -445, -447, -74, -642, -442, -75, -631, + -76, -253, -268, -642, -642, -272, -643, -278, -643, -609, + -643, -643, -77, -78, -629, -17, -18, -643, -21, -22, + -81, -642, -631, -643, -84, -87, -642, -99, -100, -643, + -643, -107, -309, -312, -631, -435, -343, -344, -347, -443, + -643, -89, -643, -95, -304, -522, -523, -643, -226, -227, + -643, -239, -643, -642, -300, -631, -642, -642, -318, -319, + -568, -57, -643, -643, -643, -642, -642, -629, -643, -630, + -536, -537, -643, -643, -294, -643, -376, -377, -643, -330, + -643, -122, -123, -165, -166, -167, -183, -188, -195, -198, + -337, -643, -536, -537, -604, -605, -474, -643, -498, -643, + -500, -643, -502, -643, -643, -481, -643, -642, -643, -643, + -494, -643, -643, -496, -643, -513, -515, -516, -517, -518, + -6, -641, -29, -30, -31, -32, -33, -10, -11, -643, + -25, -26, -27, -132, -643, -36, -38, -39, -643, -643, + -37, -643, -41, -643, -294, -49, -50, -206, -258, -278, + -52, -53, -42, -207, -258, -631, -263, -264, -642, -642, + -617, -618, -273, -440, -619, -620, -618, -617, -273, -439, + -441, -619, -620, -48, -215, -54, -631, -315, -643, -643, + -643, -642, -304, -643, -643, -643, -216, -217, -218, -219, + -220, -221, -222, -223, -228, -229, -230, -231, -233, -234, + -235, -236, -237, -240, -241, -242, -243, -631, -251, -643, + -453, -273, -617, -618, -65, -69, -274, -436, -449, -452, + -631, -631, -311, -269, -643, -277, -270, -643, -275, -643, + -279, -612, -613, -16, -630, -20, -631, -80, -302, -96, + -85, -643, -631, -642, -643, -643, -106, -643, -522, -523, + -643, -92, -97, -643, -643, -643, -643, -643, -252, -244, + -643, -460, -643, -631, -299, -254, -635, -635, -643, -643, + -607, -635, -643, -424, -568, -427, -603, -603, -551, -553, + -553, -553, -567, -569, -570, -571, -572, -573, -574, -575, + -643, -577, -643, -583, -585, -586, -588, -593, -595, -596, + -598, -599, -600, -643, -642, -367, -368, -642, -643, -643, + -643, -643, -643, -362, -455, -642, -643, -643, -304, -58, + -117, -118, -643, -120, -643, -294, -642, -643, -335, -546, + -340, -624, -625, -643, -475, -499, -504, -505, -507, -477, + -501, -478, -503, -479, -480, -643, -483, -485, -643, -488, + -490, -491, -643, -492, -493, -643, -519, -642, -24, -643, + -34, -284, -643, -643, -642, -643, -643, -643, -444, -643, + -265, -267, -643, -643, -70, -261, -262, -437, -643, -643, + -72, -438, -314, -633, -617, -618, -617, -618, -631, -643, + -430, -642, -64, -432, -449, -643, -450, -643, -260, -310, + -642, -276, -280, -643, -610, -611, -19, -82, -643, -88, + -94, -631, -617, -618, -642, -103, -105, -643, -90, -643, + -643, -224, -225, -631, -642, -360, -642, -297, -365, -301, + -255, -637, -636, -257, -637, -306, -308, -608, -643, -631, + -643, -549, -550, -643, -643, -560, -643, -563, -643, -565, + -643, -378, -643, -380, -382, -389, -574, -631, -579, -587, + -597, -601, -642, -369, -642, -59, -370, -371, -322, -323, + -643, -325, -643, -631, -617, -618, -621, -303, -642, -117, + -118, -119, -643, -643, -642, -328, -542, -544, -331, -642, + -642, -568, -568, -643, -631, -643, -642, -482, -484, -643, + -487, -495, -497, -643, -133, -282, -643, -631, -617, -618, + -618, -617, -259, -643, -634, -642, -44, -209, -45, -210, + -71, -46, -212, -47, -211, -73, -643, -643, -643, -643, + -444, -643, -412, -413, -631, -415, -642, -434, -433, -643, + -446, -642, -448, -271, -281, -86, -101, -98, -214, -313, + -13, -15, -361, -363, -642, -467, -461, -642, -462, -463, + -635, -425, -642, -642, -417, -631, -603, -584, -602, -552, + -553, -553, -578, -553, -553, -594, -553, -589, -631, -643, + -387, -643, -576, -643, -364, -372, -643, -374, -642, -643, + -60, -324, -643, -444, -643, -117, -118, -121, -631, -642, + -643, -643, -643, -338, -631, -643, -341, -606, -506, -509, + -510, -511, -512, -643, -489, -12, -283, -444, -43, -208, + -266, -643, -245, -603, -603, -394, -642, -642, -642, -411, + -643, -631, -574, -643, -581, -591, -454, -66, -642, -642, + -466, -643, -643, -465, -256, -643, -643, -643, -426, -548, + -643, -556, -643, -558, -643, -561, -643, -564, -566, -379, + -381, -385, -643, -390, -320, -643, -375, -321, -643, -642, + -326, -444, -643, -643, -332, -336, -643, -545, -547, -546, + -508, -643, -392, -393, -402, -396, -404, -643, -407, -643, + -409, -414, -643, -643, -580, -643, -451, -642, -642, -108, + -109, -643, -643, -116, -464, -428, -429, -631, -419, -421, + -422, -553, -553, -553, -553, -383, -643, -388, -643, -642, + -280, -642, -329, -543, -642, -339, -642, -603, -582, -395, + -642, -642, -642, -642, -592, -642, -416, -590, -643, -304, + -14, -460, -642, -643, -643, -115, -418, -643, -643, -554, + -557, -559, -562, -643, -386, -642, -456, -457, -458, -643, + -643, -391, -643, -399, -643, -401, -643, -405, -643, -408, + -410, -303, -621, -459, -631, -617, -618, -621, -114, -420, + -553, -384, -373, -333, -342, -642, -642, -642, -642, -444, + -555, -643, -397, -400, -403, -406, -642, -398 ] clist = [ -'6,218,211,277,277,277,417,532,576,579,17,424,430,583,272,365,17,260', -'334,127,127,547,9,311,311,440,632,324,9,412,554,222,392,693,754,297', -'437,497,817,261,222,222,222,314,17,302,302,795,122,206,338,339,132,132', -'342,846,672,311,114,4,329,482,130,130,835,729,732,491,264,270,273,111', -'926,849,222,222,110,838,222,347,721,373,127,375,377,380,383,386,389', -'375,486,923,798,705,706,535,538,672,115,127,398,399,400,401,293,744', -'295,951,660,374,596,955,598,957,851,390,664,665,613,17,522,616,741,114', -'222,222,222,222,17,603,986,9,353,610,860,597,614,828,863,614,402,343', -'275,287,288,989,355,753,599,757,942,850,796,979,16,340,333,696,797,327', -'16,325,366,748,799,350,335,278,278,278,541,369,954,662,332,545,326,700', -'336,497,627,277,481,279,279,279,805,489,16,669,809,490,669,672,810,425', -'1019,330,735,821,906,396,834,371,836,372,1017,448,418,899,376,951,379', -'331,1,17,222,222,222,1029,434,957,222,222,222,222,222,222,663,923,382', -'703,385,893,841,388,277,870,759,17,554,835,277,760,1037,277,653,391', -'424,430,861,488,733,404,352,833,205,830,858,945,902,121,789,16,502,601', -'341,2,,418,,,16,222,947,835,496,496,,222,838,,222,,311,,518,515,29,814', -'808,,,554,29,,272,,,,17,311,17,511,,527,302,17,699,29,680,,506,523,', -'683,,678,29,29,29,,29,302,580,581,687,683,669,669,1020,542,586,17,447', -'222,883,884,,311,934,311,114,414,,854,,1038,222,222,414,,29,29,835,505', -'29,,,16,504,594,293,594,507,,,293,,513,762,,,762,912,487,,990,600,948', -',736,949,16,492,,683,,,493,,,,,,114,633,29,,,278,6,29,29,29,29,29,973', -'640,278,508,17,127,582,645,,279,,496,496,,277,639,9,,279,811,,,,,,425', -',715,864,865,672,,221,866,626,,,16,132,16,,418,554,,16,709,711,713,130', -'440,434,222,655,625,,825,638,778,,640,,935,644,783,,,,,,,16,,656,639', -',813,,543,277,1025,656,656,991,,,,29,29,29,29,,311,425,29,29,29,29,29', -'29,,311,1030,,523,425,418,17,,822,,29,,523,302,661,222,933,434,675,', -',,302,,811,296,,19,,434,,222,,19,,936,859,,,683,,,,,29,,,,16,277,29', -',,29,648,,,,,,,19,,425,,,669,,,966,,29,,29,,,418,17,29,,17,715,,,843', -',222,,434,,,981,,,,,351,,222,666,667,,222,,29,,29,,,807,,,,,,676,,410', -'415,29,29,679,,435,439,633,730,730,127,554,800,,,1047,,,19,222,222,668', -',,749,222,222,19,806,222,1021,,16,,633,,656,,311,767,,496,640,132,,645', -'1023,1024,,311,523,,,130,,,639,800,,,302,815,697,,29,,818,823,,,,302', -',868,,,,,409,,,,,,17,17,,,,715,633,715,,277,,,,,,818,855,818,296,16', -',425,16,,,914,916,29,918,920,19,921,,,,,418,,438,,222,,,,434,,222,,', -',,,17,17,19,,127,,,17,,,496,,,,,,,800,222,,,,,,773,,,311,,296,29,886', -'886,886,296,977,715,,,29,,,1031,862,,,816,683,867,896,824,,17,,904,29', -'17,17,908,,,,,19,,19,17,,414,,19,928,,,,845,,633,792,,,,,,937,,,,,715', -',715,16,16,,222,19,17,17,,,29,,,29,,,17,222,853,29,,869,1012,1013,1014', -'1015,,,,311,,29,,829,,29,715,,,,,311,,,,,,,,,,958,,16,16,17,730,,,17', -'16,,,969,938,,,,,,29,29,,794,,,29,29,,,29,1001,,19,,1048,,,,17,,911', -',886,886,886,886,,886,,,,1008,,922,16,,,,16,16,,,,,434,,337,337,16,', -'337,17,,,837,277,839,,941,,818,,,,29,29,17,988,,425,,17,,,17,17,,,,16', -'16,,418,,41,,,633,,16,41,,222,818,434,,337,337,337,337,886,886,886,886', -'29,,,,,,29,,,,19,,29,29,41,300,300,,,29,886,,,,16,774,776,,16,,29,779', -'781,,,439,944,,,792,,,792,,792,726,,,728,345,,,367,,,,,,16,,,,,,29,', -',,29,29,,,,,,793,,,29,,,19,,,19,,,,,41,,16,443,444,445,446,,,41,,,,', -',,,16,29,,29,29,16,,,16,16,,,,29,29,831,,,831,,,,950,,952,,,,,,,,,,', -',,,,,792,,792,,792,438,792,974,,975,,976,29,,877,,29,,,,18,,,,826,827', -'18,,,,,,,,,,,,,41,,,42,887,889,891,29,,42,,792,,,,18,304,304,533,,,19', -'19,,41,,,,,,,337,337,,,,,42,301,301,29,,,,875,,,1026,,1027,349,1028', -',,,29,,,,,29,,,29,29,,1036,,,,,,346,19,19,368,,,,,19,29,,,,41,,41,,898', -'18,300,41,900,901,,,1049,,18,,,,905,,,,,300,,,,42,,831,,,793,41,,793', -'42,793,,,19,,,,19,19,,,,930,931,,,,19,,,,,,,367,,367,,,,,,,,,993,995', -'997,999,,1000,,,,,,,,19,19,,,,,,,,,19,,,962,,,18,965,,,,,,,,,41,,,,', -',,,,,,,42,,18,,,,,,,985,,19,,692,,19,793,,793,972,793,,793,,42,,,1043', -'1044,1045,1046,,,,,,,,,,,,1006,,,19,,,,,,1050,,,,,,1018,,,,,1022,18', -',18,793,,,304,18,,,,,,,,19,,752,,,,758,42,304,42,,,41,301,42,19,,,18', -'300,19,,,19,19,,,,300,,301,,,,,,,,,,42,,,,,,595,,595,,,,,,,,,,,,,,,', -',,,,368,,368,,,,,,,,,,,,,41,,,41,,,,,,411,,,,18,,,442,,,,,,,,,,,,,,', -',,,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,337,,,,,,,,,,,,,,,,,,,499,,501,,,503', -',,,,,,,,,,,,,300,,,,,,,,,,,300,,,18,,,,,,,304,,,41,41,,,,,304,,,544', -',,42,,,,,,,301,,,,,,,,,301,,,,,,,,,,,,,,,,,337,,,,,,,41,41,,,,,337,41', -',18,,,18,,,,,,,,,,,,,,,,,,,42,,,42,,,629,,,,,,,,,,,,367,,,41,,,,41,41', -',,,,,,,,41,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,41,41,,,,,,,,,41,,,304,,,,', -',,,,670,,304,544,,673,,674,,,,,,301,,18,18,,,,,,,367,301,,,41,,,,41', -',,,967,,42,42,,,670,,,544,,,,,,,,,,,,,,,,,41,,,,,,18,18,722,,,,874,18', -',,,,,,,,,,,,,,42,42,,,,41,,42,,,,,,,,,,,,,41,,,,,41,,595,41,41,18,229', -',,18,18,,,,,276,276,276,,18,,768,,,368,670,544,42,321,322,323,42,42', -',,,,,,,,42,,,,276,,,,,18,18,,,,,,,,,18,,812,,,,,,,,,,42,42,,,,,,,,,42', -',,820,,,,,,,,,,595,,,,18,,,,18,,840,,971,,,,,,,,,,368,,,,42,,,,42,442', -',,968,,,,18,,,,,,,,,,,,,,,,,,,,,,42,,,,,876,,,,,,18,,,,,,,,,,,,,,,18', -',,,,18,,42,18,18,276,416,276,,,,436,441,,,,,42,,,,,42,,,42,42,229,,', -'455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471', -'472,473,474,475,476,477,478,479,480,,,,,,,276,,,,,,276,,,276,,,,,,,276', -',276,,,276,544,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,529,,,,,,,,,276,', -',,,,,984,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,436,654,416', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,,276,,276,,276,,,,,,,,', -',,,276,,,,,,,,,,689,690,691,,,,,,,,,,276,,,276,,,,,,,,,,,,,,,,,,,,,', -',,,276,,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,276,770,,,276,276,775,777,,,,,780,782,,,654,784,,,,,,,,,,,,,', -',,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,276,,,,,', -',,,,,,,,,,,,,,,276,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,276,,878,,,,', -',,,,,,,,,775,777,782,780,,881,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,878,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276' ] - racc_goto_table = arr = ::Array.new(2982, nil) +'6,287,230,226,233,292,292,292,445,274,19,276,452,458,602,380,19,443', +'4,139,139,348,464,126,9,355,356,552,714,342,9,234,122,314,516,565,293', +'293,293,694,234,234,234,406,19,319,319,747,780,142,142,879,294,294,294', +'352,353,144,144,357,123,501,572,134,218,427,430,731,732,510,19,499,278', +'285,288,234,234,442,436,234,362,436,463,139,344,841,436,328,328,126', +'505,331,635,388,873,390,392,395,358,400,403,390,541,771,855,685,950', +'594,597,351,351,139,741,351,310,998,412,413,414,415,917,658,328,865', +'312,826,290,302,303,862,347,19,691,127,1000,691,234,234,234,234,19,720', +'723,368,1024,9,727,889,616,625,618,389,617,632,416,891,636,404,1014', +'370,779,619,966,953,783,969,880,919,755,419,351,351,351,351,367,921', +'217,696,997,861,563,863,851,694,350,728,929,840,508,516,509,831,681', +'1046,762,847,931,453,292,920,386,425,435,387,391,435,394,1,647,868,435', +'638,397,399,402,1069,898,785,469,1024,786,405,890,446,429,429,133,19', +'234,433,234,234,433,234,1000,462,417,433,234,234,860,857,1018,623,1007', +'950,694,683,410,729,2,19,292,507,678,452,458,760,384,292,558,559,292', +'887,440,441,464,467,443,918,1020,340,465,466,741,928,572,870,691,691', +'349,829,649,293,446,684,365,234,775,275,381,515,515,293,234,620,982', +'234,1044,294,287,699,343,534,537,345,553,687,1047,294,708,346,,,,19', +'701,,,19,704,546,126,319,19,512,,865,542,525,,523,704,,,1071,789,,,', +'319,862,598,,555,560,606,,527,,556,19,,,820,,,939,1030,524,,,234,19', +'19,328,557,561,530,862,,,,506,,126,614,836,614,,,554,328,511,601,1001', +',1072,763,310,,,704,,310,639,351,788,1016,526,636,741,,741,532,,,,,', +',,,,972,973,,655,328,1021,328,,1022,666,,659,,139,,671,833,,694,,,934', +',797,,883,453,452,458,,292,,515,515,,,665,,,862,,807,809,142,,,,812', +'814,892,893,144,894,895,835,446,,648,666,907,,,810,679,462,234,,,815', +'1005,741,,856,,,,,,,572,572,664,,1075,,665,,670,672,838,,453,292,,1063', +',436,,,,,806,808,453,1051,436,436,811,813,,,436,436,542,691,,,446,19', +',690,,542,936,741,319,741,234,,462,682,833,688,689,319,,717,788,,,,462', +',888,234,704,,848,697,,961,768,,,700,,,,,962,,741,,453,292,,914,328', +',,,,,,,719,328,,713,,,,909,758,759,,761,,19,446,,19,,,,807,809,814,812', +'234,777,462,756,,,,,,,,,234,453,292,,,,234,,,435,,,959,,828,,,,435,435', +'6,,,20,435,435,,446,,20,19,908,139,659,778,436,433,234,793,462,784,827', +'1048,,9,433,433,,,,666,433,433,671,822,805,659,20,321,321,,988,142,515', +',,,,,542,144,,,1049,,1050,794,665,,909,837,319,,20,854,1009,,845,,849', +',,319,364,,429,,,896,,,,1017,,,914,,,914,,914,,,,,1079,850,,659,453', +',,292,328,839,877,,877,,,,,,881,328,,,,,,,882,,,20,,,446,,,,19,659,20', +',462,,234,872,435,,,19,19,,,139,,,19,,,735,737,739,,,,515,854,,,,914', +',914,433,914,,914,1064,,,,704,897,,,,,,,,,822,,,,,19,,,914,,,,,29,,', +'933,,,29,,,,19,,,,,,,,19,19,,29,955,20,,434,659,,434,954,29,29,29,434', +'29,957,963,,,,960,,234,,19,,,20,965,938,,,,,,19,234,,,854,29,,949,,', +'29,29,964,,29,,968,975,975,975,,351,,,,,,,,,,,,967,984,351,,,,19,19', +',,991,,,,,,976,978,980,,,,,20,,,,20,,,1012,321,20,29,1015,,,19,29,29', +'29,29,29,328,,1033,,1036,321,,,1013,328,,,845,,,,20,,1027,,,,,19,,,', +',20,20,,453,292,,,858,877,,858,,,615,,615,19,975,975,975,975,19,975', +'19,,,,,,446,,,328,,,462,,,,234,,462,877,659,,,1073,1074,,1053,1055,1057', +'1059,864,1060,866,,,29,29,29,29,29,29,29,,,,29,29,29,,975,975,975,975', +',,,,,,29,975,,,,941,943,,945,947,,948,,,,,,,,915,,,1082,1083,1084,1085', +',,,,,,,1087,,,29,,,,,,,29,,,29,,,,,,,,,,,,,916,,,,,29,,,,29,,,,,29,', +',32,,,,,,32,,,,,20,,,,,,,321,,,32,,,29,,,321,,,32,32,32,,32,29,29,29', +',,,,16,,,,,,16,,,,,,,,,,,,32,,,,,32,32,,,32,1039,1040,1041,1042,,,16', +',,,,20,,,20,,,,,,858,,,915,,,915,,915,1002,,1003,16,1004,,,,,,,,,366', +',,,,,,,,32,,,,,32,32,32,32,32,,,,20,,1023,,1025,1080,434,,,,,,,,,434', +'434,,29,,,434,434,,,,,,,16,,,,,,,,915,16,915,,915,,915,,,,,,,,321,,', +',,,,,,,,321,1070,,,915,,,,,29,,,,,,1076,,1077,29,1078,,32,32,32,32,32', +'32,32,,,,32,32,32,,29,,,,,,,,,1086,32,,,,426,439,,,,,,,,,20,,,,16,,431', +',,431,,20,20,,431,,,902,20,,29,,32,29,,,,,16,32,,29,32,,,434,,,,,,,', +'29,,,,,,29,32,,,,32,,,,20,32,,,,,,,518,,520,,521,522,,29,,,20,,,29,29', +',,,20,20,32,,29,29,,,16,,29,29,16,32,32,32,,16,,,,,,,,,20,,,,,,,562', +',,,20,,,,,,,16,,,,,,,,,,,,16,16,,,,,,,,313,,18,,,,615,,18,,,20,20,,', +'993,,,,,,,,,,,,,,,,,,,,,18,,,,,,20,,,29,,,,651,,29,,,,,29,29,,,,,18', +'29,,32,615,,,,,20,,,,,,,,,29,,,,,,,,,,,,20,,,,,20,,20,,,,29,,,,,,,,', +',,,,,,32,,,29,,18,,,,32,,29,29,,18,,,692,,,562,,695,,,,32,,,,,,,,,29', +',29,,,,,16,,,,,,29,29,,,,,,,,,,,,,,,,424,,,,,32,,,32,,,,,,,,32,,,,748', +',29,29,313,,,,32,,,,,,32,,18,,18,,,18,,,,,18,16,,,16,,,29,,,,,32,,18', +',,,32,32,,,,,,,,32,32,,,,,32,32,,29,,,,,,,,795,,313,,,,,313,692,562', +'16,,,29,,,431,,29,,29,,,,,431,431,,,,,431,431,,18,,29,,18,,,834,,18', +',,599,600,,,,,,,,,42,,,,,,42,,846,,,,,692,18,,562,,,,,,,,,,18,18,,,', +',867,32,42,318,318,,,32,,,,,32,32,,,,,,32,,,439,,,,,,42,,,,,,,,32,,361', +',,383,,16,,,,,,,,,,,16,16,906,,,32,,16,,,,,,,,,,,,,,,,32,431,,,,,,,32', +'32,,,42,,,,,,,,,42,,,16,,,,,,,41,32,,32,,,41,,,,,16,,,32,32,,,,16,16', +',,,,,,,,,,,,,41,317,317,,,,,,,,,16,,,,,,,,32,32,18,16,,,,41,,562,,,', +',,,,360,,,382,,,,42,,,,,,,32,,,,,752,,,754,,,16,16,,,994,,42,,,,,,,', +',1010,,,32,,,,,,,,41,,,,18,16,,18,,41,,,,32,,,,,32,,32,,,,,,,,,,,,,', +'16,,32,,,,,,,,42,,,,42,,,,318,42,,16,,18,,,16,,16,18,,,,,,318,,,18,18', +',,,,18,18,42,,,,,,,,,,,,42,42,,,41,,,,,,,,,383,,383,,,,,,,,,,,,,41,', +',,,,,,,,,,,,,,,,,,,,884,,,,,,,,,,,,,,,,,,903,,,,,,,,,,,,,,,,,,18,,,', +',,41,,,,41,18,18,,317,41,,,18,,,,926,,,,,,,,,317,,,,18,,,,,930,,41,', +',,,,935,,,,,,41,41,,,18,,,,,,,,,382,,382,,,,,956,,18,,,,,,,42,18,18', +',,,,318,,,,,,,,,318,,,,,,,,,,,18,,,,,,,,,,,18,,,986,987,,,,,,,,,,,,', +',,,,,,,,,,,,,,,42,,1011,42,,,,18,18,,,,,,,,,,,,,,,,,,,,,,,1031,,,,,', +',18,,,,,,,,,,,,,,1045,42,,,,,,,,,,,,,,18,,,41,,,,,,,317,,,,,,,,,317', +',18,,,,,18,,18,,,,,,,,,318,,,,,,,,,,,318,,,,,,,,,,,,,,,,,,,,,,,,,41', +',,41,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,42,42,,,,,,42,41,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,,317,,,,,,42,,,,,317', +',,42,42,241,,,,,,,,,291,291,291,,,,,,,,,,,338,339,42,341,,,,,,,,,,42', +',,,,,,,,,,,,,,,,,,41,,,,,,,,,,,41,41,,,383,,,41,,42,42,,,990,,,,,,,', +',,,,,,,,,,,,,,,,,,,42,,,,,,,41,,,,,,,,,,,,,,,,,383,41,,,,42,,,,41,41', +',,,,,,,,,,,,,,,42,,,,,42,,42,,41,,,,,,,,,,,41,,,,,,,,,,,,,,,,,,,,,,291', +'438,,,444,291,,,,444,,,382,,,,,41,41,,,989,241,,,476,477,478,479,480', +'481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497', +',41,,,498,,,,,,,,291,,,,,,,291,,,291,,,382,,,,291,41,291,,291,291,,', +',,,,,,,,,,,,,,41,,,,,41,,41,,,,,,,,,,,,,,,548,,549,,,,291,291,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,291,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,291,,444,444,444', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,291,,,291,,291,,,,,,,,,,,,,,291', +',,,,,,,,,,711,712,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,291,,,,,,,,,,', +',,,,,,,,,,,,291,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,291,444', +'291,,,802,,,291,291,444,444,,,,,444,444,,,,,,,,,,,,,,,,,,,,,,,,291,', +',,,,,,,,,,,,,,,444,,,,,,291,,,,,291,,,291,,,,,,,,,,,,,,,,291,,,,,,,', +',,,,,,,,,,,,,,291,,,,,,,,,,,,291,,,,,,,,,,,,,,,,,,,,,,291,,,,,,,444', +',,,,,,,,,,,,444,444,444,444,,912,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,291,444,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,291,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,291' ] + racc_goto_table = arr = ::Array.new(3754, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2111,84 +2135,100 @@ end clist = [ -'6,34,27,36,36,36,25,10,90,90,24,40,40,93,72,60,24,153,87,61,61,152,9', -'67,67,20,26,34,9,30,183,24,60,13,97,53,30,74,14,39,24,24,24,54,24,24', -'24,142,17,17,19,19,65,65,19,91,196,67,96,2,6,40,64,64,187,92,92,25,41', -'41,41,8,133,14,24,24,5,191,24,24,132,6,61,6,6,6,6,6,6,6,42,130,145,137', -'137,70,70,196,7,61,19,19,19,19,49,58,50,192,43,170,59,147,59,148,106', -'170,43,43,173,24,55,173,107,96,24,24,24,24,24,174,108,9,109,174,110', -'111,174,145,112,174,9,5,48,48,48,113,114,115,116,117,118,104,143,133', -'23,103,102,101,134,100,23,99,98,95,140,94,89,69,69,69,86,85,146,73,68', -'149,51,150,151,74,66,36,154,71,71,71,155,158,23,75,159,160,75,196,161', -'72,162,69,163,164,165,7,143,168,143,169,133,27,6,46,171,192,172,71,1', -'24,24,24,24,147,61,148,24,24,24,24,24,24,45,130,175,152,176,145,132', -'177,36,178,179,24,183,187,36,180,133,36,25,181,40,40,182,72,93,33,21', -'186,18,188,58,189,15,11,26,23,34,195,105,3,,6,,,23,24,142,187,6,6,,24', -'191,,24,,67,,34,27,44,26,43,,,183,44,,72,,,,24,67,24,54,,27,24,24,70', -'44,25,,9,53,,40,,55,44,44,44,,44,24,19,19,55,40,75,75,14,6,27,24,51', -'24,137,137,,67,92,67,96,69,,26,,91,24,24,69,,44,44,187,8,44,,,23,5,24', -'49,24,50,,,49,,50,174,,,174,137,48,,97,39,143,,25,143,23,48,,40,,,51', -',,,,,96,34,44,,,69,6,44,44,44,44,44,143,72,69,51,24,61,5,72,,71,,6,6', -',36,6,9,,71,74,,,,,,72,,131,10,10,196,,22,152,17,,,23,65,23,,6,183,', -'23,185,185,185,64,20,61,24,34,2,,70,41,42,,72,,26,41,42,,,,,,,23,,6', -'6,,55,,71,36,143,6,6,137,,,,44,44,44,44,,67,72,44,44,44,44,44,44,,67', -'13,,53,72,6,24,,30,,44,,53,24,41,24,90,61,9,,,,24,,74,12,,29,,61,,24', -',29,,10,25,,,40,,,,,44,,,,23,36,44,,,44,51,,,,,,,29,,72,,,75,,,90,,44', -',44,,,6,24,44,,24,131,,,131,,24,,61,,,90,,,,,29,,24,51,51,,24,,44,,44', -',,87,,,,,,51,,22,22,44,44,51,,22,22,34,96,96,61,183,34,,,26,,,29,24', -'24,71,,,96,24,24,29,153,24,93,,23,,34,,6,,67,17,,6,72,65,,72,10,10,', -'67,53,,,64,,,6,34,,,24,53,71,,44,,6,6,,,,24,,60,,,,,12,,,,,,24,24,,', -',131,34,131,,36,,,,,,6,19,6,12,23,,72,23,,,185,185,44,185,185,29,185', -',,,,6,,29,,24,,,,61,,24,,,,,,24,24,29,,61,,,24,,,6,,,,,,,34,24,,,,,', -'71,,,67,,12,44,6,6,6,12,131,131,,,44,,,25,96,,,51,40,96,24,51,,24,,6', -'44,24,24,6,,,,,29,,29,24,,69,,29,19,,,,51,,34,136,,,,,,19,,,,,131,,131', -'23,23,,24,29,24,24,,,44,,,44,,,24,24,69,44,,51,185,185,185,185,,,,67', -',44,,136,,44,131,,,,,67,,,,,,,,,,24,,23,23,24,96,,,24,23,,,24,96,,,', -',,44,44,,141,,,44,44,,,44,34,,29,,185,,,,24,,51,,6,6,6,6,,6,,,,27,,51', -'23,,,,23,23,,,,,61,,32,32,23,,32,24,,,141,36,141,,51,,6,,,,44,44,24', -'96,,72,,24,,,24,24,,,,23,23,,6,,56,,,34,,23,56,,24,6,61,,32,32,32,32', -'6,6,6,6,44,,,,,,44,,,,29,,44,44,56,56,56,,,44,6,,,,23,22,22,,23,,44', -'22,22,,,22,136,,,136,,,136,,136,12,,,12,56,,,56,,,,,,23,,,,,,44,,,,44', -'44,,,,,,138,,,44,,,29,,,29,,,,,56,,23,32,32,32,32,,,56,,,,,,,,23,44', -',44,44,23,,,23,23,,,,44,44,138,,,138,,,,141,,141,,,,,,,,,,,,,,,,136', -',136,,136,29,136,141,,141,,141,44,,22,,44,,,,28,,,,12,12,28,,,,,,,,', -',,,,56,,,57,139,139,139,44,,57,,136,,,,28,28,28,32,,,29,29,,56,,,,,', -',32,32,,,,,57,57,57,44,,,,12,,,141,,141,28,141,,,,44,,,,,44,,,44,44', -',141,,,,,,57,29,29,57,,,,,29,44,,,,56,,56,,12,28,56,56,12,12,,,141,', -'28,,,,12,,,,,56,,,,57,,138,,,138,56,,138,57,138,,,29,,,,29,29,,,,12', -'12,,,,29,,,,,,,56,,56,,,,,,,,,139,139,139,139,,139,,,,,,,,29,29,,,,', -',,,,29,,,12,,,28,12,,,,,,,,,56,,,,,,,,,,,,57,,28,,,,,,,12,,29,,32,,29', -'138,,138,29,138,,138,,57,,,139,139,139,139,,,,,,,,,,,,12,,,29,,,,,,139', -',,,,,12,,,,,12,28,,28,138,,,28,28,,,,,,,,29,,32,,,,32,57,28,57,,,56', -'57,57,29,,,28,56,29,,,29,29,,,,56,,57,,,,,,,,,,57,,,,,,28,,28,,,,,,', -',,,,,,,,,,,,,57,,57,,,,,,,,,,,,,56,,,56,,,,,,31,,,,28,,,31,,,,,,,,,', -',,,,,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,,,31,,31,', -',31,,,,,,,,,,,,,,56,,,,,,,,,,,56,,,28,,,,,,,28,,,56,56,,,,,28,,,31,', -',57,,,,,,,57,,,,,,,,,57,,,,,,,,,,,,,,,,,32,,,,,,,56,56,,,,,32,56,,28', -',,28,,,,,,,,,,,,,,,,,,,57,,,57,,,31,,,,,,,,,,,,56,,,56,,,,56,56,,,,', -',,,,56,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,56,,,,,,,,,56,,,28,,,,,,,,,31', -',28,31,,31,,31,,,,,,57,,28,28,,,,,,,56,57,,,56,,,,56,,,,56,,57,57,,', -'31,,,31,,,,,,,,,,,,,,,,,56,,,,,,28,28,31,,,,28,28,,,,,,,,,,,,,,,57,57', -',,,56,,57,,,,,,,,,,,,,56,,,,,56,,28,56,56,28,35,,,28,28,,,,,35,35,35', -',28,,31,,,57,31,31,57,35,35,35,57,57,,,,,,,,,57,,,,35,,,,,28,28,,,,', -',,,,28,,31,,,,,,,,,,57,57,,,,,,,,,57,,,31,,,,,,,,,,28,,,,28,,,,28,,31', -',28,,,,,,,,,,57,,,,57,,,,57,31,,,57,,,,28,,,,,,,,,,,,,,,,,,,,,,57,,', -',,31,,,,,,28,,,,,,,,,,,,,,,28,,,,,28,,57,28,28,35,35,35,,,,35,35,,,', -',57,,,,,57,,,57,57,35,,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', -'35,35,35,35,35,35,35,35,35,35,35,,,,,,,35,,,,,,35,,,35,,,,,,,35,,35', -',,35,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,,,,,31,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,35,35,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,35,,,,,,,,,,,,35,,,,,,,,,,35', -'35,35,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,', -',,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,35,35,35,35', -',,,,35,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,35', -',,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,35,,,,,,,,,', -',,,,,,,,,,,,35,,35,,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,', +'6,85,39,37,26,45,45,45,35,171,34,37,49,49,113,69,34,76,2,70,70,102,76', +'118,9,41,41,12,15,39,9,34,5,62,87,170,82,82,82,217,34,34,34,69,34,34', +'34,148,121,73,73,109,84,84,84,23,23,74,74,23,8,49,203,21,21,28,28,153', +'153,35,34,172,50,50,50,34,34,32,24,34,34,24,32,70,9,17,24,78,78,118', +'51,63,192,6,107,6,6,6,5,6,6,6,64,67,162,52,146,106,106,30,30,70,147', +'30,58,164,23,23,23,23,158,36,78,212,59,160,57,57,57,208,128,34,88,7', +'165,88,34,34,34,34,34,83,83,129,213,9,83,130,68,193,68,189,131,193,9', +'132,193,189,133,134,135,136,137,149,138,139,44,150,42,31,30,30,30,30', +'25,156,22,20,163,159,166,159,167,217,168,169,18,16,175,87,176,178,180', +'181,182,183,184,85,45,162,187,26,26,188,190,26,191,1,13,148,26,194,195', +'196,197,164,198,199,37,213,200,201,202,6,82,82,11,34,34,34,34,34,34', +'34,165,70,10,34,34,34,207,209,210,216,149,146,217,86,7,170,3,34,45,85', +'35,49,49,113,98,45,81,101,45,67,30,30,76,60,76,159,158,79,30,30,147', +'160,203,147,88,88,104,52,75,82,6,54,115,34,117,48,122,6,6,82,34,123', +'162,34,149,84,85,64,124,37,39,125,126,172,109,84,64,127,,,,34,35,,,34', +'49,37,118,34,34,60,,212,62,9,,5,49,,,149,192,,,,34,208,23,,6,6,37,,60', +',82,34,,,36,,,153,17,8,,,34,34,34,78,84,84,63,208,,,,57,,118,34,36,34', +',,60,78,57,5,159,,107,35,58,,,49,,58,6,30,193,121,59,193,147,,147,59', +',,,,,,,,,153,153,,37,78,159,78,,159,85,,39,,70,,85,87,,217,,,83,,35', +',36,85,49,49,,45,,6,6,,,6,,,208,,76,76,73,,,,76,76,12,12,74,170,170', +'64,6,,21,85,36,,,51,39,70,34,,,51,147,147,,152,,,,,,,203,203,50,,159', +',6,,50,60,76,,85,45,,15,,24,,,,,32,32,85,153,24,24,32,32,,,24,24,62', +'88,,,6,34,,84,,62,12,147,34,147,34,,70,50,87,60,60,34,,100,193,,,,70', +',35,34,49,,28,60,,36,41,,,60,,,,,12,,147,,85,45,,152,78,,,,,,,,60,78', +',30,,,,76,100,100,,100,,34,6,,34,,,,76,76,76,76,34,6,70,118,,,,,,,,', +'34,85,45,,,,34,,,26,,,106,,102,,,,26,26,6,,,38,26,26,,6,,38,34,32,70', +'39,30,24,34,34,2,70,30,171,113,,9,34,34,,,,85,34,34,85,6,84,39,38,38', +'38,,106,73,6,,,,,,62,74,,,12,,12,21,6,,76,62,34,,38,39,106,,6,,6,,,34', +'38,,82,,,69,,,,152,,,152,,,152,,152,,,,,36,84,,39,85,,,45,78,60,6,,6', +',,,,,100,78,,,,,,,82,,,38,,,6,,,,34,39,38,,70,,34,60,26,,,34,34,,,70', +',,34,,,206,206,206,,,,6,39,,,,152,,152,34,152,,152,35,,,,49,60,,,,,', +',,,6,,,,,34,,,152,,,,,53,,,6,,,53,,,,34,,,,,,,,34,34,,53,23,38,,38,39', +',38,100,53,53,53,38,53,100,23,,,,100,,34,,34,,,38,100,60,,,,,,34,34', +',,39,53,,60,,,53,53,118,,53,,118,6,6,6,,30,,,,,,,,,,,,60,34,30,,,,34', +'34,,,34,,,,,,155,155,155,,,,,38,,,,38,,,100,38,38,53,100,,,34,53,53', +'53,53,53,78,,37,,39,38,,,118,78,,,6,,,,38,,34,,,,,34,,,,,38,38,,85,45', +',,154,6,,154,,,38,,38,34,6,6,6,6,34,6,34,,,,,,6,,,78,,,70,,,,34,,70', +'6,39,,,100,100,,155,155,155,155,157,155,157,,,53,53,53,53,53,53,53,', +',,53,53,53,,6,6,6,6,,,,,,,53,6,,,,206,206,,206,206,,206,,,,,,,,154,', +',155,155,155,155,,,,,,,,155,,,53,,,,,,,53,,,53,,,,,,,,,,,,,157,,,,,53', +',,,53,,,,,53,,,56,,,,,,56,,,,,38,,,,,,,38,,,56,,,53,,,38,,,56,56,56', +',56,53,53,53,,,,,27,,,,,,27,,,,,,,,,,,,56,,,,,56,56,,,56,206,206,206', +'206,,,27,,,,,38,,,38,,,,,,154,,,154,,,154,,154,157,,157,27,157,,,,,', +',,,27,,,,,,,,,56,,,,,56,56,56,56,56,,,,38,,157,,157,206,38,,,,,,,,,38', +'38,,53,,,38,38,,,,,,,27,,,,,,,,154,27,154,,154,,154,,,,,,,,38,,,,,,', +',,,,38,157,,,154,,,,,53,,,,,,157,,157,53,157,,56,56,56,56,56,56,56,', +',,56,56,56,,53,,,,,,,,,157,56,,,,29,29,,,,,,,,,38,,,,27,,27,,,27,,38', +'38,,27,,,38,38,,53,,56,53,,,,,27,56,,53,56,,,38,,,,,,,,53,,,,,,53,56', +',,,56,,,,38,56,,,,,,,29,,29,,29,29,,53,,,38,,,53,53,,,,38,38,56,,53', +'53,,,27,,53,53,27,56,56,56,,27,,,,,,,,,38,,,,,,,29,,,,38,,,,,,,27,,', +',,,,,,,,,27,27,,,,,,,,14,,33,,,,38,,33,,,38,38,,,38,,,,,,,,,,,,,,,,', +',,,,33,,,,,,38,,,53,,,,29,,53,,,,,53,53,,,,,33,53,,56,38,,,,,38,,,,', +',,,,53,,,,,,,,,,,,38,,,,,38,,38,,,,53,,,,,,,,,,,,,,,56,,,53,,33,,,,56', +',53,53,,33,,,29,,,29,,29,,,,56,,,,,,,,,53,,53,,,,,27,,,,,,53,53,,,,', +',,,,,,,,,,,14,,,,,56,,,56,,,,,,,,56,,,,29,,53,53,14,,,,56,,,,,,56,,33', +',33,,,33,,,,,33,27,,,27,,,53,,,,,56,,33,,,,56,56,,,,,,,,56,56,,,,,56', +'56,,53,,,,,,,,29,,14,,,,,14,29,29,27,,,53,,,27,,53,,53,,,,,27,27,,,', +',27,27,,33,,53,,33,,,29,,33,,,14,14,,,,,,,,,66,,,,,,66,,29,,,,,29,33', +',29,,,,,,,,,,33,33,,,,,29,56,66,66,66,,,56,,,,,56,56,,,,,,56,,,29,,', +',,,66,,,,,,,,56,,66,,,66,,27,,,,,,,,,,,27,27,29,,,56,,27,,,,,,,,,,,', +',,,,56,27,,,,,,,56,56,,,66,,,,,,,,,66,,,27,,,,,,,65,56,,56,,,65,,,,', +'27,,,56,56,,,,27,27,,,,,,,,,,,,,,65,65,65,,,,,,,,,27,,,,,,,,56,56,33', +'27,,,,65,,29,,,,,,,,65,,,65,,,,66,,,,,,,56,,,,,14,,,14,,,27,27,,,27', +',66,,,,,,,,,29,,,56,,,,,,,,65,,,,33,27,,33,,65,,,,56,,,,,56,,56,,,,', +',,,,,,,,,27,,56,,,,,,,,66,,,,66,,,,66,66,,27,,33,,,27,,27,33,,,,,,66', +',,33,33,,,,,33,33,66,,,,,,,,,,,,66,66,,,65,,,,,,,,,66,,66,,,,,,,,,,', +',,65,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,,,,,,,,,14,,,,,,,,,,,,,,,,,,33', +',,,,,65,,,,65,33,33,,65,65,,,33,,,,14,,,,,,,,,65,,,,33,,,,,14,,65,,', +',,,14,,,,,,65,65,,,33,,,,,,,,,65,,65,,,,,14,,33,,,,,,,66,33,33,,,,,66', +',,,,,,,,66,,,,,,,,,,,33,,,,,,,,,,,33,,,14,14,,,,,,,,,,,,,,,,,,,,,,,', +',,,,66,,14,66,,,,33,33,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,33,,,,,,,,,,,', +',,14,66,,,,,,,,,,,,,,33,,,65,,,,,,,65,,,,,,,,,65,,33,,,,,33,,33,,,,', +',,,,66,,,,,,,,,,,66,,,,,,,,,,,,,,,,,,,,,,,,,65,,,65,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,66,,,,,,,,,,,66,66,,,,,,66,65,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,66,,,,,,,,,,,,65,,,,,,66,,,,,65,,,66,66,40,,,,,,,,,40', +'40,40,,,,,,,,,,,40,40,66,40,,,,,,,,,,66,,,,,,,,,,,,,,,,,,,65,,,,,,,', +',,,65,65,,,66,,,65,,66,66,,,66,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,65', +',,,,,,,,,,,,,,,,66,65,,,,66,,,,65,65,,,,,,,,,,,,,,,,66,,,,,66,,66,,65', +',,,,,,,,,,65,,,,,,,,,,,,,,,,,,,,,,40,40,,,40,40,,,,40,,,65,,,,,65,65', +',,65,40,,,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40', +'40,40,,65,,,40,,,,,,,,40,,,,,,,40,,,40,,,65,,,,40,65,40,,40,40,,,,,', +',,,,,,,,,,,65,,,,,65,,65,,,,,,,,,,,,,,,40,,40,,,,40,40,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,40,40,40,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,40,,,40,,40,,,,,,,,,,,,,,40,,,,,,,,,,,40,40', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,40,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,40,40,,,40,,,40,40,40,40', +',,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,40,,,,,,40,,,,,40', +',,40,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,40,,,,,,,', +',,,,,,,,,,,,,,40,,,,,,,40,,,,,,,,,,,,,40,40,40,40,,40,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] - racc_goto_check = arr = ::Array.new(2982, nil) +',,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40' ] + racc_goto_check = arr = ::Array.new(3754, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2198,48 +2238,52 @@ end racc_goto_pointer = [ - nil, 214, 57, 267, nil, 71, -2, 90, 66, 20, - -318, 251, 496, -498, -655, -557, nil, 37, 244, -16, - -190, 183, 416, 152, 8, -204, -391, -15, 1191, 532, - -179, 1382, 903, 131, -21, 1974, -29, nil, nil, 12, - -200, 39, -174, -373, 286, -257, -599, nil, 110, 68, - 70, 115, nil, -2, 5, -195, 1005, 1213, -487, -243, - -59, 8, nil, nil, 51, 41, -228, -14, 112, 135, - -235, 151, -16, -309, -242, -306, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 97, -163, -46, nil, 101, - -330, -671, -515, -330, 94, -433, 53, -565, 88, 101, - 98, -376, 93, 87, -578, 197, -618, -467, -804, 60, - -614, -219, -614, -793, 73, -451, -217, -451, -718, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - -751, -128, -482, -772, -500, nil, 181, -455, 444, 422, - -494, 267, -611, -506, nil, -566, -722, -783, -781, -161, - -368, 113, -315, -8, -77, -474, nil, nil, -81, -474, - -78, -471, -789, -386, -495, -621, nil, nil, 123, 122, - 24, 124, 125, -261, -243, 142, 143, 145, -522, -367, - -363, 156, -500, -306, nil, -99, -453, -644, -447, -623, - nil, -633, -781, nil, nil, -105, -442 ] + nil, 207, 16, 250, nil, 27, -2, 125, 55, 22, + 103, 216, -316, -210, 1527, -523, -527, -629, -654, nil, + -347, 52, 164, -12, -143, 102, -19, 1199, -155, 1184, + 42, 35, -147, 1563, 8, -217, -324, -16, 646, -20, + 2721, -44, -430, nil, -589, -27, nil, nil, 262, -214, + 43, -188, -403, 840, -219, nil, 1157, 94, 78, 88, + 36, nil, -4, 53, -230, 2030, 1890, -509, -220, -60, + 8, nil, nil, 38, 46, -141, -207, nil, 50, 224, + nil, -86, 4, -415, 20, -29, -254, -260, -382, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 183, nil, + -2, -86, -44, nil, 214, nil, -245, -658, nil, -703, + nil, nil, nil, -344, nil, 214, nil, -328, 18, nil, + nil, -571, 215, -86, 241, 243, -38, 248, 66, 70, + -628, -217, -623, -806, 85, -458, -219, -731, -456, -731, + nil, nil, nil, nil, nil, nil, -763, -468, -533, -708, + -657, nil, -244, -499, 278, 30, -649, 318, -704, -555, + -556, nil, -625, -759, -822, -803, -170, -546, 118, -378, + -315, -16, -202, nil, nil, -95, -94, nil, -495, nil, + -308, -818, -410, -521, -651, nil, nil, 108, 108, 54, + 106, 107, -302, -238, -186, 112, 112, 112, -569, -410, + -408, 118, -554, -288, nil, nil, 228, -494, -605, -489, + -729, nil, -613, -833, nil, nil, -142, -478 ] racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 290, 7, 344, 291, - nil, nil, 531, nil, 847, nil, 289, nil, nil, nil, - 14, 15, 21, 228, 320, nil, nil, 746, 226, 227, - nil, 282, 20, nil, 328, 24, 25, 26, 27, nil, - 686, nil, nil, nil, 308, nil, nil, 28, 419, 35, - nil, nil, 37, 40, 39, nil, 223, 224, 593, nil, - 129, 427, 128, 131, 78, 79, nil, 49, nil, 420, - nil, 421, 432, 641, 494, 280, 265, 50, 51, 52, - 53, 54, 55, 56, 57, 58, nil, 266, 64, nil, - nil, nil, nil, nil, nil, nil, 577, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 5, nil, 305, 7, 359, 308, + nil, nil, nil, nil, 551, nil, nil, nil, nil, 304, + 306, nil, nil, nil, 14, 15, 21, 239, nil, 297, + 17, nil, 432, 240, 337, nil, nil, 773, 238, 468, + 24, nil, nil, 354, nil, 25, 26, 27, nil, 707, + nil, nil, nil, 325, nil, 28, 322, 447, 35, nil, + nil, 37, 40, 39, nil, 235, 236, 613, nil, 141, + 455, 140, 143, 90, 91, nil, 437, 47, 50, 271, + 543, nil, 448, nil, 449, 460, 667, 513, 295, 279, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 61, + nil, nil, 280, 65, nil, 67, nil, nil, 68, 875, + 69, 70, 71, nil, 72, nil, 73, nil, 595, 74, + 75, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 717, 561, nil, 718, 946, 791, 549, nil, 550, nil, - nil, 551, nil, 553, 657, nil, nil, nil, 559, nil, - nil, nil, 756, nil, nil, nil, 431, 267, nil, nil, - nil, nil, nil, nil, nil, nil, 77, 80, 82, nil, - nil, nil, nil, nil, 608, nil, nil, nil, nil, nil, - nil, nil, nil, 832, 548, nil, 552, 563, 565, 803, - 568, 569, 804, 572, 575, nil, 284 ] + 284, 273, 716, 844, 604, 876, 743, 579, nil, 744, + 1019, 913, 567, nil, 568, nil, nil, 569, nil, 571, + nil, 823, nil, nil, nil, 577, nil, nil, nil, nil, + nil, nil, nil, 459, 282, nil, nil, 686, nil, 500, + nil, nil, nil, nil, nil, 89, 92, 94, nil, nil, + nil, nil, nil, 630, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 859, 782, 566, nil, 570, 581, 583, + 924, 586, 587, 925, 590, 593, nil, 299 ] racc_reduce_table = [ 0, 0, :racc_error, @@ -2250,622 +2294,645 @@ 1, 146, :_reduce_none, 3, 146, :_reduce_6, 2, 146, :_reduce_none, - 1, 149, :_reduce_8, + 1, 149, :_reduce_none, 0, 153, :_reduce_9, - 5, 149, :_reduce_10, - 4, 152, :_reduce_11, - 2, 154, :_reduce_12, - 1, 158, :_reduce_none, - 1, 158, :_reduce_none, - 3, 158, :_reduce_15, - 2, 158, :_reduce_16, - 0, 175, :_reduce_17, - 4, 151, :_reduce_18, - 3, 151, :_reduce_19, - 3, 151, :_reduce_20, - 3, 151, :_reduce_21, - 2, 151, :_reduce_22, - 3, 151, :_reduce_23, - 3, 151, :_reduce_24, + 3, 149, :_reduce_10, + 0, 155, :_reduce_11, + 4, 152, :_reduce_12, + 0, 160, :_reduce_13, + 6, 154, :_reduce_14, + 3, 154, :_reduce_15, + 2, 156, :_reduce_16, + 1, 161, :_reduce_none, + 1, 161, :_reduce_none, + 3, 161, :_reduce_19, + 2, 161, :_reduce_20, + 1, 162, :_reduce_none, + 1, 162, :_reduce_22, + 0, 173, :_reduce_23, + 4, 151, :_reduce_24, 3, 151, :_reduce_25, 3, 151, :_reduce_26, 3, 151, :_reduce_27, - 4, 151, :_reduce_28, - 1, 151, :_reduce_none, + 2, 151, :_reduce_28, + 3, 151, :_reduce_29, 3, 151, :_reduce_30, 3, 151, :_reduce_31, - 6, 151, :_reduce_32, - 5, 151, :_reduce_33, - 5, 151, :_reduce_34, - 5, 151, :_reduce_35, - 5, 151, :_reduce_36, + 3, 151, :_reduce_32, + 3, 151, :_reduce_33, + 4, 151, :_reduce_34, + 1, 151, :_reduce_none, + 3, 151, :_reduce_36, 3, 151, :_reduce_37, 3, 151, :_reduce_38, 3, 151, :_reduce_39, - 3, 151, :_reduce_40, 1, 151, :_reduce_none, - 3, 162, :_reduce_42, - 3, 162, :_reduce_43, - 1, 174, :_reduce_none, - 3, 174, :_reduce_45, - 3, 174, :_reduce_46, - 3, 174, :_reduce_47, - 2, 174, :_reduce_48, + 3, 166, :_reduce_41, + 3, 166, :_reduce_42, + 6, 166, :_reduce_43, + 5, 166, :_reduce_44, + 5, 166, :_reduce_45, + 5, 166, :_reduce_46, + 5, 166, :_reduce_47, + 3, 166, :_reduce_48, + 1, 174, :_reduce_49, 1, 174, :_reduce_none, - 1, 161, :_reduce_50, - 1, 164, :_reduce_none, - 1, 164, :_reduce_none, - 1, 179, :_reduce_none, - 4, 179, :_reduce_54, - 0, 187, :_reduce_55, - 0, 188, :_reduce_56, - 6, 184, :_reduce_57, - 1, 186, :_reduce_58, - 2, 178, :_reduce_59, - 3, 178, :_reduce_60, - 4, 178, :_reduce_61, - 5, 178, :_reduce_62, - 4, 178, :_reduce_63, - 5, 178, :_reduce_64, - 2, 178, :_reduce_65, - 2, 178, :_reduce_66, - 2, 178, :_reduce_67, - 2, 178, :_reduce_68, - 2, 178, :_reduce_69, + 1, 172, :_reduce_none, + 3, 172, :_reduce_52, + 3, 172, :_reduce_53, + 3, 172, :_reduce_54, + 2, 172, :_reduce_55, + 1, 172, :_reduce_none, + 1, 165, :_reduce_57, + 0, 185, :_reduce_58, + 0, 186, :_reduce_59, + 4, 183, :_reduce_60, + 1, 168, :_reduce_none, + 1, 168, :_reduce_none, + 1, 188, :_reduce_none, + 4, 188, :_reduce_64, + 0, 196, :_reduce_65, + 4, 193, :_reduce_66, + 1, 195, :_reduce_67, + 2, 187, :_reduce_68, + 3, 187, :_reduce_69, + 4, 187, :_reduce_70, + 5, 187, :_reduce_71, + 4, 187, :_reduce_72, + 5, 187, :_reduce_73, + 2, 187, :_reduce_74, + 2, 187, :_reduce_75, + 2, 187, :_reduce_76, + 2, 187, :_reduce_77, + 2, 187, :_reduce_78, + 1, 167, :_reduce_none, + 3, 167, :_reduce_80, + 1, 201, :_reduce_none, + 3, 201, :_reduce_82, + 1, 200, :_reduce_83, + 2, 200, :_reduce_84, + 3, 200, :_reduce_85, + 5, 200, :_reduce_86, + 2, 200, :_reduce_87, + 4, 200, :_reduce_88, + 2, 200, :_reduce_89, + 4, 200, :_reduce_90, + 1, 200, :_reduce_91, + 3, 200, :_reduce_92, + 1, 204, :_reduce_none, + 3, 204, :_reduce_94, + 2, 203, :_reduce_95, + 3, 203, :_reduce_96, + 1, 206, :_reduce_97, + 3, 206, :_reduce_98, + 1, 205, :_reduce_99, + 1, 205, :_reduce_100, + 4, 205, :_reduce_101, + 3, 205, :_reduce_102, + 3, 205, :_reduce_103, + 3, 205, :_reduce_104, + 3, 205, :_reduce_105, + 2, 205, :_reduce_106, + 1, 205, :_reduce_107, + 1, 169, :_reduce_108, + 1, 169, :_reduce_109, + 4, 169, :_reduce_110, + 3, 169, :_reduce_111, + 3, 169, :_reduce_112, + 3, 169, :_reduce_113, + 3, 169, :_reduce_114, + 2, 169, :_reduce_115, + 1, 169, :_reduce_116, + 1, 209, :_reduce_117, + 1, 209, :_reduce_none, + 2, 210, :_reduce_119, + 1, 210, :_reduce_120, + 3, 210, :_reduce_121, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_125, + 1, 211, :_reduce_126, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 163, :_reduce_129, 1, 163, :_reduce_none, - 3, 163, :_reduce_71, - 1, 192, :_reduce_none, - 3, 192, :_reduce_73, - 1, 191, :_reduce_74, - 2, 191, :_reduce_75, - 3, 191, :_reduce_76, - 5, 191, :_reduce_77, - 2, 191, :_reduce_78, - 4, 191, :_reduce_79, - 2, 191, :_reduce_80, - 4, 191, :_reduce_81, - 1, 191, :_reduce_82, - 3, 191, :_reduce_83, - 1, 195, :_reduce_none, - 3, 195, :_reduce_85, - 2, 194, :_reduce_86, - 3, 194, :_reduce_87, - 1, 197, :_reduce_88, - 3, 197, :_reduce_89, - 1, 196, :_reduce_90, - 1, 196, :_reduce_91, - 4, 196, :_reduce_92, - 3, 196, :_reduce_93, - 3, 196, :_reduce_94, - 3, 196, :_reduce_95, - 3, 196, :_reduce_96, - 2, 196, :_reduce_97, - 1, 196, :_reduce_98, - 1, 171, :_reduce_99, - 1, 171, :_reduce_100, - 4, 171, :_reduce_101, - 3, 171, :_reduce_102, - 3, 171, :_reduce_103, - 3, 171, :_reduce_104, - 3, 171, :_reduce_105, - 2, 171, :_reduce_106, - 1, 171, :_reduce_107, - 1, 200, :_reduce_108, - 1, 200, :_reduce_none, - 2, 201, :_reduce_110, - 1, 201, :_reduce_111, - 3, 201, :_reduce_112, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_116, - 1, 202, :_reduce_117, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 159, :_reduce_120, - 1, 159, :_reduce_none, - 1, 160, :_reduce_122, - 0, 208, :_reduce_123, - 4, 160, :_reduce_124, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 3, 177, :_reduce_197, - 5, 177, :_reduce_198, - 3, 177, :_reduce_199, - 5, 177, :_reduce_200, - 6, 177, :_reduce_201, - 5, 177, :_reduce_202, - 5, 177, :_reduce_203, - 5, 177, :_reduce_204, - 5, 177, :_reduce_205, - 4, 177, :_reduce_206, - 3, 177, :_reduce_207, - 3, 177, :_reduce_208, - 3, 177, :_reduce_209, - 3, 177, :_reduce_210, - 3, 177, :_reduce_211, - 3, 177, :_reduce_212, - 3, 177, :_reduce_213, - 3, 177, :_reduce_214, - 3, 177, :_reduce_215, - 4, 177, :_reduce_216, - 4, 177, :_reduce_217, - 2, 177, :_reduce_218, - 2, 177, :_reduce_219, - 3, 177, :_reduce_220, - 3, 177, :_reduce_221, - 3, 177, :_reduce_222, - 3, 177, :_reduce_223, - 3, 177, :_reduce_224, - 3, 177, :_reduce_225, - 3, 177, :_reduce_226, - 3, 177, :_reduce_227, - 3, 177, :_reduce_228, - 3, 177, :_reduce_229, - 3, 177, :_reduce_230, - 3, 177, :_reduce_231, - 3, 177, :_reduce_232, - 2, 177, :_reduce_233, - 2, 177, :_reduce_234, - 3, 177, :_reduce_235, - 3, 177, :_reduce_236, - 3, 177, :_reduce_237, - 3, 177, :_reduce_238, - 3, 177, :_reduce_239, - 6, 177, :_reduce_240, + 1, 164, :_reduce_131, + 0, 217, :_reduce_132, + 4, 164, :_reduce_133, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 212, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 3, 182, :_reduce_206, + 3, 182, :_reduce_207, + 6, 182, :_reduce_208, + 5, 182, :_reduce_209, + 5, 182, :_reduce_210, + 5, 182, :_reduce_211, + 5, 182, :_reduce_212, + 0, 222, :_reduce_213, + 5, 182, :_reduce_214, + 3, 182, :_reduce_215, + 3, 182, :_reduce_216, + 3, 182, :_reduce_217, + 3, 182, :_reduce_218, + 3, 182, :_reduce_219, + 3, 182, :_reduce_220, + 3, 182, :_reduce_221, + 3, 182, :_reduce_222, + 3, 182, :_reduce_223, + 4, 182, :_reduce_224, + 4, 182, :_reduce_225, + 2, 182, :_reduce_226, + 2, 182, :_reduce_227, + 3, 182, :_reduce_228, + 3, 182, :_reduce_229, + 3, 182, :_reduce_230, + 3, 182, :_reduce_231, + 1, 182, :_reduce_none, + 3, 182, :_reduce_233, + 3, 182, :_reduce_234, + 3, 182, :_reduce_235, + 3, 182, :_reduce_236, + 3, 182, :_reduce_237, + 2, 182, :_reduce_238, + 2, 182, :_reduce_239, + 3, 182, :_reduce_240, + 3, 182, :_reduce_241, + 3, 182, :_reduce_242, + 3, 182, :_reduce_243, + 3, 182, :_reduce_244, + 6, 182, :_reduce_245, + 1, 182, :_reduce_none, + 1, 221, :_reduce_none, + 1, 221, :_reduce_none, + 1, 221, :_reduce_none, + 1, 221, :_reduce_none, + 3, 219, :_reduce_251, + 3, 219, :_reduce_252, + 1, 171, :_reduce_253, + 1, 223, :_reduce_none, + 2, 223, :_reduce_255, + 4, 223, :_reduce_256, + 2, 223, :_reduce_257, + 1, 218, :_reduce_none, + 3, 218, :_reduce_259, + 3, 227, :_reduce_260, + 1, 228, :_reduce_none, + 1, 228, :_reduce_none, 1, 177, :_reduce_none, - 1, 173, :_reduce_242, - 1, 210, :_reduce_none, - 2, 210, :_reduce_244, - 4, 210, :_reduce_245, - 2, 210, :_reduce_246, - 3, 214, :_reduce_247, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 167, :_reduce_250, - 1, 167, :_reduce_251, - 2, 167, :_reduce_252, - 4, 167, :_reduce_253, - 2, 167, :_reduce_254, - 1, 190, :_reduce_255, - 2, 190, :_reduce_256, - 2, 190, :_reduce_257, - 4, 190, :_reduce_258, - 1, 190, :_reduce_259, - 0, 218, :_reduce_260, - 2, 183, :_reduce_261, - 2, 217, :_reduce_262, - 2, 216, :_reduce_263, - 1, 216, :_reduce_none, - 1, 211, :_reduce_265, - 2, 211, :_reduce_266, - 3, 211, :_reduce_267, - 4, 211, :_reduce_268, - 3, 172, :_reduce_269, - 4, 172, :_reduce_270, - 2, 172, :_reduce_271, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_282, - 0, 241, :_reduce_283, - 4, 209, :_reduce_284, - 2, 209, :_reduce_285, - 0, 242, :_reduce_286, - 0, 243, :_reduce_287, - 5, 209, :_reduce_288, - 3, 209, :_reduce_289, - 3, 209, :_reduce_290, - 2, 209, :_reduce_291, - 3, 209, :_reduce_292, - 0, 244, :_reduce_293, - 4, 209, :_reduce_294, - 1, 209, :_reduce_295, - 4, 209, :_reduce_296, - 3, 209, :_reduce_297, - 1, 209, :_reduce_298, - 5, 209, :_reduce_299, - 4, 209, :_reduce_300, - 3, 209, :_reduce_301, - 2, 209, :_reduce_302, - 1, 209, :_reduce_none, - 2, 209, :_reduce_304, - 2, 209, :_reduce_305, - 6, 209, :_reduce_306, - 6, 209, :_reduce_307, - 0, 245, :_reduce_308, - 0, 246, :_reduce_309, - 7, 209, :_reduce_310, - 0, 247, :_reduce_311, - 0, 248, :_reduce_312, - 7, 209, :_reduce_313, - 5, 209, :_reduce_314, - 4, 209, :_reduce_315, - 0, 249, :_reduce_316, - 0, 250, :_reduce_317, - 9, 209, :_reduce_318, - 0, 251, :_reduce_319, - 0, 252, :_reduce_320, - 7, 209, :_reduce_321, - 0, 253, :_reduce_322, - 0, 254, :_reduce_323, - 0, 255, :_reduce_324, - 9, 209, :_reduce_325, - 0, 256, :_reduce_326, - 0, 257, :_reduce_327, - 6, 209, :_reduce_328, - 0, 258, :_reduce_329, - 6, 209, :_reduce_330, - 0, 259, :_reduce_331, - 0, 260, :_reduce_332, - 9, 209, :_reduce_333, - 1, 209, :_reduce_334, - 1, 209, :_reduce_335, - 1, 209, :_reduce_336, - 1, 209, :_reduce_337, - 1, 166, :_reduce_338, + 1, 177, :_reduce_none, + 2, 177, :_reduce_265, + 4, 177, :_reduce_266, + 2, 177, :_reduce_267, + 1, 199, :_reduce_268, + 2, 199, :_reduce_269, + 2, 199, :_reduce_270, + 4, 199, :_reduce_271, + 1, 199, :_reduce_272, + 0, 231, :_reduce_273, + 2, 192, :_reduce_274, + 2, 230, :_reduce_275, + 2, 229, :_reduce_276, + 1, 229, :_reduce_none, + 1, 224, :_reduce_278, + 2, 224, :_reduce_279, + 3, 224, :_reduce_280, + 4, 224, :_reduce_281, + 3, 170, :_reduce_282, + 4, 170, :_reduce_283, + 2, 170, :_reduce_284, + 1, 220, :_reduce_none, + 1, 220, :_reduce_none, + 1, 220, :_reduce_none, + 1, 220, :_reduce_none, + 1, 220, :_reduce_none, + 1, 220, :_reduce_none, + 1, 220, :_reduce_none, + 1, 220, :_reduce_none, + 1, 220, :_reduce_none, + 1, 220, :_reduce_none, + 1, 220, :_reduce_295, + 0, 266, :_reduce_296, + 4, 220, :_reduce_297, + 0, 267, :_reduce_298, + 3, 220, :_reduce_299, + 0, 268, :_reduce_300, + 4, 220, :_reduce_301, + 3, 220, :_reduce_302, + 3, 220, :_reduce_303, + 2, 220, :_reduce_304, + 0, 269, :_reduce_305, + 4, 220, :_reduce_306, + 0, 270, :_reduce_307, + 4, 220, :_reduce_308, + 1, 220, :_reduce_309, + 4, 220, :_reduce_310, + 3, 220, :_reduce_311, + 1, 220, :_reduce_312, + 5, 220, :_reduce_313, + 4, 220, :_reduce_314, + 3, 220, :_reduce_315, + 2, 220, :_reduce_316, + 1, 220, :_reduce_none, + 2, 220, :_reduce_318, + 2, 220, :_reduce_319, + 6, 220, :_reduce_320, + 6, 220, :_reduce_321, + 4, 220, :_reduce_322, + 4, 220, :_reduce_323, + 5, 220, :_reduce_324, + 4, 220, :_reduce_325, + 6, 220, :_reduce_326, + 0, 271, :_reduce_327, + 0, 272, :_reduce_328, + 7, 220, :_reduce_329, + 0, 273, :_reduce_330, + 0, 274, :_reduce_331, + 0, 275, :_reduce_332, + 9, 220, :_reduce_333, + 0, 276, :_reduce_334, + 0, 277, :_reduce_335, + 6, 220, :_reduce_336, + 0, 278, :_reduce_337, + 0, 279, :_reduce_338, + 7, 220, :_reduce_339, + 0, 280, :_reduce_340, + 0, 281, :_reduce_341, + 9, 220, :_reduce_342, + 1, 220, :_reduce_343, + 1, 220, :_reduce_344, + 1, 220, :_reduce_345, + 1, 220, :_reduce_346, + 1, 176, :_reduce_347, + 1, 241, :_reduce_none, + 1, 247, :_reduce_none, + 1, 250, :_reduce_none, + 1, 252, :_reduce_none, + 1, 253, :_reduce_none, + 1, 254, :_reduce_none, + 1, 256, :_reduce_none, + 1, 258, :_reduce_none, 1, 261, :_reduce_none, 1, 262, :_reduce_none, - 1, 263, :_reduce_none, - 1, 264, :_reduce_none, - 1, 265, :_reduce_none, - 1, 266, :_reduce_none, - 1, 267, :_reduce_none, - 1, 268, :_reduce_none, - 1, 269, :_reduce_none, - 1, 270, :_reduce_none, - 1, 271, :_reduce_none, - 1, 232, :_reduce_none, - 1, 232, :_reduce_none, - 2, 232, :_reduce_none, - 1, 234, :_reduce_none, - 1, 234, :_reduce_none, - 1, 233, :_reduce_none, - 5, 233, :_reduce_356, - 1, 156, :_reduce_none, - 2, 156, :_reduce_358, - 1, 236, :_reduce_none, - 1, 236, :_reduce_360, - 1, 272, :_reduce_none, - 3, 272, :_reduce_362, - 1, 275, :_reduce_363, - 3, 275, :_reduce_364, - 1, 274, :_reduce_365, - 4, 274, :_reduce_366, - 6, 274, :_reduce_367, - 3, 274, :_reduce_368, - 5, 274, :_reduce_369, - 2, 274, :_reduce_370, - 4, 274, :_reduce_371, - 1, 274, :_reduce_372, - 3, 274, :_reduce_373, - 4, 276, :_reduce_374, - 2, 276, :_reduce_375, - 2, 276, :_reduce_376, - 1, 276, :_reduce_377, - 2, 281, :_reduce_378, - 1, 281, :_reduce_none, - 6, 282, :_reduce_380, - 8, 282, :_reduce_381, - 4, 282, :_reduce_382, - 6, 282, :_reduce_383, - 4, 282, :_reduce_384, - 2, 282, :_reduce_385, - 6, 282, :_reduce_386, - 2, 282, :_reduce_387, - 4, 282, :_reduce_388, - 6, 282, :_reduce_389, - 2, 282, :_reduce_390, - 4, 282, :_reduce_391, - 2, 282, :_reduce_392, - 4, 282, :_reduce_393, - 1, 282, :_reduce_394, - 1, 185, :_reduce_395, - 1, 185, :_reduce_none, - 3, 286, :_reduce_397, - 1, 286, :_reduce_398, - 4, 286, :_reduce_399, + 1, 282, :_reduce_none, + 1, 283, :_reduce_none, + 1, 284, :_reduce_none, + 1, 285, :_reduce_none, + 1, 286, :_reduce_none, + 1, 158, :_reduce_none, 1, 287, :_reduce_none, - 4, 287, :_reduce_401, - 1, 288, :_reduce_402, - 3, 288, :_reduce_403, - 1, 289, :_reduce_404, - 1, 289, :_reduce_none, - 0, 293, :_reduce_406, - 3, 231, :_reduce_407, - 4, 291, :_reduce_408, - 1, 291, :_reduce_409, - 3, 292, :_reduce_410, - 3, 292, :_reduce_411, - 0, 296, :_reduce_412, - 0, 297, :_reduce_413, - 6, 295, :_reduce_414, - 2, 180, :_reduce_415, - 4, 180, :_reduce_416, - 5, 180, :_reduce_417, - 5, 180, :_reduce_418, - 0, 299, :_reduce_419, - 3, 230, :_reduce_420, - 4, 230, :_reduce_421, - 4, 230, :_reduce_422, - 3, 230, :_reduce_423, - 3, 230, :_reduce_424, - 3, 230, :_reduce_425, - 2, 230, :_reduce_426, - 1, 230, :_reduce_427, - 4, 230, :_reduce_428, - 0, 300, :_reduce_429, - 0, 301, :_reduce_430, - 6, 229, :_reduce_431, - 0, 302, :_reduce_432, - 0, 303, :_reduce_433, - 6, 229, :_reduce_434, - 0, 305, :_reduce_435, - 6, 235, :_reduce_436, - 1, 304, :_reduce_none, + 1, 242, :_reduce_none, + 1, 198, :_reduce_none, + 1, 248, :_reduce_none, + 1, 248, :_reduce_none, + 2, 248, :_reduce_none, + 1, 184, :_reduce_none, + 1, 184, :_reduce_none, + 1, 249, :_reduce_none, + 5, 249, :_reduce_373, + 1, 251, :_reduce_none, + 2, 251, :_reduce_375, + 1, 257, :_reduce_none, + 1, 257, :_reduce_377, + 1, 288, :_reduce_none, + 3, 288, :_reduce_379, + 1, 291, :_reduce_380, + 3, 291, :_reduce_381, + 1, 290, :_reduce_382, + 4, 290, :_reduce_383, + 6, 290, :_reduce_384, + 3, 290, :_reduce_385, + 5, 290, :_reduce_386, + 2, 290, :_reduce_387, + 4, 290, :_reduce_388, + 1, 290, :_reduce_389, + 3, 290, :_reduce_390, + 4, 292, :_reduce_391, + 2, 292, :_reduce_392, + 2, 292, :_reduce_393, + 1, 292, :_reduce_394, + 2, 297, :_reduce_395, + 1, 297, :_reduce_none, + 6, 298, :_reduce_397, + 8, 298, :_reduce_398, + 4, 298, :_reduce_399, + 6, 298, :_reduce_400, + 4, 298, :_reduce_401, + 2, 298, :_reduce_402, + 6, 298, :_reduce_403, + 2, 298, :_reduce_404, + 4, 298, :_reduce_405, + 6, 298, :_reduce_406, + 2, 298, :_reduce_407, + 4, 298, :_reduce_408, + 2, 298, :_reduce_409, + 4, 298, :_reduce_410, + 1, 298, :_reduce_411, + 1, 302, :_reduce_412, + 1, 302, :_reduce_413, + 3, 303, :_reduce_414, + 1, 303, :_reduce_415, + 4, 303, :_reduce_416, 1, 304, :_reduce_none, - 6, 155, :_reduce_439, - 0, 155, :_reduce_440, - 1, 306, :_reduce_441, + 4, 304, :_reduce_418, + 1, 305, :_reduce_419, + 3, 305, :_reduce_420, + 1, 306, :_reduce_421, 1, 306, :_reduce_none, - 1, 306, :_reduce_none, - 2, 307, :_reduce_444, - 1, 307, :_reduce_none, - 2, 157, :_reduce_446, - 1, 157, :_reduce_none, - 1, 219, :_reduce_448, - 1, 219, :_reduce_449, - 1, 219, :_reduce_none, - 1, 220, :_reduce_451, - 1, 309, :_reduce_452, - 1, 309, :_reduce_none, - 2, 309, :_reduce_454, - 3, 310, :_reduce_455, - 1, 310, :_reduce_456, - 3, 221, :_reduce_457, - 3, 222, :_reduce_458, - 3, 223, :_reduce_459, - 3, 223, :_reduce_460, - 1, 314, :_reduce_461, - 3, 314, :_reduce_462, - 1, 315, :_reduce_none, - 2, 315, :_reduce_464, - 3, 225, :_reduce_465, - 3, 225, :_reduce_466, - 1, 317, :_reduce_467, - 3, 317, :_reduce_468, - 3, 224, :_reduce_469, - 3, 224, :_reduce_470, - 3, 226, :_reduce_471, - 3, 226, :_reduce_472, - 1, 318, :_reduce_473, - 3, 318, :_reduce_474, - 1, 319, :_reduce_475, - 3, 319, :_reduce_476, - 1, 311, :_reduce_477, - 2, 311, :_reduce_478, - 1, 312, :_reduce_479, - 2, 312, :_reduce_480, - 1, 313, :_reduce_481, - 2, 313, :_reduce_482, - 1, 316, :_reduce_483, - 0, 321, :_reduce_484, - 3, 316, :_reduce_485, - 0, 322, :_reduce_486, - 4, 316, :_reduce_487, - 1, 320, :_reduce_488, - 1, 320, :_reduce_489, - 1, 320, :_reduce_490, - 1, 320, :_reduce_none, - 2, 206, :_reduce_492, - 1, 206, :_reduce_493, - 1, 323, :_reduce_none, - 1, 323, :_reduce_none, + 0, 310, :_reduce_423, + 0, 311, :_reduce_424, + 4, 246, :_reduce_425, + 4, 308, :_reduce_426, + 1, 308, :_reduce_427, + 3, 309, :_reduce_428, + 3, 309, :_reduce_429, + 3, 313, :_reduce_430, + 2, 189, :_reduce_431, + 4, 189, :_reduce_432, + 5, 189, :_reduce_433, + 5, 189, :_reduce_434, + 0, 316, :_reduce_435, + 3, 245, :_reduce_436, + 4, 245, :_reduce_437, + 4, 245, :_reduce_438, + 3, 245, :_reduce_439, + 3, 245, :_reduce_440, + 3, 245, :_reduce_441, + 2, 245, :_reduce_442, + 1, 245, :_reduce_443, + 4, 245, :_reduce_444, + 0, 317, :_reduce_445, + 4, 244, :_reduce_446, + 0, 318, :_reduce_447, + 4, 244, :_reduce_448, + 0, 319, :_reduce_449, + 0, 320, :_reduce_450, + 4, 194, :_reduce_451, + 0, 321, :_reduce_452, + 0, 322, :_reduce_453, + 4, 314, :_reduce_454, + 0, 324, :_reduce_455, + 6, 255, :_reduce_456, 1, 323, :_reduce_none, 1, 323, :_reduce_none, - 3, 207, :_reduce_498, - 1, 308, :_reduce_none, - 1, 308, :_reduce_none, - 2, 308, :_reduce_501, - 2, 308, :_reduce_502, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 199, :_reduce_508, - 1, 199, :_reduce_509, - 1, 199, :_reduce_510, - 1, 199, :_reduce_511, - 1, 199, :_reduce_512, - 1, 199, :_reduce_513, - 1, 199, :_reduce_514, - 1, 227, :_reduce_515, - 1, 227, :_reduce_516, - 1, 165, :_reduce_517, - 1, 165, :_reduce_518, - 1, 170, :_reduce_519, - 1, 170, :_reduce_520, - 1, 237, :_reduce_521, - 0, 324, :_reduce_522, - 4, 237, :_reduce_523, - 2, 237, :_reduce_524, - 3, 239, :_reduce_525, - 2, 239, :_reduce_526, - 4, 325, :_reduce_527, - 2, 325, :_reduce_528, - 2, 325, :_reduce_529, + 6, 157, :_reduce_459, + 0, 157, :_reduce_460, + 1, 325, :_reduce_461, + 1, 325, :_reduce_none, 1, 325, :_reduce_none, - 2, 327, :_reduce_531, - 0, 327, :_reduce_532, - 6, 294, :_reduce_533, - 8, 294, :_reduce_534, - 4, 294, :_reduce_535, - 6, 294, :_reduce_536, - 4, 294, :_reduce_537, - 6, 294, :_reduce_538, - 2, 294, :_reduce_539, - 4, 294, :_reduce_540, - 6, 294, :_reduce_541, - 2, 294, :_reduce_542, - 4, 294, :_reduce_543, - 2, 294, :_reduce_544, - 4, 294, :_reduce_545, - 1, 294, :_reduce_546, - 0, 294, :_reduce_547, - 1, 290, :_reduce_548, - 1, 290, :_reduce_549, - 1, 290, :_reduce_550, - 1, 290, :_reduce_551, - 1, 273, :_reduce_none, - 1, 273, :_reduce_553, - 1, 329, :_reduce_none, - 3, 329, :_reduce_555, - 1, 283, :_reduce_556, - 3, 283, :_reduce_557, - 2, 330, :_reduce_558, - 2, 331, :_reduce_559, - 1, 277, :_reduce_none, - 3, 277, :_reduce_561, + 2, 326, :_reduce_464, 1, 326, :_reduce_none, - 3, 326, :_reduce_563, - 1, 332, :_reduce_none, - 1, 332, :_reduce_none, - 2, 278, :_reduce_566, - 1, 278, :_reduce_567, - 3, 333, :_reduce_568, - 3, 334, :_reduce_569, - 1, 284, :_reduce_570, - 3, 284, :_reduce_571, - 1, 328, :_reduce_572, - 3, 328, :_reduce_573, - 1, 335, :_reduce_none, - 1, 335, :_reduce_none, - 2, 285, :_reduce_576, - 1, 285, :_reduce_577, - 1, 336, :_reduce_none, - 1, 336, :_reduce_none, - 2, 280, :_reduce_580, - 2, 279, :_reduce_581, - 0, 279, :_reduce_582, - 1, 240, :_reduce_none, - 0, 337, :_reduce_584, - 4, 240, :_reduce_585, - 1, 228, :_reduce_586, - 2, 228, :_reduce_587, - 1, 213, :_reduce_none, - 3, 213, :_reduce_589, - 3, 338, :_reduce_590, - 3, 338, :_reduce_591, - 2, 338, :_reduce_592, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 298, :_reduce_none, - 1, 298, :_reduce_none, - 1, 298, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 169, :_reduce_none, + 2, 159, :_reduce_466, + 1, 159, :_reduce_none, + 1, 232, :_reduce_468, + 1, 232, :_reduce_469, + 1, 232, :_reduce_none, + 1, 233, :_reduce_471, + 1, 328, :_reduce_472, + 1, 328, :_reduce_none, + 2, 328, :_reduce_474, + 3, 329, :_reduce_475, + 1, 329, :_reduce_476, + 3, 234, :_reduce_477, + 3, 235, :_reduce_478, + 3, 236, :_reduce_479, + 3, 236, :_reduce_480, + 1, 333, :_reduce_481, + 3, 333, :_reduce_482, + 1, 334, :_reduce_none, + 2, 334, :_reduce_484, + 3, 238, :_reduce_485, + 0, 337, :_reduce_486, + 4, 238, :_reduce_487, + 1, 336, :_reduce_488, + 3, 336, :_reduce_489, + 3, 237, :_reduce_490, + 3, 237, :_reduce_491, + 3, 239, :_reduce_492, + 3, 239, :_reduce_493, + 1, 338, :_reduce_494, + 3, 338, :_reduce_495, + 1, 339, :_reduce_496, + 3, 339, :_reduce_497, + 1, 330, :_reduce_498, + 2, 330, :_reduce_499, + 1, 331, :_reduce_500, + 2, 331, :_reduce_501, + 1, 332, :_reduce_502, + 2, 332, :_reduce_503, + 1, 335, :_reduce_504, + 0, 341, :_reduce_505, + 3, 335, :_reduce_506, + 0, 342, :_reduce_507, + 4, 335, :_reduce_508, + 1, 340, :_reduce_509, + 1, 340, :_reduce_510, + 1, 340, :_reduce_511, + 1, 340, :_reduce_none, + 2, 215, :_reduce_513, + 1, 215, :_reduce_514, + 1, 343, :_reduce_none, + 1, 343, :_reduce_none, + 1, 343, :_reduce_none, + 1, 343, :_reduce_none, + 3, 216, :_reduce_519, + 1, 327, :_reduce_none, + 1, 327, :_reduce_none, + 2, 327, :_reduce_522, + 2, 327, :_reduce_523, + 1, 207, :_reduce_none, + 1, 207, :_reduce_none, + 1, 207, :_reduce_none, + 1, 207, :_reduce_none, + 1, 207, :_reduce_none, + 1, 208, :_reduce_529, + 1, 208, :_reduce_530, + 1, 208, :_reduce_531, + 1, 208, :_reduce_532, + 1, 208, :_reduce_533, + 1, 208, :_reduce_534, + 1, 208, :_reduce_535, + 1, 240, :_reduce_536, + 1, 240, :_reduce_537, + 1, 175, :_reduce_538, + 1, 175, :_reduce_539, + 1, 180, :_reduce_540, + 1, 180, :_reduce_541, + 0, 344, :_reduce_542, + 4, 259, :_reduce_543, + 1, 259, :_reduce_544, + 3, 263, :_reduce_545, + 0, 346, :_reduce_546, + 3, 263, :_reduce_547, + 4, 345, :_reduce_548, + 2, 345, :_reduce_549, + 2, 345, :_reduce_550, + 1, 345, :_reduce_none, + 2, 348, :_reduce_552, + 0, 348, :_reduce_553, + 6, 312, :_reduce_554, + 8, 312, :_reduce_555, + 4, 312, :_reduce_556, + 6, 312, :_reduce_557, + 4, 312, :_reduce_558, + 6, 312, :_reduce_559, + 2, 312, :_reduce_560, + 4, 312, :_reduce_561, + 6, 312, :_reduce_562, + 2, 312, :_reduce_563, + 4, 312, :_reduce_564, + 2, 312, :_reduce_565, + 4, 312, :_reduce_566, + 1, 312, :_reduce_567, + 0, 312, :_reduce_568, + 1, 307, :_reduce_569, + 1, 307, :_reduce_570, + 1, 307, :_reduce_571, + 1, 307, :_reduce_572, + 1, 289, :_reduce_none, + 1, 289, :_reduce_574, + 1, 350, :_reduce_none, + 3, 350, :_reduce_576, + 1, 299, :_reduce_577, + 3, 299, :_reduce_578, + 2, 351, :_reduce_579, + 2, 352, :_reduce_580, + 1, 293, :_reduce_none, + 3, 293, :_reduce_582, + 1, 347, :_reduce_none, + 3, 347, :_reduce_584, + 1, 353, :_reduce_none, + 1, 353, :_reduce_none, + 2, 294, :_reduce_587, + 1, 294, :_reduce_588, + 3, 354, :_reduce_589, + 3, 355, :_reduce_590, + 1, 300, :_reduce_591, + 3, 300, :_reduce_592, + 1, 349, :_reduce_593, + 3, 349, :_reduce_594, + 1, 356, :_reduce_none, + 1, 356, :_reduce_none, + 2, 301, :_reduce_597, + 1, 301, :_reduce_598, + 1, 357, :_reduce_none, + 1, 357, :_reduce_none, + 2, 296, :_reduce_601, + 2, 295, :_reduce_602, + 0, 295, :_reduce_603, + 1, 264, :_reduce_none, + 0, 358, :_reduce_605, + 4, 264, :_reduce_606, + 1, 243, :_reduce_607, + 2, 243, :_reduce_none, + 1, 226, :_reduce_none, + 3, 226, :_reduce_610, + 3, 359, :_reduce_611, + 2, 359, :_reduce_612, + 2, 359, :_reduce_613, + 1, 197, :_reduce_none, + 1, 197, :_reduce_none, + 1, 197, :_reduce_none, + 1, 191, :_reduce_none, + 1, 191, :_reduce_none, + 1, 191, :_reduce_none, + 1, 191, :_reduce_none, + 1, 315, :_reduce_none, + 1, 315, :_reduce_none, + 1, 315, :_reduce_none, + 1, 265, :_reduce_none, + 1, 265, :_reduce_none, + 1, 179, :_reduce_none, + 1, 190, :_reduce_none, + 1, 190, :_reduce_none, 0, 147, :_reduce_none, 1, 147, :_reduce_none, - 0, 176, :_reduce_none, - 1, 176, :_reduce_none, - 2, 193, :_reduce_none, - 2, 168, :_reduce_none, - 0, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 238, :_reduce_615, - 1, 238, :_reduce_none, + 0, 181, :_reduce_none, + 1, 181, :_reduce_none, + 2, 202, :_reduce_none, + 2, 178, :_reduce_none, + 0, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 260, :_reduce_638, + 1, 260, :_reduce_none, 1, 150, :_reduce_none, - 2, 150, :_reduce_618, - 0, 148, :_reduce_619 ] + 2, 150, :_reduce_641, + 0, 148, :_reduce_642 ] -racc_reduce_n = 620 +racc_reduce_n = 643 -racc_shift_n = 1051 +racc_shift_n = 1088 racc_token_table = { false => 0, @@ -3008,8 +3075,8 @@ :tQSYMBOLS_BEG => 137, :tSTRING_DEND => 138, :tUBANG => 139, - :tEQL => 140, - :tLOWEST => 141 } + :tLOWEST => 140, + :tEQL => 141 } racc_nt_base = 142 @@ -3172,8 +3239,8 @@ "tQSYMBOLS_BEG", "tSTRING_DEND", "tUBANG", - "tEQL", "tLOWEST", + "tEQL", "$start", "program", "top_compstmt", @@ -3184,44 +3251,53 @@ "top_stmt", "terms", "stmt", - "bodystmt", + "begin_block", "@2", + "bodystmt", + "@3", "compstmt", "opt_rescue", - "opt_else", + "k_else", "opt_ensure", + "@4", "stmts", + "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", + "lhs", + "mrhs", + "arg_value", + "expr", + "@5", + "command_rhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", - "lhs", - "mrhs", - "arg_value", - "expr", - "@3", "opt_nl", "arg", + "expr_value_do", + "do", + "@6", + "@7", "command", "block_command", "block_call", - "dot_or_colon", + "call_op2", "operation2", "command_args", "cmd_brace_block", - "opt_block_param", + "brace_body", "fcall", - "@4", - "@5", + "@8", "operation", + "k_return", "call_args", "mlhs_basic", "mlhs_inner", @@ -3240,8 +3316,12 @@ "fsym", "symbol", "dsym", - "@6", + "@9", + "arg_rhs", + "rel_expr", "primary", + "relop", + "@10", "aref_args", "args", "trailer", @@ -3250,7 +3330,7 @@ "opt_paren_args", "opt_block_arg", "block_arg", - "@7", + "@11", "literal", "strings", "xstring", @@ -3260,23 +3340,31 @@ "symbols", "qsymbols", "var_ref", + "k_begin", + "k_end", "assoc_list", "brace_block", "method_call", "lambda", + "k_if", "then", "if_tail", - "do", + "k_unless", + "opt_else", + "k_while", + "k_until", + "k_case", "case_body", + "k_for", "for_var", + "k_class", "superclass", "term", + "k_module", + "k_def", "f_arglist", "singleton", - "@8", - "@9", - "@10", - "@11", + "dot_or_colon", "@12", "@13", "@14", @@ -3293,17 +3381,12 @@ "@25", "@26", "@27", - "k_begin", - "k_if", - "k_unless", - "k_while", - "k_until", - "k_case", - "k_for", - "k_class", - "k_module", - "k_def", - "k_end", + "k_do", + "k_do_block", + "k_rescue", + "k_ensure", + "k_when", + "k_elsif", "f_marg", "f_norm_arg", "f_margs", @@ -3318,6 +3401,7 @@ "f_arg", "f_block_optarg", "f_rest_arg", + "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", @@ -3326,18 +3410,20 @@ "f_larglist", "lambda_body", "@28", + "@29", "f_args", "do_block", - "@29", - "@30", + "do_body", "operation3", + "@30", "@31", "@32", "@33", "@34", "@35", - "cases", "@36", + "cases", + "@37", "exc_list", "exc_var", "numeric", @@ -3350,14 +3436,16 @@ "word", "string_content", "symbol_list", + "@38", "qword_list", "qsym_list", "string_dvar", - "@37", - "@38", - "sym", "@39", + "@40", + "sym", + "@41", "args_tail", + "@42", "f_kwarg", "opt_args_tail", "f_optarg", @@ -3369,7 +3457,7 @@ "f_block_opt", "restarg_mark", "blkarg_mark", - "@40", + "@43", "assoc" ] Racc_debug_parser = false @@ -3379,20 +3467,21 @@ # reduce 0 omitted def _reduce_1(val, _values, result) - self.lexer.lex_state = :expr_beg - + self.lexer.lex_state = EXPR_BEG + result end def _reduce_2(val, _values, result) result = new_compstmt val - + result end def _reduce_3(val, _values, result) - result = val[0] - + stmt, _ = val + result = stmt + result end @@ -3402,22 +3491,13 @@ def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] - + result end # reduce 7 omitted -def _reduce_8(val, _values, result) - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - - result -end +# reduce 8 omitted def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then @@ -3425,313 +3505,404 @@ yyerror "BEGIN in method" end self.env.extend - + result end def _reduce_10(val, _values, result) - result = new_iter s(:preexe), nil, val[3] - + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + result end def _reduce_11(val, _values, result) - result = new_body val - + result = lexer.lineno result end def _reduce_12(val, _values, result) - result = new_compstmt val - + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt + result end -# reduce 13 omitted - -# reduce 14 omitted +def _reduce_13(val, _values, result) + res = _values[-2] + yyerror "else without rescue is useless" unless res -def _reduce_15(val, _values, result) - result = self.block_append val[0], val[2] - result end -def _reduce_16(val, _values, result) - result = val[1] - debug20 2, val, result - +def _reduce_14(val, _values, result) + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + result end -def _reduce_17(val, _values, result) - lexer.lex_state = :expr_fname - result = self.lexer.lineno - +def _reduce_15(val, _values, result) + body, resc, ens = val + + result = new_body [body, resc, nil, ens] + result end -def _reduce_18(val, _values, result) - result = s(:alias, val[1], val[3]).line(val[2]) - +def _reduce_16(val, _values, result) + result = new_compstmt val + result end +# reduce 17 omitted + +# reduce 18 omitted + def _reduce_19(val, _values, result) - result = s(:valias, val[1].to_sym, val[2].to_sym) - + result = self.block_append val[0], val[2] + result end def _reduce_20(val, _values, result) - result = s(:valias, val[1].to_sym, :"$#{val[2]}") - - result -end + result = val[1] + debug20 2, val, result -def _reduce_21(val, _values, result) - yyerror "can't make alias for the number variables" - result end +# reduce 21 omitted + def _reduce_22(val, _values, result) - result = val[1] - + yyerror "BEGIN is permitted only at toplevel" + result end def _reduce_23(val, _values, result) - result = new_if val[2], val[0], nil - + lexer.lex_state = EXPR_FNAME + result end def _reduce_24(val, _values, result) - result = new_if val[2], nil, val[0] - + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line + result end def _reduce_25(val, _values, result) - result = new_while val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line + result end def _reduce_26(val, _values, result) - result = new_until val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line + result end def _reduce_27(val, _values, result) - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) - + yyerror "can't make alias for the number variables" + result end def _reduce_28(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 3 - yyerror "END in method; use at_exit" - end - result = new_iter s(:postexe), 0, val[2] - + result = val[1] + result end -# reduce 29 omitted +def _reduce_29(val, _values, result) + t, _, c = val + result = new_if c, t, nil + + result +end def _reduce_30(val, _values, result) - result = new_masgn val[0], val[2], :wrap - + f, _, c = val + result = new_if c, nil, f + result end def _reduce_31(val, _values, result) - result = new_op_asgn val - + e, _, c = val + result = new_while e, c, true + result end def _reduce_32(val, _values, result) - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - + e, _, c = val + result = new_until e, c, true + result end def _reduce_33(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn - end - result.line = val[0].line - + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody + result end def _reduce_34(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn + (_, line), _, stmt, _ = val + + if (self.in_def || self.in_single > 0) then + debug20 3 + yyerror "END in method; use at_exit" end - result.line = val[0].line - - result -end -def _reduce_35(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result - + result = new_iter s(:postexe).line(line), 0, stmt + result end +# reduce 35 omitted + def _reduce_36(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result - + result = new_masgn val[0], val[2], :wrap + result end def _reduce_37(val, _values, result) - self.backref_assign_error val[0] - + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + result end def _reduce_38(val, _values, result) - result = new_assign val[0], s(:svalue, val[2]) - + result = new_masgn val[0], val[2], :wrap + result end def _reduce_39(val, _values, result) - result = new_masgn val[0], val[2], :wrap - + result = new_masgn val[0], val[2] + result end -def _reduce_40(val, _values, result) - result = new_masgn val[0], val[2] - +# reduce 40 omitted + +def _reduce_41(val, _values, result) + result = new_assign val[0], val[2] + result end -# reduce 41 omitted - def _reduce_42(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn val + result end def _reduce_43(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn1 val + result end -# reduce 44 omitted +def _reduce_44(val, _values, result) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + + result +end def _reduce_45(val, _values, result) - result = logical_op :and, val[0], val[2] - + result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + result end def _reduce_46(val, _values, result) - result = logical_op :or, val[0], val[2] - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_47(val, _values, result) - result = s(:call, val[2], :"!") - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_48(val, _values, result) - result = s(:call, val[1], :"!") - + self.backref_assign_error val[0] + result end -# reduce 49 omitted +def _reduce_49(val, _values, result) + expr, = val + result = value_expr expr -def _reduce_50(val, _values, result) - result = value_expr(val[0]) - result end +# reduce 50 omitted + # reduce 51 omitted -# reduce 52 omitted +def _reduce_52(val, _values, result) + lhs, _, rhs = val + result = logical_op :and, lhs, rhs + + result +end -# reduce 53 omitted +def _reduce_53(val, _values, result) + lhs, _, rhs = val + result = logical_op :or, lhs, rhs -def _reduce_54(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - result end -def _reduce_55(val, _values, result) - self.env.extend(:dynamic) - result = self.lexer.lineno - +def _reduce_54(val, _values, result) + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op + result end -def _reduce_56(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_55(val, _values, result) + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y + result end +# reduce 56 omitted + def _reduce_57(val, _values, result) - result = new_iter nil, val[2], val[4] - result.line = val[1] + result = value_expr(val[0]) - self.env.unextend - result end def _reduce_58(val, _values, result) - result = new_call nil, val[0].to_sym - + lexer.cond.push true + result end def _reduce_59(val, _values, result) - result = val[0].concat val[1].sexp_body # REFACTOR pattern - + lexer.cond.pop + result end def _reduce_60(val, _values, result) - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] + _, expr, _, _ = val + result = expr - result, operation = val[2], result + result +end + +# reduce 61 omitted + +# reduce 62 omitted + +# reduce 63 omitted + +def _reduce_64(val, _values, result) + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line + + result +end + +def _reduce_65(val, _values, result) + # self.env.extend(:dynamic) + result = self.lexer.lineno + + result +end + +def _reduce_66(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + # self.env.unextend + + result +end + +def _reduce_67(val, _values, result) + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno + + result +end + +def _reduce_68(val, _values, result) + call, args = val + result = call.concat args.sexp_body + + result +end + +def _reduce_69(val, _values, result) + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result result.insert 1, operation end - + result end -def _reduce_61(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3], val[1] - +def _reduce_70(val, _values, result) + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop + result end -def _reduce_62(val, _values, result) +def _reduce_71(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] @@ -3739,17 +3910,17 @@ block.insert 1, call result = block - + result end -def _reduce_63(val, _values, result) +def _reduce_72(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_64(val, _values, result) +def _reduce_73(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args @@ -3757,382 +3928,417 @@ block.insert 1, call result = block - + result end -def _reduce_65(val, _values, result) +def _reduce_74(val, _values, result) result = new_super val[1] - + result end -def _reduce_66(val, _values, result) - result = new_yield val[1] - +def _reduce_75(val, _values, result) + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield + result end -def _reduce_67(val, _values, result) +def _reduce_76(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) - + result end -def _reduce_68(val, _values, result) - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) - +def _reduce_77(val, _values, result) + (_, line), args = val + result = s(:break, ret_args(args)).line line + result end -def _reduce_69(val, _values, result) +def _reduce_78(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) - + result end -# reduce 70 omitted +# reduce 79 omitted -def _reduce_71(val, _values, result) +def _reduce_80(val, _values, result) result = val[1] - + result end -# reduce 72 omitted +# reduce 81 omitted + +def _reduce_82(val, _values, result) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l -def _reduce_73(val, _values, result) - result = s(:masgn, s(:array, val[1])) - result end -def _reduce_74(val, _values, result) - result = s(:masgn, val[0]) - +def _reduce_83(val, _values, result) + head, = val + result = s(:masgn, head).line head.line + result end -def _reduce_75(val, _values, result) - result = s(:masgn, val[0] << val[1].compact) - +def _reduce_84(val, _values, result) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line + result end -def _reduce_76(val, _values, result) - result = s(:masgn, val[0] << s(:splat, val[2])) - +def _reduce_85(val, _values, result) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line + result end -def _reduce_77(val, _values, result) +def _reduce_86(val, _values, result) ary1, _, splat, _, ary2 = val - result = list_append ary1, s(:splat, splat) + result = list_append ary1, s(:splat, splat).line(splat.line) result.concat ary2.sexp_body - result = s(:masgn, result) - + result = s(:masgn, result).line result.line + result end -def _reduce_78(val, _values, result) - result = s(:masgn, val[0] << s(:splat)) - +def _reduce_87(val, _values, result) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l + result end -def _reduce_79(val, _values, result) - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - +def _reduce_88(val, _values, result) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end -def _reduce_80(val, _values, result) - result = s(:masgn, s(:array, s(:splat, val[1]))) - +def _reduce_89(val, _values, result) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l + result end -def _reduce_81(val, _values, result) - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - +def _reduce_90(val, _values, result) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end -def _reduce_82(val, _values, result) - result = s(:masgn, s(:array, s(:splat))) - +def _reduce_91(val, _values, result) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l + result end -def _reduce_83(val, _values, result) - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) - +def _reduce_92(val, _values, result) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l + result end -# reduce 84 omitted +# reduce 93 omitted -def _reduce_85(val, _values, result) +def _reduce_94(val, _values, result) result = val[1] - + result end -def _reduce_86(val, _values, result) - result = s(:array, val[0]) - +def _reduce_95(val, _values, result) + lhs, _ = val + result = s(:array, lhs).line lhs.line + result end -def _reduce_87(val, _values, result) +def _reduce_96(val, _values, result) result = val[0] << val[1].compact - + result end -def _reduce_88(val, _values, result) - result = s(:array, val[0]) - +def _reduce_97(val, _values, result) + item, = val + result = s(:array, item).line item.line + result end -def _reduce_89(val, _values, result) +def _reduce_98(val, _values, result) result = list_append val[0], val[2] - + result end -def _reduce_90(val, _values, result) +def _reduce_99(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_91(val, _values, result) +def _reduce_100(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_92(val, _values, result) +def _reduce_101(val, _values, result) result = self.aryset val[0], val[2] - + result end -def _reduce_93(val, _values, result) +def _reduce_102(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end -def _reduce_94(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - +def _reduce_103(val, _values, result) + recv, _, id = val + result = new_attrasgn recv, id + result end -def _reduce_95(val, _values, result) +def _reduce_104(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end -def _reduce_96(val, _values, result) +def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) - + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l + result end -def _reduce_97(val, _values, result) +def _reduce_106(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end - result = s(:const, nil, s(:colon3, val[1].to_sym)) - + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l + result end -def _reduce_98(val, _values, result) +def _reduce_107(val, _values, result) self.backref_assign_error val[0] - + result end -def _reduce_99(val, _values, result) +def _reduce_108(val, _values, result) + line = lexer.lineno result = self.assignable val[0] - + result.line = line + result end -def _reduce_100(val, _values, result) +def _reduce_109(val, _values, result) + line = lexer.lineno result = self.assignable val[0] + result.line = line debug20 9, val, result - + result end -def _reduce_101(val, _values, result) - result = self.aryset val[0], val[2] - +def _reduce_110(val, _values, result) + lhs, _, args, _ = val + result = self.aryset lhs, args + result end -def _reduce_102(val, _values, result) - result = new_attrasgn val[0], val[2], val[1] - +def _reduce_111(val, _values, result) + lhs, op, id = val + result = new_attrasgn lhs, id, op + result end -def _reduce_103(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - +def _reduce_112(val, _values, result) + lhs, _, id = val + result = new_attrasgn lhs, id + result end -def _reduce_104(val, _values, result) +def _reduce_113(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end -def _reduce_105(val, _values, result) +def _reduce_114(val, _values, result) + expr, _, id = val + if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) - + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l + result end -def _reduce_106(val, _values, result) +def _reduce_115(val, _values, result) + _, id = val + if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) - + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l + result end -def _reduce_107(val, _values, result) +def _reduce_116(val, _values, result) self.backref_assign_error val[0] - + result end -def _reduce_108(val, _values, result) +def _reduce_117(val, _values, result) yyerror "class/module name must be CONSTANT" - + result end -# reduce 109 omitted +# reduce 118 omitted + +def _reduce_119(val, _values, result) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno -def _reduce_110(val, _values, result) - result = s(:colon3, val[1].to_sym) - result end -def _reduce_111(val, _values, result) +def _reduce_120(val, _values, result) result = val[0].to_sym - + result end -def _reduce_112(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - +def _reduce_121(val, _values, result) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line + result end -# reduce 113 omitted +# reduce 122 omitted -# reduce 114 omitted +# reduce 123 omitted -# reduce 115 omitted +# reduce 124 omitted -def _reduce_116(val, _values, result) - lexer.lex_state = :expr_end +def _reduce_125(val, _values, result) + lexer.lex_state = EXPR_END result = val[0] - + result end -def _reduce_117(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - +def _reduce_126(val, _values, result) + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym + result end -# reduce 118 omitted +# reduce 127 omitted -# reduce 119 omitted +# reduce 128 omitted + +def _reduce_129(val, _values, result) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno -def _reduce_120(val, _values, result) - result = s(:lit, val[0].to_sym) - result end -# reduce 121 omitted +# reduce 130 omitted -def _reduce_122(val, _values, result) +def _reduce_131(val, _values, result) result = new_undef val[0] - + result end -def _reduce_123(val, _values, result) - lexer.lex_state = :expr_fname - +def _reduce_132(val, _values, result) + lexer.lex_state = EXPR_FNAME + result end -def _reduce_124(val, _values, result) +def _reduce_133(val, _values, result) result = new_undef val[0], val[3] - + result end -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - # reduce 134 omitted # reduce 135 omitted @@ -4259,1276 +4465,1371 @@ # reduce 196 omitted -def _reduce_197(val, _values, result) +# reduce 197 omitted + +# reduce 198 omitted + +# reduce 199 omitted + +# reduce 200 omitted + +# reduce 201 omitted + +# reduce 202 omitted + +# reduce 203 omitted + +# reduce 204 omitted + +# reduce 205 omitted + +def _reduce_206(val, _values, result) result = new_assign val[0], val[2] - - result -end -def _reduce_198(val, _values, result) - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - result end -def _reduce_199(val, _values, result) +def _reduce_207(val, _values, result) result = new_op_asgn val - + result end -def _reduce_200(val, _values, result) - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) - +def _reduce_208(val, _values, result) + result = new_op_asgn1 val + result end -def _reduce_201(val, _values, result) - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - +def _reduce_209(val, _values, result) + result = new_op_asgn2 val + result end -def _reduce_202(val, _values, result) +def _reduce_210(val, _values, result) result = new_op_asgn2 val - + result end -def _reduce_203(val, _values, result) - result = new_op_asgn2 val - +def _reduce_211(val, _values, result) + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line + result end -def _reduce_204(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - +def _reduce_212(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_205(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_213(val, _values, result) + result = self.lexer.lineno + result end -def _reduce_206(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_214(val, _values, result) + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_207(val, _values, result) - self.backref_assign_error val[0] - +def _reduce_215(val, _values, result) + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn + result end -def _reduce_208(val, _values, result) +def _reduce_216(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end - + result end -def _reduce_209(val, _values, result) +def _reduce_217(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end - + result end -def _reduce_210(val, _values, result) +def _reduce_218(val, _values, result) result = new_call val[0], :+, argl(val[2]) - + result end -def _reduce_211(val, _values, result) +def _reduce_219(val, _values, result) result = new_call val[0], :-, argl(val[2]) - + result end -def _reduce_212(val, _values, result) +def _reduce_220(val, _values, result) result = new_call val[0], :*, argl(val[2]) - + result end -def _reduce_213(val, _values, result) +def _reduce_221(val, _values, result) result = new_call val[0], :"/", argl(val[2]) - + result end -def _reduce_214(val, _values, result) +def _reduce_222(val, _values, result) result = new_call val[0], :"%", argl(val[2]) - + result end -def _reduce_215(val, _values, result) +def _reduce_223(val, _values, result) result = new_call val[0], :**, argl(val[2]) - + result end -def _reduce_216(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - +def _reduce_224(val, _values, result) + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + result end -def _reduce_217(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") +def _reduce_225(val, _values, result) + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + ## TODO: why is this 2.0 only? debug20 12, val, result - + result end -def _reduce_218(val, _values, result) +def _reduce_226(val, _values, result) result = new_call val[1], :"+@" - + result end -def _reduce_219(val, _values, result) +def _reduce_227(val, _values, result) result = new_call val[1], :"-@" - + result end -def _reduce_220(val, _values, result) +def _reduce_228(val, _values, result) result = new_call val[0], :"|", argl(val[2]) - + result end -def _reduce_221(val, _values, result) +def _reduce_229(val, _values, result) result = new_call val[0], :"^", argl(val[2]) - - result -end -def _reduce_222(val, _values, result) - result = new_call val[0], :"&", argl(val[2]) - result end -def _reduce_223(val, _values, result) - result = new_call val[0], :"<=>", argl(val[2]) - - result -end +def _reduce_230(val, _values, result) + result = new_call val[0], :"&", argl(val[2]) -def _reduce_224(val, _values, result) - result = new_call val[0], :">", argl(val[2]) - result end -def _reduce_225(val, _values, result) - result = new_call val[0], :">=", argl(val[2]) - - result -end +def _reduce_231(val, _values, result) + result = new_call val[0], :"<=>", argl(val[2]) -def _reduce_226(val, _values, result) - result = new_call val[0], :"<", argl(val[2]) - result end -def _reduce_227(val, _values, result) - result = new_call val[0], :"<=", argl(val[2]) - - result -end +# reduce 232 omitted -def _reduce_228(val, _values, result) +def _reduce_233(val, _values, result) result = new_call val[0], :"==", argl(val[2]) - + result end -def _reduce_229(val, _values, result) +def _reduce_234(val, _values, result) result = new_call val[0], :"===", argl(val[2]) - + result end -def _reduce_230(val, _values, result) +def _reduce_235(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) - + result end -def _reduce_231(val, _values, result) - result = new_match val[0], val[2] - +def _reduce_236(val, _values, result) + lhs, _, rhs = val + result = new_match lhs, rhs + result end -def _reduce_232(val, _values, result) - result = s(:not, new_match(val[0], val[2])) - +def _reduce_237(val, _values, result) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line + result end -def _reduce_233(val, _values, result) - result = new_call val[1], :"!" - +def _reduce_238(val, _values, result) + _, arg = val + result = new_call arg, :"!" + result.line arg.line + result end -def _reduce_234(val, _values, result) +def _reduce_239(val, _values, result) result = new_call value_expr(val[1]), :"~" - + result end -def _reduce_235(val, _values, result) +def _reduce_240(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) - + result end -def _reduce_236(val, _values, result) +def _reduce_241(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) - + result end -def _reduce_237(val, _values, result) +def _reduce_242(val, _values, result) result = logical_op :and, val[0], val[2] - + result end -def _reduce_238(val, _values, result) +def _reduce_243(val, _values, result) result = logical_op :or, val[0], val[2] - + result end -def _reduce_239(val, _values, result) - result = s(:defined, val[2]) - +def _reduce_244(val, _values, result) + (_, line), _, arg = val + result = s(:defined, arg).line line + result end -def _reduce_240(val, _values, result) - result = s(:if, val[0], val[2], val[5]) - +def _reduce_245(val, _values, result) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line + result end -# reduce 241 omitted +# reduce 246 omitted -def _reduce_242(val, _values, result) +# reduce 247 omitted + +# reduce 248 omitted + +# reduce 249 omitted + +# reduce 250 omitted + +def _reduce_251(val, _values, result) + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_252(val, _values, result) + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_253(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 243 omitted +# reduce 254 omitted -def _reduce_244(val, _values, result) +def _reduce_255(val, _values, result) result = args [val[0]] - + result end -def _reduce_245(val, _values, result) +def _reduce_256(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_246(val, _values, result) +def _reduce_257(val, _values, result) result = args [array_to_hash(val[0])] - - result -end -def _reduce_247(val, _values, result) - result = val[1] - result end -# reduce 248 omitted +# reduce 258 omitted -# reduce 249 omitted +def _reduce_259(val, _values, result) + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) -def _reduce_250(val, _values, result) - result = val[0] - result end -def _reduce_251(val, _values, result) - result = val[0] - +def _reduce_260(val, _values, result) + _, args, _ = val + result = args + result end -def _reduce_252(val, _values, result) +# reduce 261 omitted + +# reduce 262 omitted + +# reduce 263 omitted + +# reduce 264 omitted + +def _reduce_265(val, _values, result) result = args val - + result end -def _reduce_253(val, _values, result) +def _reduce_266(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_254(val, _values, result) +def _reduce_267(val, _values, result) result = args [array_to_hash(val[0])] - + result end -def _reduce_255(val, _values, result) +def _reduce_268(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val - + result end -def _reduce_256(val, _values, result) +def _reduce_269(val, _values, result) result = call_args val - result = self.arg_blk_pass val[0], val[1] - + result end -def _reduce_257(val, _values, result) - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] - +def _reduce_270(val, _values, result) + result = call_args [array_to_hash(val[0]), val[1]] + result end -def _reduce_258(val, _values, result) - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] - +def _reduce_271(val, _values, result) + result = call_args [val[0], array_to_hash(val[2]), val[3]] + result end -def _reduce_259(val, _values, result) +def _reduce_272(val, _values, result) result = call_args val - + result end -def _reduce_260(val, _values, result) - result = lexer.cmdarg.stack.dup # TODO: smell? +def _reduce_273(val, _values, result) + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true - + lexer.cmdarg.push false if lookahead + result end -def _reduce_261(val, _values, result) - lexer.cmdarg.stack.replace val[0] - result = val[1] - +def _reduce_274(val, _values, result) + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args + result end -def _reduce_262(val, _values, result) - result = s(:block_pass, val[1]) - +def _reduce_275(val, _values, result) + _, arg = val + result = s(:block_pass, arg).line arg.line + result end -def _reduce_263(val, _values, result) +def _reduce_276(val, _values, result) result = val[1] - + result end -# reduce 264 omitted +# reduce 277 omitted + +def _reduce_278(val, _values, result) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno -def _reduce_265(val, _values, result) - result = s(:array, val[0]) - result end -def _reduce_266(val, _values, result) - result = s(:array, s(:splat, val[1])) - +def _reduce_279(val, _values, result) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line + result end -def _reduce_267(val, _values, result) - result = self.list_append val[0], val[2] - +def _reduce_280(val, _values, result) + args, _, id = val + result = self.list_append args, id + result end -def _reduce_268(val, _values, result) - result = self.list_append val[0], s(:splat, val[3]) - +def _reduce_281(val, _values, result) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) + result end -def _reduce_269(val, _values, result) +def _reduce_282(val, _values, result) result = val[0] << val[2] - + result end -def _reduce_270(val, _values, result) - result = self.arg_concat val[0], val[3] - +def _reduce_283(val, _values, result) + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat + result end -def _reduce_271(val, _values, result) - result = s(:splat, val[1]) - +def _reduce_284(val, _values, result) + _, arg = val + result = s(:splat, arg).line arg.line + result end -# reduce 272 omitted +# reduce 285 omitted -# reduce 273 omitted +# reduce 286 omitted -# reduce 274 omitted +# reduce 287 omitted -# reduce 275 omitted +# reduce 288 omitted -# reduce 276 omitted +# reduce 289 omitted -# reduce 277 omitted +# reduce 290 omitted -# reduce 278 omitted +# reduce 291 omitted -# reduce 279 omitted +# reduce 292 omitted -# reduce 280 omitted +# reduce 293 omitted -# reduce 281 omitted +# reduce 294 omitted + +def _reduce_295(val, _values, result) + msg, = val + result = new_call nil, msg.to_sym -def _reduce_282(val, _values, result) - result = new_call nil, val[0].to_sym - result end -def _reduce_283(val, _values, result) +def _reduce_296(val, _values, result) + lexer.cmdarg.push false result = self.lexer.lineno - + result end -def _reduce_284(val, _values, result) - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end +def _reduce_297(val, _values, result) + lexer.cmdarg.pop + result = new_begin val - result.line = val[1] - result end -def _reduce_285(val, _values, result) - debug20 13, val, result - +def _reduce_298(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno + result end -def _reduce_286(val, _values, result) - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these - +def _reduce_299(val, _values, result) + _, line, _ = val + result = s(:begin).line line + result end -def _reduce_287(val, _values, result) - lexer.lex_state = :expr_endarg - +def _reduce_300(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result end -def _reduce_288(val, _values, result) - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] - +def _reduce_301(val, _values, result) + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt + result end -def _reduce_289(val, _values, result) - result = val[1] || s(:nil) +def _reduce_302(val, _values, result) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true - + + result +end + +def _reduce_303(val, _values, result) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line + result end -def _reduce_290(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - +def _reduce_304(val, _values, result) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno + result end -def _reduce_291(val, _values, result) - result = s(:colon3, val[1].to_sym) - +def _reduce_305(val, _values, result) + result = lexer.lineno result end -def _reduce_292(val, _values, result) - result = val[1] || s(:array) +def _reduce_306(val, _values, result) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args - + result.line line + result end -def _reduce_293(val, _values, result) +def _reduce_307(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_294(val, _values, result) +def _reduce_308(val, _values, result) result = new_hash val - + result end -def _reduce_295(val, _values, result) - result = s(:return) - +def _reduce_309(val, _values, result) + (_, line), = val + result = s(:return).line line + result end -def _reduce_296(val, _values, result) +def _reduce_310(val, _values, result) result = new_yield val[2] - + result end -def _reduce_297(val, _values, result) +def _reduce_311(val, _values, result) result = new_yield - + result end -def _reduce_298(val, _values, result) +def _reduce_312(val, _values, result) result = new_yield - + result end -def _reduce_299(val, _values, result) - result = s(:defined, val[3]) - +def _reduce_313(val, _values, result) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line + result end -def _reduce_300(val, _values, result) - result = s(:call, val[2], :"!") - +def _reduce_314(val, _values, result) + _, _, lhs, _ = val + result = new_call lhs, :"!" + result end -def _reduce_301(val, _values, result) +def _reduce_315(val, _values, result) debug20 14, val, result - + result end -def _reduce_302(val, _values, result) - oper, iter = val[0], val[1] - call = oper # FIX +def _reduce_316(val, _values, result) + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line - + # FIX: probably not: call.line = iter.line + result end -# reduce 303 omitted +# reduce 317 omitted -def _reduce_304(val, _values, result) +def _reduce_318(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter - + result end -def _reduce_305(val, _values, result) +def _reduce_319(val, _values, result) result = val[1] # TODO: fix lineno - - result -end -def _reduce_306(val, _values, result) - result = new_if val[1], val[3], val[4] - result end -def _reduce_307(val, _values, result) - result = new_if val[1], val[4], val[3] - - result -end +def _reduce_320(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, t, f -def _reduce_308(val, _values, result) - lexer.cond.push true - result end -def _reduce_309(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_321(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, f, t -def _reduce_310(val, _values, result) - result = new_while val[5], val[2], true - result end -def _reduce_311(val, _values, result) - lexer.cond.push true - - result -end +def _reduce_322(val, _values, result) + _, cond, body, _ = val + result = new_while body, cond, true -def _reduce_312(val, _values, result) - lexer.cond.pop - result end -def _reduce_313(val, _values, result) - result = new_until val[5], val[2], true - +def _reduce_323(val, _values, result) + _, cond, body, _ = val + result = new_until body, cond, true + result end -def _reduce_314(val, _values, result) +def _reduce_324(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line - + result end -def _reduce_315(val, _values, result) +def _reduce_325(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line - - result -end -def _reduce_316(val, _values, result) - lexer.cond.push true - result end -def _reduce_317(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_326(val, _values, result) + _, var, _, iter, body, _ = val + result = new_for iter, var, body -def _reduce_318(val, _values, result) - result = new_for val[4], val[1], val[7] - result end -def _reduce_319(val, _values, result) +def _reduce_327(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_320(val, _values, result) +def _reduce_328(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend - + result end -def _reduce_321(val, _values, result) +def _reduce_329(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_322(val, _values, result) +def _reduce_330(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_323(val, _values, result) +def _reduce_331(val, _values, result) result = self.in_def self.in_def = false - + result end -def _reduce_324(val, _values, result) +def _reduce_332(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend - + result end -def _reduce_325(val, _values, result) +def _reduce_333(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_326(val, _values, result) +def _reduce_334(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_327(val, _values, result) +def _reduce_335(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend - + result end -def _reduce_328(val, _values, result) +def _reduce_336(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_329(val, _values, result) - result = [self.in_def, self.lexer.cmdarg.stack.dup] +def _reduce_337(val, _values, result) + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments + result end -def _reduce_330(val, _values, result) - in_def, cmdarg = val[2] +def _reduce_338(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_339(val, _values, result) + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_331(val, _values, result) - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname - +def _reduce_340(val, _values, result) + lexer.lex_state = EXPR_FNAME + result end -def _reduce_332(val, _values, result) - self.in_single += 1 +def _reduce_341(val, _values, result) + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments + result end -def _reduce_333(val, _values, result) - line, cmdarg = val[5] - result = new_defs val - result[3].line line +def _reduce_342(val, _values, result) + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_334(val, _values, result) - result = s(:break) - +def _reduce_343(val, _values, result) + (_, line), = val + result = s(:break).line line + result end -def _reduce_335(val, _values, result) - result = s(:next) - +def _reduce_344(val, _values, result) + (_, line), = val + result = s(:next).line line + result end -def _reduce_336(val, _values, result) - result = s(:redo) - +def _reduce_345(val, _values, result) + (_, line), = val + result = s(:redo).line line + result end -def _reduce_337(val, _values, result) - result = s(:retry) - +def _reduce_346(val, _values, result) + (_, line), = val + result = s(:retry).line line + result end -def _reduce_338(val, _values, result) +def _reduce_347(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 339 omitted +# reduce 348 omitted + +# reduce 349 omitted + +# reduce 350 omitted + +# reduce 351 omitted + +# reduce 352 omitted -# reduce 340 omitted +# reduce 353 omitted -# reduce 341 omitted +# reduce 354 omitted -# reduce 342 omitted +# reduce 355 omitted -# reduce 343 omitted +# reduce 356 omitted -# reduce 344 omitted +# reduce 357 omitted -# reduce 345 omitted +# reduce 358 omitted -# reduce 346 omitted +# reduce 359 omitted -# reduce 347 omitted +# reduce 360 omitted -# reduce 348 omitted +# reduce 361 omitted -# reduce 349 omitted +# reduce 362 omitted -# reduce 350 omitted +# reduce 363 omitted -# reduce 351 omitted +# reduce 364 omitted -# reduce 352 omitted +# reduce 365 omitted -# reduce 353 omitted +# reduce 366 omitted -# reduce 354 omitted +# reduce 367 omitted -# reduce 355 omitted +# reduce 368 omitted + +# reduce 369 omitted + +# reduce 370 omitted + +# reduce 371 omitted + +# reduce 372 omitted + +def _reduce_373(val, _values, result) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line -def _reduce_356(val, _values, result) - result = s(:if, val[1], val[3], val[4]) - result end -# reduce 357 omitted +# reduce 374 omitted -def _reduce_358(val, _values, result) +def _reduce_375(val, _values, result) result = val[1] - + result end -# reduce 359 omitted +# reduce 376 omitted -def _reduce_360(val, _values, result) +def _reduce_377(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK - + result end -# reduce 361 omitted +# reduce 378 omitted -def _reduce_362(val, _values, result) +def _reduce_379(val, _values, result) result = val[1] - + result end -def _reduce_363(val, _values, result) - result = s(:array, val[0]) - +def _reduce_380(val, _values, result) + sym, = val + + result = s(:array, sym).line lexer.lineno + result end -def _reduce_364(val, _values, result) +def _reduce_381(val, _values, result) result = list_append val[0], val[2] - + result end -def _reduce_365(val, _values, result) +def _reduce_382(val, _values, result) args, = val result = block_var args - + result end -def _reduce_366(val, _values, result) +def _reduce_383(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym - + result end -def _reduce_367(val, _values, result) +def _reduce_384(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 - + result end -def _reduce_368(val, _values, result) +def _reduce_385(val, _values, result) args, _, _ = val result = block_var args, :* - + result end -def _reduce_369(val, _values, result) +def _reduce_386(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 - + result end -def _reduce_370(val, _values, result) +def _reduce_387(val, _values, result) _, splat = val result = block_var :"*#{splat}" - + result end -def _reduce_371(val, _values, result) +def _reduce_388(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args - + result end -def _reduce_372(val, _values, result) +def _reduce_389(val, _values, result) result = block_var :* - + result end -def _reduce_373(val, _values, result) +def _reduce_390(val, _values, result) _, _, args = val result = block_var :*, args - + result end -def _reduce_374(val, _values, result) +def _reduce_391(val, _values, result) result = call_args val - + result end -def _reduce_375(val, _values, result) +def _reduce_392(val, _values, result) result = call_args val - + result end -def _reduce_376(val, _values, result) +def _reduce_393(val, _values, result) result = call_args val - + result end -def _reduce_377(val, _values, result) - result = call_args val - +def _reduce_394(val, _values, result) + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line + result end -def _reduce_378(val, _values, result) +def _reduce_395(val, _values, result) result = args val - + result end -# reduce 379 omitted +# reduce 396 omitted -def _reduce_380(val, _values, result) +def _reduce_397(val, _values, result) result = args val - + result end -def _reduce_381(val, _values, result) +def _reduce_398(val, _values, result) result = args val - + result end -def _reduce_382(val, _values, result) +def _reduce_399(val, _values, result) result = args val - + result end -def _reduce_383(val, _values, result) +def _reduce_400(val, _values, result) result = args val - + result end -def _reduce_384(val, _values, result) +def _reduce_401(val, _values, result) result = args val - + result end -def _reduce_385(val, _values, result) +def _reduce_402(val, _values, result) + result = args(val) << nil + + result +end + +def _reduce_403(val, _values, result) result = args val - + result end -def _reduce_386(val, _values, result) +def _reduce_404(val, _values, result) result = args val - + result end -def _reduce_387(val, _values, result) +def _reduce_405(val, _values, result) result = args val - + result end -def _reduce_388(val, _values, result) +def _reduce_406(val, _values, result) result = args val - + result end -def _reduce_389(val, _values, result) +def _reduce_407(val, _values, result) result = args val - + result end -def _reduce_390(val, _values, result) +def _reduce_408(val, _values, result) result = args val - + result end -def _reduce_391(val, _values, result) +def _reduce_409(val, _values, result) result = args val - + result end -def _reduce_392(val, _values, result) +def _reduce_410(val, _values, result) result = args val - + result end -def _reduce_393(val, _values, result) +def _reduce_411(val, _values, result) result = args val - + result end -def _reduce_394(val, _values, result) - result = args val - +def _reduce_412(val, _values, result) + result = 0 result end -def _reduce_395(val, _values, result) - result = 0 +def _reduce_413(val, _values, result) + self.lexer.command_start = true + result end -# reduce 396 omitted - -def _reduce_397(val, _values, result) +def _reduce_414(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -def _reduce_398(val, _values, result) - self.lexer.command_start = true - result = s(:args) - +def _reduce_415(val, _values, result) + result = s(:args).line lexer.lineno + result end -def _reduce_399(val, _values, result) +def _reduce_416(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -# reduce 400 omitted +# reduce 417 omitted -def _reduce_401(val, _values, result) +def _reduce_418(val, _values, result) result = args val - + result end -def _reduce_402(val, _values, result) +def _reduce_419(val, _values, result) result = args val - + result end -def _reduce_403(val, _values, result) +def _reduce_420(val, _values, result) result = args val - + result end -def _reduce_404(val, _values, result) - result = s(:shadow, val[0].to_sym) - +def _reduce_421(val, _values, result) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line + result end -# reduce 405 omitted +# reduce 422 omitted -def _reduce_406(val, _values, result) +def _reduce_423(val, _values, result) self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest - + result end -def _reduce_407(val, _values, result) - lpar, args, body = val +def _reduce_424(val, _values, result) + lexer.cmdarg.push false + + result +end + +def _reduce_425(val, _values, result) + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend - + result.line = line + self.env.unextend # TODO: dynapush & dynapop + result end -def _reduce_408(val, _values, result) +def _reduce_426(val, _values, result) result = args val - + result end -def _reduce_409(val, _values, result) +def _reduce_427(val, _values, result) result = val[0] result = 0 if result == s(:args) - - result -end -def _reduce_410(val, _values, result) - result = val[1] - result end -def _reduce_411(val, _values, result) +def _reduce_428(val, _values, result) result = val[1] - - result -end -def _reduce_412(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - result end -def _reduce_413(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_429(val, _values, result) + result = val[1] + result end -def _reduce_414(val, _values, result) - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] +def _reduce_430(val, _values, result) + (_, line), iter, _ = val + result = iter.line line - self.env.unextend - result end -def _reduce_415(val, _values, result) +def _reduce_431(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); @@ -5538,465 +5839,523 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] - + cmd, blk = val + + result = blk + result.insert 1, cmd + result end -def _reduce_416(val, _values, result) +def _reduce_432(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_417(val, _values, result) +def _reduce_433(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_418(val, _values, result) +def _reduce_434(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_419(val, _values, result) +def _reduce_435(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_420(val, _values, result) - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body - +def _reduce_436(val, _values, result) + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno + result end -def _reduce_421(val, _values, result) +def _reduce_437(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] - + result end -def _reduce_422(val, _values, result) +def _reduce_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_423(val, _values, result) +def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym - + result end -def _reduce_424(val, _values, result) +def _reduce_440(val, _values, result) result = new_call val[0], :call, val[2], val[1] - + result end -def _reduce_425(val, _values, result) +def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2] - + result end -def _reduce_426(val, _values, result) +def _reduce_442(val, _values, result) result = new_super val[1] - + result end -def _reduce_427(val, _values, result) - result = s(:zsuper) - +def _reduce_443(val, _values, result) + result = s(:zsuper).line lexer.lineno + result end -def _reduce_428(val, _values, result) +def _reduce_444(val, _values, result) result = new_aref val - + result end -def _reduce_429(val, _values, result) +def _reduce_445(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - - result -end -def _reduce_430(val, _values, result) - result = nil # self.env.dynamic.keys - result end -def _reduce_431(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_446(val, _values, result) + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend - + result end -def _reduce_432(val, _values, result) +def _reduce_447(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - + result end -def _reduce_433(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_448(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + result end -def _reduce_434(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_449(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end - result = new_iter nil, args, body - result.line = line +def _reduce_450(val, _values, result) + result = lexer.cmdarg.store(false) + result +end + +def _reduce_451(val, _values, result) + line, cmdarg, param, cmpstmt = val + result = new_brace_body param, cmpstmt, line self.env.unextend - + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + result end -def _reduce_435(val, _values, result) +def _reduce_452(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end + +def _reduce_453(val, _values, result) + lexer.cmdarg.push false + result +end + +def _reduce_454(val, _values, result) + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop + self.env.unextend + + result +end + +def _reduce_455(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_436(val, _values, result) +def _reduce_456(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] - + result end -# reduce 437 omitted +# reduce 457 omitted -# reduce 438 omitted +# reduce 458 omitted -def _reduce_439(val, _values, result) +def _reduce_459(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above - + result end -def _reduce_440(val, _values, result) +def _reduce_460(val, _values, result) result = nil - + result end -def _reduce_441(val, _values, result) - result = s(:array, val[0]) - +def _reduce_461(val, _values, result) + arg, = val + result = s(:array, arg).line arg.line + result end -# reduce 442 omitted +# reduce 462 omitted -# reduce 443 omitted +# reduce 463 omitted -def _reduce_444(val, _values, result) +def _reduce_464(val, _values, result) result = val[1] - + result end -# reduce 445 omitted +# reduce 465 omitted -def _reduce_446(val, _values, result) - _, body = val +def _reduce_466(val, _values, result) + (_, line), body = val + + result = body || s(:nil).line(line) - result = body || s(:nil) - result end -# reduce 447 omitted +# reduce 467 omitted -def _reduce_448(val, _values, result) +def _reduce_468(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -def _reduce_449(val, _values, result) +def _reduce_469(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -# reduce 450 omitted +# reduce 470 omitted + +def _reduce_471(val, _values, result) + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str -def _reduce_451(val, _values, result) - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] - result end -def _reduce_452(val, _values, result) +def _reduce_472(val, _values, result) debug20 23, val, result - + result end -# reduce 453 omitted +# reduce 473 omitted -def _reduce_454(val, _values, result) +def _reduce_474(val, _values, result) result = self.literal_concat val[0], val[1] - + result end -def _reduce_455(val, _values, result) - result = val[1] - +def _reduce_475(val, _values, result) + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str + result end -def _reduce_456(val, _values, result) +def _reduce_476(val, _values, result) result = new_string val - + result end -def _reduce_457(val, _values, result) - result = new_xstring val[1] - +def _reduce_477(val, _values, result) + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? + result end -def _reduce_458(val, _values, result) +def _reduce_478(val, _values, result) result = new_regexp val - + result end -def _reduce_459(val, _values, result) - result = s(:array) - +def _reduce_479(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_460(val, _values, result) +def _reduce_480(val, _values, result) result = val[1] - + result end -def _reduce_461(val, _values, result) +def _reduce_481(val, _values, result) result = new_word_list - + result end -def _reduce_462(val, _values, result) +def _reduce_482(val, _values, result) result = val[0].dup << new_word_list_entry(val) - + result end -# reduce 463 omitted +# reduce 483 omitted -def _reduce_464(val, _values, result) +def _reduce_484(val, _values, result) result = self.literal_concat val[0], val[1] - + result end -def _reduce_465(val, _values, result) - result = s(:array) - +def _reduce_485(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_466(val, _values, result) - result = val[1] - +def _reduce_486(val, _values, result) + result = lexer.lineno result end -def _reduce_467(val, _values, result) - result = new_symbol_list - +def _reduce_487(val, _values, result) + _, line, list, _, = val + list.line = line + result = list + result end -def _reduce_468(val, _values, result) - result = val[0].dup << new_symbol_list_entry(val) - +def _reduce_488(val, _values, result) + result = new_symbol_list.line lexer.lineno + result end -def _reduce_469(val, _values, result) - result = s(:array) - +def _reduce_489(val, _values, result) + list, * = val + result = list.dup << new_symbol_list_entry(val) + + result +end + +def _reduce_490(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_470(val, _values, result) +def _reduce_491(val, _values, result) result = val[1] - + result end -def _reduce_471(val, _values, result) - result = s(:array) - +def _reduce_492(val, _values, result) + result = s(:array).line lexer.lineno # FIX + result end -def _reduce_472(val, _values, result) +def _reduce_493(val, _values, result) result = val[1] - + result end -def _reduce_473(val, _values, result) +def _reduce_494(val, _values, result) result = new_qword_list - + result end -def _reduce_474(val, _values, result) +def _reduce_495(val, _values, result) result = val[0].dup << new_qword_list_entry(val) - + result end -def _reduce_475(val, _values, result) +def _reduce_496(val, _values, result) result = new_qsym_list - + result end -def _reduce_476(val, _values, result) +def _reduce_497(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) - + result end -def _reduce_477(val, _values, result) - result = s(:str, "") - +def _reduce_498(val, _values, result) + result = s(:str, "").line lexer.lineno + result end -def _reduce_478(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_499(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_479(val, _values, result) +def _reduce_500(val, _values, result) result = nil - + result end -def _reduce_480(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_501(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_481(val, _values, result) +def _reduce_502(val, _values, result) result = nil - + result end -def _reduce_482(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_503(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_483(val, _values, result) +def _reduce_504(val, _values, result) result = new_string val - + result end -def _reduce_484(val, _values, result) +def _reduce_505(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? - + lexer.lex_state = EXPR_BEG + result end -def _reduce_485(val, _values, result) - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) - +def _reduce_506(val, _values, result) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line + result end -def _reduce_486(val, _values, result) +def _reduce_507(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value - + lexer.lex_state = EXPR_BEG + result end -def _reduce_487(val, _values, result) - # TODO: tRCURLY -> tSTRING_DEND +def _reduce_508(val, _values, result) _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -6006,677 +6365,693 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end - + result end -def _reduce_488(val, _values, result) - result = s(:gvar, val[0].to_sym) +def _reduce_509(val, _values, result) + result = s(:gvar, val[0].to_sym).line lexer.lineno result end -def _reduce_489(val, _values, result) - result = s(:ivar, val[0].to_sym) +def _reduce_510(val, _values, result) + result = s(:ivar, val[0].to_sym).line lexer.lineno result end -def _reduce_490(val, _values, result) - result = s(:cvar, val[0].to_sym) +def _reduce_511(val, _values, result) + result = s(:cvar, val[0].to_sym).line lexer.lineno result end -# reduce 491 omitted +# reduce 512 omitted -def _reduce_492(val, _values, result) - lexer.lex_state = :expr_end +def _reduce_513(val, _values, result) + lexer.lex_state = EXPR_END result = val[1].to_sym - + result end -def _reduce_493(val, _values, result) +def _reduce_514(val, _values, result) result = val[0].to_sym - + result end -# reduce 494 omitted +# reduce 515 omitted -# reduce 495 omitted +# reduce 516 omitted -# reduce 496 omitted +# reduce 517 omitted -# reduce 497 omitted +# reduce 518 omitted -def _reduce_498(val, _values, result) - lexer.lex_state = :expr_end - result = val[1] +def _reduce_519(val, _values, result) + _, result, _ = val - result ||= s(:str, "") + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end - + result end -# reduce 499 omitted +# reduce 520 omitted -# reduce 500 omitted +# reduce 521 omitted -def _reduce_501(val, _values, result) +def _reduce_522(val, _values, result) result = -val[1] # TODO: pt_testcase - + result end -def _reduce_502(val, _values, result) +def _reduce_523(val, _values, result) result = -val[1] # TODO: pt_testcase - + result end -# reduce 503 omitted +# reduce 524 omitted -# reduce 504 omitted +# reduce 525 omitted -# reduce 505 omitted +# reduce 526 omitted -# reduce 506 omitted +# reduce 527 omitted -# reduce 507 omitted +# reduce 528 omitted -def _reduce_508(val, _values, result) - result = s(:nil) +def _reduce_529(val, _values, result) + result = s(:nil).line lexer.lineno result end -def _reduce_509(val, _values, result) - result = s(:self) +def _reduce_530(val, _values, result) + result = s(:self).line lexer.lineno result end -def _reduce_510(val, _values, result) - result = s(:true) +def _reduce_531(val, _values, result) + result = s(:true).line lexer.lineno result end -def _reduce_511(val, _values, result) - result = s(:false) +def _reduce_532(val, _values, result) + result = s(:false).line lexer.lineno result end -def _reduce_512(val, _values, result) - result = s(:str, self.file) +def _reduce_533(val, _values, result) + result = s(:str, self.file).line lexer.lineno result end -def _reduce_513(val, _values, result) - result = s(:lit, lexer.lineno) +def _reduce_534(val, _values, result) + result = s(:lit, lexer.lineno).line lexer.lineno result end -def _reduce_514(val, _values, result) +def _reduce_535(val, _values, result) + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end - + result end -def _reduce_515(val, _values, result) +def _reduce_536(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_516(val, _values, result) +def _reduce_537(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_517(val, _values, result) +def _reduce_538(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_518(val, _values, result) +def _reduce_539(val, _values, result) result = self.assignable val[0] debug20 29, val, result - - result -end -def _reduce_519(val, _values, result) - result = s(:nth_ref, val[0]) result end -def _reduce_520(val, _values, result) - result = s(:back_ref, val[0]) +def _reduce_540(val, _values, result) + result = s(:nth_ref, val[0]).line lexer.lineno result end -def _reduce_521(val, _values, result) - result = nil - +def _reduce_541(val, _values, result) + result = s(:back_ref, val[0]).line lexer.lineno result end -def _reduce_522(val, _values, result) - lexer.lex_state = :expr_beg - +def _reduce_542(val, _values, result) + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_523(val, _values, result) +def _reduce_543(val, _values, result) result = val[2] - + result end -def _reduce_524(val, _values, result) - yyerrok +def _reduce_544(val, _values, result) result = nil - debug20 30, val, result - + result end -def _reduce_525(val, _values, result) +def _reduce_545(val, _values, result) result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; - + result end -def _reduce_526(val, _values, result) - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true - +def _reduce_546(val, _values, result) + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + + result +end + +def _reduce_547(val, _values, result) + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_527(val, _values, result) +def _reduce_548(val, _values, result) result = args val - + result end -def _reduce_528(val, _values, result) +def _reduce_549(val, _values, result) result = args val - + result end -def _reduce_529(val, _values, result) +def _reduce_550(val, _values, result) result = args val - + result end -# reduce 530 omitted +# reduce 551 omitted -def _reduce_531(val, _values, result) +def _reduce_552(val, _values, result) result = val[1] - + result end -def _reduce_532(val, _values, result) +def _reduce_553(val, _values, result) result = nil - + result end -def _reduce_533(val, _values, result) +def _reduce_554(val, _values, result) result = args val - + result end -def _reduce_534(val, _values, result) +def _reduce_555(val, _values, result) result = args val - + result end -def _reduce_535(val, _values, result) +def _reduce_556(val, _values, result) result = args val - + result end -def _reduce_536(val, _values, result) +def _reduce_557(val, _values, result) result = args val - + result end -def _reduce_537(val, _values, result) +def _reduce_558(val, _values, result) result = args val - + result end -def _reduce_538(val, _values, result) +def _reduce_559(val, _values, result) result = args val - + result end -def _reduce_539(val, _values, result) +def _reduce_560(val, _values, result) result = args val - + result end -def _reduce_540(val, _values, result) +def _reduce_561(val, _values, result) result = args val - + result end -def _reduce_541(val, _values, result) +def _reduce_562(val, _values, result) result = args val - + result end -def _reduce_542(val, _values, result) +def _reduce_563(val, _values, result) result = args val - + result end -def _reduce_543(val, _values, result) +def _reduce_564(val, _values, result) result = args val - + result end -def _reduce_544(val, _values, result) +def _reduce_565(val, _values, result) result = args val - + result end -def _reduce_545(val, _values, result) +def _reduce_566(val, _values, result) result = args val - + result end -def _reduce_546(val, _values, result) +def _reduce_567(val, _values, result) result = args val - + result end -def _reduce_547(val, _values, result) +def _reduce_568(val, _values, result) result = args val - + result end -def _reduce_548(val, _values, result) +def _reduce_569(val, _values, result) yyerror "formal argument cannot be a constant" - + result end -def _reduce_549(val, _values, result) +def _reduce_570(val, _values, result) yyerror "formal argument cannot be an instance variable" - + result end -def _reduce_550(val, _values, result) +def _reduce_571(val, _values, result) yyerror "formal argument cannot be a global variable" - + result end -def _reduce_551(val, _values, result) +def _reduce_572(val, _values, result) yyerror "formal argument cannot be a class variable" - + result end -# reduce 552 omitted +# reduce 573 omitted -def _reduce_553(val, _values, result) +def _reduce_574(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier - + result end -# reduce 554 omitted +# reduce 575 omitted -def _reduce_555(val, _values, result) +def _reduce_576(val, _values, result) result = val[1] - + result end -def _reduce_556(val, _values, result) - case val[0] +def _reduce_577(val, _values, result) + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end - + result end -def _reduce_557(val, _values, result) +def _reduce_578(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item - + result end -def _reduce_558(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? +def _reduce_579(val, _values, result) + # TODO: new_kw_arg + (label, line), arg = val + identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) - + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line + result end -def _reduce_559(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_580(val, _values, result) + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id, expr).line(line)).line line - result = s(:array, s(:kwarg, identifier, val[1])) - result end -# reduce 560 omitted +# reduce 581 omitted -def _reduce_561(val, _values, result) +def _reduce_582(val, _values, result) list, _, item = val result = list << item.last - + result end -# reduce 562 omitted +# reduce 583 omitted -def _reduce_563(val, _values, result) +def _reduce_584(val, _values, result) result = args val - + result end -# reduce 564 omitted +# reduce 585 omitted -# reduce 565 omitted +# reduce 586 omitted + +def _reduce_587(val, _values, result) + name = val[1].to_sym + self.assignable name + result = :"**#{name}" -def _reduce_566(val, _values, result) - result = :"**#{val[1]}" - result end -def _reduce_567(val, _values, result) +def _reduce_588(val, _values, result) result = :"**" - + result end -def _reduce_568(val, _values, result) +def _reduce_589(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names - + result end -def _reduce_569(val, _values, result) +def _reduce_590(val, _values, result) result = self.assignable val[0], val[2] - + result end -def _reduce_570(val, _values, result) - result = s(:block, val[0]) - +def _reduce_591(val, _values, result) + optblk, = val + result = s(:block, optblk).line optblk.line + result end -def _reduce_571(val, _values, result) - result = val[0] - result << val[2] - +def _reduce_592(val, _values, result) + optarg, _, optblk = val + result = optarg + result << optblk + result end -def _reduce_572(val, _values, result) - result = s(:block, val[0]) - +def _reduce_593(val, _values, result) + opt, = val + result = s(:block, opt).line opt.line + result end -def _reduce_573(val, _values, result) +def _reduce_594(val, _values, result) result = self.block_append val[0], val[2] - + result end -# reduce 574 omitted +# reduce 595 omitted -# reduce 575 omitted +# reduce 596 omitted -def _reduce_576(val, _values, result) +def _reduce_597(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" - + result end -def _reduce_577(val, _values, result) +def _reduce_598(val, _values, result) name = :"*" self.env[name] = :lvar result = name - + result end -# reduce 578 omitted +# reduce 599 omitted -# reduce 579 omitted +# reduce 600 omitted -def _reduce_580(val, _values, result) +def _reduce_601(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym - + result end -def _reduce_581(val, _values, result) +def _reduce_602(val, _values, result) result = val[1] - + result end -def _reduce_582(val, _values, result) +def _reduce_603(val, _values, result) result = nil - + result end -# reduce 583 omitted +# reduce 604 omitted + +def _reduce_605(val, _values, result) + lexer.lex_state = EXPR_BEG -def _reduce_584(val, _values, result) - lexer.lex_state = :expr_beg - result end -def _reduce_585(val, _values, result) +def _reduce_606(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit - - result -end -def _reduce_586(val, _values, result) - result = s(:array) - result end -def _reduce_587(val, _values, result) - result = val[0] - +def _reduce_607(val, _values, result) + result = s(:array).line lexer.lineno + result end -# reduce 588 omitted +# reduce 608 omitted -def _reduce_589(val, _values, result) +# reduce 609 omitted + +def _reduce_610(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash - + result end -def _reduce_590(val, _values, result) - result = s(:array, val[0], val[2]) - +def _reduce_611(val, _values, result) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line + result end -def _reduce_591(val, _values, result) - result = s(:array, s(:lit, val[0][0].to_sym), val.last) - +def _reduce_612(val, _values, result) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line + result end -def _reduce_592(val, _values, result) - result = s(:array, s(:kwsplat, val[1])) - +def _reduce_613(val, _values, result) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line + result end -# reduce 593 omitted +# reduce 614 omitted -# reduce 594 omitted +# reduce 615 omitted -# reduce 595 omitted +# reduce 616 omitted -# reduce 596 omitted +# reduce 617 omitted -# reduce 597 omitted +# reduce 618 omitted -# reduce 598 omitted +# reduce 619 omitted -# reduce 599 omitted +# reduce 620 omitted -# reduce 600 omitted +# reduce 621 omitted -# reduce 601 omitted +# reduce 622 omitted -# reduce 602 omitted +# reduce 623 omitted -# reduce 603 omitted +# reduce 624 omitted -# reduce 604 omitted +# reduce 625 omitted -# reduce 605 omitted +# reduce 626 omitted -# reduce 606 omitted +# reduce 627 omitted -# reduce 607 omitted +# reduce 628 omitted -# reduce 608 omitted +# reduce 629 omitted -# reduce 609 omitted +# reduce 630 omitted -# reduce 610 omitted +# reduce 631 omitted -# reduce 611 omitted +# reduce 632 omitted -# reduce 612 omitted +# reduce 633 omitted -# reduce 613 omitted +# reduce 634 omitted -# reduce 614 omitted +# reduce 635 omitted -def _reduce_615(val, _values, result) - yyerrok +# reduce 636 omitted + +# reduce 637 omitted + +def _reduce_638(val, _values, result) + yyerrok result end -# reduce 616 omitted +# reduce 639 omitted -# reduce 617 omitted +# reduce 640 omitted -def _reduce_618(val, _values, result) - yyerrok +def _reduce_641(val, _values, result) + yyerrok result end -def _reduce_619(val, _values, result) - result = nil; +def _reduce_642(val, _values, result) + result = nil; result end diff -Nru ruby-ruby-parser-3.11.0/lib/ruby20_parser.y ruby-ruby-parser-3.15.1/lib/ruby20_parser.y --- ruby-ruby-parser-3.11.0/lib/ruby20_parser.y 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby20_parser.y 2021-01-18 16:48:25.000000000 +0000 @@ -20,35 +20,35 @@ tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG -prechigh - right tBANG tTILDE tUPLUS - right tPOW - right tUMINUS_NUM tUMINUS - left tSTAR2 tDIVIDE tPERCENT - left tPLUS tMINUS - left tLSHFT tRSHFT - left tAMPER2 - left tPIPE tCARET - left tGT tGEQ tLT tLEQ - nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH - left tANDOP - left tOROP - nonassoc tDOT2 tDOT3 - right tEH tCOLON - left kRESCUE_MOD - right tEQL tOP_ASGN - nonassoc kDEFINED - right kNOT - left kOR kAND - nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD - nonassoc tLBRACE_ARG - nonassoc tLOWEST preclow + nonassoc tLOWEST + nonassoc tLBRACE_ARG + nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD + left kOR kAND + right kNOT + nonassoc kDEFINED + right tEQL tOP_ASGN + left kRESCUE_MOD + right tEH tCOLON + nonassoc tDOT2 tDOT3 + left tOROP + left tANDOP + nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH + left tGT tGEQ tLT tLEQ + left tPIPE tCARET + left tAMPER2 + left tLSHFT tRSHFT + left tPLUS tMINUS + left tSTAR2 tDIVIDE tPERCENT # TODO: tSTAR2 -> tMULT + right tUMINUS_NUM tUMINUS + right tPOW + right tBANG tTILDE tUPLUS +prechigh rule program: { - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG } top_compstmt { @@ -57,7 +57,8 @@ top_compstmt: top_stmts opt_terms { - result = val[0] + stmt, _ = val + result = stmt } top_stmts: none @@ -69,14 +70,6 @@ | error top_stmt top_stmt: stmt - { - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - } | klBEGIN { if (self.in_def || self.in_single > 0) then @@ -85,14 +78,40 @@ end self.env.extend } - tLCURLY top_compstmt tRCURLY + begin_block + { + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + } + + begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY { - result = new_iter s(:preexe), nil, val[3] + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt } - bodystmt: compstmt opt_rescue opt_else opt_ensure + bodystmt: compstmt opt_rescue k_else { - result = new_body val + res = _values[-2] + yyerror "else without rescue is useless" unless res + } + compstmt + opt_ensure + { + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + } + | compstmt opt_rescue opt_ensure + { + body, resc, ens = val + + result = new_body [body, resc, nil, ens] } compstmt: stmts opt_terms @@ -101,8 +120,8 @@ } stmts: none - | stmt - | stmts terms stmt + | stmt_or_begin # TODO: newline_node ? + | stmts terms stmt_or_begin { result = self.block_append val[0], val[2] } @@ -112,22 +131,30 @@ debug20 2, val, result } + stmt_or_begin: stmt + | klBEGIN + { + yyerror "BEGIN is permitted only at toplevel" + } + stmt: kALIAS fitem { - lexer.lex_state = :expr_fname - result = self.lexer.lineno + lexer.lex_state = EXPR_FNAME } fitem { - result = s(:alias, val[1], val[3]).line(val[2]) + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line } | kALIAS tGVAR tGVAR { - result = s(:valias, val[1].to_sym, val[2].to_sym) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line } | kALIAS tGVAR tBACK_REF { - result = s(:valias, val[1].to_sym, :"$#{val[2]}") + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line } | kALIAS tGVAR tNTH_REF { @@ -139,54 +166,88 @@ } | stmt kIF_MOD expr_value { - result = new_if val[2], val[0], nil + t, _, c = val + result = new_if c, t, nil } | stmt kUNLESS_MOD expr_value { - result = new_if val[2], nil, val[0] + f, _, c = val + result = new_if c, nil, f } | stmt kWHILE_MOD expr_value { - result = new_while val[0], val[2], true + e, _, c = val + result = new_while e, c, true } | stmt kUNTIL_MOD expr_value { - result = new_until val[0], val[2], true + e, _, c = val + result = new_until e, c, true } | stmt kRESCUE_MOD stmt { - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody } | klEND tLCURLY compstmt tRCURLY { + (_, line), _, stmt, _ = val + if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end - result = new_iter s(:postexe), 0, val[2] + + result = new_iter s(:postexe).line(line), 0, stmt } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } - | var_lhs tOP_ASGN command_call + | lhs tEQL mrhs + { + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + } + | mlhs tEQL arg_value + { + result = new_masgn val[0], val[2], :wrap + } + | mlhs tEQL mrhs + { + result = new_masgn val[0], val[2] + } + | expr + + command_asgn: lhs tEQL command_rhs + { + result = new_assign val[0], val[2] + } + # | lhs tEQL command_asgn + # { + # result = new_assign val[0], val[2] + # } + | var_lhs tOP_ASGN command_rhs { result = new_op_asgn val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn1 val } - | primary_value call_op tIDENTIFIER tOP_ASGN command_call + | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } - | primary_value call_op tCONSTANT tOP_ASGN command_call + | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' @@ -194,59 +255,53 @@ end result.line = val[0].line } - | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call + | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | backref tOP_ASGN command_call + | backref tOP_ASGN command_rhs { self.backref_assign_error val[0] } - | lhs tEQL mrhs - { - result = new_assign val[0], s(:svalue, val[2]) - } - | mlhs tEQL arg_value - { - result = new_masgn val[0], val[2], :wrap - } - | mlhs tEQL mrhs - { - result = new_masgn val[0], val[2] - } - | expr - command_asgn: lhs tEQL command_call + command_rhs: command_call =tOP_ASGN { - result = new_assign val[0], val[2] - } - | lhs tEQL command_asgn - { - result = new_assign val[0], val[2] + expr, = val + result = value_expr expr } + | command_asgn expr: command_call | expr kAND expr { - result = logical_op :and, val[0], val[2] + lhs, _, rhs = val + result = logical_op :and, lhs, rhs } | expr kOR expr { - result = logical_op :or, val[0], val[2] + lhs, _, rhs = val + result = logical_op :or, lhs, rhs } | kNOT opt_nl expr { - result = s(:call, val[2], :"!") + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op } | tBANG command_call { - result = s(:call, val[1], :"!") + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y } | arg @@ -255,54 +310,71 @@ result = value_expr(val[0]) } + expr_value_do: { + lexer.cond.push true + } + expr_value do + { + lexer.cond.pop + } + { + _, expr, _, _ = val + result = expr + } + command_call: command | block_command block_command: block_call - | block_call dot_or_colon operation2 command_args + | block_call call_op2 operation2 command_args { - result = new_call val[0], val[2].to_sym, val[3] + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line } cmd_brace_block: tLBRACE_ARG { - self.env.extend(:dynamic) + # self.env.extend(:dynamic) result = self.lexer.lineno } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY + brace_body tRCURLY { - result = new_iter nil, val[2], val[4] - result.line = val[1] + _, line, body, _ = val - self.env.unextend + result = body + result.line = line + + # self.env.unextend } fcall: operation { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno } command: fcall command_args =tLOWEST { - result = val[0].concat val[1].sexp_body # REFACTOR pattern + call, args = val + result = call.concat args.sexp_body } | fcall command_args cmd_brace_block { - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block - result, operation = val[2], result + result, operation = block, result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { - result = new_call val[0], val[2].to_sym, val[3], val[1] + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop } | primary_value call_op operation2 command_args cmd_brace_block { @@ -334,17 +406,19 @@ } | kYIELD command_args { - result = new_yield val[1] + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield } - | kRETURN call_args + | k_return call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) + (_, line), args = val + result = s(:break, ret_args(args)).line line } | kNEXT call_args { @@ -361,56 +435,79 @@ mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { - result = s(:masgn, s(:array, val[1])) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l } mlhs_basic: mlhs_head { - result = s(:masgn, val[0]) + head, = val + result = s(:masgn, head).line head.line } | mlhs_head mlhs_item { - result = s(:masgn, val[0] << val[1].compact) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line } | mlhs_head tSTAR mlhs_node { - result = s(:masgn, val[0] << s(:splat, val[2])) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val - result = list_append ary1, s(:splat, splat) + result = list_append ary1, s(:splat, splat).line(splat.line) result.concat ary2.sexp_body - result = s(:masgn, result) + result = s(:masgn, result).line result.line } | mlhs_head tSTAR { - result = s(:masgn, val[0] << s(:splat)) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l } | mlhs_head tSTAR tCOMMA mlhs_post { - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR mlhs_node { - result = s(:masgn, s(:array, s(:splat, val[1]))) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l } | tSTAR mlhs_node tCOMMA mlhs_post { - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR { - result = s(:masgn, s(:array, s(:splat))) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l } | tSTAR tCOMMA mlhs_post { - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l } mlhs_item: mlhs_node @@ -421,7 +518,8 @@ mlhs_head: mlhs_item tCOMMA { - result = s(:array, val[0]) + lhs, _ = val + result = s(:array, lhs).line lhs.line } | mlhs_head mlhs_item tCOMMA { @@ -430,7 +528,8 @@ mlhs_post: mlhs_item { - result = s(:array, val[0]) + item, = val + result = s(:array, item).line item.line } | mlhs_post tCOMMA mlhs_item { @@ -455,7 +554,8 @@ } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + recv, _, id = val + result = new_attrasgn recv, id } | primary_value call_op tCONSTANT { @@ -468,7 +568,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l } | tCOLON3 tCONSTANT { @@ -477,7 +580,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, nil, s(:colon3, val[1].to_sym)) + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -486,24 +592,31 @@ lhs: user_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line } | keyword_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { - result = self.aryset val[0], val[2] + lhs, _, args, _ = val + result = self.aryset lhs, args } | primary_value call_op tIDENTIFIER # REFACTOR { - result = new_attrasgn val[0], val[2], val[1] + lhs, op, id = val + result = new_attrasgn lhs, id, op } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + lhs, _, id = val + result = new_attrasgn lhs, id } | primary_value call_op tCONSTANT # REFACTOR? { @@ -511,21 +624,27 @@ } | primary_value tCOLON2 tCONSTANT { + expr, _, id = val + if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l } | tCOLON3 tCONSTANT { + _, id = val + if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -540,7 +659,8 @@ cpath: tCOLON3 cname { - result = s(:colon3, val[1].to_sym) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno } | cname { @@ -548,27 +668,32 @@ } | primary_value tCOLON2 cname { - result = s(:colon2, val[0], val[2].to_sym) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line } fname: tIDENTIFIER | tCONSTANT | tFID | op { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[0] } | reswords { - lexer.lex_state = :expr_end - result = val[0] + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym } fsym: fname | symbol fitem: fsym { - result = s(:lit, val[0].to_sym) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno } | dsym @@ -579,7 +704,7 @@ | undef_list tCOMMA { - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fitem { @@ -591,6 +716,7 @@ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 + # TODO: tUBANG dead? | tUBANG reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND @@ -603,68 +729,72 @@ | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL - arg: lhs tEQL arg + arg: lhs tEQL arg_rhs { result = new_assign val[0], val[2] } - | lhs tEQL arg kRESCUE_MOD arg - { - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - } - | var_lhs tOP_ASGN arg + | var_lhs tOP_ASGN arg_rhs { result = new_op_asgn val } - | var_lhs tOP_ASGN arg kRESCUE_MOD arg + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) + result = new_op_asgn1 val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg + | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn2 val } - | primary_value call_op tIDENTIFIER tOP_ASGN arg + | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = new_op_asgn2 val } - | primary_value call_op tCONSTANT tOP_ASGN arg + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { - result = new_op_asgn2 val + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg + | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] } - | primary_value tCOLON2 tCONSTANT tOP_ASGN arg + | tCOLON3 tCONSTANT { - yyerror "constant re-assignment" + result = self.lexer.lineno } - | tCOLON3 tCONSTANT tOP_ASGN arg + tOP_ASGN arg_rhs { - yyerror "constant re-assignment" + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] } - | backref tOP_ASGN arg + | backref tOP_ASGN arg_rhs { - self.backref_assign_error val[0] + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end } | arg tPLUS arg @@ -693,11 +823,14 @@ } | tUMINUS_NUM tINTEGER tPOW arg { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") } | tUMINUS_NUM tFLOAT tPOW arg { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + ## TODO: why is this 2.0 only? debug20 12, val, result } @@ -725,22 +858,7 @@ { result = new_call val[0], :"<=>", argl(val[2]) } - | arg tGT arg - { - result = new_call val[0], :">", argl(val[2]) - } - | arg tGEQ arg - { - result = new_call val[0], :">=", argl(val[2]) - } - | arg tLT arg - { - result = new_call val[0], :"<", argl(val[2]) - } - | arg tLEQ arg - { - result = new_call val[0], :"<=", argl(val[2]) - } + | rel_expr =tCMP | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) @@ -755,15 +873,19 @@ } | arg tMATCH arg { - result = new_match val[0], val[2] + lhs, _, rhs = val + result = new_match lhs, rhs } | arg tNMATCH arg { - result = s(:not, new_match(val[0], val[2])) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line } | tBANG arg { - result = new_call val[1], :"!" + _, arg = val + result = new_call arg, :"!" + result.line arg.line } | tTILDE arg { @@ -791,14 +913,33 @@ } | kDEFINED opt_nl arg { - result = s(:defined, val[2]) + (_, line), _, arg = val + result = s(:defined, arg).line line } | arg tEH arg opt_nl tCOLON arg { - result = s(:if, val[0], val[2], val[5]) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line } | primary + relop: tGT + | tLT + | tGEQ + | tLEQ + + rel_expr: arg relop arg =tGT + { + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + } + | rel_expr relop arg =tGT + { + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + } + arg_value: arg { result = value_expr(val[0]) @@ -818,22 +959,28 @@ result = args [array_to_hash(val[0])] } + arg_rhs: arg =tOP_ASGN + | arg kRESCUE_MOD arg + { + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + } + paren_args: tLPAREN2 opt_call_args rparen { - result = val[1] + _, args, _ = val + result = args } opt_paren_args: none | paren_args opt_call_args: none - { - result = val[0] - } | call_args - { - result = val[0] - } | args tCOMMA { result = args val @@ -855,17 +1002,14 @@ | args opt_block_arg { result = call_args val - result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] + result = call_args [array_to_hash(val[0]), val[1]] } | args tCOMMA assocs opt_block_arg { - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] + result = call_args [val[0], array_to_hash(val[2]), val[3]] } | block_arg { @@ -873,18 +1017,45 @@ } command_args: { - result = lexer.cmdarg.stack.dup # TODO: smell? + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead } call_args { - lexer.cmdarg.stack.replace val[0] - result = val[1] + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args } block_arg: tAMPER arg_value { - result = s(:block_pass, val[1]) + _, arg = val + result = s(:block_pass, arg).line arg.line } opt_block_arg: tCOMMA block_arg @@ -895,19 +1066,27 @@ args: arg_value { - result = s(:array, val[0]) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno } | tSTAR arg_value { - result = s(:array, s(:splat, val[1])) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line } | args tCOMMA arg_value { - result = self.list_append val[0], val[2] + args, _, id = val + result = self.list_append args, id } | args tCOMMA tSTAR arg_value { - result = self.list_append val[0], s(:splat, val[3]) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) } mrhs: args tCOMMA arg_value @@ -916,11 +1095,14 @@ } | args tCOMMA tSTAR arg_value { - result = self.arg_concat val[0], val[3] + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat } | tSTAR arg_value { - result = s(:splat, val[1]) + _, arg = val + result = s(:splat, arg).line arg.line } primary: literal @@ -935,58 +1117,65 @@ | backref | tFID { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call nil, msg.to_sym } - | kBEGIN + | k_begin { + lexer.cmdarg.push false result = self.lexer.lineno } - bodystmt kEND + bodystmt k_end { - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] + lexer.cmdarg.pop + result = new_begin val } - | tLPAREN_ARG rparen + | tLPAREN_ARG { - debug20 13, val, result + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno } - | tLPAREN_ARG + rparen { - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these + _, line, _ = val + result = s(:begin).line line } - expr + | tLPAREN_ARG + stmt { - lexer.lex_state = :expr_endarg + lexer.lex_state = EXPR_ENDARG } rparen { - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt } | tLPAREN compstmt tRPAREN { - result = val[1] || s(:nil) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true } | primary_value tCOLON2 tCONSTANT { - result = s(:colon2, val[0], val[2].to_sym) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line } | tCOLON3 tCONSTANT { - result = s(:colon3, val[1].to_sym) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno } - | tLBRACK aref_args tRBRACK + | tLBRACK { result = lexer.lineno } aref_args tRBRACK { - result = val[1] || s(:array) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args + result.line line } | tLBRACE { @@ -996,9 +1185,10 @@ { result = new_hash val } - | kRETURN + | k_return { - result = s(:return) + (_, line), = val + result = s(:return).line line } | kYIELD tLPAREN2 call_args rparen { @@ -1014,11 +1204,14 @@ } | kDEFINED opt_nl tLPAREN2 expr rparen { - result = s(:defined, val[3]) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line } | kNOT tLPAREN2 expr rparen { - result = s(:call, val[2], :"!") + _, _, lhs, _ = val + result = new_call lhs, :"!" } | kNOT tLPAREN2 rparen { @@ -1026,11 +1219,11 @@ } | fcall brace_block { - oper, iter = val[0], val[1] - call = oper # FIX + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line + # FIX: probably not: call.line = iter.line } | method_call | method_call brace_block @@ -1044,61 +1237,42 @@ { result = val[1] # TODO: fix lineno } - | kIF expr_value then compstmt if_tail kEND - { - result = new_if val[1], val[3], val[4] - } - | kUNLESS expr_value then compstmt opt_else kEND - { - result = new_if val[1], val[4], val[3] - } - | kWHILE - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_if expr_value then compstmt if_tail k_end { - result = new_while val[5], val[2], true + _, c, _, t, f, _ = val + result = new_if c, t, f } - | kUNTIL + | k_unless expr_value then compstmt opt_else k_end { - lexer.cond.push true + _, c, _, t, f, _ = val + result = new_if c, f, t } - expr_value do + | k_while expr_value_do compstmt k_end { - lexer.cond.pop + _, cond, body, _ = val + result = new_while body, cond, true } - compstmt kEND + | k_until expr_value_do compstmt k_end { - result = new_until val[5], val[2], true + _, cond, body, _ = val + result = new_until body, cond, true } - | kCASE expr_value opt_terms case_body kEND + | k_case expr_value opt_terms case_body k_end { (_, line), expr, _, body, _ = val result = new_case expr, body, line } - | kCASE opt_terms case_body kEND + | k_case opt_terms case_body k_end { (_, line), _, body, _ = val result = new_case nil, body, line } - | kFOR for_var kIN + | k_for for_var kIN expr_value_do compstmt k_end { - lexer.cond.push true + _, var, _, iter, body, _ = val + result = new_for iter, var, body } - expr_value do - { - lexer.cond.pop - } - compstmt kEND - { - result = new_for val[4], val[1], val[7] - } - | kCLASS + | k_class { result = self.lexer.lineno } @@ -1110,13 +1284,13 @@ end self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kCLASS tLSHFT + | k_class tLSHFT { result = self.lexer.lineno } @@ -1131,13 +1305,13 @@ self.in_single = 0 self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kMODULE + | k_module { result = self.lexer.lineno } @@ -1149,74 +1323,90 @@ self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kDEF fname + | k_def fname { - result = [self.in_def, self.lexer.cmdarg.stack.dup] + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt { result = lexer.lineno } k_end { - in_def, cmdarg = val[2] + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body } - | kDEF singleton dot_or_colon + | k_def singleton dot_or_colon { - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fname { - self.in_single += 1 + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt k_end { - line, cmdarg = val[5] - result = new_defs val - result[3].line line + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body } | kBREAK { - result = s(:break) + (_, line), = val + result = s(:break).line line } | kNEXT { - result = s(:next) + (_, line), = val + result = s(:next).line line } | kREDO { - result = s(:redo) + (_, line), = val + result = s(:redo).line line } | kRETRY { - result = s(:retry) + (_, line), = val + result = s(:retry).line line } primary_value: primary @@ -1235,7 +1425,15 @@ k_class: kCLASS k_module: kMODULE k_def: kDEF + k_do: kDO + k_do_block: kDO_BLOCK + k_rescue: kRESCUE + k_ensure: kENSURE + k_when: kWHEN + k_else: kELSE + k_elsif: kELSIF k_end: kEND + k_return: kRETURN then: term | kTHEN @@ -1245,9 +1443,11 @@ | kDO_COND if_tail: opt_else - | kELSIF expr_value then compstmt if_tail + | k_elsif expr_value then compstmt if_tail { - result = s(:if, val[1], val[3], val[4]) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line } opt_else: none @@ -1270,7 +1470,9 @@ f_marg_list: f_marg { - result = s(:array, val[0]) + sym, = val + + result = s(:array, sym).line lexer.lineno } | f_marg_list tCOMMA f_marg { @@ -1344,7 +1546,9 @@ } | f_block_arg { - result = call_args val + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line } opt_block_args_tail: tCOMMA block_args_tail @@ -1375,7 +1579,7 @@ } | f_arg tCOMMA { - result = args val + result = args(val) << nil } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { @@ -1416,18 +1620,22 @@ opt_block_param: none { result = 0 } | block_param_def + { + self.lexer.command_start = true + } block_param_def: tPIPE opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } | tOROP { - self.lexer.command_start = true - result = s(:args) + result = s(:args).line lexer.lineno } | tPIPE block_param opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } @@ -1448,26 +1656,33 @@ bvar: tIDENTIFIER { - result = s(:shadow, val[0].to_sym) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line } | f_bad_arg lambda: { self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } - f_larglist lambda_body + f_larglist { - lpar, args, body = val + lexer.cmdarg.push false + } + lambda_body + { + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend + result.line = line + self.env.unextend # TODO: dynapush & dynapop } f_larglist: tLPAREN2 f_args opt_bv_decl rparen @@ -1484,28 +1699,15 @@ { result = val[1] } - | kDO_LAMBDA compstmt kEND + | kDO_LAMBDA bodystmt kEND { result = val[1] } - do_block: kDO_BLOCK - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_param + do_block: k_do_block do_body kEND { - result = nil # self.env.dynamic.keys - } - compstmt kEND - { - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] - - self.env.unextend + (_, line), iter, _ = val + result = iter.line line } block_call: command do_block @@ -1519,14 +1721,16 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] + cmd, blk = val + + result = blk + result.insert 1, cmd } - | block_call dot_or_colon operation2 opt_paren_args + | block_call call_op2 operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } - | block_call dot_or_colon operation2 opt_paren_args brace_block + | block_call call_op2 operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val @@ -1535,7 +1739,7 @@ result = iter2 } - | block_call dot_or_colon operation2 command_args do_block + | block_call call_op2 operation2 command_args do_block { iter1, _, name, args, iter2 = val @@ -1551,8 +1755,10 @@ } paren_args { - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno } | primary_value call_op operation2 opt_paren_args { @@ -1580,7 +1786,7 @@ } | kSUPER { - result = s(:zsuper) + result = s(:zsuper).line lexer.lineno } | primary_value tLBRACK2 opt_call_args rbracket { @@ -1592,39 +1798,55 @@ self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + brace_body tRCURLY { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - _, line, args, _, body, _ = val + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend } - | kDO + | k_do { self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + do_body kEND { - result = nil # self.env.dynamic.keys + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend } - compstmt kEND + + brace_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { result = lexer.cmdarg.store(false) } + opt_block_param compstmt { - _, line, args, _, body, _ = val + line, cmdarg, param, cmpstmt = val - result = new_iter nil, args, body - result.line = line + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + } + do_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { lexer.cmdarg.push false } + opt_block_param + compstmt + { + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop self.env.unextend } - case_body: kWHEN + case_body: k_when { result = self.lexer.lineno } @@ -1637,12 +1859,12 @@ cases: opt_else | case_body - opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue + opt_rescue: k_rescue exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) @@ -1655,7 +1877,8 @@ exc_list: arg_value { - result = s(:array, val[0]) + arg, = val + result = s(:array, arg).line arg.line } | mrhs | none @@ -1666,28 +1889,33 @@ } | none - opt_ensure: kENSURE compstmt + opt_ensure: k_ensure compstmt { - _, body = val + (_, line), body = val - result = body || s(:nil) + result = body || s(:nil).line(line) } | none literal: numeric { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | symbol { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | dsym strings: string { - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str } string: tCHAR @@ -1702,7 +1930,11 @@ string1: tSTRING_BEG string_contents tSTRING_END { - result = val[1] + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str } | tSTRING { @@ -1711,7 +1943,8 @@ xstring: tXSTRING_BEG xstring_contents tSTRING_END { - result = new_xstring val[1] + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? } regexp: tREGEXP_BEG regexp_contents tREGEXP_END @@ -1721,7 +1954,7 @@ words: tWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tWORDS_BEG word_list tSTRING_END { @@ -1745,25 +1978,28 @@ symbols: tSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } - | tSYMBOLS_BEG symbol_list tSTRING_END + | tSYMBOLS_BEG { result = lexer.lineno } symbol_list tSTRING_END { - result = val[1] + _, line, list, _, = val + list.line = line + result = list } symbol_list: none { - result = new_symbol_list + result = new_symbol_list.line lexer.lineno } | symbol_list word tSPACE { - result = val[0].dup << new_symbol_list_entry(val) + list, * = val + result = list.dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tQWORDS_BEG qword_list tSTRING_END { @@ -1772,7 +2008,7 @@ qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno # FIX } | tQSYMBOLS_BEG qsym_list tSTRING_END { @@ -1799,11 +2035,12 @@ string_contents: none { - result = s(:str, "") + result = s(:str, "").line lexer.lineno } | string_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } xstring_contents: none @@ -1812,7 +2049,8 @@ } | xstring_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } regexp_contents: none @@ -1821,7 +2059,8 @@ } | regexp_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } string_content: tSTRING_CONTENT @@ -1833,42 +2072,46 @@ result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? + lexer.lex_state = EXPR_BEG } string_dvar { - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value + lexer.lex_state = EXPR_BEG } - compstmt tRCURLY + compstmt + tSTRING_DEND { - # TODO: tRCURLY -> tSTRING_DEND _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -1878,24 +2121,24 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end } - string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } - | tIVAR { result = s(:ivar, val[0].to_sym) } - | tCVAR { result = s(:cvar, val[0].to_sym) } + string_dvar: tGVAR { result = s(:gvar, val[0].to_sym).line lexer.lineno } + | tIVAR { result = s(:ivar, val[0].to_sym).line lexer.lineno } + | tCVAR { result = s(:cvar, val[0].to_sym).line lexer.lineno } | backref symbol: tSYMBEG sym { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[1].to_sym } | tSYMBOL @@ -1907,18 +2150,19 @@ dsym: tSYMBEG xstring_contents tSTRING_END { - lexer.lex_state = :expr_end - result = val[1] + _, result, _ = val - result ||= s(:str, "") + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end @@ -1941,19 +2185,20 @@ | tCONSTANT | tCVAR -keyword_variable: kNIL { result = s(:nil) } - | kSELF { result = s(:self) } - | kTRUE { result = s(:true) } - | kFALSE { result = s(:false) } - | k__FILE__ { result = s(:str, self.file) } - | k__LINE__ { result = s(:lit, lexer.lineno) } +keyword_variable: kNIL { result = s(:nil).line lexer.lineno } + | kSELF { result = s(:self).line lexer.lineno } + | kTRUE { result = s(:true).line lexer.lineno } + | kFALSE { result = s(:false).line lexer.lineno } + | k__FILE__ { result = s(:str, self.file).line lexer.lineno } + | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno } | k__ENCODING__ { + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end } @@ -1978,43 +2223,42 @@ debug20 29, val, result } - backref: tNTH_REF { result = s(:nth_ref, val[0]) } - | tBACK_REF { result = s(:back_ref, val[0]) } + backref: tNTH_REF { result = s(:nth_ref, val[0]).line lexer.lineno } + | tBACK_REF { result = s(:back_ref, val[0]).line lexer.lineno } - superclass: term - { - result = nil - } - | tLT + superclass: tLT { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG + lexer.command_start = true } expr_value term { result = val[2] } - | error term + | none { - yyerrok result = nil - debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; } - | f_args term - { - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true + | { + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + } + f_args term + { + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg @@ -2135,12 +2379,13 @@ f_arg: f_arg_item { - case val[0] + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" @@ -2153,7 +2398,7 @@ if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item @@ -2161,22 +2406,24 @@ f_kw: tLABEL arg_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? + # TODO: new_kw_arg + (label, line), arg = val + identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line } f_block_kw: tLABEL primary_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + result = s(:array, s(:kwarg, id, expr).line(line)).line line } f_block_kwarg: f_block_kw @@ -2197,7 +2444,9 @@ f_kwrest: kwrest_mark tIDENTIFIER { - result = :"**#{val[1]}" + name = val[1].to_sym + self.assignable name + result = :"**#{name}" } | kwrest_mark { @@ -2217,17 +2466,20 @@ f_block_optarg: f_block_opt { - result = s(:block, val[0]) + optblk, = val + result = s(:block, optblk).line optblk.line } | f_block_optarg tCOMMA f_block_opt { - result = val[0] - result << val[2] + optarg, _, optblk = val + result = optarg + result << optblk } f_optarg: f_opt { - result = s(:block, val[0]) + opt, = val + result = s(:block, opt).line opt.line } | f_optarg tCOMMA f_opt { @@ -2272,7 +2524,7 @@ singleton: var_ref | tLPAREN2 { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG } expr rparen { @@ -2281,14 +2533,11 @@ result.sexp_type == :lit } - assoc_list: none # [!nil] + assoc_list: none { - result = s(:array) - } - | assocs trailer # [!nil] - { - result = val[0] + result = s(:array).line lexer.lineno } + | assocs trailer assocs: assoc | assocs tCOMMA assoc @@ -2302,15 +2551,21 @@ assoc: arg_value tASSOC arg_value { - result = s(:array, val[0], val[2]) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line } - | tLABEL opt_nl arg_value + | tLABEL arg_value { - result = s(:array, s(:lit, val[0][0].to_sym), val.last) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line } | tDSTAR arg_value { - result = s(:array, s(:kwsplat, val[1])) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line } operation: tIDENTIFIER | tCONSTANT | tFID @@ -2318,6 +2573,10 @@ operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT + + call_op2: call_op + | tCOLON2 + opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN @@ -2337,6 +2596,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: diff -Nru ruby-ruby-parser-3.11.0/lib/ruby21_parser.rb ruby-ruby-parser-3.15.1/lib/ruby21_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby21_parser.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby21_parser.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,7 +1,7 @@ # # DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.4.14 -# from Racc grammer file "". +# This file is automatically generated by Racc 1.5.0 +# from Racc grammar file "". # require 'racc/parser.rb' @@ -10,6 +10,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: @@ -19,875 +20,886 @@ ##### State transition tables begin ### clist = [ -'-604,-101,605,-102,-100,579,271,-604,-604,-604,750,271,-604,-604,-604', -'271,-604,221,660,621,-103,-84,-103,-612,998,-604,-604,-604,-604,-100', -'83,579,660,579,-70,579,-604,-604,84,-604,-604,-604,-604,-604,579,271', -'-98,741,-99,218,219,742,659,222,-106,-102,702,730,222,-105,-101,112', -'660,607,606,618,659,-604,-604,-604,-604,-604,-604,-604,-604,-604,-604', -'-604,-604,-604,-604,-600,620,-604,-604,-604,730,786,-604,730,-104,-604', -'209,270,-604,-604,659,-604,270,-604,210,-604,270,-604,-604,-604,-604', -'-604,-604,-604,-418,-604,-604,-604,-94,-101,749,-102,-100,116,-101,-600', -'-102,-100,115,-94,-604,-604,-604,-604,-604,-604,270,-604,-91,116,-103', -'-604,-604,-604,115,-103,-102,-604,-604,116,-604,116,932,116,115,-89', -'115,-90,115,-604,-601,116,116,-97,-93,701,115,115,-96,-92,-604,-604', -'211,-604,-604,-604,-604,-604,116,218,219,218,219,115,-280,-94,-92,218', -'219,624,116,-280,217,116,605,115,785,660,115,-95,-280,-604,-604,-604', -'-604,-604,-604,-604,-604,-604,-604,-604,-604,-604,-604,637,261,-604', -'-604,-604,-94,644,318,-94,880,-604,94,95,-604,94,95,659,319,-604,-427', -'-604,-94,-604,-604,-604,-604,-604,-604,-604,116,-604,-604,-604,222,115', -'605,-103,623,-92,-597,607,606,-92,355,-289,-604,-604,784,-93,762,-604', -'-289,-289,-289,222,-101,222,-289,-289,379,-289,-102,222,560,-100,557', -'556,555,-512,558,-518,605,-427,-92,610,-512,-92,-598,382,-427,-289,-289', -'385,-289,-289,-289,-289,-289,-427,-92,96,97,-504,96,97,406,607,606,605', -'-504,408,407,-101,-604,-597,760,-427,-519,-504,575,574,-289,-289,-289', -'-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-98,-597,-289', -'-289,-289,-507,643,607,606,-604,-289,388,-507,-289,116,404,844,-598', -'-289,115,-289,-507,-289,-289,-289,-289,-289,-289,-289,409,-289,-604', -'-289,453,607,606,613,-99,-604,-598,605,455,454,-600,-504,-289,-289,-604', -'-95,116,-289,-504,-504,-504,115,564,-504,-504,-504,456,-504,-104,-604', -'221,564,-604,567,487,-504,-604,-504,-504,-504,537,-600,567,539,273,-604', -'525,-504,-504,215,-504,-504,-504,-504,-504,560,1009,557,556,555,818', -'558,585,-604,-106,1007,575,574,607,606,603,638,116,605,497,575,574,115', -'-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,-504', -'218,219,-504,-504,-504,-509,-504,-504,568,-105,-504,605,-509,-504,-504', -'-519,-504,568,-504,500,-504,-94,-504,-504,-504,-504,-504,-504,-504,502', -'-504,222,-504,560,-103,557,556,555,564,558,-69,978,607,606,608,-504', -'-504,-504,-504,567,-504,-507,-504,216,-518,525,770,-90,-507,-507,-507', -'-504,222,-507,-507,-507,511,-507,242,-517,-99,562,607,606,625,-507,-517', -'-507,-507,-507,512,116,575,574,116,-517,115,-507,-507,115,-507,-507', -'-507,-507,-507,-97,-89,-96,-91,222,239,519,1002,276,241,240,237,238', -'-106,-98,-105,-100,537,222,537,539,568,536,-507,-507,-507,-507,-507', -'-507,-507,-507,-507,-507,-507,-507,-507,-507,273,-290,-507,-507,-507', -'-516,-507,-507,-290,522,-507,526,-516,-507,-507,242,-507,-290,-507,534', -'-507,-516,-507,-507,-507,-507,-507,-507,-507,540,-507,585,-507,560,-510', -'557,556,555,564,558,537,-510,398,539,589,-507,-507,-507,-507,567,-507', -'-289,-507,218,219,-511,848,818,-289,-289,-289,-507,-511,-289,-289,-289', -'560,-289,557,556,555,562,558,848,818,218,219,-289,-289,-289,572,571', -'575,574,590,612,616,-289,-289,264,-289,-289,-289,-289,-289,619,265,622', -'629,560,-507,557,556,555,716,558,560,-507,557,556,555,-262,558,719,631', -'222,568,635,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', -'-289,-289,636,242,-289,-289,-289,716,787,-289,-504,273,-289,647,716', -'-289,-289,-504,-289,242,-289,242,-289,719,-289,-289,-289,-289,-289,-289', -'-289,-514,-289,242,-289,239,-513,215,-514,241,240,237,238,-513,959,242', -'222,-289,-289,-289,-289,222,-289,746,-289,294,72,73,74,12,60,264,222', -'-104,66,67,-84,678,265,70,222,68,69,71,33,34,75,76,119,120,121,122,123', -'32,31,30,104,103,105,106,871,872,22,-515,873,110,111,648,11,48,-515', -'13,108,107,109,98,59,100,99,101,530,102,110,111,689,94,95,694,45,46', -'44,242,246,251,252,253,248,250,258,259,254,255,695,235,236,-337,698', -'256,257,502,43,704,-337,36,707,708,61,62,242,710,63,-337,38,239,712', -'245,47,241,240,237,238,249,247,243,23,244,714,722,723,91,83,85,86,87', -'89,724,726,585,84,92,239,260,733,-239,241,240,65,763,764,81,88,90,765', -'-263,96,97,294,72,73,74,12,60,771,487,215,66,67,487,222,789,70,451,68', -'69,71,33,34,75,76,261,452,500,502,689,32,31,30,104,103,105,106,222,273', -'22,273,689,242,818,648,11,48,222,13,108,107,109,98,59,100,99,101,222', -'102,110,111,842,94,95,222,45,46,44,242,246,251,252,253,248,250,258,259', -'254,255,818,235,236,215,852,256,257,222,43,-264,588,296,879,882,61,62', -'242,707,63,586,38,239,885,245,47,241,240,237,238,249,247,243,23,244', -'888,890,892,91,83,85,86,87,89,222,215,894,84,92,239,260,895,528,241', -'240,65,689,903,81,88,90,452,-262,96,97,294,72,73,74,12,60,907,909,-290', -'66,67,910,222,707,70,-290,68,69,71,33,34,75,76,913,-290,915,917,919', -'32,31,30,104,103,105,106,919,222,22,925,927,929,222,632,11,48,939,13', -'108,107,109,98,59,100,99,101,940,102,110,111,222,94,95,943,45,46,44', -'242,246,251,252,253,248,250,258,259,254,255,215,235,236,215,-265,256', -'257,744,43,953,959,36,960,961,61,62,746,963,63,746,38,239,964,245,47', -'241,240,237,238,249,247,243,23,244,980,982,-289,91,83,85,86,87,89,-289', -'-280,983,84,92,-601,260,987,-280,-289,707,65,992,994,81,88,90,-280,996', -'96,97,294,72,73,74,12,60,998,998,215,66,67,1005,1010,1011,70,518,68', -'69,71,33,34,75,76,919,516,919,919,1016,32,31,30,104,103,105,106,980', -'956,22,557,556,555,-601,558,11,48,-600,13,108,107,109,98,59,100,99,101', -'694,102,110,111,980,94,95,1039,45,46,44,242,246,251,252,253,248,250', -'258,259,254,255,-517,235,236,-516,1040,256,257,-517,43,1041,-516,36', -'1042,998,61,62,-517,998,63,-516,38,239,998,245,47,241,240,237,238,249', -'247,243,23,244,222,919,-289,91,83,85,86,87,89,-289,-289,980,84,92,-601', -'260,3,-289,-289,,65,,-601,81,88,90,-289,,96,97,294,72,73,74,12,60,,', -'215,66,67,,,,70,214,68,69,71,33,34,75,76,,212,,,,32,31,30,104,103,105', -'106,,956,22,557,556,555,,558,11,48,,13,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254', -'255,-290,235,236,,,256,257,-290,43,,,36,,,61,62,-290,,63,,38,239,,245', -'47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92', -',260,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,119,120,121,122,123,32,31,30,104,103,105,106,,,22', -'119,120,121,122,123,11,48,,13,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235', -'236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238', -'249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,222,260,,,,,65,,,81', -'88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -'119,120,121,122,123,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252', -'253,248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63', -',38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87', -'89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,8,72,73,74,12,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,', -'11,48,10,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46', -'44,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,43', -',,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244', -',,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,294,72', -'73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', -'105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236', -',,256,257,,43,,,296,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249', -'247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90', -',,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258', -'259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47', -'241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260', -',,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253', -'248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38', -'239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89', -',,,84,92,,260,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,', -'11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -'242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,43,', -',36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244', -',,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,294,72', -'73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', -'105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236', -',,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249', -'247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90', -',,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258', -'259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47', -'241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260', -',,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253', -'248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38', -'239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89', -',,,84,92,,260,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,', -'11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -'242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,43,', -',36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244', -',,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,294,72', -'73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', -'105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236', -',,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249', -'247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90', -',,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,104,103,105,106,,560,22,557,556,555,,558,11,48,,13,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,560,,557,556,555', -',558,560,716,557,556,555,,558,,,,924,,43,,,36,242,,61,62,,,63,,38,,', -',47,,,716,256,257,,,23,,716,,,91,83,85,86,87,89,,239,,84,92,241,240', -'237,238,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,560,22,557,556,555', -',558,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,242,-624,-624,-624,-624,248,250,,716,-624,-624,,,,,,256,257,,43', -',,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244', -',,,91,83,85,86,87,89,,,,84,92,,560,,557,556,555,65,558,,81,88,90,,,96', -'97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,716,,,,,32', -'31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,242,-624,-624,-624,-624,248,250,,,-624', -'-624,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237', -'238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', -',,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258', -'259,254,255,,-624,-624,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245', -'47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69', -'71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,-624,-624', -'-624,-624,248,250,,,-624,-624,,,,,,256,257,,43,,,36,,,61,62,,,63,,38', -'239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11', -'48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242', -'246,251,252,253,248,250,258,,254,255,,,,,,256,257,,43,,,36,,,61,62,', -',63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46', -'44,242,,,,,,,,,,,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47', -'241,240,237,238,,,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248', -'250,,,254,255,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241', -'240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,,,,,,,,,,,,,,,,256', -'257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,,,243,23,244', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,8,72,73,74', -'12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,242,,,,,,,,,,,,,,,,256,257,,43,,,36,,,61,62,,,63,,38', -'239,,245,47,241,240,237,238,,,243,23,244,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,,,,,', -',,,,,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237', -'238,,,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,', -',96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,', -'32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259', -'254,255,,-624,-624,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241', -'240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,-624,-624,-624,-624', -'248,250,,,-624,-624,,,,,,256,257,,43,,,296,,,61,62,,,63,,38,239,,245', -'47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,242,-624,-624,-624', -'-624,248,250,,,-624,-624,,,,,,256,257,,227,,,233,,,61,62,,,63,,285,239', -'283,245,47,241,240,237,238,249,247,243,232,244,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70', -',68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,', -',48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242', -'-624,-624,-624,-624,248,250,,,-624,-624,,,,,,256,257,,227,,,233,,,61', -'62,,,63,,,239,,245,47,241,240,237,238,249,247,243,232,244,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234', -',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -'242,,,,,,,,,,,,,,,,256,257,,227,,,233,,,61,62,,,63,,,239,,245,47,241', -'240,237,238,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307', -'308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,242,,,,,,,,,,,,,,,,256,257,,227,,,233', -',,61,62,,,63,,,239,,245,47,241,240,237,238,,,,232,,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', -',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,', -',,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234', -',,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,315', -',,,,,,,,,,,,,,,,,,,305,,,301,,,61,62,,,63,,300,,,,,,,,,,,,,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,', -'234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,', -'315,,,,,,,,,,,,,,,,,,,,305,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83', -'85,86,87,89,,,,84,92,,,,317,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94', -'95,,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,61,62,,,63,,,,,,,,,,,,,,,,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', -'105,106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,,,315,,,,,,,,,,,,,,,,,,,,305,,,233,,,61,62,,,63,,,,,,,,,,,,', -',,,,,,91,83,85,86,87,89,,,,84,92,,,,514,,,65,,,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', -',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', -'47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308', -'314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307', -'308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', -',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,', -',,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75', -'76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', -',233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', -',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', -'312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,', -',,,,,227,,,233,,,61,62,,,63,,,,283,,47,,,,,,,,232,,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94', -'95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,283,,47,,', -',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308', -'314,104,103,105,106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,897,,,233,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308', -'314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287', -'102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,', -'63,,672,,283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312', -'75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', -',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', -'312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', -',,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,315,,', -',,,,,,,,,,,,,,,,,970,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,768,,,,47,,,,,,,,232,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', -',22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94', -'95,,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,61,62,,,63,,,,,,,,,,,,,,,,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,672,,,,47', -',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285', -',283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,', -',,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,116,,,,', -'115,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', -'312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,309,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,349', -',,36,,,61,62,,,63,,38,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,', -',,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,', -'84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', -',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', -'47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', -'47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308', -'314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307', -'308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', -',63,,414,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76', -',,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233', -',,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312', -'75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', -',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', -'312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,309,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,305', -',,301,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,', -',,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312', -'75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', -',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', -'312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', -',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', -'47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285', -',283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99', -'101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91,83,85,86,87', -'89,,,,84,92,222,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234', -',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106', -',,234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', -',,315,,,,,,,,,,,,,,,,,,,,897,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234', -',,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94', -'95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47', -',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308', -'314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307', -'308,314,104,103,105,106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,', -'47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38', -',,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,398,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287', -'102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,', -'63,,285,,283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312', -'75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', -',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', -'312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,', -',,,,,,,,,227,,,233,,,61,62,,,63,,,,283,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234', -',,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,672,,283,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,,,47', -',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285', -',,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307', -'308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', -',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', -',63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32', -'31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', -'287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62', -',,63,,285,,283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75', -'76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,309,,,108,107,109,591', -'59,100,99,592,,102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,593,,,233', -',,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76', -',,,,,307,308,314,104,103,105,106,,,234,,,,,,,309,,,108,107,109,591,59', -'100,99,592,,102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,593,,,233,', -',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', -',,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61', -'62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36', -',,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,', -',398,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', -'312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,530,,61,62,,,63,,,,,,47,,,,,', -',,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72', -'73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', -'105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94', -'95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,', -',,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', -',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,222,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,414,,,,47', -',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88', -'90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,', -'307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99', -'101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,672,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,', -',,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', -',,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,414,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', -'105,106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,61,62,,,63,,,,,,,,,,,,', -',,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,', -',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,-606', -',96,97,,,,-606,-606,-606,,,-606,-606,-606,560,-606,557,556,555,564,558', -',,,-606,-606,-606,-606,,,567,,,,,-606,-606,,-606,-606,-606,-606,-606', -',,,,,,,,,562,,,,,,,,,,,575,574,,-606,-606,-606,-606,-606,-606,-606,-606', -'-606,-606,-606,-606,-606,-606,,,-606,-606,-606,,,-606,,,-606,,,-606', -'-606,,-606,568,-606,,-606,,-606,-606,-606,-606,-606,-606,-606,,-606', -'-606,-606,,,,,,,,,,,,,-606,-606,-606,-606,-605,-606,,-606,,,,-605,-605', -'-605,,,-605,-605,-605,560,-605,557,556,555,564,558,,,,-605,-605,-605', -'-605,,,567,,,,,-605,-605,,-605,-605,-605,-605,-605,,,,,,,,,,562,,,,', -',,,,572,571,575,574,,-605,-605,-605,-605,-605,-605,-605,-605,-605,-605', -'-605,-605,-605,-605,,,-605,-605,-605,,,-605,,,-605,,,-605,-605,,-605', -'568,-605,,-605,,-605,-605,-605,-605,-605,-605,-605,,-605,-605,-605,', -',,,,,,,,,,,-605,-605,-605,-605,-281,-605,,-605,,,,-281,-281,-281,,,-281', -'-281,-281,560,-281,557,556,555,564,558,,,,,-281,-281,-281,,,567,,,,', -'-281,-281,,-281,-281,-281,-281,-281,,,,,,,,,,562,,,,,,,,,572,571,575', -'574,,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281', -'-281,,,-281,-281,-281,,,-281,,,-281,,,-281,-281,,-281,568,-281,,-281', -',-281,-281,-281,-281,-281,-281,-281,,-281,,-281,,,,,,,,,,,,,-281,-281', -'-281,-281,,-281,,-281,176,187,177,200,173,193,183,182,203,204,198,181', -'180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', -'199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', -',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', -'150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', -'204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', -'197,196,189,199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127', -'129,,,128,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,', -'163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193', -'183,182,203,204,198,181,180,175,201,205,206,185,174,188,192,194,186', -'179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178,169,170', -'166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148,145,147', -',,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151', -'152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200', -'173,193,183,182,203,204,198,181,180,175,201,205,206,185,174,188,192', -'194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178', -'169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148', -'145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,,,165,91,,,,,,,,,,92,,,,,,,,,158,176', -'187,177,200,173,193,183,182,203,204,198,181,180,175,201,205,206,185', -'174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190,', -',,,,171,178,169,170,166,167,168,127,129,395,394,128,,396,,,,,,,161,162', -',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,', -',,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,,', -',,,,,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181,180', -'175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189,199', -'184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,126,,128,,', -',,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', -'150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', -'204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', -'197,364,363,365,362,172,191,190,,,,,,171,178,169,170,359,360,361,357', -'129,100,99,358,,102,,,,,,,161,162,,157,139,140,141,148,145,147,,,142', -'143,,,,163,164,149,150,,,,,,371,,,,,,,,154,153,,138,160,156,155,151', -'152,146,144,136,159,137,-426,,165,,,,,-426,-426,-426,,,-426,-426,-426', -'560,-426,557,556,555,564,558,158,,,-426,-426,-426,,,,567,,,,,-426,-426', -',-426,-426,-426,-426,-426,,,,,,,,,,562,,,,,,,,,,,575,574,,-426,-426', -'-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,,,-426,-426', -'-426,,,-426,,273,-426,,,-426,-426,,-426,568,-426,,-426,,-426,-426,-426', -'-426,-426,-426,-426,,-426,-426,-426,,,,,,,,,,,,-297,-426,-426,,-426', -',-426,-297,-297,-297,,,-297,-297,-297,560,-297,557,556,555,564,558,', -',,,-297,-297,,,,567,,,,,-297,-297,,-297,-297,-297,-297,-297,,,,,,,,', -',562,754,,,,,,,,572,571,575,574,,-297,-297,-297,-297,-297,-297,-297', -'-297,-297,-297,-297,-297,-297,-297,,,-297,-297,-297,,,-297,,276,-297', -',,-297,-297,,-297,568,-297,,-297,,-297,-297,-297,-297,-297,-297,-297', -',-297,,-297,,,,,,,,,,,,-623,-297,-297,,-297,,-297,-623,-623,-623,,,-623', -'-623,-623,560,-623,557,556,555,564,558,,,,-623,-623,,,,,567,,,,,-623', -'-623,,-623,-623,-623,-623,-623,,,,,,,,,,562,,,,,,,,,572,571,575,574', -',-623,,,,,,,-623,-623,-623,,-623,-623,-623,-623,,-623,,-623,,,,,273', -'-623,-623,-623,-623,,,,568,,,,,-623,-623,,-623,-623,-623,-623,-623,', -'-623,-623,,,,,,,,,,,,,-623,,,,,-623,,,-623,-623,-623,-623,-623,-623', -'-623,-623,-623,-623,-623,-623,-623,-623,,,-623,-623,-623,,,-623,,273', -'-623,,,-623,-623,,-623,,-623,,-623,,-623,-623,-623,-623,-623,-623,-623', -',-623,-623,-623,,,,,,682,428,,,683,,,-623,-623,,-623,,-623,161,162,', -'157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,', -',,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,', -'685,435,,,686,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142', -'143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151', -'152,146,144,136,159,137,,,165,,,,,650,428,,,651,,,,,,,,,161,162,158', -'157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,', -',,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,', -'652,435,,,653,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142', -'143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151', -'152,146,144,136,159,137,,,165,,,,,485,428,,,486,,,,,,,,,161,162,158', -'157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,', -',,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,856', -'435,,,857,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143', -',,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151,152', -'146,144,136,159,137,,,165,,,,,485,428,,,486,,,,,,,,,161,162,158,157', -'139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,', -',154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,1004', -'435,,,1003,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143', -',,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151,152', -'146,144,136,159,137,,560,165,557,556,555,564,558,,,431,435,,,430,,,567', -',,,,158,161,162,,157,139,140,141,148,145,147,,,142,143,,,562,163,164', -'149,150,,,,,,273,575,574,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,,,,,1034,435,,,1035,,568,,,,,,,161,162,158,157,139', -'140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,1032,428', -',,1033,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,', -'163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151,152,146', -'144,136,159,137,,,165,,,,,424,428,,,425,,,,,,,,,161,162,158,157,139', -'140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,560,165,557,556,555', -'564,558,,,,,,,,,,567,,,,,158,,,,,,,,,,,,,,,,,562,546,652,435,,,653,', -',572,571,575,574,,,161,162,,157,139,140,141,148,145,147,,,142,143,,', -',163,164,149,150,,,,,,273,,,,568,,,,154,153,,138,160,156,155,151,152', -'146,144,136,159,137,,,165,,,,,650,428,,,651,,,,,,,,,161,162,158,157', -'139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,', -',154,153,,138,160,156,155,151,152,146,144,136,159,137,,560,165,557,556', -'555,564,558,560,,557,556,555,564,558,,,567,,,,,158,,567,560,,557,556', -'555,564,558,,,,,,,,562,,567,,,,,562,,572,571,575,574,,,,,,575,574,,', -',560,562,557,556,555,564,558,,,,,,575,574,,560,567,557,556,555,564,558', -'568,,,,,,,568,,567,,,,,,,562,560,,557,556,555,564,558,568,572,571,575', -'574,,,562,560,567,557,556,555,564,558,,572,571,575,574,,,,,567,,,,,222', -',562,,,,,,568,,,572,571,575,574,,560,562,557,556,555,564,558,568,,,', -',575,574,,,567,560,,557,556,555,564,558,560,,557,556,555,564,558,568', -',567,,,,,562,,567,,,,,,568,572,571,575,574,,,,560,562,557,556,555,564', -'558,,562,,,,575,574,,,567,,,575,574,560,,557,556,555,564,558,,568,,', -',,,,,567,562,,,,,,,,568,,,575,574,,,568,,,,,,562,754,,,,,,,,572,571', -'575,574,,,,738,435,,,739,,,,568,,,,,161,162,,157,139,140,141,148,145', -'147,,,142,143,,,568,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160', -'156,155,151,152,146,144,136,159,137,,,165,,,,,736,428,,,737,,,,,,,,', -'161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150', -',,,,,273,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,,,,,,,,,,,,,,,,,,,,158' ] - racc_action_table = arr = ::Array.new(26218, nil) +'-303,598,598,-111,598,-115,284,-303,-303,-303,476,598,-303,-303,-303', +'284,-303,234,579,-108,576,575,574,-109,577,825,-303,-303,-303,-107,-111', +'-109,842,225,226,647,-303,-303,843,-303,-303,-303,-303,-303,1059,-101', +'-110,-103,-110,-114,853,-112,-112,235,-533,128,743,124,825,824,127,-533', +'598,225,226,746,-115,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303', +'-303,-303,-303,-303,-622,757,-303,-303,-303,222,819,-303,225,226,-303', +'824,286,-303,-303,-622,-303,646,-303,644,-303,286,-303,-303,-303,-303', +'-303,-303,-303,-106,-303,-101,-303,-103,128,128,-111,128,959,127,127', +'-111,127,-99,128,-303,-303,-303,-303,127,-303,-526,-303,-98,-102,-100', +'-109,-303,-526,-526,-526,-109,-113,-526,-526,-526,-101,-526,-103,-101', +'-101,-103,235,-105,852,-526,-103,-526,-526,-526,284,-110,643,-101,-112', +'-103,-110,-526,-526,-112,-526,-526,-526,-526,-526,128,583,-113,235,223', +'127,128,95,225,226,224,127,586,284,579,96,576,575,574,816,577,-626,227', +'-526,-526,-526,-526,-526,-526,-526,-526,-526,-526,-526,-526,-526,-526', +'232,275,-526,-526,-526,-93,-526,-526,594,593,-526,336,128,-526,-526', +'-626,-526,127,-526,-79,-526,-541,-526,-526,-526,-526,-526,-526,-526', +'583,-526,-623,-526,106,107,286,723,-626,-110,725,586,-435,587,628,-626', +'-526,-526,-526,-526,-622,-526,-303,-526,-626,232,872,-115,-526,-303', +'-303,-303,235,-526,286,-303,-303,337,-303,-626,623,-104,-626,235,594', +'593,-626,624,-108,128,-619,-622,128,-532,127,-626,665,127,-303,-303', +'-532,-303,-303,-303,-303,-303,579,-106,576,575,574,235,577,-626,1038', +'630,629,626,587,-537,628,-115,371,108,109,-444,-537,-620,395,-303,-303', +'-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-526,398', +'-303,-303,-303,628,670,-526,-540,-112,-303,400,-619,-303,106,107,-526', +'628,-303,403,-303,664,-303,-303,-303,-303,-303,-303,-303,769,-303,420', +'-303,770,-619,-444,628,-529,630,629,636,1007,-444,-541,-529,-303,-303', +'-626,-303,-620,-303,-444,912,-529,-626,-626,-626,-303,-536,425,-626', +'-626,-113,-626,-107,-536,630,629,879,-444,605,-620,-626,-212,628,787', +'475,-110,630,629,790,628,477,-626,-626,-99,-626,-626,-626,-626,-626', +'803,478,108,109,-294,128,630,629,-108,628,127,-294,633,234,-531,905', +'664,-109,803,817,-294,-531,507,-626,-626,-626,-626,-626,-626,-626,-626', +'-626,-626,-626,-626,-626,-626,289,-114,-626,-626,-626,-100,671,630,629', +'648,-626,-540,128,-626,630,629,631,127,-626,-109,-626,-101,-626,-626', +'-626,-626,-626,-626,-626,-212,-626,-626,-626,630,629,-110,665,-109,-112', +'517,723,520,-294,725,255,-626,-626,-626,-626,-294,-626,875,879,-98,-626', +'-626,-626,-626,-294,-626,-626,-626,-111,-626,522,723,723,-107,722,725', +'-526,-105,-626,-626,-626,-626,252,-526,-103,-78,254,253,235,-626,-626', +'-114,-626,-626,-626,-626,-626,579,-112,576,575,574,231,577,579,-529', +'576,575,574,538,577,579,-529,576,575,574,531,577,536,532,-626,-626,-626', +'-626,-626,-626,-626,-626,-626,-626,-626,-626,-626,-626,539,743,-626', +'-626,-626,-539,818,-626,743,292,-626,235,-539,-626,-626,743,-626,746', +'-626,289,-626,-539,-626,-626,-626,-626,-626,-626,-626,542,-626,-626', +'-626,579,231,576,575,574,583,577,546,280,225,226,255,-626,-626,-626', +'-626,586,-626,-529,-626,235,-535,875,879,-626,-529,-529,-529,-535,-111', +'-529,-529,-529,579,-529,576,575,574,581,577,255,605,-529,413,-529,-529', +'-529,591,590,594,593,594,593,610,-529,-529,-534,-529,-529,-529,-529', +'-529,579,-534,576,575,574,611,577,900,901,743,252,902,122,123,254,253', +'250,251,952,225,226,587,635,-529,-529,-529,-529,-529,-529,-529,-529', +'-529,-529,-529,-529,-529,-529,639,743,-529,-529,-529,-303,-529,-529', +'272,273,-529,642,-303,-529,-529,645,-529,-623,-529,652,-529,-303,-529', +'-529,-529,-529,-529,-529,-529,-276,-529,654,-529,579,655,576,575,574', +'583,577,235,255,662,271,270,-529,-529,-529,-529,586,-529,-626,-529,663', +'-538,289,675,-529,-626,-626,-626,-538,-529,255,-626,-626,255,-626,231', +'255,-538,581,255,252,255,473,-626,254,253,265,266,255,594,593,474,682', +'235,-626,-626,235,-626,-626,-626,-626,-626,252,231,258,235,254,253,250', +'251,548,252,256,-93,257,254,253,250,251,474,700,235,551,587,711,-626', +'-626,-626,-626,-626,-626,-626,-626,-626,-626,-626,-626,-626,-626,712', +'716,-626,-626,-626,579,671,576,575,574,-626,577,719,-626,235,726,727', +'522,-626,731,-626,734,-626,-626,-626,-626,-626,-626,-626,735,-626,-626', +'-626,579,737,576,575,574,739,577,741,749,-304,743,750,-626,-626,-303', +'-102,-304,-626,751,753,719,-303,-303,-303,-626,-304,719,-303,-303,-111', +'-303,255,259,260,261,262,272,273,743,605,263,264,-304,719,776,231,781', +'265,266,-304,-303,-303,772,-303,-303,-303,-303,-303,-304,791,792,774', +'-277,252,804,258,507,254,253,250,251,271,270,256,1000,257,576,575,574', +'507,577,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303', +'-303,-303,-303,231,-303,-303,-303,235,670,-303,1029,422,-303,821,-623', +'-303,424,423,-303,774,-303,275,-303,830,-303,-303,-303,-303,-303,-303', +'-303,832,-303,231,-303,-538,520,522,711,235,230,289,-538,289,711,255', +'235,-303,-303,228,-104,-538,-303,310,85,86,87,12,78,-303,870,-539,79', +'80,-113,235,879,83,-539,81,82,84,33,34,76,77,719,-539,235,906,-278,88', +'31,30,116,115,117,118,235,911,22,928,711,-276,933,659,11,49,312,13,120', +'119,121,110,60,112,111,113,938,114,122,123,235,106,107,734,45,46,44', +'255,259,260,261,262,272,273,267,268,263,264,231,248,249,231,941,265', +'266,1035,43,943,658,36,945,947,62,63,1033,947,64,656,38,252,235,258', +'48,254,253,250,251,271,270,256,23,257,953,719,-347,103,95,97,98,99,101', +'-347,719,719,96,104,235,269,719,-251,-347,235,66,971,-279,93,100,102', +'972,734,108,109,310,85,86,87,12,78,975,978,231,79,80,980,982,235,83', +'609,81,82,84,33,34,76,77,984,607,996,997,1009,88,31,30,116,115,117,118', +'719,719,22,781,1027,1030,842,659,11,49,312,13,120,119,121,110,60,112', +'111,113,1036,114,122,123,1039,106,107,947,45,46,44,255,259,260,261,262', +'272,273,267,268,263,264,231,248,249,-304,947,265,266,1029,43,947,-304', +'314,1044,1009,62,63,774,734,64,-304,38,252,1053,258,48,254,253,250,251', +'271,270,256,23,257,1055,1057,-303,103,95,97,98,99,101,-303,1059,1059', +'96,104,-623,269,716,1009,-303,719,66,719,-623,93,100,102,-622,235,108', +'109,310,85,86,87,12,78,947,1009,1082,79,80,1059,1059,1059,83,3,81,82', +'84,33,34,76,77,131,132,133,134,135,88,31,30,116,115,117,118,,1000,22', +'576,575,574,,577,11,49,312,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,255,259,260,261,262,272,273,267,268,263,264,', +'248,249,,,265,266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250', +'251,271,270,256,23,257,,,,103,95,97,98,99,101,,,,96,104,,269,,,,,66', +',,93,100,102,,,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33', +'34,76,77,131,132,133,134,135,88,31,30,116,115,117,118,,,22,131,132,133', +'134,135,11,49,312,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,255,259,260,261,262,272,273,267,268,263,264,,248,249,', +',265,266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271,270', +'256,23,257,,,,103,95,97,98,99,101,,,,96,104,,269,,,,,66,,,93,100,102', +',,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,131', +'132,133,134,135,88,31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255,259,260', +'261,262,272,273,267,268,263,264,,248,249,,,265,266,,43,,,36,,,62,63', +',,64,,38,252,,258,48,254,253,250,251,271,270,256,23,257,,,,103,95,97', +'98,99,101,,,,96,104,,269,,,,,66,,,93,100,102,,,108,109,310,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,312,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,255,259,260,261,262,272,273,267,268,263,264,,248', +'249,,,265,266,,43,,,314,,,62,63,,,64,,38,252,,258,48,254,253,250,251', +'271,270,256,23,257,,,,103,95,97,98,99,101,,,,96,104,235,269,,,,,66,', +',93,100,102,,,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33', +'34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255,259,260,261', +'262,272,273,267,268,263,264,,248,249,,,265,266,,43,,,36,,,62,63,,,64', +',38,252,,258,48,254,253,250,251,271,270,256,23,257,,,,103,95,97,98,99', +'101,,,,96,104,,269,,,,,66,,,93,100,102,,,108,109,310,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,11,49,312,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,255,259,260,261,262,272,273,267,268,263,264,,248,249,', +',265,266,,43,,,314,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271', +'270,256,23,257,,,,103,95,97,98,99,101,,,,96,104,,269,,,,,66,,,93,100', +'102,,,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,255,259,260,261,262,272', +'273,267,268,263,264,,-648,-648,,,265,266,,43,,,36,,,62,63,,,64,,38,252', +',258,48,254,253,250,251,271,270,256,23,257,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,310,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,312,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,255,259,260,261,262,272,273,267,268,263,264,,-648,-648,,,265,266', +',43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271,270,256,23', +'257,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109', +'310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,312,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,255,-648,-648,-648,-648,272,273,,,-648', +'-648,,,,,,265,266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250', +'251,271,270,256,23,257,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255,-648,-648,-648', +'-648,272,273,,,-648,-648,,,,,,265,266,,43,,,36,,,62,63,,,64,,38,252', +',258,48,254,253,250,251,271,270,256,23,257,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,310,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,312,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,255,-648,-648,-648,-648,272,273,,,-648,-648,,,,,,265,266,,43,', +',36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271,270,256,23,257', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,8,85', +'86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,10,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,255,-648,-648,-648,-648,272,273,,,-648,-648,', +',,,,265,266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271', +'270,256,23,257,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,255,-648,-648,-648,-648', +'272,273,,,-648,-648,,,,,,265,266,,43,,,36,,,62,63,,,64,,38,252,,258', +'48,254,253,250,251,271,270,256,23,257,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,312', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255', +'-648,-648,-648,-648,272,273,,,-648,-648,,,,,,265,266,,43,,,36,,,62,63', +',,64,,38,252,,258,48,254,253,250,251,271,270,256,23,257,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,310,85,86,87,12', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,22,,,,,,11,49,312,13,120,119,121,110,60,112,111,113,,114,122,123,', +'106,107,,45,46,44,255,259,260,261,262,272,273,267,,263,264,,,,,,265', +'266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271,270,256', +'23,257,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,255,,,,,,,,,,,,,,,,265,266,', +'43,,,36,,255,62,63,,,64,,38,252,,258,48,254,253,250,251,265,266,256', +'23,257,,,,103,95,97,98,99,101,,,252,96,104,,254,253,250,251,,66,,,93', +'100,102,,,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255,,,,,,,,,,,,,', +',,265,266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,310', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,312,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,255,,,,,,,,,,,,,,,,265,266,,43,,,36,,,62', +'63,,,64,,38,252,,258,48,254,253,250,251,,,,23,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,310,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,312,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,310', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,312,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,', +'38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43', +',,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,8,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'10,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,310,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,312,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,312', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,310,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,312,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,310,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,327,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,,,333,,,,,,,,,,,,', +',,,,,,,986,,,246,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,303,114,122,123,,106,107,,45,46,44,', +',,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301', +',,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111', +'113,303,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,301,,299,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,304,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,', +'120,119,121,110,60,112,111,113,303,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,,', +',103,95,97,98,99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,303,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301', +',299,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,235,,,,,,66,,304', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76', +'77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120', +'119,121,110,60,112,111,113,303,114,122,123,,106,107,,45,46,44,,,,,,', +',,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108,109,85,86,87', +',78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,303,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301', +',299,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,304', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76', +'77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,', +',,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,', +',,49,,,120,119,121,110,60,112,111,113,303,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332', +'116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,', +',,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117', +'118,,,247,,,,,,,327,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,,,333,,,,,,,,,,,,,,,,,,,,323,,,319,,,62,63,,,64,,318,,,,,,,,,,', +',,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332', +'116,115,117,118,,,247,,,,,,,327,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,,,333,,,,,,,,,,,,,,,,,,,,323,,,246,,,62,63,,,64,,', +',,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,335,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88', +'326,332,116,115,117,118,,,247,,,,,,,327,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,333,,,,,,,,,,,,,,,,,,,,323,,,246,,,62,63', +',,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,534,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,', +',,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33', +'34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,303,114,122,123,,106,107,,45,46,44,,,,,,,,,,', +',,,,,,,,,240,,,246,,,62,63,,,64,,,,299,,48,,,,,,,,245,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,', +',,,88,326,332,116,115,117,118,,,247,,,,,,,327,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,,,333,,,,,,,,,,,,,,,,,,,,323,,,319,,', +'62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330', +'76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,327', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,,333,,,,,,', +',,,,,,,,,,,,,993,,,246,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,551,,62,63,,,64', +',,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,', +',,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,695,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,303,114,122,123,,106,107,', +'45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,,,48,,,,,,', +',245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326', +'332,116,115,117,118,,,247,,,,,,,327,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,,,333,,,,,,,,,,,,,,,,,,,,986,,,246,,,62,63,,', +'64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,', +',,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,303,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,', +'246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,304,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,303,114,122,123,,106,107,,45,46,44,', +',,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108,109,85', +'86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88', +'326,332,116,115,117,118,,,247,,,,,,,327,,,120,119,121,612,60,112,111', +'613,,114,122,123,,106,107,,,,333,,,,,,,,,,,,,,,,,,,,614,,,246,,,62,63', +',,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,', +',,,88,326,332,116,115,117,118,,,247,,,,,,,327,,,120,119,121,612,60,112', +'111,613,,114,122,123,,106,107,,,,333,,,,,,,,,,,,,,,,,,,,614,,,246,,', +'62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,', +',246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,128,,,,,127,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117', +'118,,,247,,,,,,,327,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,,,333,,,,,,,,,,,,,,,,,,,,365,,,36,,,62,63,,,64,,38,,,,,,,,,,,,', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,10,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88', +'326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60', +'112,111,113,303,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,304,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,', +',,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115', +'117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48', +',,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88', +'326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,413,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,', +',83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,', +',,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,', +',,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,303,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,', +'246,,,62,63,,,64,,695,,299,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,304,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,', +'83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,', +',,,49,,,120,119,121,110,60,112,111,113,303,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,299,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332', +'116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,312,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,413,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118', +',,247,,,,,,,327,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',,,333,,,,,,,,,,,,,,,,,,,,323,,,319,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,303,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301', +',299,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,304', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76', +'77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,327,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,,,333,,,,,,,,,,,,,,,,,,,,323,', +',319,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,240,,,246,,,62,63,,,64,,430,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,430,,,,48,,,,,,,,245,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117', +'118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,', +',,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,', +',246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,303,114,122,123,,106,107,,45,46,44,', +',,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48', +',,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,235,,,,', +',66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329', +'330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,', +'49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117', +'118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,', +',,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,303', +'114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63', +',,64,,301,,299,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,', +',,66,,304,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +',49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117', +'118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,', +',,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,', +',,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,796', +',,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60', +'112,111,113,303,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,304,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,', +',,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115', +'117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48', +',,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88', +'326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111', +'113,303,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,695,,299,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,304,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49', +',,120,119,121,110,60,112,111,113,303,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,299,,48,,,,,,,,245,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48', +',,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,', +'114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63', +',,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330', +'76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,', +',,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115', +'117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48', +',,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88', +'326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330', +'76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,', +',,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116', +'115,117,118,,,247,,,,,,,327,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,,,333,,,,,,,,,,,,,,,,,,,,323,,,319,,,62,63,,,64,,,,,,', +',,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326', +'332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63', +',,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330', +'76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,', +',,,88,326,332,116,115,117,118,,,247,,,,,,,327,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,,,333,,,,,,,,,,,,,,,,,,,,323,,,319,,', +'62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330', +'76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,430,,,,48,,,,,', +',,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326', +'332,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113', +'303,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,695,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,', +',,66,,304,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'329,330,76,77,,,,,,88,326,332,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,303,114,122,123,,106,107,,45,46,44,,,,,,,,,,', +',,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,304,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,329,330,76,77,,,,,,88,326,332,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,-312,,108,109,,,,-312,-312,-312,,,-312,-312,-312,579,-312,576,575', +'574,583,577,,,,,-312,-312,,,,586,,,,,-312,-312,,-312,-312,-312,-312', +'-312,,,,,,,,,,581,,,,,,,,,591,590,594,593,,-312,-312,-312,-312,-312', +'-312,-312,-312,-312,-312,-312,-312,-312,-312,,,-312,-312,-312,,,-312', +',292,-312,,,-312,-312,,-312,587,-312,,-312,,-312,-312,-312,-312,-312', +'-312,-312,,-312,,-312,,,,,,,,,,,,,-312,-312,-647,-312,,-312,,,,-647', +'-647,-647,-312,,-647,-647,-647,579,-647,576,575,574,583,577,,,,-647', +'-647,,,,,586,,,,,-647,-647,,-647,-647,-647,-647,-647,,,,,,,,,,581,,', +',,,,,,591,590,594,593,,,,,,,,,,,,,-647,,-443,,,,,-647,,-443,-443,-443', +'289,-647,-443,-443,-443,,-443,,587,,,,,,,-443,-443,-443,,,,,-647,-647', +',,-443,-443,,-443,-443,-443,-443,-443,,,-647,,,,,-647,,,,,,,-647,,,', +',,,,,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443', +'-443,,,-443,-443,-443,,,-443,,289,-443,,,-443,-443,,-443,,-443,,-443', +',-443,-443,-443,-443,-443,-443,-443,,-443,-443,-443,,,,,,,,,,,,,-443', +'-443,-628,-443,,-443,,,,-628,-628,-628,-443,,-628,-628,-628,579,-628', +'576,575,574,583,577,,,,-628,-628,-628,-628,,,586,,,,,-628,-628,,-628', +'-628,-628,-628,-628,,,,,,,,,,581,,,,,,,,,,,594,593,,-628,-628,-628,-628', +'-628,-628,-628,-628,-628,-628,-628,-628,-628,-628,,,-628,-628,-628,', +',-628,,,-628,,,-628,-628,,-628,587,-628,,-628,,-628,-628,-628,-628,-628', +'-628,-628,,-628,-628,-628,579,,576,575,574,583,577,,,,,,-628,-628,-628', +'-628,586,-628,-295,-628,,,,,-628,-295,-295,-295,,,-295,-295,-295,,-295', +',,,581,,,,,,-295,-295,-295,591,590,594,593,,,,-295,-295,,-295,-295,-295', +'-295,-295,,,,,,,,,,,,,,,,,,,,,,587,,-295,-295,-295,-295,-295,-295,-295', +'-295,-295,-295,-295,-295,-295,-295,,,-295,-295,-295,,,-295,,,-295,,', +'-295,-295,,-295,,-295,,-295,,-295,-295,-295,-295,-295,-295,-295,,-295', +',-295,579,,576,575,574,583,577,,,,,,-295,-295,-295,-295,586,-295,-647', +'-295,,,,,-295,-647,-647,-647,,,-647,-647,-647,,-647,,,,581,,,,,-647', +'-647,-647,,,,594,593,,,,-647,-647,,-647,-647,-647,-647,-647,,,,,,,,', +',,,,,,,,,,,,,587,,-647,-647,-647,-647,-647,-647,-647,-647,-647,-647', +'-647,-647,-647,-647,,,-647,-647,-647,,,-647,,289,-647,,,-647,-647,,-647', +',-647,,-647,,-647,-647,-647,-647,-647,-647,-647,,-647,-647,-647,,,,', +',,,,,,,,-647,-647,-627,-647,,-647,,,,-627,-627,-627,-647,,-627,-627', +'-627,579,-627,576,575,574,583,577,,,,-627,-627,-627,-627,,,586,,,,,-627', +'-627,,-627,-627,-627,-627,-627,,,,,,,,,,581,,,,,,,,,591,590,594,593', +',-627,-627,-627,-627,-627,-627,-627,-627,-627,-627,-627,-627,-627,-627', +',,-627,-627,-627,,,-627,,235,-627,,,-627,-627,,-627,587,-627,,-627,', +'-627,-627,-627,-627,-627,-627,-627,,-627,-627,-627,,,,,,,,,,,,,-627', +'-627,-627,-627,,-627,,-627,,,,,-627,189,200,190,213,186,206,196,195', +'216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208', +'215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181', +'139,141,,,140,,,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158', +'156,148,171,149,,,177,103,,,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190', +'213,186,206,196,195,216,217,211,194,193,188,214,218,219,198,187,201', +'205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203,,,,,,184', +'191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172', +'168,167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,,104,,,,,,,,,170', +',,,,178,189,200,190,213,186,206,196,195,216,217,211,194,193,188,214', +'218,219,198,187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185', +'204,203,,,,,,184,191,182,183,179,180,181,139,141,138,,140,,,,,,,,,173', +'174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,', +',,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,103', +',,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216', +'217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215', +'210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139', +'141,,,140,,,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155,,,', +'175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,103,,,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190,213', +'186,206,196,195,216,217,211,194,193,188,214,218,219,198,187,201,205', +'207,199,192,,,,208,215,210,209,202,212,197,185,204,203,,,,,,184,191', +'182,183,179,180,181,139,141,410,409,140,,411,,,,,,,173,174,,169,151', +'152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165', +',150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,,,,,', +',,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211,194,193,188', +'214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209,202,212,197', +'185,204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173', +'174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,', +',,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,', +',,,,,,,,,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217', +'211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210', +'380,379,381,378,185,204,203,,,,,,184,191,182,183,375,376,377,373,141', +'112,111,374,,114,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,387,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,,,,,,,,,,678,464,,,679,,,,,,170,,,173,174', +'178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,289', +',,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,', +',,,,,,,1066,457,,,1067,,,,,,170,,,173,174,178,169,151,152,153,160,157', +'159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,,,,,,,,,,505,457,,,506,,,,,,170', +',,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,289,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,1063,464,,,1062,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,678,464,,,679', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,1068,464,,,1069,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,', +',676,457,,,677,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,', +'154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,460,464,,,459,,,,,,170,,', +'173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,289,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,453,457,,,454,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,704,457,,,705', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,707,464,,,708,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,', +',886,464,,,887,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,', +'154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,579,177,576,575,574,583,577,,,,,505,457', +',,506,586,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155', +'581,,,175,176,161,162,,,591,590,594,593,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,,,,,,,,,587,798,457,,,799,,,,', +',170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176', +'161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148', +'171,149,,,177,,,,,,,,,,764,457,,,765,,,,,,170,,,173,174,178,169,151', +'152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,801', +'464,,,800,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,,,,,,,,,,766,464,,,767,,,,,,170,,,173,174', +'178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,289', +',,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,579', +',576,575,574,583,577,,,676,457,,,677,,,586,,,170,,,173,174,178,169,151', +'152,153,160,157,159,,,154,155,,,581,175,176,161,162,,,,,,289,594,593', +',,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,579,177,576', +'575,574,583,577,,,,,,587,,,,586,,,,,170,,,,579,178,576,575,574,583,577', +',,,,,,581,,579,586,576,575,574,583,577,,,594,593,,,,,579,586,576,575', +'574,583,577,,581,,,,,,,,586,,,594,593,,,581,565,,,,587,,,,591,590,594', +'593,,,581,579,,576,575,574,583,577,,591,590,594,593,,,587,579,586,576', +'575,574,583,577,,,,,,,,587,579,586,576,575,574,583,577,,581,,,,,,587', +',586,,,594,593,,,581,579,,576,575,574,583,577,,,,594,593,,,581,579,586', +'576,575,574,583,577,,,,594,593,,,587,579,586,576,575,574,583,577,,581', +',,,,,587,,586,591,590,594,593,,,581,,,,,,587,,,,,594,593,,,581,579,', +'576,575,574,583,577,,591,590,594,593,,,587,,586,,,,,,,,,,,,,587,,,,', +',,,,581,,,,,,587,,,591,590,594,593,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,587' ] + racc_action_table = arr = ::Array.new(26050, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -897,938 +909,926 @@ end clist = [ -'652,1032,383,1034,1047,906,64,652,652,652,597,310,652,652,652,663,652', -'22,492,386,737,677,1033,61,1049,652,652,652,652,854,80,853,664,339,677', -'340,652,652,80,652,652,652,652,652,928,29,346,593,347,338,338,593,492', -'22,350,738,545,855,61,589,736,3,483,383,383,383,664,652,652,652,652', -'652,652,652,652,652,652,652,652,652,652,1034,386,652,652,652,581,652', -'652,582,739,652,13,64,652,652,483,652,310,652,15,652,663,652,652,652', -'652,652,652,652,29,652,652,652,683,1032,597,1034,1047,906,1032,738,1034', -'1047,906,737,652,652,652,652,431,652,29,652,854,597,1033,431,431,431', -'597,1033,652,431,431,853,431,339,853,340,853,346,339,347,340,431,739', -'855,928,350,738,545,855,928,589,736,431,431,16,431,431,431,431,431,937', -'692,692,448,448,937,971,683,682,757,757,389,581,971,19,582,617,581,651', -'491,582,739,971,431,431,431,431,431,431,431,431,431,431,431,431,431', -'431,424,25,431,431,431,683,431,40,683,788,431,315,315,431,44,44,491', -'43,431,813,431,683,431,431,431,431,431,431,431,750,431,431,431,48,750', -'614,651,389,682,591,617,617,424,72,430,431,431,650,431,617,431,430,430', -'430,692,424,448,430,430,87,430,431,757,719,788,719,719,719,362,719,225', -'377,813,682,377,362,682,592,88,813,430,430,89,430,430,430,430,430,813', -'682,315,315,591,44,44,126,614,614,380,591,126,126,650,856,591,614,813', -'226,591,707,707,430,430,430,430,430,430,430,430,430,430,430,430,430', -'430,225,591,430,430,430,592,430,377,377,685,430,90,592,430,343,124,719', -'592,430,343,430,592,430,430,430,430,430,430,430,207,430,856,430,227', -'380,380,380,226,856,592,373,229,228,856,98,430,430,856,430,291,430,98', -'98,98,291,704,98,98,98,230,98,430,685,234,882,856,704,266,98,685,98', -'98,98,543,685,882,543,269,685,453,98,98,969,98,98,98,98,98,924,969,924', -'924,924,985,924,985,685,228,969,704,704,373,373,373,425,755,375,280', -'882,882,755,98,98,98,98,98,98,98,98,98,98,98,98,98,98,751,751,98,98', -'98,363,98,98,704,453,98,391,363,98,98,42,98,882,98,281,98,425,98,98', -'98,98,98,98,98,284,98,287,98,998,425,998,998,998,998,998,295,924,375', -'375,375,98,98,98,98,998,98,101,98,18,41,319,633,42,101,101,101,98,297', -'101,101,101,298,101,479,968,42,998,391,391,391,101,968,101,101,101,299', -'5,998,998,863,968,5,101,101,863,101,101,101,101,101,18,41,319,633,954', -'479,305,954,308,479,479,479,479,18,41,319,633,697,309,331,697,998,331', -'101,101,101,101,101,101,101,101,101,101,101,101,101,101,314,1010,101', -'101,101,967,101,101,1010,316,101,320,967,101,101,323,101,1010,101,329', -'101,967,101,101,101,101,101,101,101,333,101,344,101,754,364,754,754', -'754,754,754,332,364,345,332,349,101,101,101,101,754,101,653,101,20,20', -'365,1018,1018,653,653,653,101,365,653,653,653,716,653,716,716,716,754', -'716,725,725,533,533,653,653,653,754,754,754,754,351,379,382,653,653', -'27,653,653,653,653,653,385,27,388,410,925,358,925,925,925,716,925,562', -'358,562,562,562,413,562,716,415,419,754,422,653,653,653,653,653,653', -'653,653,653,653,653,653,653,653,423,478,653,653,653,925,653,653,357', -'432,653,440,562,653,653,357,653,461,653,462,653,562,653,653,653,653', -'653,653,653,359,653,463,653,478,360,958,359,478,478,478,478,360,958', -'464,493,653,653,653,653,494,653,958,653,580,580,580,580,580,580,367', -'509,653,580,580,510,513,367,580,515,580,580,580,580,580,580,580,676', -'676,676,676,676,580,580,580,580,580,580,580,758,758,580,361,758,758', -'758,443,580,580,361,580,580,580,580,580,580,580,580,580,520,580,580', -'580,523,580,580,531,580,580,580,443,443,443,443,443,443,443,443,443', -'443,443,532,443,443,49,541,443,443,544,580,548,49,580,549,551,580,580', -'459,552,580,49,580,443,553,443,580,443,443,443,443,443,443,443,580,443', -'561,569,573,580,580,580,580,580,580,576,578,583,580,580,459,443,584', -'443,459,459,580,621,624,580,580,580,626,630,580,580,36,36,36,36,36,36', -'634,639,224,36,36,645,654,656,36,224,36,36,36,36,36,36,36,662,224,669', -'671,679,36,36,36,36,36,36,36,681,684,36,687,688,691,693,655,36,36,696', -'36,36,36,36,36,36,36,36,36,703,36,36,36,718,36,36,720,36,36,36,655,655', -'655,655,655,655,655,655,655,655,655,727,655,655,348,732,655,655,735', -'36,767,348,36,772,790,36,36,460,791,36,348,36,655,793,655,36,655,655', -'655,655,655,655,655,36,655,794,795,797,36,36,36,36,36,36,798,321,799', -'36,36,460,655,800,321,460,460,36,812,816,36,36,36,321,819,36,36,986', -'986,986,986,986,986,820,825,742,986,986,826,827,828,986,742,986,986', -'986,986,986,986,986,832,742,833,835,836,986,986,986,986,986,986,986', -'838,841,986,843,846,849,859,418,986,986,864,986,986,986,986,986,986', -'986,986,986,865,986,986,986,866,986,986,875,986,986,986,418,418,418', -'418,418,418,418,418,418,418,418,595,418,418,896,876,418,418,595,986', -'893,896,986,897,898,986,986,595,900,986,896,986,418,901,418,986,418', -'418,418,418,418,418,418,986,418,926,930,1035,986,986,986,986,986,986', -'1035,306,931,986,986,1035,418,936,306,1035,944,986,947,948,986,986,986', -'306,949,986,986,753,753,753,753,753,753,950,952,304,753,753,962,970', -'973,753,304,753,753,753,753,753,753,753,974,304,975,976,977,753,753', -'753,753,753,753,753,979,894,753,894,894,894,1003,894,753,753,1004,753', -'753,753,753,753,753,753,753,753,1006,753,753,753,1017,753,753,1022,753', -'753,753,781,781,781,781,781,781,781,781,781,781,781,303,781,781,302', -'1023,781,781,303,753,1024,302,753,1025,1026,753,753,303,1027,753,302', -'753,781,1028,781,753,781,781,781,781,781,781,781,753,781,1031,1036,857', -'753,753,753,753,753,753,857,686,1037,753,753,857,781,1,686,857,,753', -',686,753,753,753,686,,753,753,804,804,804,804,804,804,,,17,804,804,', -',,804,17,804,804,804,804,804,804,804,,17,,,,804,804,804,804,804,804', -'804,,1002,804,1002,1002,1002,,1002,804,804,,804,804,804,804,804,804', -'804,804,804,,804,804,804,,804,804,,804,804,804,438,438,438,438,438,438', -'438,438,438,438,438,519,438,438,,,438,438,519,804,,,804,,,804,804,519', -',804,,804,438,,438,804,438,438,438,438,438,438,438,804,438,,,,804,804', -'804,804,804,804,,,,804,804,,438,,,,,804,,,804,804,804,,,804,804,808', -'808,808,808,808,808,,,,808,808,,,,808,,808,808,808,808,808,808,808,293', -'293,293,293,293,808,808,808,808,808,808,808,,,808,9,9,9,9,9,808,808', -',808,808,808,808,808,808,808,808,808,,808,808,808,,808,808,,808,808', -'808,482,482,482,482,482,482,482,482,482,482,482,,482,482,,,482,482,', -'808,,,808,,,808,808,,,808,,808,482,,482,808,482,482,482,482,482,482', -'482,808,482,,,,808,808,808,808,808,808,,,,808,808,482,482,,,,,808,,', -'808,808,808,,,808,808,809,809,809,809,809,809,,,,809,809,,,,809,,809', -'809,809,809,809,809,809,508,508,508,508,508,809,809,809,809,809,809', -'809,,,809,,,,,,809,809,,809,809,809,809,809,809,809,809,809,,809,809', -'809,,809,809,,809,809,809,529,529,529,529,529,529,529,529,529,529,529', -',529,529,,,529,529,,809,,,809,,,809,809,,,809,,809,529,,529,809,529', -'529,529,529,529,529,529,809,529,,,,809,809,809,809,809,809,,,,809,809', -',529,,,,,809,,,809,809,809,,,809,809,404,404,404,404,404,404,,,,404', -'404,,,,404,,404,404,404,404,404,404,404,,,,,,404,404,404,404,404,404', -'404,,,404,,,,,,404,404,404,404,404,404,404,404,404,404,404,404,,404', -'404,404,,404,404,,404,404,404,24,24,24,24,24,24,24,24,24,24,24,,24,24', -',,24,24,,404,,,404,,,404,404,,,404,,404,24,,24,404,24,24,24,24,24,24', -'24,404,24,,,,404,404,404,404,404,404,,,,404,404,,24,,,,,404,,,404,404', -'404,,,404,404,301,301,301,301,301,301,,,,301,301,,,,301,,301,301,301', -'301,301,301,301,,,,,,301,301,301,301,301,301,301,,,301,,,,,,301,301', -',301,301,301,301,301,301,301,301,301,,301,301,301,,301,301,,301,301', -'301,881,881,881,881,881,881,881,881,881,881,881,,881,881,,,881,881,', -'301,,,301,,,301,301,,,301,,301,881,,881,301,881,881,881,881,881,881', -'881,301,881,,,,301,301,301,301,301,301,,,,301,301,,881,,,,,301,,,301', -'301,301,,,301,301,850,850,850,850,850,850,,,,850,850,,,,850,,850,850', -'850,850,850,850,850,,,,,,850,850,850,850,850,850,850,,,850,,,,,,850', -'850,,850,850,850,850,850,850,850,850,850,,850,850,850,,850,850,,850', -'850,850,878,878,878,878,878,878,878,878,878,878,878,,878,878,,,878,878', -',850,,,850,,,850,850,,,850,,850,878,,878,850,878,878,878,878,878,878', -'878,850,878,,,,850,850,850,850,850,850,,,,850,850,,878,,,,,850,,,850', -'850,850,,,850,850,851,851,851,851,851,851,,,,851,851,,,,851,,851,851', -'851,851,851,851,851,,,,,,851,851,851,851,851,851,851,,,851,,,,,,851', -'851,,851,851,851,851,851,851,851,851,851,,851,851,851,,851,851,,851', -'851,851,278,278,278,278,278,278,278,278,278,278,278,,278,278,,,278,278', -',851,,,851,,,851,851,,,851,,851,278,,278,851,278,278,278,278,278,278', -'278,851,278,,,,851,851,851,851,851,851,,,,851,851,,278,,,,,851,,,851', -'851,851,,,851,851,899,899,899,899,899,899,,,,899,899,,,,899,,899,899', -'899,899,899,899,899,,,,,,899,899,899,899,899,899,899,,,899,,,,,,899', -'899,,899,899,899,899,899,899,899,899,899,,899,899,899,,899,899,,899', -'899,899,783,783,783,783,783,783,783,783,783,783,783,,783,783,,,783,783', -',899,,,899,,,899,899,,,899,,899,783,,783,899,783,783,783,783,783,783', -'783,899,783,,,,899,899,899,899,899,899,,,,899,899,,783,,,,,899,,,899', -'899,899,,,899,899,981,981,981,981,981,981,,,,981,981,,,,981,,981,981', -'981,981,981,981,981,,,,,,981,981,981,981,981,981,981,,,981,,,,,,981', -'981,,981,981,981,981,981,981,981,981,981,,981,981,981,,981,981,,981', -'981,981,690,690,690,690,690,690,690,690,690,690,690,,690,690,,,690,690', -',981,,,981,,,981,981,,,981,,981,690,,690,981,690,690,690,690,690,690', -'690,981,690,,,,981,981,981,981,981,981,,,,981,981,,690,,,,,981,,,981', -'981,981,,,981,981,990,990,990,990,990,990,,,,990,990,,,,990,,990,990', -'990,990,990,990,990,,,,,,990,990,990,990,990,990,990,,,990,,,,,,990', -'990,,990,990,990,990,990,990,990,990,990,,990,990,990,,990,990,,990', -'990,990,779,779,779,779,779,779,779,779,779,779,779,,779,779,,,779,779', -',990,,,990,,,990,990,,,990,,990,779,,779,990,779,779,779,779,779,779', -'779,990,779,,,,990,990,990,990,990,990,,,,990,990,,779,,,,,990,,,990', -'990,990,,,990,990,903,903,903,903,903,903,,,,903,903,,,,903,,903,903', -'903,903,903,903,903,,,,,,903,903,903,903,903,903,903,,,903,,,,,,903', -'903,,903,903,903,903,903,903,903,903,903,,903,903,903,,903,903,,903', -'903,903,776,776,776,776,776,776,776,776,776,776,776,,776,776,,,776,776', -',903,,,903,,,903,903,,,903,,903,776,,776,903,776,776,776,776,776,776', -'776,903,776,,,,903,903,903,903,903,903,,,,903,903,,776,,,,,903,,,903', -'903,903,,,903,903,966,966,966,966,966,966,,,,966,966,,,,966,,966,966', -'966,966,966,966,966,,,,,,966,966,966,966,966,966,966,,,966,,,,,,966', -'966,,966,966,966,966,966,966,966,966,966,,966,966,966,,966,966,,966', -'966,966,774,774,774,774,774,774,774,774,774,774,774,,774,774,,,774,774', -',966,,,966,,,966,966,,,966,,966,774,,774,966,774,774,774,774,774,774', -'774,966,774,,,,966,966,966,966,966,966,,,,966,966,,774,,,,,966,,,966', -'966,966,,,966,966,702,702,702,702,702,702,,,,702,702,,,,702,,702,702', -'702,702,702,702,702,,,,,,702,702,702,702,702,702,702,,,702,,,,,,702', -'702,,702,702,702,702,702,702,702,702,702,,702,702,702,,702,702,,702', -'702,702,769,769,769,769,769,769,769,769,769,769,769,,769,769,,,769,769', -',702,,,702,,,702,702,,,702,,702,769,,769,702,769,769,769,769,769,769', -'769,702,769,,,,702,702,702,702,702,702,,,,702,702,,769,,,,,702,,,702', -'702,702,,,702,702,818,818,818,818,818,818,,,,818,818,,,,818,,818,818', -'818,818,818,818,818,,,,,,818,818,818,818,818,818,818,,842,818,842,842', -'842,,842,818,818,,818,818,818,818,818,818,818,818,818,,818,818,818,', -'818,818,,818,818,818,844,,844,844,844,,844,978,842,978,978,978,,978', -',,,842,,818,,,818,467,,818,818,,,818,,818,,,,818,,,844,467,467,,,818', -',978,,,818,818,818,818,818,818,,467,,818,818,467,467,467,467,,,818,', -',818,818,818,,,818,818,326,326,326,326,326,326,,,,326,326,,,,326,,326', -'326,326,326,326,326,326,,,,,,326,326,326,326,326,326,326,,980,326,980', -'980,980,,980,326,326,,326,326,326,326,326,326,326,326,326,,326,326,326', -',326,326,,326,326,326,475,475,475,475,475,475,475,,980,475,475,,,,,', -'475,475,,326,,,326,,,326,326,,,326,,326,475,,475,326,475,475,475,475', -'475,475,475,326,475,,,,326,326,326,326,326,326,,,,326,326,,1016,,1016', -'1016,1016,326,1016,,326,326,326,,,326,326,233,233,233,233,233,233,,', -',233,233,,,,233,,233,233,233,233,233,233,233,1016,,,,,233,233,233,233', -'233,233,233,,,233,,,,,,233,233,,233,233,233,233,233,233,233,233,233', -',233,233,233,,233,233,,233,233,233,474,474,474,474,474,474,474,,,474', -'474,,,,,,474,474,,233,,,233,,,233,233,,,233,,233,474,,474,233,474,474', -'474,474,474,474,474,233,474,,,,233,233,233,233,233,233,,,,233,233,,', -',,,,233,,,233,233,233,,,233,233,759,759,759,759,759,759,,,,759,759,', -',,759,,759,759,759,759,759,759,759,,,,,,759,759,759,759,759,759,759', -',,759,,,,,,759,759,,759,759,759,759,759,759,759,759,759,,759,759,759', -',759,759,,759,759,759,457,457,457,457,457,457,457,457,457,457,457,,457', -'457,,,457,457,,759,,,759,,,759,759,,,759,,759,457,,457,759,457,457,457', -'457,457,457,457,759,457,,,,759,759,759,759,759,759,,,,759,759,,,,,,', -'759,,,759,759,759,,,759,759,752,752,752,752,752,752,,,,752,752,,,,752', -',752,752,752,752,752,752,752,,,,,,752,752,752,752,752,752,752,,,752', -',,,,,752,752,,752,752,752,752,752,752,752,752,752,,752,752,752,,752', -'752,,752,752,752,473,473,473,473,473,473,473,,,473,473,,,,,,473,473', -',752,,,752,,,752,752,,,752,,752,473,,473,752,473,473,473,473,473,473', -'473,752,473,,,,752,752,752,752,752,752,,,,752,752,,,,,,,752,,,752,752', -'752,,,752,752,860,860,860,860,860,860,,,,860,860,,,,860,,860,860,860', -'860,860,860,860,,,,,,860,860,860,860,860,860,860,,,860,,,,,,860,860', -',860,860,860,860,860,860,860,860,860,,860,860,860,,860,860,,860,860', -'860,481,481,481,481,481,481,481,481,,481,481,,,,,,481,481,,860,,,860', -',,860,860,,,860,,860,481,,481,860,481,481,481,481,481,481,481,860,481', -',,,860,860,860,860,860,860,,,,860,860,,,,,,,860,,,860,860,860,,,860', -'860,933,933,933,933,933,933,,,,933,933,,,,933,,933,933,933,933,933,933', -'933,,,,,,933,933,933,933,933,933,933,,,933,,,,,,933,933,,933,933,933', -'933,933,933,933,933,933,,933,933,933,,933,933,,933,933,933,472,,,,,', -',,,,,,,,,,472,472,,933,,,933,,,933,933,,,933,,933,472,,472,933,472,472', -'472,472,,,472,933,472,,,,933,933,933,933,933,933,,,,933,933,,,,,,,933', -',,933,933,933,,,933,933,577,577,577,577,577,577,,,,577,577,,,,577,,577', -'577,577,577,577,577,577,,,,,,577,577,577,577,577,577,577,,,577,,,,,', -'577,577,,577,577,577,577,577,577,577,577,577,,577,577,577,,577,577,', -'577,577,577,480,480,480,480,480,480,480,,,480,480,,,,,,480,480,,577', -',,577,,,577,577,,,577,,577,480,,480,577,480,480,480,480,480,480,480', -'577,480,,,,577,577,577,577,577,577,,,,577,577,,,,,,,577,,,577,577,577', -',,577,577,989,989,989,989,989,989,,,,989,989,,,,989,,989,989,989,989', -'989,989,989,,,,,,989,989,989,989,989,989,989,,,989,,,,,,989,989,,989', -'989,989,989,989,989,989,989,989,,989,989,989,,989,989,,989,989,989,471', -',,,,,,,,,,,,,,,471,471,,989,,,989,,,989,989,,,989,,989,471,,471,989', -'471,471,471,471,,,471,989,471,,,,989,989,989,989,989,989,,,,989,989', -',,,,,,989,,,989,989,989,,,989,989,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2', +'679,354,883,1068,355,366,328,679,679,679,241,956,679,679,679,65,679', +'22,581,363,581,581,581,1080,581,683,679,679,679,362,766,884,715,353', +'353,404,679,679,715,679,679,679,679,679,1087,704,764,705,1066,610,729', +'1067,765,22,381,307,581,3,831,683,307,381,932,714,714,581,241,679,679', +'679,679,679,679,679,679,679,679,679,679,679,679,1068,600,679,679,679', +'13,679,679,784,784,679,831,328,679,679,766,679,404,679,401,679,65,679', +'679,679,679,679,679,679,366,679,704,679,705,354,883,1068,355,883,354', +'883,1068,355,363,956,679,679,679,679,956,679,110,679,362,766,884,1080', +'679,110,110,110,1080,679,110,110,110,704,110,705,704,764,705,714,610', +'729,110,765,110,110,110,685,1066,401,704,1067,705,1066,110,110,1067', +'110,110,110,110,110,932,972,767,784,15,932,600,92,469,469,16,600,972', +'29,746,92,746,746,746,676,746,707,18,110,110,110,110,110,110,110,110', +'110,110,110,110,110,110,437,25,110,110,110,699,110,110,972,972,110,40', +'892,110,110,886,110,892,110,699,110,239,110,110,110,110,110,110,110', +'731,110,767,110,333,333,685,562,707,676,562,731,29,972,389,707,110,110', +'110,110,707,110,800,110,707,20,746,437,110,800,800,800,469,110,29,800', +'800,43,800,886,383,767,707,49,731,731,886,383,239,896,612,886,359,380', +'896,886,799,359,800,800,380,800,800,800,800,800,952,20,952,952,952,998', +'952,886,998,389,389,389,731,377,396,20,73,333,333,836,377,613,99,800', +'800,800,800,800,800,800,800,800,800,800,800,800,800,612,100,800,800', +'800,637,800,612,238,799,800,101,612,800,44,44,612,640,800,102,800,798', +'800,800,800,800,800,800,800,614,800,136,800,614,612,836,789,613,396', +'396,396,952,836,42,613,800,800,801,800,613,800,836,820,613,801,801,801', +'800,375,220,801,801,800,801,238,375,637,637,1012,836,1012,613,801,475', +'406,637,240,798,640,640,640,391,242,801,801,42,801,801,801,801,801,660', +'243,44,44,994,5,789,789,42,393,5,994,393,247,379,789,453,820,908,677', +'994,379,281,801,801,801,801,801,801,801,801,801,801,801,801,801,801', +'285,475,801,801,801,660,801,406,406,406,801,41,964,801,391,391,391,964', +'801,660,801,453,801,801,801,801,801,801,801,337,801,801,801,393,393', +'453,454,908,677,296,558,297,324,558,481,801,801,678,801,324,801,752', +'752,41,678,678,678,801,324,678,678,678,801,678,300,557,850,41,557,850', +'373,337,678,678,678,678,481,373,454,313,481,481,315,678,678,337,678', +'678,678,678,678,1009,454,1009,1009,1009,322,1009,743,374,743,743,743', +'322,743,1007,374,1007,1007,1007,316,1007,322,317,678,678,678,678,678', +'678,678,678,678,678,678,678,678,678,323,1009,678,678,678,321,678,678', +'743,326,678,327,321,678,678,1007,678,743,678,332,678,321,678,678,678', +'678,678,678,678,334,678,678,678,978,27,978,978,978,978,978,338,27,17', +'17,341,678,678,678,678,978,678,113,678,347,376,1046,1046,678,113,113', +'113,376,678,113,113,113,870,113,870,870,870,978,870,496,360,113,361', +'113,113,113,978,978,978,978,734,734,365,113,113,378,113,113,113,113', +'113,953,378,953,953,953,367,953,785,785,870,496,785,785,785,496,496', +'496,496,870,778,778,978,395,113,113,113,113,113,113,113,113,113,113', +'113,113,113,113,398,953,113,113,113,887,113,113,47,47,113,400,887,113', +'113,403,113,887,113,426,113,887,113,113,113,113,113,113,113,429,113', +'431,113,1039,434,1039,1039,1039,1039,1039,448,482,451,47,47,113,113', +'113,113,1039,113,460,113,452,320,461,471,113,460,460,460,320,113,501', +'460,460,483,460,237,484,320,1039,497,482,485,237,460,482,482,501,501', +'486,1039,1039,237,502,513,460,460,514,460,460,460,460,460,501,339,501', +'529,501,501,501,501,339,497,501,530,501,497,497,497,497,339,533,535', +'540,1039,543,460,460,460,460,460,460,460,460,460,460,460,460,460,460', +'545,552,460,460,460,872,460,872,872,872,460,872,553,460,554,559,560', +'563,460,567,460,568,460,460,460,460,460,460,460,570,460,460,460,1044', +'571,1044,1044,1044,572,1044,580,588,770,872,592,460,460,459,460,770', +'460,595,597,601,459,459,459,460,770,602,459,459,460,459,498,498,498', +'498,498,498,498,1044,603,498,498,539,604,618,616,621,498,498,539,459', +'459,616,459,459,459,459,459,539,644,647,616,653,498,661,498,666,498', +'498,498,498,498,498,498,938,498,938,938,938,672,938,459,459,459,459', +'459,459,459,459,459,459,459,459,459,459,708,985,459,459,459,680,459', +'708,985,138,459,681,708,459,138,138,708,985,459,684,459,687,459,459', +'459,459,459,459,459,689,459,19,459,990,692,694,701,703,19,706,990,709', +'710,713,730,459,459,19,459,990,459,780,780,780,780,780,780,459,745,991', +'780,780,459,747,754,780,991,780,780,780,780,780,780,780,760,991,763', +'793,795,780,780,780,780,780,780,780,797,805,780,829,835,846,847,441', +'780,780,780,780,780,780,780,780,780,780,780,780,854,780,780,780,855', +'780,780,856,780,780,780,441,441,441,441,441,441,441,441,441,441,441', +'992,441,441,436,860,441,441,992,780,861,436,780,863,864,780,780,992', +'866,780,436,780,441,869,441,780,441,441,441,441,441,441,441,780,441', +'871,874,50,780,780,780,780,780,780,50,880,885,780,780,889,441,893,441', +'50,895,780,904,907,780,780,780,914,915,780,780,319,319,319,319,319,319', +'917,918,364,319,319,919,921,922,319,364,319,319,319,319,319,319,319', +'923,364,936,937,954,319,319,319,319,319,319,319,963,967,319,970,983', +'986,988,447,319,319,319,319,319,319,319,319,319,319,319,319,993,319', +'319,319,1002,319,319,1003,319,319,319,447,447,447,447,447,447,447,447', +'447,447,447,1028,447,447,1036,1004,447,447,1028,319,1005,1036,319,1006', +'1008,319,319,1028,1018,319,1036,319,447,1021,447,319,447,447,447,447', +'447,447,447,319,447,1022,1023,1069,319,319,319,319,319,319,1069,1024', +'1026,319,319,1069,447,1032,1045,1069,1050,319,1051,1062,319,319,319', +'1063,1065,319,319,852,852,852,852,852,852,1071,1072,1076,852,852,1077', +'1078,1079,852,1,852,852,852,852,852,852,852,9,9,9,9,9,852,852,852,852', +'852,852,852,,1038,852,1038,1038,1038,,1038,852,852,852,852,852,852,852', +'852,852,852,852,852,,852,852,852,,852,852,,852,852,852,24,24,24,24,24', +'24,24,24,24,24,24,,24,24,,,24,24,,852,,,852,,,852,852,,,852,,852,24', +',24,852,24,24,24,24,24,24,24,852,24,,,,852,852,852,852,852,852,,,,852', +'852,,24,,,,,852,,,852,852,852,,,852,852,853,853,853,853,853,853,,,,853', +'853,,,,853,,853,853,853,853,853,853,853,346,346,346,346,346,853,853', +'853,853,853,853,853,,,853,311,311,311,311,311,853,853,853,853,853,853', +'853,853,853,853,853,853,,853,853,853,,853,853,,853,853,853,550,550,550', +'550,550,550,550,550,550,550,550,,550,550,,,550,550,,853,,,853,,,853', +'853,,,853,,853,550,,550,853,550,550,550,550,550,550,550,853,550,,,,853', +'853,853,853,853,853,,,,853,853,,550,,,,,853,,,853,853,853,,,853,853', +'1017,1017,1017,1017,1017,1017,,,,1017,1017,,,,1017,,1017,1017,1017,1017', +'1017,1017,1017,528,528,528,528,528,1017,1017,1017,1017,1017,1017,1017', +',,1017,,,,,,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017', +',1017,1017,1017,,1017,1017,,1017,1017,1017,802,802,802,802,802,802,802', +'802,802,802,802,,802,802,,,802,802,,1017,,,1017,,,1017,1017,,,1017,', +'1017,802,,802,1017,802,802,802,802,802,802,802,1017,802,,,,1017,1017', +'1017,1017,1017,1017,,,,1017,1017,,802,,,,,1017,,,1017,1017,1017,,,1017', +'1017,314,314,314,314,314,314,,,,314,314,,,,314,,314,314,314,314,314', +'314,314,,,,,,314,314,314,314,314,314,314,,,314,,,,,,314,314,314,314', +'314,314,314,314,314,314,314,314,,314,314,314,,314,314,,314,314,314,500', +'500,500,500,500,500,500,500,500,500,500,,500,500,,,500,500,,314,,,314', +',,314,314,,,314,,314,500,,500,314,500,500,500,500,500,500,500,314,500', +',,,314,314,314,314,314,314,,,,314,314,500,500,,,,,314,,,314,314,314', +',,314,314,1015,1015,1015,1015,1015,1015,,,,1015,1015,,,,1015,,1015,1015', +'1015,1015,1015,1015,1015,,,,,,1015,1015,1015,1015,1015,1015,1015,,,1015', +',,,,,1015,1015,1015,1015,1015,1015,1015,1015,1015,1015,1015,1015,,1015', +'1015,1015,,1015,1015,,1015,1015,1015,913,913,913,913,913,913,913,913', +'913,913,913,,913,913,,,913,913,,1015,,,1015,,,1015,1015,,,1015,,1015', +'913,,913,1015,913,913,913,913,913,913,913,1015,913,,,,1015,1015,1015', +'1015,1015,1015,,,,1015,1015,,913,,,,,1015,,,1015,1015,1015,,,1015,1015', +'36,36,36,36,36,36,,,,36,36,,,,36,,36,36,36,36,36,36,36,,,,,,36,36,36', +'36,36,36,36,,,36,,,,,,36,36,36,36,36,36,36,36,36,36,36,36,,36,36,36', +',36,36,,36,36,36,294,294,294,294,294,294,294,294,294,294,294,,294,294', +',,294,294,,36,,,36,,,36,36,,,36,,36,294,,294,36,294,294,294,294,294', +'294,294,36,294,,,,36,36,36,36,36,36,,,,36,36,,294,,,,,36,,,36,36,36', +',,36,36,1010,1010,1010,1010,1010,1010,,,,1010,1010,,,,1010,,1010,1010', +'1010,1010,1010,1010,1010,,,,,,1010,1010,1010,1010,1010,1010,1010,,,1010', +',,,,,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,,1010', +'1010,1010,,1010,1010,,1010,1010,1010,479,479,479,479,479,479,479,479', +'479,479,479,,479,479,,,479,479,,1010,,,1010,,,1010,1010,,,1010,,1010', +'479,,479,1010,479,479,479,479,479,479,479,1010,479,,,,1010,1010,1010', +'1010,1010,1010,,,,1010,1010,,,,,,,1010,,,1010,1010,1010,,,1010,1010', +'358,358,358,358,358,358,,,,358,358,,,,358,,358,358,358,358,358,358,358', +',,,,,358,358,358,358,358,358,358,,,358,,,,,,358,358,358,358,358,358', +'358,358,358,358,358,358,,358,358,358,,358,358,,358,358,358,480,480,480', +'480,480,480,480,480,480,480,480,,480,480,,,480,480,,358,,,358,,,358', +'358,,,358,,358,480,,480,358,480,480,480,480,480,480,480,358,480,,,,358', +'358,358,358,358,358,,,,358,358,,,,,,,358,,,358,358,358,,,358,358,786', +'786,786,786,786,786,,,,786,786,,,,786,,786,786,786,786,786,786,786,', +',,,,786,786,786,786,786,786,786,,,786,,,,,,786,786,786,786,786,786,786', +'786,786,786,786,786,,786,786,786,,786,786,,786,786,786,490,490,490,490', +'490,490,490,,,490,490,,,,,,490,490,,786,,,786,,,786,786,,,786,,786,490', +',490,786,490,490,490,490,490,490,490,786,490,,,,786,786,786,786,786', +'786,,,,786,786,,,,,,,786,,,786,786,786,,,786,786,357,357,357,357,357', +'357,,,,357,357,,,,357,,357,357,357,357,357,357,357,,,,,,357,357,357', +'357,357,357,357,,,357,,,,,,357,357,357,357,357,357,357,357,357,357,357', +'357,,357,357,357,,357,357,,357,357,357,491,491,491,491,491,491,491,', +',491,491,,,,,,491,491,,357,,,357,,,357,357,,,357,,357,491,,491,357,491', +'491,491,491,491,491,491,357,491,,,,357,357,357,357,357,357,,,,357,357', +',,,,,,357,,,357,357,357,,,357,357,989,989,989,989,989,989,,,,989,989', +',,,989,,989,989,989,989,989,989,989,,,,,,989,989,989,989,989,989,989', +',,989,,,,,,989,989,989,989,989,989,989,989,989,989,989,989,,989,989', +'989,,989,989,,989,989,989,492,492,492,492,492,492,492,,,492,492,,,,', +',492,492,,989,,,989,,,989,989,,,989,,989,492,,492,989,492,492,492,492', +'492,492,492,989,492,,,,989,989,989,989,989,989,,,,989,989,,,,,,,989', +',,989,989,989,,,989,989,649,649,649,649,649,649,,,,649,649,,,,649,,649', +'649,649,649,649,649,649,,,,,,649,649,649,649,649,649,649,,,649,,,,,', +'649,649,649,649,649,649,649,649,649,649,649,649,,649,649,649,,649,649', +',649,649,649,493,493,493,493,493,493,493,,,493,493,,,,,,493,493,,649', +',,649,,,649,649,,,649,,649,493,,493,649,493,493,493,493,493,493,493', +'649,493,,,,649,649,649,649,649,649,,,,649,649,,,,,,,649,,,649,649,649', +',,649,649,246,246,246,246,246,246,,,,246,246,,,,246,,246,246,246,246', +'246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,246,246,246', +'246,246,246,246,246,246,246,246,246,,246,246,246,,246,246,,246,246,246', +'494,494,494,494,494,494,494,,,494,494,,,,,,494,494,,246,,,246,,,246', +'246,,,246,,246,494,,494,246,494,494,494,494,494,494,494,246,494,,,,246', +'246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246,,,246,246,345', +'345,345,345,345,345,,,,345,345,,,,345,,345,345,345,345,345,345,345,', +',,,,345,345,345,345,345,345,345,,,345,,,,,,345,345,345,345,345,345,345', +'345,345,345,345,345,,345,345,345,,345,345,,345,345,345,495,495,495,495', +'495,495,495,,,495,495,,,,,,495,495,,345,,,345,,,345,345,,,345,,345,495', +',495,345,495,495,495,495,495,495,495,345,495,,,,345,345,345,345,345', +'345,,,,345,345,,,,,,,345,,,345,345,345,,,345,345,960,960,960,960,960', +'960,,,,960,960,,,,960,,960,960,960,960,960,960,960,,,,,,960,960,960', +'960,960,960,960,,,960,,,,,,960,960,960,960,960,960,960,960,960,960,960', +'960,,960,960,960,,960,960,,960,960,960,499,499,499,499,499,499,499,499', +',499,499,,,,,,499,499,,960,,,960,,,960,960,,,960,,960,499,,499,960,499', +'499,499,499,499,499,499,960,499,,,,960,960,960,960,960,960,,,,960,960', +',,,,,,960,,,960,960,960,,,960,960,930,930,930,930,930,930,,,,930,930', +',,,930,,930,930,930,930,930,930,930,,,,,,930,930,930,930,930,930,930', +',,930,,,,,,930,930,930,930,930,930,930,930,930,930,930,930,,930,930', +'930,,930,930,,930,930,930,549,,,,,,,,,,,,,,,,549,549,,930,,,930,,489', +'930,930,,,930,,930,549,,549,930,549,549,549,549,489,489,549,930,549', +',,,930,930,930,930,930,930,,,489,930,930,,489,489,489,489,,930,,,930', +'930,930,,,930,930,599,599,599,599,599,599,,,,599,599,,,,599,,599,599', +'599,599,599,599,599,,,,,,599,599,599,599,599,599,599,,,599,,,,,,599', +'599,599,599,599,599,599,599,599,599,599,599,,599,599,599,,599,599,,599', +'599,599,488,,,,,,,,,,,,,,,,488,488,,599,,,599,,,599,599,,,599,,599,488', +',488,599,488,488,488,488,,,,599,,,,,599,599,599,599,599,599,,,,599,599', +',,,,,,599,,,599,599,599,,,599,599,596,596,596,596,596,596,,,,596,596', +',,,596,,596,596,596,596,596,596,596,,,,,,596,596,596,596,596,596,596', +',,596,,,,,,596,596,596,596,596,596,596,596,596,596,596,596,,596,596', +'596,,596,596,,596,596,596,487,,,,,,,,,,,,,,,,487,487,,596,,,596,,,596', +'596,,,596,,596,487,,487,596,487,487,487,487,,,,596,,,,,596,596,596,596', +'596,596,,,,596,596,,,,,,,596,,,596,596,596,,,596,596,222,222,222,222', +'222,222,,,,222,222,,,,222,,222,222,222,222,222,222,222,,,,,,222,222', +'222,222,222,222,222,,,222,,,,,,222,222,222,222,222,222,222,222,222,222', +'222,222,,222,222,222,,222,222,,222,222,222,,,,,,,,,,,,,,,,,,,,222,,', +'222,,,222,222,,,222,,222,,,,222,,,,,,,,222,,,,,222,222,222,222,222,222', +',,,222,222,,,,,,,222,,,222,222,222,,,222,222,768,768,768,768,768,768', +',,,768,768,,,,768,,768,768,768,768,768,768,768,,,,,,768,768,768,768', +'768,768,768,,,768,,,,,,768,768,768,768,768,768,768,768,768,768,768,768', +',768,768,768,,768,768,,768,768,768,,,,,,,,,,,,,,,,,,,,768,,,768,,,768', +'768,,,768,,768,,,,768,,,,,,,,768,,,,,768,768,768,768,768,768,,,,768', +'768,,,,,,,768,,,768,768,768,,,768,768,929,929,929,929,929,929,,,,929', +'929,,,,929,,929,929,929,929,929,929,929,,,,,,929,929,929,929,929,929', +'929,,,929,,,,,,929,929,929,929,929,929,929,929,929,929,929,929,,929', +'929,929,,929,929,,929,929,929,,,,,,,,,,,,,,,,,,,,929,,,929,,,929,929', +',,929,,929,,,,929,,,,,,,,929,,,,,929,929,929,929,929,929,,,,929,929', +',,,,,,929,,,929,929,929,,,929,929,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2', '2,2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2', -',2,2,2,470,,,,,,,,,,,,,,,,470,470,,2,,,2,,,2,2,,,2,,2,470,,470,2,470', -'470,470,470,,,470,2,470,,,,2,2,2,2,2,2,,,,2,2,,,,,,,2,,,2,2,2,,,2,2', -'209,209,209,209,209,209,,,,209,209,,,,209,,209,209,209,209,209,209,209', -',,,,,209,209,209,209,209,209,209,,,209,,,,,,209,209,,209,209,209,209', -'209,209,209,209,209,,209,209,209,,209,209,,209,209,209,469,,,,,,,,,', -',,,,,,469,469,,209,,,209,,,209,209,,,209,,209,469,,469,209,469,469,469', -'469,,,469,209,469,,,,209,209,209,209,209,209,,,,209,209,,,,,,,209,,', -'209,209,209,,,209,209,701,701,701,701,701,701,,,,701,701,,,,701,,701', -'701,701,701,701,701,701,,,,,,701,701,701,701,701,701,701,,,701,,,,,', -'701,701,,701,701,701,701,701,701,701,701,701,,701,701,701,,701,701,', -'701,701,701,458,458,458,458,458,458,458,458,458,458,458,,458,458,,,458', -'458,,701,,,701,,,701,701,,,701,,701,458,,458,701,458,458,458,458,458', -'458,458,701,458,,,,701,701,701,701,701,701,,,,701,701,,,,,,,701,,,701', -'701,701,,,701,701,296,296,296,296,296,296,,,,296,296,,,,296,,296,296', -'296,296,296,296,296,,,,,,296,296,296,296,296,296,296,,,296,,,,,,296', -'296,,296,296,296,296,296,296,296,296,296,,296,296,296,,296,296,,296', -'296,296,477,477,477,477,477,477,477,,,477,477,,,,,,477,477,,296,,,296', -',,296,296,,,296,,296,477,,477,296,477,477,477,477,477,477,477,296,477', -',,,296,296,296,296,296,296,,,,296,296,,,,,,,296,,,296,296,296,,,296', -'296,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34', -'34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34', -'34,,34,34,34,476,476,476,476,476,476,476,,,476,476,,,,,,476,476,,34', -',,34,,,34,34,,,34,,34,476,34,476,34,476,476,476,476,476,476,476,34,476', -',,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,285,285', -'285,,285,,,,285,285,,,,285,,285,285,285,285,285,285,285,,,,,,285,285', -'285,285,285,285,285,,,285,,,,,,,285,,,285,285,285,285,285,285,285,285', -',285,285,285,,285,285,,285,285,285,468,468,468,468,468,468,468,,,468', -'468,,,,,,468,468,,285,,,285,,,285,285,,,285,,,468,,468,285,468,468,468', -'468,468,468,468,285,468,,,,285,285,285,285,285,285,,,,285,285,,,,,,', -'285,,,285,285,285,,,285,285,288,288,288,,288,,,,288,288,,,,288,,288', -'288,288,288,288,288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,', -',288,,,288,288,288,288,288,288,288,288,,288,288,288,,288,288,,288,288', -'288,465,,,,,,,,,,,,,,,,465,465,,288,,,288,,,288,288,,,288,,,465,,465', -'288,465,465,465,465,,,,288,,,,,288,288,288,288,288,288,,,,288,288,,', -',,,,288,,,288,288,288,,,288,288,244,244,244,,244,,,,244,244,,,,244,', -'244,244,244,244,244,244,244,,,,,,244,244,244,244,244,244,244,,,244,', -',,,,,244,,,244,244,244,244,244,244,244,244,,244,244,244,,244,244,,244', -'244,244,466,,,,,,,,,,,,,,,,466,466,,244,,,244,,,244,244,,,244,,,466', -',466,244,466,466,466,466,,,,244,,,,,244,244,244,244,244,244,,,,244,244', -',,,,,,244,,,244,244,244,,,244,244,294,294,294,294,294,,,,294,294,,,', -'294,,294,294,294,294,294,294,294,,,,,,294,294,294,294,294,294,294,,', -'294,,,,,,294,294,,294,294,294,294,294,294,294,294,294,,294,294,294,', -'294,294,,294,294,294,,,,,,,,,,,,,,,,,,,,294,,,294,,,294,294,,,294,,294', -',,,294,,,,,,,,294,,,,,294,294,294,294,294,294,,,,294,294,,,,,,,294,', -',294,294,294,,,294,294,37,37,37,,37,,,,37,37,,,,37,,37,37,37,37,37,37', -'37,,,,,,37,37,37,37,37,37,37,,,37,,,,,,,37,,,37,37,37,37,37,37,37,37', -',37,37,37,,37,37,,,,37,,,,,,,,,,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,', -',,,,,,,,,,,,,,,37,37,37,37,37,37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37', -'38,38,38,,38,,,,38,38,,,,38,,38,38,38,38,38,38,38,,,,,,38,38,38,38,38', -'38,38,,,38,,,,,,,38,,,38,38,38,38,38,38,38,38,,38,38,38,,38,38,,,,38', -',,,,,,,,,,,,,,,,,,,38,,,38,,,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38', -'38,38,,,,38,38,,,,38,,,38,,,38,38,38,,,38,38,243,243,243,,243,,,,243', -'243,,,,243,,243,243,243,243,243,243,243,,,,,,243,243,243,243,243,243', -'243,,,243,,,,,,,243,,,243,243,243,243,243,243,243,243,,243,243,243,', -'243,243,,243,243,243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243,,,243,,', -',,,243,,,,,,,,243,,,,,243,243,243,243,243,243,,,,243,243,,,,,,,243,', -',243,243,243,,,243,243,678,678,678,,678,,,,678,678,,,,678,,678,678,678', -'678,678,678,678,,,,,,678,678,678,678,678,678,678,,,678,,,,,,,678,,,678', -'678,678,678,678,678,678,678,,678,678,678,,678,678,,,,678,,,,,,,,,,,', -',,,,,,,,678,,,678,,,678,678,,,678,,,,,,,,,,,,,,,,,,,678,678,678,678', -'678,678,,,,678,678,,,,,,,678,,,678,678,678,,,678,678,672,672,672,,672', -',,,672,672,,,,672,,672,672,672,672,672,672,672,,,,,,672,672,672,672', -'672,672,672,,,672,,,,,,,672,,,672,672,672,672,672,672,672,672,,672,672', -'672,,672,672,,672,672,672,,,,,,,,,,,,,,,,,,,,672,,,672,,,672,672,,,672', -',,,,,672,,,,,,,,672,,,,,672,672,672,672,672,672,,,,672,672,,,,,,,672', -',,672,672,672,,,672,672,300,300,300,,300,,,,300,300,,,,300,,300,300', -'300,300,300,300,300,,,,,,300,300,300,300,300,300,300,,,300,,,,,,,300', -',,300,300,300,300,300,300,300,300,,300,300,300,,300,300,,,,300,,,,,', -',,,,,,,,,,,,,,300,,,300,,,300,300,,,300,,,,,,,,,,,,,,,,,,,300,300,300', -'300,300,300,,,,300,300,,,,300,,,300,,,300,300,300,,,300,300,848,848', -'848,,848,,,,848,848,,,,848,,848,848,848,848,848,848,848,,,,,,848,848', -'848,848,848,848,848,,,848,,,,,,,848,,,848,848,848,848,848,848,848,848', -',848,848,848,,848,848,,848,848,848,,,,,,,,,,,,,,,,,,,,848,,,848,,,848', -'848,,,848,,,,,,848,,,,,,,,848,,,,,848,848,848,848,848,848,,,,848,848', -',,,,,,848,,,848,848,848,,,848,848,740,740,740,,740,,,,740,740,,,,740', -',740,740,740,740,740,740,740,,,,,,740,740,740,740,740,740,740,,,740', -',,,,,,740,,,740,740,740,740,740,740,740,740,,740,740,740,,740,740,,740', -'740,740,,,,,,,,,,,,,,,,,,,,740,,,740,,,740,740,,,740,,,,,,740,,,,,,', -',740,,,,,740,740,740,740,740,740,,,,740,740,,,,,,,740,,,740,740,740', -',,740,740,256,256,256,,256,,,,256,256,,,,256,,256,256,256,256,256,256', -'256,,,,,,256,256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256,256', -'256,256,256,256,,256,256,256,,256,256,,256,256,256,,,,,,,,,,,,,,,,,', -',,256,,,256,,,256,256,,,256,,,,,,256,,,,,,,,256,,,,,256,256,256,256', -'256,256,,,,256,256,,,,,,,256,,,256,256,256,,,256,256,242,242,242,,242', -',,,242,242,,,,242,,242,242,242,242,242,242,242,,,,,,242,242,242,242', -'242,242,242,,,242,,,,,,,242,,,242,242,242,242,242,242,242,242,,242,242', -'242,,242,242,,242,242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242,,,242', -',,,,,242,,,,,,,,242,,,,,242,242,242,242,242,242,,,,242,242,,,,,,,242', -',,242,242,242,,,242,242,241,241,241,,241,,,,241,241,,,,241,,241,241', -'241,241,241,241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241', -',,241,241,241,241,241,241,241,241,,241,241,241,,241,241,,241,241,241', -',,,,,,,,,,,,,,,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,', -',241,241,241,241,241,241,,,,241,241,,,,,,,241,,,241,241,241,,,241,241', -'240,240,240,,240,,,,240,240,,,,240,,240,240,240,240,240,240,240,,,,', -',240,240,240,240,240,240,240,,,240,,,,,,,240,,,240,240,240,240,240,240', -'240,240,,240,240,240,,240,240,,240,240,240,,,,,,,,,,,,,,,,,,,,240,,', -'240,,,240,240,,,240,,,,,,240,,,,,,,,240,,,,,240,240,240,240,240,240', -',,,240,240,,,,,,,240,,,240,240,240,,,240,240,861,861,861,,861,,,,861', -'861,,,,861,,861,861,861,861,861,861,861,,,,,,861,861,861,861,861,861', -'861,,,861,,,,,,,861,,,861,861,861,861,861,861,861,861,,861,861,861,', -'861,861,,861,861,861,,,,,,,,,,,,,,,,,,,,861,,,861,,,861,861,,,861,,', -',,,861,,,,,,,,861,,,,,861,861,861,861,861,861,,,,861,861,,,,,,,861,', -',861,861,861,,,861,861,239,239,239,,239,,,,239,239,,,,239,,239,239,239', -'239,239,239,239,,,,,,239,239,239,239,239,239,239,,,239,,,,,,,239,,,239', -'239,239,239,239,239,239,239,,239,239,239,,239,239,,239,239,239,,,,,', -',,,,,,,,,,,,,,239,,,239,,,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239', -'239,239,239,239,239,,,,239,239,,,,,,,239,,,239,239,239,,,239,239,238', -'238,238,,238,,,,238,238,,,,238,,238,238,238,238,238,238,238,,,,,,238', -'238,238,238,238,238,238,,,238,,,,,,,238,,,238,238,238,238,238,238,238', -'238,,238,238,238,,238,238,,238,238,238,,,,,,,,,,,,,,,,,,,,238,,,238', -',,238,238,,,238,,,,,,238,,,,,,,,238,,,,,238,238,238,238,238,238,,,,238', -'238,,,,,,,238,,,238,238,238,,,238,238,648,648,648,,648,,,,648,648,,', -',648,,648,648,648,648,648,648,648,,,,,,648,648,648,648,648,648,648,', -',648,,,,,,,648,,,648,648,648,648,648,648,648,648,,648,648,648,,648,648', -',648,648,648,,,,,,,,,,,,,,,,,,,,648,,,648,,,648,648,,,648,,,,,,648,', -',,,,,,648,,,,,648,648,648,648,648,648,,,,648,648,,,,,,,648,,,648,648', -'648,,,648,648,647,647,647,,647,,,,647,647,,,,647,,647,647,647,647,647', -'647,647,,,,,,647,647,647,647,647,647,647,,,647,,,,,,,647,,,647,647,647', -'647,647,647,647,647,,647,647,647,,647,647,,647,647,647,,,,,,,,,,,,,', -',,,,,,647,,,647,,,647,647,,,647,,,,,,647,,,,,,,,647,,,,,647,647,647', -'647,647,647,,,,647,647,,,,,,,647,,,647,647,647,,,647,647,879,879,879', -',879,,,,879,879,,,,879,,879,879,879,879,879,879,879,,,,,,879,879,879', -'879,879,879,879,,,879,,,,,,,879,,,879,879,879,879,879,879,879,879,879', -'879,879,879,,879,879,,879,879,879,,,,,,,,,,,,,,,,,,,,879,,,879,,,879', -'879,,,879,,,,879,,879,,,,,,,,879,,,,,879,879,879,879,879,879,,,,879', -'879,,,,,,,879,,879,879,879,879,,,879,879,880,880,880,,880,,,,880,880', -',,,880,,880,880,880,880,880,880,880,,,,,,880,880,880,880,880,880,880', -',,880,,,,,,,880,,,880,880,880,880,880,880,880,880,,880,880,880,,880', -'880,,880,880,880,,,,,,,,,,,,,,,,,,,,880,,,880,,,880,880,,,880,,,,,,880', -',,,,,,,880,,,,,880,880,880,880,880,880,,,,880,880,,,,,,,880,,,880,880', -'880,,,880,880,237,237,237,,237,,,,237,237,,,,237,,237,237,237,237,237', -'237,237,,,,,,237,237,237,237,237,237,237,,,237,,,,,,,237,,,237,237,237', -'237,237,237,237,237,,237,237,237,,237,237,,237,237,237,,,,,,,,,,,,,', -',,,,,,237,,,237,,,237,237,,,237,,,,,,237,,,,,,,,237,,,,,237,237,237', -'237,237,237,,,,237,237,,,,,,,237,,,237,237,237,,,237,237,644,644,644', -',644,,,,644,644,,,,644,,644,644,644,644,644,644,644,,,,,,644,644,644', -'644,644,644,644,,,644,,,,,,,644,,,644,644,644,644,644,644,644,644,,644', -'644,644,,644,644,,644,644,644,,,,,,,,,,,,,,,,,,,,644,,,644,,,644,644', -',,644,,,,,,644,,,,,,,,644,,,,,644,644,644,644,644,644,,,,644,644,,,', -',,,644,,,644,644,644,,,644,644,643,643,643,,643,,,,643,643,,,,643,,643', -'643,643,643,643,643,643,,,,,,643,643,643,643,643,643,643,,,643,,,,,', -',643,,,643,643,643,643,643,643,643,643,,643,643,643,,643,643,,643,643', -'643,,,,,,,,,,,,,,,,,,,,643,,,643,,,643,643,,,643,,,,,,643,,,,,,,,643', -',,,,643,643,643,643,643,643,,,,643,643,,,,,,,643,,,643,643,643,,,643', -'643,236,236,236,,236,,,,236,236,,,,236,,236,236,236,236,236,236,236', -',,,,,236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236,236,236', -'236,236,236,,236,236,236,,236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236', -',,236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236,236,236,236', -',,,236,236,,,,,,,236,,,236,236,236,,,236,236,638,638,638,,638,,,,638', -'638,,,,638,,638,638,638,638,638,638,638,,,,,,638,638,638,638,638,638', -'638,,,638,,,,,,,638,,,638,638,638,638,638,638,638,638,,638,638,638,', -'638,638,,638,638,638,,,,,,,,,,,,,,,,,,,,638,,,638,,,638,638,,,638,,', -',,,638,,,,,,,,638,,,,,638,638,638,638,638,638,,,,638,638,,,,,,,638,', -',638,638,638,,,638,638,637,637,637,,637,,,,637,637,,,,637,,637,637,637', -'637,637,637,637,,,,,,637,637,637,637,637,637,637,,,637,,,,,,,637,,,637', -'637,637,637,637,637,637,637,,637,637,637,,637,637,,637,637,637,,,,,', -',,,,,,,,,,,,,,637,,,637,,,637,637,,,637,,,,,,637,,,,,,,,637,,,,,637', -'637,637,637,637,637,,,,637,637,,,,,,,637,,,637,637,637,,,637,637,636', -'636,636,,636,,,,636,636,,,,636,,636,636,636,636,636,636,636,,,,,,636', -'636,636,636,636,636,636,,,636,,,,,,,636,,,636,636,636,636,636,636,636', -'636,636,636,636,636,,636,636,,636,636,636,,,,,,,,,,,,,,,,,,,,636,,,636', -',,636,636,,,636,,,,636,,636,,,,,,,,636,,,,,636,636,636,636,636,636,', -',,636,636,,,,,,,636,,636,636,636,636,,,636,636,895,895,895,,895,,,,895', -'895,,,,895,,895,895,895,895,895,895,895,,,,,,895,895,895,895,895,895', -'895,,,895,,,,,,,895,,,895,895,895,895,895,895,895,895,,895,895,895,', -'895,895,,,,895,,,,,,,,,,,,,,,,,,,,895,,,895,,,895,895,,,895,,,,,,,,', -',,,,,,,,,,895,895,895,895,895,895,,,,895,895,,,,,,,895,,,895,895,895', -',,895,895,635,635,635,,635,,,,635,635,,,,635,,635,635,635,635,635,635', -'635,,,,,,635,635,635,635,635,635,635,,,635,,,,,,,635,,,635,635,635,635', -'635,635,635,635,635,635,635,635,,635,635,,635,635,635,,,,,,,,,,,,,,', -',,,,,635,,,635,,,635,635,,,635,,635,,635,,635,,,,,,,,635,,,,,635,635', -'635,635,635,635,,,,635,635,,,,,,,635,,635,635,635,635,,,635,635,235', -'235,235,,235,,,,235,235,,,,235,,235,235,235,235,235,235,235,,,,,,235', -'235,235,235,235,235,235,,,235,,,,,,,235,,,235,235,235,235,235,235,235', -'235,,235,235,235,,235,235,,235,235,235,,,,,,,,,,,,,,,,,,,,235,,,235', -',,235,235,,,235,,,,,,235,,,,,,,,235,,,,,235,235,235,235,235,235,,,,235', -'235,,,,,,,235,,,235,235,235,,,235,235,45,45,45,,45,,,,45,45,,,,45,,45', -'45,45,45,45,45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45', -'45,45,45,45,45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45', -',,45,45,,,45,,,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,', -'45,,,45,45,45,,,45,45,632,632,632,,632,,,,632,632,,,,632,,632,632,632', -'632,632,632,632,,,,,,632,632,632,632,632,632,632,,,632,,,,,,,632,,,632', -'632,632,632,632,632,632,632,,632,632,632,,632,632,,632,632,632,,,,,', -',,,,,,,,,,,,,,632,,,632,,,632,632,,,632,,,,,,632,,,,,,,,632,,,,,632', -'632,632,632,632,632,,,,632,632,,,,,,,632,,,632,632,632,,,632,632,46', -'46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46,46,46,46,46', -'46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46,46,,46,46,46', -',,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,,46,,,,,46,46', -'46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,907,907,907,,907,,', -',907,907,,,,907,,907,907,907,907,907,907,907,,,,,,907,907,907,907,907', -'907,907,,,907,,,,,,,907,,,907,907,907,907,907,907,907,907,,907,907,907', -',907,907,,,,907,,,,,,,,,,,,,,,,,,,,907,,,907,,,907,907,,,907,,,,,,,', -',,,,,,,,,,,907,907,907,907,907,907,,,,907,907,,,,,,,907,,,907,907,907', -',,907,907,631,631,631,,631,,,,631,631,,,,631,,631,631,631,631,631,631', -'631,,,,,,631,631,631,631,631,631,631,,,631,,,,,,,631,,,631,631,631,631', -'631,631,631,631,,631,631,631,,631,631,,631,631,631,,,,,,,,,,,,,,,,,', -',,631,,,631,,,631,631,,,631,,631,,,,631,,,,,,,,631,,,,,631,631,631,631', -'631,631,,,,631,631,,,,,,,631,,,631,631,631,,,631,631,232,232,232,,232', -',,,232,232,,,,232,,232,232,232,232,232,232,232,,,,,,232,232,232,232', -'232,232,232,,,232,,,,,,,232,,,232,232,232,232,232,232,232,232,,232,232', -'232,,232,232,,232,232,232,,,,,,,,,,,,,,,,,,,,232,,,232,,,232,232,,,232', -',,,,,232,,,,,,,,232,,,,,232,232,232,232,232,232,,,,232,232,,,,,,,232', -',,232,232,232,,,232,232,602,602,602,,602,,,,602,602,,,,602,,602,602', -'602,602,602,602,602,,,,,,602,602,602,602,602,602,602,,,602,,,,,,,602', -',,602,602,602,602,602,602,602,602,,602,602,602,,602,602,,602,602,602', -',,,,,,,,,,,,,,,,,,,602,,,602,,,602,602,,,602,,,,,,602,,,,,,,,602,,,', -',602,602,602,602,602,602,,,,602,602,,,,,,,602,,,602,602,602,,,602,602', -'598,598,598,,598,,,,598,598,,,,598,,598,598,598,598,598,598,598,,,,', -',598,598,598,598,598,598,598,,,598,,,,,,,598,,,598,598,598,598,598,598', -'598,598,,598,598,598,,598,598,,598,598,598,,,,,,,,,,,,,,,,,,,,598,,', -'598,,,598,598,,,598,,,,,,598,,,,,,,,598,,,,,598,598,598,598,598,598', -',,,598,598,,,,,,,598,,,598,598,598,,,598,598,317,317,317,,317,,,,317', -'317,,,,317,,317,317,317,317,317,317,317,,,,,,317,317,317,317,317,317', -'317,,,317,,,,,,,317,,,317,317,317,317,317,317,317,317,,317,317,317,', -'317,317,,,,317,,,,,,,,,,,,,,,,,,,,317,,,317,,,317,317,,,317,,,,,,,,', -',,,,,,,,,,317,317,317,317,317,317,,,,317,317,,,,,,,317,,,317,317,317', -',,317,317,47,47,47,,47,,,,47,47,,,,47,,47,47,47,47,47,47,47,,,,,,47', -'47,47,47,47,47,47,,,47,,,,,,,47,,,47,47,47,47,47,47,47,47,,47,47,47', -',47,47,,47,47,47,,,,,,,,,,,,,,,,,,,,47,,,47,,,47,47,,,47,,,,,,47,,,', -',,,,47,,,,,47,47,47,47,47,47,,,,47,47,,,,,,,47,,,47,47,47,,,47,47,932', -'932,932,,932,,,,932,932,,,,932,,932,932,932,932,932,932,932,,,,,,932', -'932,932,932,932,932,932,,,932,,,,,,,932,,,932,932,932,932,932,932,932', -'932,,932,932,932,,932,932,,932,932,932,,,,,,,,,,,,,,,,,,,,932,,,932', -',,932,932,,,932,,932,,,,932,,,,,,,,932,,,,,932,932,932,932,932,932,', -',,932,932,,,,,,,932,,,932,932,932,,,932,932,586,586,586,,586,,,,586', -'586,,,,586,,586,586,586,586,586,586,586,,,,,,586,586,586,586,586,586', -'586,,,586,,,,,,,586,,,586,586,586,586,586,586,586,586,586,586,586,586', -',586,586,,586,586,586,,,,,,,,,,,,,,,,,,,,586,,,586,,,586,586,,,586,', -'586,,586,,586,,,,,,,,586,,,,,586,586,586,586,586,586,,,,586,586,,,,', -',,586,,586,586,586,586,,,586,586,250,250,250,,250,,,,250,250,,,,250', -',250,250,250,250,250,250,250,,,,,,250,250,250,250,250,250,250,,,250', -',,,,,,250,,,250,250,250,250,250,250,250,250,,250,250,250,,250,250,,250', -'250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250,,,,,,250,,,,,,', -',250,,,,,250,250,250,250,250,250,,,,250,250,,,,,,,250,,,250,250,250', -',,250,250,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67,,,,,,67', -'67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67,67', -',67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67,,,', -',,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,,,67,67,70', -'70,70,,70,,,,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70,70,70,70,70', -'70,,,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70,70,,70,70,70', -',,,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,70,,,,,,,,70,,,,,70,70', -'70,70,70,70,,,,70,70,70,,,,,70,70,,,70,70,70,,,70,70,71,71,71,,71,,', -',71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71,,', -',,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,,,71,,,,,,,,,,,,', -',,,,,,,71,,,71,,,71,71,,,71,,71,,,,,,,,,,,,,,,,,71,71,71,71,71,71,,', -',71,71,,,,,,,71,,,71,71,71,,,71,71,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8', -'8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8,,8,8', -',8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8', -'8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,254,254,254,,254,,,,254,254,,,,254', -',254,254,254,254,254,254,254,,,,,,254,254,254,254,254,254,254,,,254', -',,,,,,254,,,254,254,254,254,254,254,254,254,,254,254,254,,254,254,,254', -'254,254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,', -',254,,,,,254,254,254,254,254,254,,,,254,254,,,,,,,254,,,254,254,254', -',,254,254,253,253,253,,253,,,,253,253,,,,253,,253,253,253,253,253,253', -'253,,,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253,253,253,253', -'253,253,253,253,,253,253,253,,253,253,,253,253,253,,,,,,,,,,,,,,,,,', -',,253,,,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,,,253,253,253,253', -'253,253,,,,253,253,,,,,,,253,,,253,253,253,,,253,253,252,252,252,,252', -',,,252,252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252', -'252,252,252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,252', -'252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252', -',,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252,252,,,,,,,252', -',,252,252,252,,,252,252,714,714,714,,714,,,,714,714,,,,714,,714,714', -'714,714,714,714,714,,,,,,714,714,714,714,714,714,714,,,714,,,,,,,714', -',,714,714,714,714,714,714,714,714,,714,714,714,,714,714,,714,714,714', -',,,,,,,,,,,,,,,,,,,714,,,714,,,714,714,,,714,,,,,,714,,,,,,,,714,,,', -',714,714,714,714,714,714,,,,714,714,,,,,,,714,,,714,714,714,,,714,714', -'251,251,251,,251,,,,251,251,,,,251,,251,251,251,251,251,251,251,,,,', -',251,251,251,251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251,251', -'251,251,,251,251,251,,251,251,,251,251,251,,,,,,,,,,,,,,,,,,,,251,,', -'251,,,251,251,,,251,,,,,,251,,,,,,,,251,,,,,251,251,251,251,251,251', -',,,251,251,,,,,,,251,,,251,251,251,,,251,251,257,257,257,,257,,,,257', -'257,,,,257,,257,257,257,257,257,257,257,,,,,,257,257,257,257,257,257', -'257,,,257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257,257,257,', -'257,257,,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257,,,257,,', -',,,257,,,,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,,,,,,,257,', -',257,257,257,,,257,257,768,768,768,,768,,,,768,768,,,,768,,768,768,768', -'768,768,768,768,,,,,,768,768,768,768,768,768,768,,,768,,,,,,,768,,,768', -'768,768,768,768,768,768,768,,768,768,768,,768,768,,768,768,768,,,,,', -',,,,,,,,,,,,,,768,,,768,,,768,768,,,768,,,,,,768,,,,,,,,768,,,,,768', -'768,768,768,768,768,,,,768,768,,,,,,,768,,,768,768,768,,,768,768,770', -'770,770,,770,,,,770,770,,,,770,,770,770,770,770,770,770,770,,,,,,770', -'770,770,770,770,770,770,,,770,,,,,,,770,,,770,770,770,770,770,770,770', -'770,,770,770,770,,770,770,,770,770,770,,,,,,,,,,,,,,,,,,,,770,,,770', -',,770,770,,,770,,,,,,770,,,,,,,,770,,,,,770,770,770,770,770,770,,,,770', -'770,,,,,,,770,,,770,770,770,,,770,770,258,258,258,,258,,,,258,258,,', -',258,,258,258,258,258,258,258,258,,,,,,258,258,258,258,258,258,258,', -',258,,,,,,,258,,,258,258,258,258,258,258,258,258,,258,258,258,,258,258', -',258,258,258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,,,,,258,', -',,,,,,258,,,,,258,258,258,258,258,258,,,,258,258,,,,,,,258,,,258,258', -'258,,,258,258,414,414,414,,414,,,,414,414,,,,414,,414,414,414,414,414', -'414,414,,,,,,414,414,414,414,414,414,414,,,414,,,,,,,414,,,414,414,414', -'414,414,414,414,414,,414,414,414,,414,414,,414,414,414,,,,,,,,,,,,,', -',,,,,,414,,,414,,,414,414,,,414,,,,,,414,,,,,,,,414,,,,,414,414,414', -'414,414,414,,,,414,414,,,,,,,414,,,414,414,414,,,414,414,694,694,694', -',694,,,,694,694,,,,694,,694,694,694,694,694,694,694,,,,,,694,694,694', -'694,694,694,694,,,694,,,,,,,694,,,694,694,694,694,694,694,694,694,,694', -'694,694,,694,694,,694,694,694,,,,,,,,,,,,,,,,,,,,694,,,694,,,694,694', -',,694,,694,,,,694,,,,,,,,694,,,,,694,694,694,694,694,694,,,,694,694', -',,,,,,694,,,694,694,694,,,694,694,249,249,249,,249,,,,249,249,,,,249', -',249,249,249,249,249,249,249,,,,,,249,249,249,249,249,249,249,,,249', -',,,,,,249,,,249,249,249,249,249,249,249,249,,249,249,249,,249,249,,249', -'249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,', -',249,,,,,249,249,249,249,249,249,,,,249,249,,,,,,,249,,,249,249,249', -',,249,249,248,248,248,,248,,,,248,248,,,,248,,248,248,248,248,248,248', -'248,,,,,,248,248,248,248,248,248,248,,,248,,,,,,,248,,,248,248,248,248', -'248,248,248,248,,248,248,248,,248,248,,248,248,248,,,,,,,,,,,,,,,,,', -',,248,,,248,,,248,248,,,248,,,,,,248,,,,,,,,248,,,,,248,248,248,248', -'248,248,,,,248,248,,,,,,,248,,,248,248,248,,,248,248,689,689,689,,689', -',,,689,689,,,,689,,689,689,689,689,689,689,689,,,,,,689,689,689,689', -'689,689,689,,,689,,,,,,,689,,,689,689,689,689,689,689,689,689,,689,689', -'689,,689,689,,,,689,,,,,,,,,,,,,,,,,,,,689,,,689,,,689,689,,,689,,,', -',,,,,,,,,,,,,,,689,689,689,689,689,689,,,,689,689,,,,,,,689,,,689,689', -'689,,,689,689,784,784,784,,784,,,,784,784,,,,784,,784,784,784,784,784', -'784,784,,,,,,784,784,784,784,784,784,784,,,784,,,,,,,784,,,784,784,784', -'784,784,784,784,784,,784,784,784,,784,784,,784,784,784,,,,,,,,,,,,,', -',,,,,,784,,,784,,,784,784,,,784,,,,,,784,,,,,,,,784,,,,,784,784,784', -'784,784,784,,,,784,784,,,,,,,784,,,784,784,784,,,784,784,785,785,785', -',785,,,,785,785,,,,785,,785,785,785,785,785,785,785,,,,,,785,785,785', -'785,785,785,785,,,785,,,,,,,785,,,785,785,785,785,785,785,785,785,,785', -'785,785,,785,785,,785,785,785,,,,,,,,,,,,,,,,,,,,785,,,785,,,785,785', -',,785,,,,,,785,,,,,,,,785,,,,,785,785,785,785,785,785,,,,785,785,,,', -',,,785,,,785,785,785,,,785,785,786,786,786,,786,,,,786,786,,,,786,,786', -'786,786,786,786,786,786,,,,,,786,786,786,786,786,786,786,,,786,,,,,', -',786,,,786,786,786,786,786,786,786,786,,786,786,786,,786,786,,786,786', -'786,,,,,,,,,,,,,,,,,,,,786,,,786,,,786,786,,,786,,,,,,786,,,,,,,,786', -',,,,786,786,786,786,786,786,,,,786,786,,,,,,,786,,,786,786,786,,,786', -'786,787,787,787,,787,,,,787,787,,,,787,,787,787,787,787,787,787,787', -',,,,,787,787,787,787,787,787,787,,,787,,,,,,,787,,,787,787,787,787,787', -'787,787,787,,787,787,787,,787,787,,787,787,787,,,,,,,,,,,,,,,,,,,,787', -',,787,,,787,787,,,787,,,,,,787,,,,,,,,787,,,,,787,787,787,787,787,787', -',,,787,787,,,,,,,787,,,787,787,787,,,787,787,247,247,247,,247,,,,247', -'247,,,,247,,247,247,247,247,247,247,247,,,,,,247,247,247,247,247,247', -'247,,,247,,,,,,,247,,,247,247,247,247,247,247,247,247,,247,247,247,', -'247,247,,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247,,,247,247,,,247,,', -',,,247,,,,,,,,247,,,,,247,247,247,247,247,247,,,,247,247,,,,,,,247,', -',247,247,247,,,247,247,789,789,789,,789,,,,789,789,,,,789,,789,789,789', -'789,789,789,789,,,,,,789,789,789,789,789,789,789,,,789,,,,,,,789,,,789', -'789,789,789,789,789,789,789,,789,789,789,,789,789,,789,789,789,,,,,', -',,,,,,,,,,,,,,789,,,789,,,789,789,,,789,,,,,,789,,,,,,,,789,,,,,789', -'789,789,789,789,789,,,,789,789,,,,,,,789,,,789,789,789,,,789,789,259', -'259,259,,259,,,,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259', -'259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259', -'259,,259,259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259', -',,259,259,,,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259,,,,259', -'259,,,,,,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260,260,,', -',260,,260,260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,', -',260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260', -',260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,', -',,,,,,260,,,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,,,260,260', -'260,,,260,260,246,246,246,,246,,,,246,246,,,,246,,246,246,246,246,246', -'246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246,246,246', -'246,246,246,246,246,,246,246,246,,246,246,,246,246,246,,,,,,,,,,,,,', -',,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246,246,246', -'246,246,246,,,,246,246,,,,,,,246,,,246,246,246,,,246,246,267,267,267', -',267,,,,267,267,,,,267,,267,267,267,267,267,267,267,,,,,,267,267,267', -'267,267,267,267,,,267,,,,,,,267,,,267,267,267,267,267,267,267,267,267', -'267,267,267,,267,267,,267,267,267,,,,,,,,,,,,,,,,,,,,267,,,267,,,267', -'267,,,267,,267,,267,,267,,,,,,,,267,,,,,267,267,267,267,267,267,,,,267', -'267,,,,,,,267,,267,267,267,267,,,267,267,273,273,273,,273,,,,273,273', -',,,273,,273,273,273,273,273,273,273,,,,,,273,273,273,273,273,273,273', -',,273,,,,,,,273,,,273,273,273,273,273,273,273,273,273,273,273,273,,273', -'273,,273,273,273,,,,,,,,,,,,,,,,,,,,273,,,273,,,273,273,,,273,,273,', -'273,,273,,,,,,,,273,,,,,273,273,273,273,273,273,,,,273,273,,,,,,,273', -',273,273,273,273,,,273,273,276,276,276,,276,,,,276,276,,,,276,,276,276', -'276,276,276,276,276,,,,,,276,276,276,276,276,276,276,,,276,,,,,,,276', -',,276,276,276,276,276,276,276,276,276,276,276,276,,276,276,,276,276', -'276,,,,,,,,,,,,,,,,,,,,276,,,276,,,276,276,,,276,,276,,276,,276,,,,', -',,,276,,,,,276,276,276,276,276,276,,,,276,276,276,,,,,,276,,276,276', -'276,276,,,276,276,245,245,245,,245,,,,245,245,,,,245,,245,245,245,245', -'245,245,245,,,,,,245,245,245,245,245,245,245,,,245,,,,,,,245,,,245,245', -'245,245,245,245,245,245,,245,245,245,,245,245,,245,245,245,,,,,,,,,', -',,,,,,,,,,245,,,245,,,245,245,,,245,,,,,,245,,,,,,,,245,,,,,245,245', -'245,245,245,245,,,,245,245,,,,,,,245,,,245,245,245,,,245,245,801,801', -'801,,801,,,,801,801,,,,801,,801,801,801,801,801,801,801,,,,,,801,801', -'801,801,801,801,801,,,801,,,,,,,801,,,801,801,801,801,801,801,801,801', -',801,801,801,,801,801,,,,801,,,,,,,,,,,,,,,,,,,,801,,,801,,,801,801', -',,801,,,,,,,,,,,,,,,,,,,801,801,801,801,801,801,,,,801,801,,,,,,,801', -',,801,801,801,,,801,801,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32', -'32,32,,,,,,32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32', -'32,32,32,32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,', -',32,,32,,32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32', -'32,32,32,,,32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,', -',,,,33,33,33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33', -'33,33,33,,33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33', -',33,,33,,,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33', -'33,,,33,33,283,283,283,,283,,,,283,283,,,,283,,283,283,283,283,283,283', -'283,,,,,,283,283,283,283,283,283,283,,,283,,,,,,,283,,,283,283,283,283', -'283,283,283,283,,283,283,283,,283,283,,283,283,283,,,,,,,,,,,,,,,,,', -',,283,,,283,,,283,283,,,283,,,,,,283,,,,,,,,283,,,,,283,283,283,283', -'283,283,,,,283,283,,,,,,,283,,,283,283,283,,,283,283,23,23,23,,23,,', -',23,23,,,,23,,23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,', -',,,,23,,,23,23,23,23,23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,', -',,,,,,,,,,,23,,,23,,,23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23', -'23,,,,23,23,,,,,,,23,,,23,23,23,,,23,23,514,514,514,,514,,,,514,514', -',,,514,,514,514,514,514,514,514,514,,,,,,514,514,514,514,514,514,514', -',,514,,,,,,,514,,,514,514,514,514,514,514,514,514,,514,514,514,,514', -'514,,,,514,,,,,,,,,,,,,,,,,,,,514,,,514,,,514,514,,,514,,,,,,,,,,,,', -',,,,,,514,514,514,514,514,514,,,,514,514,,,,,,,514,,,514,514,514,,,514', -'514,342,342,342,,342,,,,342,342,,,,342,,342,342,342,342,342,342,342', -',,,,,342,342,342,342,342,342,342,,,342,,,,,,,342,,,342,342,342,342,342', -'342,342,342,,342,342,342,,342,342,,342,342,342,,,,,,,,,,,,,,,,,,,,342', -',,342,,,342,342,,,342,,,,,,342,,,,,,,,342,,,,,342,342,342,342,342,342', -',,,342,342,,,,,,,342,,,342,342,342,,,342,342,123,123,123,123,123,,,', -'123,123,,,,123,,123,123,123,123,123,123,123,,,,,,123,123,123,123,123', -'123,123,,,123,,,,,,123,123,,123,123,123,123,123,123,123,123,123,,123', -'123,123,,123,123,,123,123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123', -',,123,,123,,,,123,,,,,,,,123,,,,,123,123,123,123,123,123,,,,123,123', -',,,,,,123,,,123,123,123,,,123,123,507,507,507,507,507,,,,507,507,,,', -'507,,507,507,507,507,507,507,507,,,,,,507,507,507,507,507,507,507,,', -'507,,,,,,507,507,,507,507,507,507,507,507,507,507,507,,507,507,507,', -'507,507,,507,507,507,,,,,,,,,,,,,,,,,,,,507,,,507,,,507,507,,,507,,507', -',,,507,,,,,,,,507,,,,,507,507,507,507,507,507,,,,507,507,,,,,,507,507', -',,507,507,507,,,507,507,1007,1007,1007,,1007,,,,1007,1007,,,,1007,,1007', -'1007,1007,1007,1007,1007,1007,,,,,,1007,1007,1007,1007,1007,1007,1007', -',,1007,,,,,,,1007,,,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007', -'1007,1007,,1007,1007,,1007,1007,1007,,,,,,,,,,,,,,,,,,,,1007,,,1007', -',,1007,1007,,,1007,,1007,,1007,,1007,,,,,,,,1007,,,,,1007,1007,1007', -'1007,1007,1007,,,,1007,1007,,,,,,,1007,,1007,1007,1007,1007,,,1007,1007', -'504,504,504,,504,,,,504,504,,,,504,,504,504,504,504,504,504,504,,,,', -',504,504,504,504,504,504,504,,,504,,,,,,,504,,,504,504,504,504,504,504', -'504,504,,504,504,504,,504,504,,504,504,504,,,,,,,,,,,,,,,,,,,,504,,', -'504,,,504,504,,,504,,,,,,504,,,,,,,,504,,,,,504,504,504,504,504,504', -',,,504,504,,,,,,,504,,,504,504,504,,,504,504,502,502,502,,502,,,,502', -'502,,,,502,,502,502,502,502,502,502,502,,,,,,502,502,502,502,502,502', -'502,,,502,,,,,,,502,,,502,502,502,502,502,502,502,502,,502,502,502,', -'502,502,,502,502,502,,,,,,,,,,,,,,,,,,,,502,,,502,,,502,502,,,502,,', -',,,502,,,,,,,,502,,,,,502,502,502,502,502,502,,,,502,502,,,,,,,502,', -',502,502,502,,,502,502,500,500,500,,500,,,,500,500,,,,500,,500,500,500', -'500,500,500,500,,,,,,500,500,500,500,500,500,500,,,500,,,,,,,500,,,500', -'500,500,500,500,500,500,500,500,500,500,500,,500,500,,500,500,500,,', -',,,,,,,,,,,,,,,,,500,,,500,,,500,500,,,500,,,,500,,500,,,,,,,,500,,', -',,500,500,500,500,500,500,,,,500,500,,,,,,,500,,500,500,500,500,,,500', -'500,497,497,497,,497,,,,497,497,,,,497,,497,497,497,497,497,497,497', -',,,,,497,497,497,497,497,497,497,,,497,,,,,,,497,,,497,497,497,497,497', -'497,497,497,497,497,497,497,,497,497,,497,497,497,,,,,,,,,,,,,,,,,,', -',497,,,497,,,497,497,,,497,,497,,497,,497,,,,,,,,497,,,,,497,497,497', -'497,497,497,,,,497,497,,,,,,,497,,497,497,497,497,,,497,497,122,122', -'122,,122,,,,122,122,,,,122,,122,122,122,122,122,122,122,,,,,,122,122', -'122,122,122,122,122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122', -',122,122,122,,122,122,,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122', -'122,,,122,,,,,,122,,,,,,,,122,,,,,122,122,122,122,122,122,,,,122,122', -',,,,,,122,,,122,122,122,,,122,122,62,62,62,,62,,,,62,62,,,,62,,62,62', -'62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62,,,62,62,62,62', -'62,62,62,62,62,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62', -',,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,', -',,62,,62,62,62,62,,,62,62,121,121,121,,121,,,,121,121,,,,121,,121,121', -'121,121,121,121,121,,,,,,121,121,121,121,121,121,121,,,121,,,,,,,121', -',,121,121,121,121,121,121,121,121,,121,121,121,,121,121,,121,121,121', -',,,,,,,,,,,,,,,,,,,121,,,121,,,121,121,,,121,,,,,,121,,,,,,,,121,,,', -',121,121,121,121,121,121,,,,121,121,,,,,,,121,,,121,121,121,,,121,121', -'734,734,734,,734,,,,734,734,,,,734,,734,734,734,734,734,734,734,,,,', -',734,734,734,734,734,734,734,,,734,,,,,,,734,,,734,734,734,734,734,734', -'734,734,,734,734,734,,734,734,,734,734,734,,,,,,,,,,,,,,,,,,,,734,,', -'734,,,734,734,,,734,,734,,,,734,,,,,,,,734,,,,,734,734,734,734,734,734', -',,,734,734,,,,,,,734,,,734,734,734,,,734,734,255,255,255,,255,,,,255', -'255,,,,255,,255,255,255,255,255,255,255,,,,,,255,255,255,255,255,255', -'255,,,255,,,,,,,255,,,255,255,255,255,255,255,255,255,,255,255,255,', -'255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,', -',,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255,255,,,,,,,255,', -',255,255,255,,,255,255,120,120,120,,120,,,,120,120,,,,120,,120,120,120', -'120,120,120,120,,,,,,120,120,120,120,120,120,120,,,120,,,,,,,120,,,120', -'120,120,120,120,120,120,120,,120,120,120,,120,120,,120,120,120,,,,,', -',,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120,,,,,,,,120,,,,,120', -'120,120,120,120,120,,,,120,120,,,,,,,120,,,120,120,120,,,120,120,746', -'746,746,,746,,,,746,746,,,,746,,746,746,746,746,746,746,746,,,,,,746', -'746,746,746,746,746,746,,,746,,,,,,,746,,,746,746,746,746,746,746,746', -'746,746,746,746,746,,746,746,,746,746,746,,,,,,,,,,,,,,,,,,,,746,,,746', -',,746,746,,,746,,746,,746,,746,,,,,,,,746,,,,,746,746,746,746,746,746', -',,,746,746,,,,,,,746,,746,746,746,746,,,746,746,66,66,66,,66,,,,66,66', -',,,66,,66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66', -',,66,66,66,66,66,66,66,66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,', -',,,,66,,,66,,,66,66,,,66,,,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,', -'66,66,,,,,,,66,,,66,66,66,,,66,66,354,354,354,,354,,,,354,354,,,,354', -',354,354,354,354,354,354,354,,,,,,354,354,354,354,354,354,354,,,354', -',,,,,,354,,,354,354,354,354,354,354,354,354,,354,354,354,,354,354,,', -',354,,,,,,,,,,,,,,,,,,,,354,,,354,,,354,354,,,354,,,,,,,,,,,,,,,,,,', -'354,354,354,354,354,354,,,,354,354,,,,,,,354,,,354,354,354,,,354,354', -'356,356,356,,356,,,,356,356,,,,356,,356,356,356,356,356,356,356,,,,', -',356,356,356,356,356,356,356,,,356,,,,,,,356,,,356,356,356,356,356,356', -'356,356,,356,356,356,,356,356,,,,356,,,,,,,,,,,,,,,,,,,,356,,,356,,', -'356,356,,,356,,,,,,,,,,,,,,,,,,,356,356,356,356,356,356,,,,356,356,', -',,,,,356,,,356,356,356,,,356,356,119,119,119,,119,,,,119,119,,,,119', -',119,119,119,119,119,119,119,,,,,,119,119,119,119,119,119,119,,,119', -',,,,,,119,,,119,119,119,119,119,119,119,119,,119,119,119,,119,119,,119', -'119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119,119,,,119,,,,,,119,,,,,,', -',119,,,,,119,119,119,119,119,119,,,,119,119,,,,,,,119,,,119,119,119', -',,119,119,114,114,114,114,114,,,,114,114,,,,114,,114,114,114,114,114', -'114,114,,,,,,114,114,114,114,114,114,114,,,114,,,,,,114,114,114,114', -'114,114,114,114,114,114,114,114,,114,114,114,,114,114,,114,114,114,', -',,,,,,,,,,,,,,,,,,114,,,114,,,114,114,,,114,,114,,,,114,,,,,,,,114,', -',,,114,114,114,114,114,114,,,,114,114,,,,,,114,114,,,114,114,114,,,114', -'114,456,456,456,,456,,,,456,456,,,,456,,456,456,456,456,456,456,456', -',,,,,456,456,456,456,456,456,456,,,456,,,,,,,456,,,456,456,456,456,456', -'456,456,456,,456,456,456,,456,456,,456,456,456,,,,,,,,,,,,,,,,,,,,456', -',,456,,,456,456,,,456,,,,,,456,,,,,,,,456,,,,,456,456,456,456,456,456', -',,,456,456,,,,,,,456,,,456,456,456,,,456,456,455,455,455,,455,,,,455', -'455,,,,455,,455,455,455,455,455,455,455,,,,,,455,455,455,455,455,455', -'455,,,455,,,,,,,455,,,455,455,455,455,455,455,455,455,,455,455,455,', -'455,455,,455,455,455,,,,,,,,,,,,,,,,,,,,455,,,455,,,455,455,,,455,,', -',,,455,,,,,,,,455,,,,,455,455,455,455,455,455,,,,455,455,,,,,,,455,', -',455,455,455,,,455,455,454,454,454,,454,,,,454,454,,,,454,,454,454,454', -'454,454,454,454,,,,,,454,454,454,454,454,454,454,,,454,,,,,,,454,,,454', -'454,454,454,454,454,454,454,,454,454,454,,454,454,,454,454,454,,,,,', -',,,,,,,,,,,,,,454,,,454,,,454,454,,,454,,,,,,454,,,,,,,,454,,,,,454', -'454,454,454,454,454,,,,454,454,,,,,,,454,,,454,454,454,,,454,454,452', -'452,452,,452,,,,452,452,,,,452,,452,452,452,452,452,452,452,,,,,,452', -'452,452,452,452,452,452,,,452,,,,,,,452,,,452,452,452,452,452,452,452', -'452,452,452,452,452,,452,452,,452,452,452,,,,,,,,,,,,,,,,,,,,452,,,452', -',,452,452,,,452,,452,,452,,452,,,,,,,,452,,,,,452,452,452,452,452,452', -',,,452,452,,,,,,,452,,452,452,452,452,,,452,452,325,325,325,,325,,,', -'325,325,,,,325,,325,325,325,325,325,325,325,,,,,,325,325,325,325,325', -'325,325,,,325,,,,,,,325,,,325,325,325,325,325,325,325,325,,325,325,325', -',325,325,,325,325,325,,,,,,,,,,,,,,,,,,,,325,,,325,325,,325,325,,,325', -',,,,,325,,,,,,,,325,,,,,325,325,325,325,325,325,,,,325,325,,,,,,,325', -',,325,325,325,,,325,325,328,328,328,,328,,,,328,328,,,,328,,328,328', -'328,328,328,328,328,,,,,,328,328,328,328,328,328,328,,,328,,,,,,,328', -',,328,328,328,328,328,328,328,328,,328,328,328,,328,328,,328,328,328', -',,,,,,,,,,,,,,,,,,,328,,,328,,,328,328,,,328,,,,,,328,,,,,,,,328,,,', -',328,328,328,328,328,328,,,,328,328,,,,,,,328,,,328,328,328,,,328,328', -'565,565,565,,565,,,,565,565,,,,565,,565,565,565,565,565,565,565,,,,', -',565,565,565,565,565,565,565,,,565,,,,,,,565,,,565,565,565,565,565,565', -'565,565,,565,565,565,,565,565,,565,565,565,,,,,,,,,,,,,,,,,,,,565,,', -'565,,,565,565,,,565,,,,,,565,,,,,,,,565,,,,,565,565,565,565,565,565', -',,,565,565,,,,,,,565,,,565,565,565,,,565,565,221,221,221,,221,,,,221', -'221,,,,221,,221,221,221,221,221,221,221,,,,,,221,221,221,221,221,221', -'221,,,221,,,,,,,221,,,221,221,221,221,221,221,221,221,,221,221,221,', -'221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221,,', -',,,221,,,,,,,,221,,,,,221,221,221,221,221,221,,,,221,221,221,,,,,,221', -',,221,221,221,,,221,221,220,220,220,,220,,,,220,220,,,,220,,220,220', -'220,220,220,220,220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220', -',,220,220,220,220,220,220,220,220,,220,220,220,,220,220,,220,220,220', -',,,,,,,,,,,,,,,,,,,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,220,,,', -',220,220,220,220,220,220,,,,220,220,,,,,,,220,,,220,220,220,,,220,220', -'219,219,219,,219,,,,219,219,,,,219,,219,219,219,219,219,219,219,,,,', -',219,219,219,219,219,219,219,,,219,,,,,,,219,,,219,219,219,219,219,219', -'219,219,,219,219,219,,219,219,,219,219,219,,,,,,,,,,,,,,,,,,,,219,,', -'219,,,219,219,,,219,,,,,,219,,,,,,,,219,,,,,219,219,219,219,219,219', -',,,219,219,,,,,,,219,,,219,219,219,,,219,219,218,218,218,,218,,,,218', -'218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218,218,218,218,218', -'218,,,218,,,,,,,218,,,218,218,218,218,218,218,218,218,,218,218,218,', -'218,218,,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,,,218,218,,,218,,', -',,,218,,,,,,,,218,,,,,218,218,218,218,218,218,,,,218,218,,,,,,,218,', -',218,218,218,,,218,218,217,217,217,,217,,,,217,217,,,,217,,217,217,217', -'217,217,217,217,,,,,,217,217,217,217,217,217,217,,,217,,,,,,,217,,,217', -'217,217,217,217,217,217,217,,217,217,217,,217,217,,217,217,217,,,,,', -',,,,,,,,,,,,,,217,,,217,,,217,217,,,217,,217,,,,217,,,,,,,,217,,,,,217', -'217,217,217,217,217,,,,217,217,,,,,,,217,,,217,217,217,,,217,217,216', -'216,216,,216,,,,216,216,,,,216,,216,216,216,216,216,216,216,,,,,,216', -'216,216,216,216,216,216,,,216,,,,,,,216,,,216,216,216,216,216,216,216', -'216,,216,216,216,,216,216,,216,216,216,,,,,,,,,,,,,,,,,,,,216,,,216', -',,216,216,,,216,,,,,,216,,,,,,,,216,,,,,216,216,216,216,216,216,,,,216', -'216,,,,,,,216,,,216,216,216,,,216,216,539,539,539,,539,,,,539,539,,', -',539,,539,539,539,539,539,539,539,,,,,,539,539,539,539,539,539,539,', -',539,,,,,,,539,,,539,539,539,539,539,539,539,539,539,539,539,539,,539', -'539,,539,539,539,,,,,,,,,,,,,,,,,,,,539,,,539,,,539,539,,,539,,,,,,539', -',,,,,,,539,,,,,539,539,539,539,539,539,,,,539,539,,,,,,,539,,539,539', -'539,539,,,539,539,536,536,536,,536,,,,536,536,,,,536,,536,536,536,536', -'536,536,536,,,,,,536,536,536,536,536,536,536,,,536,,,,,,,536,,,536,536', -'536,536,536,536,536,536,536,536,536,536,,536,536,,536,536,536,,,,,,', -',,,,,,,,,,,,,536,,,536,,,536,536,,,536,,536,,,,536,,,,,,,,536,,,,,536', -'536,536,536,536,536,,,,536,536,,,,,,,536,,536,536,536,536,,,536,536', -'212,212,212,,212,,,,212,212,,,,212,,212,212,212,212,212,212,212,,,,', -',212,212,212,212,212,212,212,,,212,,,,,,,212,,,212,212,212,212,212,212', -'212,212,212,212,212,212,,212,212,,212,212,212,,,,,,,,,,,,,,,,,,,,212', -',,212,,,212,212,,,212,,212,,212,,212,,,,,,,,212,,,,,212,212,212,212', -'212,212,,,,212,212,,,,,,,212,,212,212,212,212,,,212,212,334,334,334', -',334,,,,334,334,,,,334,,334,334,334,334,334,334,334,,,,,,334,334,334', -'334,334,334,334,,,334,,,,,,,334,,,334,334,334,334,334,334,334,334,334', -'334,334,334,,334,334,,334,334,334,,,,,,,,,,,,,,,,,,,,334,,,334,,,334', -'334,,,334,,,,,,334,,,,,,,,334,,,,,334,334,334,334,334,334,,,,334,334', -',,,,,,334,,334,334,334,334,,,334,334,211,211,211,,211,,,,211,211,,,', -'211,,211,211,211,211,211,211,211,,,,,,211,211,211,211,211,211,211,,', -'211,,,,,,,211,,,211,211,211,211,211,211,211,211,,211,211,211,,211,211', -',211,211,211,,,,,,,,,,,,,,,,,,,,211,,,211,,,211,211,,,211,,,,,,211,', -',,,,,,211,,,,,211,211,211,211,211,211,,,,211,211,,,,,,,211,,,211,211', -'211,,,211,211,530,530,530,,530,,,,530,530,,,,530,,530,530,530,530,530', -'530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,,,530,,,530,530,530', -'530,530,530,530,530,,530,530,530,,530,530,,530,530,530,,,,,,,,,,,,,', -',,,,,,530,,,530,,,530,530,,,530,,,,,,530,,,,,,,,530,,,,,530,530,530', -'530,530,530,,,,530,530,,,,,,,530,,,530,530,530,,,530,530,526,526,526', -',526,,,,526,526,,,,526,,526,526,526,526,526,526,526,,,,,,526,526,526', -'526,526,526,526,,,526,,,,,,,526,,,526,526,526,526,526,526,526,526,,526', -'526,526,,526,526,,526,526,526,,,,,,,,,,,,,,,,,,,,526,,,526,,,526,526', -',,526,,,,,,526,,,,,,,,526,,,,,526,526,526,526,526,526,,,,526,526,,,', -',,,526,,,526,526,526,,,526,526,341,341,341,,341,,,,341,341,,,,341,,341', -'341,341,341,341,341,341,,,,,,341,341,341,341,341,341,341,,,341,,,,,', -',341,,,341,341,341,341,341,341,341,341,,341,341,341,,341,341,,341,341', -'341,,,,,,,,,,,,,,,,,,,,341,,,341,,,341,341,,,341,,,,,,341,,,,,,,,341', -',,,,341,341,341,341,341,341,,,,341,341,,,,,,,341,,,341,341,341,,,341', -'341,525,525,525,,525,,,,525,525,,,,525,,525,525,525,525,525,525,525', -',,,,,525,525,525,525,525,525,525,,,525,,,,,,,525,,,525,525,525,525,525', -'525,525,525,,525,525,525,,525,525,,525,525,525,,,,,,,,,,,,,,,,,,,,525', -',,525,,,525,525,,,525,,,,,,525,,,,,,,,525,,,,,525,525,525,525,525,525', -',,,525,525,,,,,,,525,,,525,525,525,,,525,525,210,210,210,,210,,,,210', -'210,,,,210,,210,210,210,210,210,210,210,,,,,,210,210,210,210,210,210', -'210,,,210,,,,,,,210,,,210,210,210,210,210,210,210,210,,210,210,210,', -'210,210,,210,210,210,,,,,,,,,,,,,,,,,,,,210,,,210,,,210,210,,,210,,210', -',,,210,,,,,,,,210,,,,,210,210,210,210,210,210,,,,210,210,,,,,,,210,', -',210,210,210,,,210,210,522,522,522,,522,,,,522,522,,,,522,,522,522,522', -'522,522,522,522,,,,,,522,522,522,522,522,522,522,,,522,,,,,,,522,,,522', -'522,522,522,522,522,522,522,,522,522,522,,522,522,,,,522,,,,,,,,,,,', -',,,,,,,,522,,,522,,,522,522,,,522,,,,,,,,,,,,,,,,,,,522,522,522,522', -'522,522,,,,522,522,,,,,,,522,,,522,522,522,,,522,522,516,516,516,,516', -',,,516,516,,,,516,,516,516,516,516,516,516,516,,,,,,516,516,516,516', -'516,516,516,,,516,,,,,,,516,,,516,516,516,516,516,516,516,516,516,516', -'516,516,,516,516,,516,516,516,,,,,,,,,,,,,,,,,,,,516,,,516,,,516,516', -',,516,,516,,516,,516,,,,,,,,516,,,,,516,516,516,516,516,516,,,,516,516', -',,,,,,516,,516,516,516,516,436,,516,516,,,,436,436,436,,,436,436,436', -'712,436,712,712,712,712,712,,,,436,436,436,436,,,712,,,,,436,436,,436', -'436,436,436,436,,,,,,,,,,712,,,,,,,,,,,712,712,,436,436,436,436,436', -'436,436,436,436,436,436,436,436,436,,,436,436,436,,,436,,,436,,,436', -'436,,436,712,436,,436,,436,436,436,436,436,436,436,,436,436,436,,,,', -',,,,,,,,436,436,436,436,435,436,,436,,,,435,435,435,,,435,435,435,710', -'435,710,710,710,710,710,,,,435,435,435,435,,,710,,,,,435,435,,435,435', -'435,435,435,,,,,,,,,,710,,,,,,,,,710,710,710,710,,435,435,435,435,435', -'435,435,435,435,435,435,435,435,435,,,435,435,435,,,435,,,435,,,435', -'435,,435,710,435,,435,,435,435,435,435,435,435,435,,435,435,435,,,,', -',,,,,,,,435,435,435,435,59,435,,435,,,,59,59,59,,,59,59,59,708,59,708', -'708,708,708,708,,,,,59,59,59,,,708,,,,,59,59,,59,59,59,59,59,,,,,,,', -',,708,,,,,,,,,708,708,708,708,,59,59,59,59,59,59,59,59,59,59,59,59,59', -'59,,,59,59,59,,,59,,,59,,,59,59,,59,708,59,,59,,59,59,59,59,59,59,59', -',59,,59,,,,,,,,,,,,,59,59,59,59,,59,,59,12,12,12,12,12,12,12,12,12,12', -'12,12,12,12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12,12,12', -'12,12,,,,,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12,12,12', -'12,12,12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12,12,12', -'12,12,12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,628,628,628,628,628,628', -'628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628', -'628,,,,628,628,628,628,628,628,628,628,628,628,,,,,,628,628,628,628', -'628,628,628,628,628,,,628,,,,,,,,,628,628,,628,628,628,628,628,628,628', -',,628,628,,,,628,628,628,628,,,,,,,,,,,,,,628,628,,628,628,628,628,628', -'628,628,628,628,628,628,,,628,628,,,,,,,,,,628,,,,,,,,,628,756,756,756', -'756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756', -'756,756,756,756,,,,756,756,756,756,756,756,756,756,756,756,,,,,,756', -'756,756,756,756,756,756,756,756,,,756,,,,,,,,,756,756,,756,756,756,756', -'756,756,756,,,756,756,,,,756,756,756,756,,,,,,,,,,,,,,756,756,,756,756', -'756,756,756,756,756,756,756,756,756,,,756,,,,,,,,,,,,,,,,,,,,756,405', -'405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405', -'405,405,405,405,405,405,,,,405,405,405,405,405,405,405,405,405,405,', -',,,,405,405,405,405,405,405,405,405,405,,,405,,,,,,,,,405,405,,405,405', -'405,405,405,405,405,,,405,405,,,,405,405,405,405,,,,,,,,,,,,,,405,405', -',405,405,405,405,405,405,405,405,405,405,405,,,405,405,,,,,,,,,,405', -',,,,,,,,405,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91', -'91,91,91,91,91,,,,91,91,91,91,91,91,91,91,91,91,,,,,,91,91,91,91,91', -'91,91,91,91,91,91,91,,91,,,,,,,91,91,,91,91,91,91,91,91,91,,,91,91,', -',,91,91,91,91,,,,,,,,,,,,,,91,91,,91,91,91,91,91,91,91,91,91,91,91,', -',91,,,,,,,,,,,,,,,,,,,,91,11,11,11,11,11,11,11,11,11,11,11,11,11,11', -'11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11,11,,,,,', -'11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11', -',,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11', -'11,11,,,11,11,,,,,,,,,,11,,,,,,,,,11,74,74,74,74,74,74,74,74,74,74,74', -'74,74,74,74,74,74,74,74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74,74', -'74,,,,,,74,74,74,74,74,74,74,74,74,74,74,74,,74,,,,,,,74,74,,74,74,74', -'74,74,74,74,,,74,74,,,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74,74', -'74,74,74,74,74,74,74,30,,74,,,,,30,30,30,,,30,30,30,1042,30,1042,1042', -'1042,1042,1042,74,,,30,30,30,,,,1042,,,,,30,30,,30,30,30,30,30,,,,,', -',,,,1042,,,,,,,,,,,1042,1042,,30,30,30,30,30,30,30,30,30,30,30,30,30', -'30,,,30,30,30,,,30,,30,30,,,30,30,,30,1042,30,,30,,30,30,30,30,30,30', -'30,,30,30,30,,,,,,,,,,,,31,30,30,,30,,30,31,31,31,,,31,31,31,942,31', -'942,942,942,942,942,,,,,31,31,,,,942,,,,,31,31,,31,31,31,31,31,,,,,', -',,,,942,942,,,,,,,,942,942,942,942,,31,31,31,31,31,31,31,31,31,31,31', -'31,31,31,,,31,31,31,,,31,,31,31,,,31,31,,31,942,31,,31,,31,31,31,31', -'31,31,31,,31,,31,,,,,,,,,,,,484,31,31,,31,,31,484,484,484,,,484,484', -'484,546,484,546,546,546,546,546,,,,484,484,,,,,546,,,,,484,484,,484', -'484,484,484,484,,,,,,,,,,546,,,,,,,,,546,546,546,546,,426,,,,,,,426', -'426,426,,484,426,426,426,,426,,484,,,,,484,484,426,426,426,,,,546,,', -',,426,426,,426,426,426,426,426,,484,484,,,,,,,,,,,,,484,,,,,484,,,426', -'426,426,426,426,426,426,426,426,426,426,426,426,426,,,426,426,426,,', -'426,,426,426,,,426,426,,426,,426,,426,,426,426,426,426,426,426,426,', -'426,426,426,,,,,,517,517,,,517,,,426,426,,426,,426,517,517,,517,517', -'517,517,517,517,517,,,517,517,,,,517,517,517,517,,,,,,517,,,,,,,,517', -'517,,517,517,517,517,517,517,517,517,517,517,517,,,517,,,,,518,518,', -',518,,,,,,,,,518,518,517,518,518,518,518,518,518,518,,,518,518,,,,518', -'518,518,518,,,,,,518,,,,,,,,518,518,,518,518,518,518,518,518,518,518', -'518,518,518,,,518,,,,,450,450,,,450,,,,,,,,,450,450,518,450,450,450', -'450,450,450,450,,,450,450,,,,450,450,450,450,,,,,,450,,,,,,,,450,450', -',450,450,450,450,450,450,450,450,450,450,450,,,450,,,,,451,451,,,451', -',,,,,,,,451,451,450,451,451,451,451,451,451,451,,,451,451,,,,451,451', -'451,451,,,,,,451,,,,,,,,451,451,,451,451,451,451,451,451,451,451,451', -'451,451,,,451,,,,,263,263,,,263,,,,,,,,,263,263,451,263,263,263,263', -'263,263,263,,,263,263,,,,263,263,263,263,,,,,,,,,,,,,,263,263,,263,263', -'263,263,263,263,263,263,263,263,263,,,263,,,,,744,744,,,744,,,,,,,,', -'744,744,263,744,744,744,744,744,744,744,,,744,744,,,,744,744,744,744', -',,,,,744,,,,,,,,744,744,,744,744,744,744,744,744,744,744,744,744,744', -',,744,,,,,745,745,,,745,,,,,,,,,745,745,744,745,745,745,745,745,745', -'745,,,745,745,,,,745,745,745,745,,,,,,745,,,,,,,,745,745,,745,745,745', -'745,745,745,745,745,745,745,745,,,745,,,,,959,959,,,959,,,,,,,,,959', -'959,745,959,959,959,959,959,959,959,,,959,959,,,,959,959,959,959,,,', -',,959,,,,,,,,959,959,,959,959,959,959,959,959,959,959,959,959,959,,1011', -'959,1011,1011,1011,1011,1011,,,214,214,,,214,,,1011,,,,,959,214,214', -',214,214,214,214,214,214,214,,,214,214,,,1011,214,214,214,214,,,,,,214', -'1011,1011,,,,,,214,214,,214,214,214,214,214,214,214,214,214,214,214', -',,214,,,,,1009,1009,,,1009,,1011,,,,,,,1009,1009,214,1009,1009,1009', -'1009,1009,1009,1009,,,1009,1009,,,,1009,1009,1009,1009,,,,,,1009,,,', -',,,,1009,1009,,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009', -',,1009,,,,,1008,1008,,,1008,,,,,,,,,1008,1008,1009,1008,1008,1008,1008', -'1008,1008,1008,,,1008,1008,,,,1008,1008,1008,1008,,,,,,1008,,,,,,,,1008', -'1008,,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,,,1008', -',,,,213,213,,,213,,,,,,,,,213,213,1008,213,213,213,213,213,213,213,', -',213,213,,,,213,213,213,213,,,,,,213,,,,,,,,213,213,,213,213,213,213', -'213,213,213,213,213,213,213,,337,213,337,337,337,337,337,,,,,,,,,,337', -',,,,213,,,,,,,,,,,,,,,,,337,337,528,528,,,528,,,337,337,337,337,,,528', -'528,,528,528,528,528,528,528,528,,,528,528,,,,528,528,528,528,,,,,,528', -',,,337,,,,528,528,,528,528,528,528,528,528,528,528,528,528,528,,,528', -',,,,527,527,,,527,,,,,,,,,527,527,528,527,527,527,527,527,527,527,,', -'527,527,,,,527,527,527,527,,,,,,527,,,,,,,,527,527,,527,527,527,527', -'527,527,527,527,527,527,527,,992,527,992,992,992,992,992,994,,994,994', -'994,994,994,,,992,,,,,527,,994,996,,996,996,996,996,996,,,,,,,,992,', -'996,,,,,994,,992,992,992,992,,,,,,994,994,,,,659,996,659,659,659,659', -'659,,,,,,996,996,,885,659,885,885,885,885,885,992,,,,,,,994,,885,,,', -',,,659,888,,888,888,888,888,888,996,659,659,659,659,,,885,890,888,890', -'890,890,890,890,,885,885,885,885,,,,,890,,,,,659,,888,,,,,,659,,,888', -'888,888,888,,913,890,913,913,913,913,913,885,,,,,890,890,,,913,915,', -'915,915,915,915,915,917,,917,917,917,917,917,888,,915,,,,,913,,917,', -',,,,890,913,913,913,913,,,,919,915,919,919,919,919,919,,917,,,,915,915', -',,919,,,917,917,600,,600,600,600,600,600,,913,,,,,,,,600,919,,,,,,,', -'915,,,919,919,,,917,,,,,,600,600,,,,,,,,600,600,600,600,,,,588,588,', -',588,,,,919,,,,,588,588,,588,588,588,588,588,588,588,,,588,588,,,600', -'588,588,588,588,,,,,,588,,,,,,,,588,588,,588,588,588,588,588,588,588', -'588,588,588,588,,,588,,,,,587,587,,,587,,,,,,,,,587,587,588,587,587', -'587,587,587,587,587,,,587,587,,,,587,587,587,587,,,,,,587,,,,,,,,587', -'587,,587,587,587,587,587,587,587,587,587,587,587,,,587,,,,,,,,,,,,,', -',,,,,,587' ] - racc_action_check = arr = ::Array.new(26218, nil) +',2,2,2,,,,,,,,,,,,,,,,,,,,2,,,2,,,2,2,,,2,,2,,,,2,,,,,,,,2,,,,,2,2,2', +'2,2,2,,,,2,2,,,,,,,2,,,2,2,2,,,2,2,826,826,826,826,826,826,,,,826,826', +',,,826,,826,826,826,826,826,826,826,,,,,,826,826,826,826,826,826,826', +',,826,,,,,,826,826,826,826,826,826,826,826,826,826,826,826,,826,826', +'826,,826,826,,826,826,826,,,,,,,,,,,,,,,,,,,,826,,,826,,,826,826,,,826', +',826,,,,826,,,,,,,,826,,,,,826,826,826,826,826,826,,,,826,826,,,,,,', +'826,,,826,826,826,,,826,826,890,890,890,890,890,890,,,,890,890,,,,890', +',890,890,890,890,890,890,890,,,,,,890,890,890,890,890,890,890,,,890', +',,,,,890,890,890,890,890,890,890,890,890,890,890,890,,890,890,890,,890', +'890,,890,890,890,,,,,,,,,,,,,,,,,,,,890,,,890,,,890,890,,,890,,890,', +',,890,,,,,,,,890,,,,,890,890,890,890,890,890,,,,890,890,,,,,,,890,,', +'890,890,890,,,890,890,779,779,779,779,779,779,,,,779,779,,,,779,,779', +'779,779,779,779,779,779,,,,,,779,779,779,779,779,779,779,,,779,,,,,', +'779,779,779,779,779,779,779,779,779,779,779,779,,779,779,779,,779,779', +',779,779,779,,,,,,,,,,,,,,,,,,,,779,,,779,,,779,779,,,779,,779,,,,779', +',,,,,,,779,,,,,779,779,779,779,779,779,,,,779,779,,,,,,,779,,,779,779', +'779,,,779,779,879,879,879,879,879,879,,,,879,879,,,,879,,879,879,879', +'879,879,879,879,,,,,,879,879,879,879,879,879,879,,,879,,,,,,879,879', +'879,879,879,879,879,879,879,879,879,879,,879,879,879,,879,879,,879,879', +'879,,,,,,,,,,,,,,,,,,,,879,,,879,,,879,879,,,879,,879,,,,879,,,,,,,', +'879,,,,,879,879,879,879,879,879,,,,879,879,,,,,,,879,,,879,879,879,', +',879,879,844,844,844,844,844,844,,,,844,844,,,,844,,844,844,844,844', +'844,844,844,,,,,,844,844,844,844,844,844,844,,,844,,,,,,844,844,844', +'844,844,844,844,844,844,844,844,844,,844,844,844,,844,844,,844,844,844', +',,,,,,,,,,,,,,,,,,,844,,,844,,,844,844,,,844,,844,,,,844,,,,,,,,844', +',,,,844,844,844,844,844,844,,,,844,844,,,,,,,844,,,844,844,844,,,844', +'844,924,924,924,,924,,,,924,924,,,,924,,924,924,924,924,924,924,924', +',,,,,924,924,924,924,924,924,924,,,924,,,,,,,924,,,924,924,924,924,924', +'924,924,924,,924,924,924,,924,924,,,,924,,,,,,,,,,,,,,,,,,,,924,,,924', +',,924,924,,,924,,,,,,,,,,,,,,,,,,,924,924,924,924,924,924,,,,924,924', +',,,,,,924,,,924,924,924,,,924,924,282,282,282,,282,,,,282,282,,,,282', +',282,282,282,282,282,282,282,,,,,,282,282,282,282,282,282,282,,,282', +',,,,,,282,,,282,282,282,282,282,282,282,282,282,282,282,282,,282,282', +',282,282,282,,,,,,,,,,,,,,,,,,,,282,,,282,,,282,282,,,282,,282,,282', +',282,,,,,,,,282,,,,,282,282,282,282,282,282,,,,282,282,,,,,,,282,,282', +'282,282,282,,,282,282,762,762,762,,762,,,,762,762,,,,762,,762,762,762', +'762,762,762,762,,,,,,762,762,762,762,762,762,762,,,762,,,,,,,762,,,762', +'762,762,762,762,762,762,762,,762,762,762,,762,762,,762,762,762,,,,,', +',,,,,,,,,,,,,,762,,,762,,,762,762,,,762,,762,,,,762,,,,,,,,762,,,,,762', +'762,762,762,762,762,,,,762,762,,,,,,,762,,,762,762,762,,,762,762,289', +'289,289,,289,,,,289,289,,,,289,,289,289,289,289,289,289,289,,,,,,289', +'289,289,289,289,289,289,,,289,,,,,,,289,,,289,289,289,289,289,289,289', +'289,289,289,289,289,,289,289,,289,289,289,,,,,,,,,,,,,,,,,,,,289,,,289', +',,289,289,,,289,,289,,289,,289,,,,,,,,289,,,,,289,289,289,289,289,289', +',,,289,289,,,,,,,289,,289,289,289,289,,,289,289,774,774,774,,774,,,', +'774,774,,,,774,,774,774,774,774,774,774,774,,,,,,774,774,774,774,774', +'774,774,,,774,,,,,,,774,,,774,774,774,774,774,774,774,774,774,774,774', +'774,,774,774,,774,774,774,,,,,,,,,,,,,,,,,,,,774,,,774,,,774,774,,,774', +',774,,774,,774,,,,,,,,774,,,,,774,774,774,774,774,774,,,,774,774,,,', +',,,774,,774,774,774,774,,,774,774,292,292,292,,292,,,,292,292,,,,292', +',292,292,292,292,292,292,292,,,,,,292,292,292,292,292,292,292,,,292', +',,,,,,292,,,292,292,292,292,292,292,292,292,292,292,292,292,,292,292', +',292,292,292,,,,,,,,,,,,,,,,,,,,292,,,292,,,292,292,,,292,,292,,292', +',292,,,,,,,,292,,,,,292,292,292,292,292,292,,,,292,292,292,,,,,,292', +',292,292,292,292,,,292,292,796,796,796,,796,,,,796,796,,,,796,,796,796', +'796,796,796,796,796,,,,,,796,796,796,796,796,796,796,,,796,,,,,,,796', +',,796,796,796,796,796,796,796,796,,796,796,796,,796,796,,796,796,796', +',,,,,,,,,,,,,,,,,,,796,,,796,,,796,796,,,796,,,,,,796,,,,,,,,796,,,', +',796,796,796,796,796,796,,,,796,796,,,,,,,796,,,796,796,796,,,796,796', +'32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32,32,32,32', +'32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,,32,32,,32', +'32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32,,,,,,,,32', +',,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32,,,32,32,803,803', +'803,,803,,,,803,803,,,,803,,803,803,803,803,803,803,803,,,,,,803,803', +'803,803,803,803,803,,,803,,,,,,,803,,,803,803,803,803,803,803,803,803', +',803,803,803,,803,803,,803,803,803,,,,,,,,,,,,,,,,,,,,803,,,803,,,803', +'803,,,803,,,,,,803,,,,,,,,803,,,,,803,803,803,803,803,803,,,,803,803', +',,,,,,803,,,803,803,803,,,803,803,33,33,33,,33,,,,33,33,,,,33,,33,33', +'33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33', +'33,33,33,33,33,33,33,33,,33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33', +',,33,33,,,33,,33,,33,,33,,,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,', +',,,,33,,33,33,33,33,,,33,33,816,816,816,,816,,,,816,816,,,,816,,816', +'816,816,816,816,816,816,,,,,,816,816,816,816,816,816,816,,,816,,,,,', +',816,,,816,816,816,816,816,816,816,816,,816,816,816,,816,816,,816,816', +'816,,,,,,,,,,,,,,,,,,,,816,,,816,,,816,816,,,816,,,,,,816,,,,,,,,816', +',,,,816,816,816,816,816,816,,,,816,816,,,,,,,816,,,816,816,816,,,816', +'816,817,817,817,,817,,,,817,817,,,,817,,817,817,817,817,817,817,817', +',,,,,817,817,817,817,817,817,817,,,817,,,,,,,817,,,817,817,817,817,817', +'817,817,817,,817,817,817,,817,817,,817,817,817,,,,,,,,,,,,,,,,,,,,817', +',,817,,,817,817,,,817,,,,,,817,,,,,,,,817,,,,,817,817,817,817,817,817', +',,,817,817,,,,,,,817,,,817,817,817,,,817,817,818,818,818,,818,,,,818', +'818,,,,818,,818,818,818,818,818,818,818,,,,,,818,818,818,818,818,818', +'818,,,818,,,,,,,818,,,818,818,818,818,818,818,818,818,,818,818,818,', +'818,818,,818,818,818,,,,,,,,,,,,,,,,,,,,818,,,818,,,818,818,,,818,,', +',,,818,,,,,,,,818,,,,,818,818,818,818,818,818,,,,818,818,,,,,,,818,', +',818,818,818,,,818,818,819,819,819,,819,,,,819,819,,,,819,,819,819,819', +'819,819,819,819,,,,,,819,819,819,819,819,819,819,,,819,,,,,,,819,,,819', +'819,819,819,819,819,819,819,,819,819,819,,819,819,,819,819,819,,,,,', +',,,,,,,,,,,,,,819,,,819,,,819,819,,,819,,,,,,819,,,,,,,,819,,,,,819', +'819,819,819,819,819,,,,819,819,,,,,,,819,,,819,819,819,,,819,819,821', +'821,821,,821,,,,821,821,,,,821,,821,821,821,821,821,821,821,,,,,,821', +'821,821,821,821,821,821,,,821,,,,,,,821,,,821,821,821,821,821,821,821', +'821,,821,821,821,,821,821,,821,821,821,,,,,,,,,,,,,,,,,,,,821,,,821', +',,821,821,,,821,,,,,,821,,,,,,,,821,,,,,821,821,821,821,821,821,,,,821', +'821,,,,,,,821,,,821,821,821,,,821,821,299,299,299,,299,,,,299,299,,', +',299,,299,299,299,299,299,299,299,,,,,,299,299,299,299,299,299,299,', +',299,,,,,,,299,,,299,299,299,299,299,299,299,299,,299,299,299,,299,299', +',299,299,299,,,,,,,,,,,,,,,,,,,,299,,,299,,,299,299,,,299,,,,,,299,', +',,,,,,299,,,,,299,299,299,299,299,299,,,,299,299,,,,,,,299,,,299,299', +'299,,,299,299,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,', +',34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34', +'34,34,,34,34,,34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,', +'34,,34,,,,,,,,34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34', +',,34,34,301,301,301,,301,,,,301,301,,,,301,,301,301,301,301,301,301', +'301,,,,,,301,301,301,301,301,301,301,,,301,,,,,,,301,,,301,301,301,301', +'301,301,301,301,,301,301,301,,301,301,,301,301,301,,,,,,,,,,,,,,,,,', +',,301,,,301,,,301,301,,,301,,,,,,301,,,,,,,,301,,,,,301,301,301,301', +'301,301,,,,301,301,,,,,,,301,,,301,301,301,,,301,301,303,303,303,,303', +',,,303,303,,,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303', +'303,303,303,,,303,,,,,,,303,,,303,303,303,303,303,303,303,303,,303,303', +'303,,303,303,,303,303,303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303,,,303', +',,,,,303,,,,,,,,303,,,,,303,303,303,303,303,303,,,,303,303,,,,,,,303', +',,303,303,303,,,303,303,304,304,304,,304,,,,304,304,,,,304,,304,304', +'304,304,304,304,304,,,,,,304,304,304,304,304,304,304,,,304,,,,,,,304', +',,304,304,304,304,304,304,304,304,,304,304,304,,304,304,,304,304,304', +',,,,,,,,,,,,,,,,,,,304,,,304,,,304,304,,,304,,,,,,304,,,,,,,,304,,,', +',304,304,304,304,304,304,,,,304,304,,,,,,,304,,,304,304,304,,,304,304', +'310,310,310,310,310,,,,310,310,,,,310,,310,310,310,310,310,310,310,', +',,,,310,310,310,310,310,310,310,,,310,,,,,,310,310,,310,310,310,310', +'310,310,310,310,310,,310,310,310,,310,310,,310,310,310,,,,,,,,,,,,,', +',,,,,,310,,,310,,,310,310,,,310,,310,,,,310,,,,,,,,310,,,,,310,310,310', +'310,310,310,,,,310,310,,,,,,,310,,,310,310,310,,,310,310,37,37,37,,37', +',,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37', +',,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,,,,', +',,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37,37', +',,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,,38,,38', +'38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38,38', +'38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38,,,38', +'38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,,,38,,,38', +'38,38,,,38,38,318,318,318,,318,,,,318,318,,,,318,,318,318,318,318,318', +'318,318,,,,,,318,318,318,318,318,318,318,,,318,,,,,,,318,,,318,318,318', +'318,318,318,318,318,,318,318,318,,318,318,,,,318,,,,,,,,,,,,,,,,,,,', +'318,,,318,,,318,318,,,318,,,,,,,,,,,,,,,,,,,318,318,318,318,318,318', +',,,318,318,,,,318,,,318,,,318,318,318,,,318,318,877,877,877,,877,,,', +'877,877,,,,877,,877,877,877,877,877,877,877,,,,,,877,877,877,877,877', +'877,877,,,877,,,,,,,877,,,877,877,877,877,877,877,877,877,,877,877,877', +',877,877,,877,877,877,,,,,,,,,,,,,,,,,,,,877,,,877,,,877,877,,,877,', +',,,,877,,,,,,,,877,,,,,877,877,877,877,877,877,,,,877,877,,,,,,,877', +',,877,877,877,,,877,877,891,891,891,,891,,,,891,891,,,,891,,891,891', +'891,891,891,891,891,,,,,,891,891,891,891,891,891,891,,,891,,,,,,,891', +',,891,891,891,891,891,891,891,891,,891,891,891,,891,891,,891,891,891', +',,,,,,,,,,,,,,,,,,,891,,,891,,,891,891,,,891,,,,,,891,,,,,,,,891,,,', +',891,891,891,891,891,891,,,,891,891,,,,,,,891,,,891,891,891,,,891,891', +'911,911,911,,911,,,,911,911,,,,911,,911,911,911,911,911,911,911,,,,', +',911,911,911,911,911,911,911,,,911,,,,,,,911,,,911,911,911,911,911,911', +'911,911,911,911,911,911,,911,911,,911,911,911,,,,,,,,,,,,,,,,,,,,911', +',,911,,,911,911,,,911,,,,911,,911,,,,,,,,911,,,,,911,911,911,911,911', +'911,,,,911,911,,,,,,,911,,911,911,911,911,,,911,911,912,912,912,,912', +',,,912,912,,,,912,,912,912,912,912,912,912,912,,,,,,912,912,912,912', +'912,912,912,,,912,,,,,,,912,,,912,912,912,912,912,912,912,912,,912,912', +'912,,912,912,,912,912,912,,,,,,,,,,,,,,,,,,,,912,,,912,,,912,912,,,912', +',,,,,912,,,,,,,,912,,,,,912,912,912,912,912,912,,,,912,912,,,,,,,912', +',,912,912,912,,,912,912,45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45', +'45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45', +'45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45', +',,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45', +',,45,45,335,335,335,,335,,,,335,335,,,,335,,335,335,335,335,335,335', +'335,,,,,,335,335,335,335,335,335,335,,,335,,,,,,,335,,,335,335,335,335', +'335,335,335,335,,335,335,335,,335,335,,,,335,,,,,,,,,,,,,,,,,,,,335', +',,335,,,335,335,,,335,,,,,,,,,,,,,,,,,,,335,335,335,335,335,335,,,,335', +'335,,,,,,,335,,,335,335,335,,,335,335,46,46,46,,46,,,,46,46,,,,46,,46', +'46,46,46,46,46,46,,,,,,46,46,46,46,46,46,46,,,46,,,,,,,46,,,46,46,46', +'46,46,46,46,46,,46,46,46,,46,46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46', +',,46,46,,,46,,,,,,46,,,,,,,,46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,', +'46,,,46,46,46,,,46,46,933,933,933,,933,,,,933,933,,,,933,,933,933,933', +'933,933,933,933,,,,,,933,933,933,933,933,933,933,,,933,,,,,,,933,,,933', +'933,933,933,933,933,933,933,,933,933,933,,933,933,,,,933,,,,,,,,,,,', +',,,,,,,,933,,,933,,,933,933,,,933,,,,,,,,,,,,,,,,,,,933,933,933,933', +'933,933,,,,933,933,,,,,,,933,,,933,933,933,,,933,933,342,342,342,,342', +',,,342,342,,,,342,,342,342,342,342,342,342,342,,,,,,342,342,342,342', +'342,342,342,,,342,,,,,,,342,,,342,342,342,342,342,342,342,342,,342,342', +'342,,342,342,,342,342,342,,,,,,,,,,,,,,,,,,,,342,,,342,,,342,342,,,342', +',,,,,342,,,,,,,,342,,,,,342,342,342,342,342,342,,,,342,342,,,,,,,342', +',,342,342,342,,,342,342,344,344,344,,344,,,,344,344,,,,344,,344,344', +'344,344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344', +',,344,344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344', +',,,,,,,,,,,,,,,,,,,344,,,344,344,,344,344,,,344,,,,,,344,,,,,,,,344', +',,,,344,344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344', +'344,959,959,959,,959,,,,959,959,,,,959,,959,959,959,959,959,959,959', +',,,,,959,959,959,959,959,959,959,,,959,,,,,,,959,,,959,959,959,959,959', +'959,959,959,,959,959,959,,959,959,,959,959,959,,,,,,,,,,,,,,,,,,,,959', +',,959,,,959,959,,,959,,959,,,,959,,,,,,,,959,,,,,959,959,959,959,959', +'959,,,,959,959,,,,,,,959,,,959,959,959,,,959,959,48,48,48,,48,,,,48', +'48,,,,48,,48,48,48,48,48,48,48,,,,,,48,48,48,48,48,48,48,,,48,,,,,,', +'48,,,48,48,48,48,48,48,48,48,,48,48,48,,48,48,,48,48,48,,,,,,,,,,,,', +',,,,,,,48,,,48,,,48,48,,,48,,,,,,48,,,,,,,,48,,,,,48,48,48,48,48,48', +',,,48,48,,,,,,,48,,,48,48,48,,,48,48,348,348,348,,348,,,,348,348,,,', +'348,,348,348,348,348,348,348,348,,,,,,348,348,348,348,348,348,348,,', +'348,,,,,,,348,,,348,348,348,348,348,348,348,348,348,348,348,348,,348', +'348,,348,348,348,,,,,,,,,,,,,,,,,,,,348,,,348,,,348,348,,,348,,348,', +',,348,,,,,,,,348,,,,,348,348,348,348,348,348,,,,348,348,,,,,,,348,,348', +'348,348,348,,,348,348,984,984,984,,984,,,,984,984,,,,984,,984,984,984', +'984,984,984,984,,,,,,984,984,984,984,984,984,984,,,984,,,,,,,984,,,984', +'984,984,984,984,984,984,984,,984,984,984,,984,984,,,,984,,,,,,,,,,,', +',,,,,,,,984,,,984,,,984,984,,,984,,,,,,,,,,,,,,,,,,,984,984,984,984', +'984,984,,,,984,984,,,,,,,984,,,984,984,984,,,984,984,349,349,349,,349', +',,,349,349,,,,349,,349,349,349,349,349,349,349,,,,,,349,349,349,349', +'349,349,349,,,349,,,,,,,349,,,349,349,349,349,349,349,349,349,349,349', +'349,349,,349,349,,349,349,349,,,,,,,,,,,,,,,,,,,,349,,,349,,,349,349', +',,349,,,,,,349,,,,,,,,349,,,,,349,349,349,349,349,349,,,,349,349,,,', +',,,349,,349,349,349,349,,,349,349,356,356,356,,356,,,,356,356,,,,356', +',356,356,356,356,356,356,356,,,,,,356,356,356,356,356,356,356,,,356', +',,,,,,356,,,356,356,356,356,356,356,356,356,,356,356,356,,356,356,,356', +'356,356,,,,,,,,,,,,,,,,,,,,356,,,356,,,356,356,,,356,,,,,,356,,,,,,', +',356,,,,,356,356,356,356,356,356,,,,356,356,,,,,,,356,,,356,356,356', +',,356,356,1033,1033,1033,,1033,,,,1033,1033,,,,1033,,1033,1033,1033', +'1033,1033,1033,1033,,,,,,1033,1033,1033,1033,1033,1033,1033,,,1033,', +',,,,,1033,,,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033', +',1033,1033,,1033,1033,1033,,,,,,,,,,,,,,,,,,,,1033,,,1033,,,1033,1033', +',,1033,,1033,,1033,,1033,,,,,,,,1033,,,,,1033,1033,1033,1033,1033,1033', +',,,1033,1033,,,,,,,1033,,1033,1033,1033,1033,,,1033,1033,62,62,62,62', +'62,,,,62,62,,,,62,,62,62,62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,', +'62,,,,,,62,62,,62,62,62,62,62,62,62,62,62,,62,62,62,,62,62,,62,62,62', +',,,,,,,,,,,,,,,,,,,62,,,62,,,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62', +'62,62,62,62,,,,62,62,,,,,,,62,,,62,62,62,,,62,62,370,370,370,,370,,', +',370,370,,,,370,,370,370,370,370,370,370,370,,,,,,370,370,370,370,370', +'370,370,,,370,,,,,,,370,,,370,370,370,370,370,370,370,370,,370,370,370', +',370,370,,,,370,,,,,,,,,,,,,,,,,,,,370,,,370,,,370,370,,,370,,,,,,,', +',,,,,,,,,,,370,370,370,370,370,370,,,,370,370,,,,,,,370,,,370,370,370', +',,370,370,372,372,372,,372,,,,372,372,,,,372,,372,372,372,372,372,372', +'372,,,,,,372,372,372,372,372,372,372,,,372,,,,,,,372,,,372,372,372,372', +'372,372,372,372,,372,372,372,,372,372,,,,372,,,,,,,,,,,,,,,,,,,,372', +',,372,,,372,372,,,372,,,,,,,,,,,,,,,,,,,372,372,372,372,372,372,,,,372', +'372,,,,,,,372,,,372,372,372,,,372,372,67,67,67,,67,,,,67,67,,,,67,,67', +'67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67', +'67,67,67,67,67,,67,67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67', +',,67,67,,,67,,,,,,67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,', +'67,,,67,67,67,,,67,67,68,68,68,,68,,,,68,68,,,,68,,68,68,68,68,68,68', +'68,,,,,,68,68,68,68,68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68,68,68', +',68,68,68,,68,68,,68,68,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68,', +',,,,68,,,,,,,,68,,,,,68,68,68,68,68,68,,,,68,68,,,,,,,68,,,68,68,68', +',,68,68,71,71,71,,71,,,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71', +'71,71,71,71,71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71', +'71,,71,71,71,,,,,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,,,,,71,,,,,,,', +'71,,,,,71,71,71,71,71,71,,,,71,71,71,,,,,71,71,,,71,71,71,,,71,71,72', +'72,72,,72,,,,72,72,,,,72,,72,72,72,72,72,72,72,,,,,,72,72,72,72,72,72', +'72,,,72,,,,,,,72,,,72,72,72,72,72,72,72,72,,72,72,72,,72,72,,,,72,,', +',,,,,,,,,,,,,,,,,72,,,72,,,72,72,,,72,,72,,,,,,,,,,,,,,,,,72,72,72,72', +'72,72,,,,72,72,,,,,,,72,,,72,72,72,,,72,72,8,8,8,8,8,,,,8,8,,,,8,,8', +'8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8', +'8,,8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,', +',,8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,430,430,430,,430,,,,430,430', +',,,430,,430,430,430,430,430,430,430,,,,,,430,430,430,430,430,430,430', +',,430,,,,,,,430,,,430,430,430,430,430,430,430,430,,430,430,430,,430', +'430,,430,430,430,,,,,,,,,,,,,,,,,,,,430,,,430,,,430,430,,,430,,,,,,430', +',,,,,,,430,,,,,430,430,430,430,430,430,,,,430,430,,,,,,,430,,,430,430', +'430,,,430,430,474,474,474,,474,,,,474,474,,,,474,,474,474,474,474,474', +'474,474,,,,,,474,474,474,474,474,474,474,,,474,,,,,,,474,,,474,474,474', +'474,474,474,474,474,474,474,474,474,,474,474,,474,474,474,,,,,,,,,,', +',,,,,,,,,474,,,474,,,474,474,,,474,,474,,474,,474,,,,,,,,474,,,,,474', +'474,474,474,474,474,,,,474,474,,,,,,,474,,474,474,474,474,,,474,474', +'476,476,476,,476,,,,476,476,,,,476,,476,476,476,476,476,476,476,,,,', +',476,476,476,476,476,476,476,,,476,,,,,,,476,,,476,476,476,476,476,476', +'476,476,,476,476,476,,476,476,,476,476,476,,,,,,,,,,,,,,,,,,,,476,,', +'476,,,476,476,,,476,,,,,,476,,,,,,,,476,,,,,476,476,476,476,476,476', +',,,476,476,,,,,,,476,,,476,476,476,,,476,476,477,477,477,,477,,,,477', +'477,,,,477,,477,477,477,477,477,477,477,,,,,,477,477,477,477,477,477', +'477,,,477,,,,,,,477,,,477,477,477,477,477,477,477,477,,477,477,477,', +'477,477,,477,477,477,,,,,,,,,,,,,,,,,,,,477,,,477,,,477,477,,,477,,', +',,,477,,,,,,,,477,,,,,477,477,477,477,477,477,,,,477,477,,,,,,,477,', +',477,477,477,,,477,477,478,478,478,,478,,,,478,478,,,,478,,478,478,478', +'478,478,478,478,,,,,,478,478,478,478,478,478,478,,,478,,,,,,,478,,,478', +'478,478,478,478,478,478,478,,478,478,478,,478,478,,478,478,478,,,,,', +',,,,,,,,,,,,,,478,,,478,,,478,478,,,478,,,,,,478,,,,,,,,478,,,,,478', +'478,478,478,478,478,,,,478,478,,,,,,,478,,,478,478,478,,,478,478,126', +'126,126,126,126,,,,126,126,,,,126,,126,126,126,126,126,126,126,,,,,', +'126,126,126,126,126,126,126,,,126,,,,,,126,126,126,126,126,126,126,126', +'126,126,126,126,,126,126,126,,126,126,,126,126,126,,,,,,,,,,,,,,,,,', +',,126,,,126,,,126,126,,,126,,126,,,,126,,,,,,,,126,,,,,126,126,126,126', +'126,126,,,,126,126,,,,,,126,126,,,126,126,126,,,126,126,131,131,131', +',131,,,,131,131,,,,131,,131,131,131,131,131,131,131,,,,,,131,131,131', +'131,131,131,131,,,131,,,,,,,131,,,131,131,131,131,131,131,131,131,,131', +'131,131,,131,131,,131,131,131,,,,,,,,,,,,,,,,,,,,131,,,131,,,131,131', +',,131,,,,,,131,,,,,,,,131,,,,,131,131,131,131,131,131,,,,131,131,,,', +',,,131,,,131,131,131,,,131,131,132,132,132,,132,,,,132,132,,,,132,,132', +'132,132,132,132,132,132,,,,,,132,132,132,132,132,132,132,,,132,,,,,', +',132,,,132,132,132,132,132,132,132,132,,132,132,132,,132,132,,132,132', +'132,,,,,,,,,,,,,,,,,,,,132,,,132,,,132,132,,,132,,,,,,132,,,,,,,,132', +',,,,132,132,132,132,132,132,,,,132,132,,,,,,,132,,,132,132,132,,,132', +'132,133,133,133,,133,,,,133,133,,,,133,,133,133,133,133,133,133,133', +',,,,,133,133,133,133,133,133,133,,,133,,,,,,,133,,,133,133,133,133,133', +'133,133,133,,133,133,133,,133,133,,133,133,133,,,,,,,,,,,,,,,,,,,,133', +',,133,,,133,133,,,133,,,,,,133,,,,,,,,133,,,,,133,133,133,133,133,133', +',,,133,133,,,,,,,133,,,133,133,133,,,133,133,134,134,134,,134,,,,134', +'134,,,,134,,134,134,134,134,134,134,134,,,,,,134,134,134,134,134,134', +'134,,,134,,,,,,,134,,,134,134,134,134,134,134,134,134,,134,134,134,', +'134,134,,134,134,134,,,,,,,,,,,,,,,,,,,,134,,,134,,,134,134,,,134,,', +',,,134,,,,,,,,134,,,,,134,134,134,134,134,134,,,,134,134,,,,,,,134,', +',134,134,134,,,134,134,517,517,517,,517,,,,517,517,,,,517,,517,517,517', +'517,517,517,517,,,,,,517,517,517,517,517,517,517,,,517,,,,,,,517,,,517', +'517,517,517,517,517,517,517,517,517,517,517,,517,517,,517,517,517,,', +',,,,,,,,,,,,,,,,,517,,,517,,,517,517,,,517,,517,,517,,517,,,,,,,,517', +',,,,517,517,517,517,517,517,,,,517,517,,,,,,,517,,517,517,517,517,,', +'517,517,520,520,520,,520,,,,520,520,,,,520,,520,520,520,520,520,520', +'520,,,,,,520,520,520,520,520,520,520,,,520,,,,,,,520,,,520,520,520,520', +'520,520,520,520,520,520,520,520,,520,520,,520,520,520,,,,,,,,,,,,,,', +',,,,,520,,,520,,,520,520,,,520,,,,520,,520,,,,,,,,520,,,,,520,520,520', +'520,520,520,,,,520,520,,,,,,,520,,520,520,520,520,,,520,520,522,522', +'522,,522,,,,522,522,,,,522,,522,522,522,522,522,522,522,,,,,,522,522', +'522,522,522,522,522,,,522,,,,,,,522,,,522,522,522,522,522,522,522,522', +',522,522,522,,522,522,,522,522,522,,,,,,,,,,,,,,,,,,,,522,,,522,,,522', +'522,,,522,,,,,,522,,,,,,,,522,,,,,522,522,522,522,522,522,,,,522,522', +',,,,,,522,,,522,522,522,,,522,522,527,527,527,527,527,,,,527,527,,,', +'527,,527,527,527,527,527,527,527,,,,,,527,527,527,527,527,527,527,,', +'527,,,,,,527,527,527,527,527,527,527,527,527,527,527,527,,527,527,527', +',527,527,,527,527,527,,,,,,,,,,,,,,,,,,,,527,,,527,,,527,527,,,527,', +'527,,,,527,,,,,,,,527,,,,,527,527,527,527,527,527,,,,527,527,,,,,,527', +'527,,,527,527,527,,,527,527,135,135,135,135,135,,,,135,135,,,,135,,135', +'135,135,135,135,135,135,,,,,,135,135,135,135,135,135,135,,,135,,,,,', +'135,135,,135,135,135,135,135,135,135,135,135,,135,135,135,,135,135,', +'135,135,135,,,,,,,,,,,,,,,,,,,,135,,,135,,,135,135,,,135,,135,,,,135', +',,,,,,,135,,,,,135,135,135,135,135,135,,,,135,135,,,,,,,135,,,135,135', +'135,,,135,135,534,534,534,,534,,,,534,534,,,,534,,534,534,534,534,534', +'534,534,,,,,,534,534,534,534,534,534,534,,,534,,,,,,,534,,,534,534,534', +'534,534,534,534,534,,534,534,534,,534,534,,,,534,,,,,,,,,,,,,,,,,,,', +'534,,,534,,,534,534,,,534,,,,,,,,,,,,,,,,,,,534,534,534,534,534,534', +',,,534,534,,,,,,,534,,,534,534,534,,,534,534,23,23,23,,23,,,,23,23,', +',,23,,23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,', +',23,23,23,23,23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,', +',,,23,,,23,,,23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23', +'23,,,,,,,23,,,23,23,23,,,23,23,536,536,536,,536,,,,536,536,,,,536,,536', +'536,536,536,536,536,536,,,,,,536,536,536,536,536,536,536,,,536,,,,,', +',536,,,536,536,536,536,536,536,536,536,536,536,536,536,,536,536,,536', +'536,536,,,,,,,,,,,,,,,,,,,,536,,,536,,,536,536,,,536,,536,,536,,536', +',,,,,,,536,,,,,536,536,536,536,536,536,,,,536,536,,,,,,,536,,536,536', +'536,536,,,536,536,542,542,542,,542,,,,542,542,,,,542,,542,542,542,542', +'542,542,542,,,,,,542,542,542,542,542,542,542,,,542,,,,,,,542,,,542,542', +'542,542,542,542,542,542,,542,542,542,,542,542,,,,542,,,,,,,,,,,,,,,', +',,,,542,,,542,,,542,542,,,542,,,,,,,,,,,,,,,,,,,542,542,542,542,542', +'542,,,,542,542,,,,,,,542,,,542,542,542,,,542,542,223,223,223,,223,,', +',223,223,,,,223,,223,223,223,223,223,223,223,,,,,,223,223,223,223,223', +'223,223,,,223,,,,,,,223,,,223,223,223,223,223,223,223,223,,223,223,223', +',223,223,,223,223,223,,,,,,,,,,,,,,,,,,,,223,,,223,,,223,223,,,223,', +'223,,,,223,,,,,,,,223,,,,,223,223,223,223,223,223,,,,223,223,,,,,,,223', +',,223,223,223,,,223,223,224,224,224,,224,,,,224,224,,,,224,,224,224', +'224,224,224,224,224,,,,,,224,224,224,224,224,224,224,,,224,,,,,,,224', +',,224,224,224,224,224,224,224,224,,224,224,224,,224,224,,224,224,224', +',,,,,,,,,,,,,,,,,,,224,,,224,,,224,224,,,224,,224,,,,224,,,,,,,,224', +',,,,224,224,224,224,224,224,,,,224,224,,,,,,,224,,,224,224,224,,,224', +'224,546,546,546,,546,,,,546,546,,,,546,,546,546,546,546,546,546,546', +',,,,,546,546,546,546,546,546,546,,,546,,,,,,,546,,,546,546,546,546,546', +'546,546,546,,546,546,546,,546,546,,546,546,546,,,,,,,,,,,,,,,,,,,,546', +',,546,,,546,546,,,546,,,,,,546,,,,,,,,546,,,,,546,546,546,546,546,546', +',,,546,546,,,,,,,546,,,546,546,546,,,546,546,551,551,551,,551,,,,551', +'551,,,,551,,551,551,551,551,551,551,551,,,,,,551,551,551,551,551,551', +'551,,,551,,,,,,,551,,,551,551,551,551,551,551,551,551,,551,551,551,', +'551,551,,551,551,551,,,,,,,,,,,,,,,,,,,,551,,,551,,,551,551,,,551,,', +',,,551,,,,,,,,551,,,,,551,551,551,551,551,551,,,,551,551,,,,,,,551,', +',551,551,551,,,551,551,225,225,225,,225,,,,225,225,,,,225,,225,225,225', +'225,225,225,225,,,,,,225,225,225,225,225,225,225,,,225,,,,,,,225,,,225', +'225,225,225,225,225,225,225,,225,225,225,,225,225,,225,225,225,,,,,', +',,,,,,,,,,,,,,225,,,225,,,225,225,,,225,,,,,,225,,,,,,,,225,,,,,225', +'225,225,225,225,225,,,,225,225,,,,,,,225,,,225,225,225,,,225,225,226', +'226,226,,226,,,,226,226,,,,226,,226,226,226,226,226,226,226,,,,,,226', +'226,226,226,226,226,226,,,226,,,,,,,226,,,226,226,226,226,226,226,226', +'226,,226,226,226,,226,226,,226,226,226,,,,,,,,,,,,,,,,,,,,226,,,226', +',,226,226,,,226,,,,,,226,,,,,,,,226,,,,,226,226,226,226,226,226,,,,226', +'226,,,,,,,226,,,226,226,226,,,226,226,227,227,227,,227,,,,227,227,,', +',227,,227,227,227,227,227,227,227,,,,,,227,227,227,227,227,227,227,', +',227,,,,,,,227,,,227,227,227,227,227,227,227,227,,227,227,227,,227,227', +',227,227,227,,,,,,,,,,,,,,,,,,,,227,,,227,,,227,227,,,227,,,,,,227,', +',,,,,,227,,,,,227,227,227,227,227,227,,,,227,227,,,,,,,227,,,227,227', +'227,,,227,227,228,228,228,,228,,,,228,228,,,,228,,228,228,228,228,228', +'228,228,,,,,,228,228,228,228,228,228,228,,,228,,,,,,,228,,,228,228,228', +'228,228,228,228,228,228,228,228,228,,228,228,,228,228,228,,,,,,,,,,', +',,,,,,,,,228,,,228,,,228,228,,,228,,228,,228,,228,,,,,,,,228,,,,,228', +'228,228,228,228,228,,,,228,228,,,,,,,228,,228,228,228,228,,,228,228', +'232,232,232,,232,,,,232,232,,,,232,,232,232,232,232,232,232,232,,,,', +',232,232,232,232,232,232,232,,,232,,,,,,,232,,,232,232,232,232,232,232', +'232,232,,232,232,232,,232,232,,232,232,232,,,,,,,,,,,,,,,,,,,,232,,', +'232,,,232,232,,,232,,,,,,232,,,,,,,,232,,,,,232,232,232,232,232,232', +',,,232,232,,,,,,,232,,,232,232,232,,,232,232,233,233,233,,233,,,,233', +'233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233,233,233,233,233', +'233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233,,233,233,233,', +'233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233,,', +',,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233,,,,,,,233,', +',233,233,233,,,233,233,234,234,234,,234,,,,234,234,,,,234,,234,234,234', +'234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,,,234,,,234', +'234,234,234,234,234,234,234,,234,234,234,,234,234,,234,234,234,,,,,', +',,,,,,,,,,,,,,234,,,234,,,234,234,,,234,,,,,,234,,,,,,,,234,,,,,234', +'234,234,234,234,234,,,,234,234,234,,,,,,234,,,234,234,234,,,234,234', +'584,584,584,,584,,,,584,584,,,,584,,584,584,584,584,584,584,584,,,,', +',584,584,584,584,584,584,584,,,584,,,,,,,584,,,584,584,584,584,584,584', +'584,584,,584,584,584,,584,584,,584,584,584,,,,,,,,,,,,,,,,,,,,584,,', +'584,,,584,584,,,584,,,,,,584,,,,,,,,584,,,,,584,584,584,584,584,584', +',,,584,584,,,,,,,584,,,584,584,584,,,584,584,245,245,245,,245,,,,245', +'245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245,245,245,245,245', +'245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245,,245,245,245,', +'245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245,245,,,245,,', +',,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245,245,,,,,,,245,', +',245,245,245,,,245,245,248,248,248,,248,,,,248,248,,,,248,,248,248,248', +'248,248,248,248,,,,,,248,248,248,248,248,248,248,,,248,,,,,,,248,,,248', +'248,248,248,248,248,248,248,,248,248,248,,248,248,,248,248,248,,,,,', +',,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,,,,,248,,,,,,,,248,,,,,248', +'248,248,248,248,248,,,,248,248,,,,,,,248,,,248,248,248,,,248,248,607', +'607,607,,607,,,,607,607,,,,607,,607,607,607,607,607,607,607,,,,,,607', +'607,607,607,607,607,607,,,607,,,,,,,607,,,607,607,607,607,607,607,607', +'607,607,607,607,607,,607,607,,607,607,607,,,,,,,,,,,,,,,,,,,,607,,,607', +',,607,607,,,607,,607,,607,,607,,,,,,,,607,,,,,607,607,607,607,607,607', +',,,607,607,,,,,,,607,,607,607,607,607,,,607,607,249,249,249,,249,,,', +'249,249,,,,249,,249,249,249,249,249,249,249,,,,,,249,249,249,249,249', +'249,249,,,249,,,,,,,249,,,249,249,249,249,249,249,249,249,,249,249,249', +',249,249,,249,249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,,249,', +',,,,249,,,,,,,,249,,,,,249,249,249,249,249,249,,,,249,249,,,,,,,249', +',,249,249,249,,,249,249,619,619,619,,619,,,,619,619,,,,619,,619,619', +'619,619,619,619,619,,,,,,619,619,619,619,619,619,619,,,619,,,,,,,619', +',,619,619,619,619,619,619,619,619,,619,619,619,,619,619,,619,619,619', +',,,,,,,,,,,,,,,,,,,619,,,619,,,619,619,,,619,,,,,,619,,,,,,,,619,,,', +',619,619,619,619,619,619,,,,619,619,,,,,,,619,,,619,619,619,,,619,619', +'250,250,250,,250,,,,250,250,,,,250,,250,250,250,250,250,250,250,,,,', +',250,250,250,250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250', +'250,250,,250,250,250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,', +'250,,,250,250,,,250,,,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250', +',,,250,250,,,,,,,250,,,250,250,250,,,250,250,625,625,625,,625,,,,625', +'625,,,,625,,625,625,625,625,625,625,625,,,,,,625,625,625,625,625,625', +'625,,,625,,,,,,,625,,,625,625,625,625,625,625,625,625,,625,625,625,', +'625,625,,625,625,625,,,,,,,,,,,,,,,,,,,,625,,,625,,,625,625,,,625,,', +',,,625,,,,,,,,625,,,,,625,625,625,625,625,625,,,,625,625,,,,,,,625,', +',625,625,625,,,625,625,251,251,251,,251,,,,251,251,,,,251,,251,251,251', +'251,251,251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,,,251,,,251', +'251,251,251,251,251,251,251,,251,251,251,,251,251,,251,251,251,,,,,', +',,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,251,,,,,251', +'251,251,251,251,251,,,,251,251,,,,,,,251,,,251,251,251,,,251,251,252', +'252,252,,252,,,,252,252,,,,252,,252,252,252,252,252,252,252,,,,,,252', +'252,252,252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252,252,252', +'252,,252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252', +',,252,252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252', +'252,,,,,,,252,,,252,252,252,,,252,252,253,253,253,,253,,,,253,253,,', +',253,,253,253,253,253,253,253,253,,,,,,253,253,253,253,253,253,253,', +',253,,,,,,,253,,,253,253,253,253,253,253,253,253,,253,253,253,,253,253', +',253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,,,,,253,', +',,,,,,253,,,,,253,253,253,253,253,253,,,,253,253,,,,,,,253,,,253,253', +'253,,,253,253,654,654,654,,654,,,,654,654,,,,654,,654,654,654,654,654', +'654,654,,,,,,654,654,654,654,654,654,654,,,654,,,,,,,654,,,654,654,654', +'654,654,654,654,654,,654,654,654,,654,654,,654,654,654,,,,,,,,,,,,,', +',,,,,,654,,,654,,,654,654,,,654,,654,,,,654,,,,,,,,654,,,,,654,654,654', +'654,654,654,,,,654,654,,,,,,,654,,,654,654,654,,,654,654,655,655,655', +',655,,,,655,655,,,,655,,655,655,655,655,655,655,655,,,,,,655,655,655', +'655,655,655,655,,,655,,,,,,,655,,,655,655,655,655,655,655,655,655,,655', +'655,655,,655,655,,655,655,655,,,,,,,,,,,,,,,,,,,,655,,,655,,,655,655', +',,655,,,,,,655,,,,,,,,655,,,,,655,655,655,655,655,655,,,,655,655,,,', +',,,655,,,655,655,655,,,655,655,656,656,656,,656,,,,656,656,,,,656,,656', +'656,656,656,656,656,656,,,,,,656,656,656,656,656,656,656,,,656,,,,,', +',656,,,656,656,656,656,656,656,656,656,656,656,656,656,,656,656,,656', +'656,656,,,,,,,,,,,,,,,,,,,,656,,,656,,,656,656,,,656,,656,,656,,656', +',,,,,,,656,,,,,656,656,656,656,656,656,,,,656,656,,,,,,,656,,656,656', +'656,656,,,656,656,659,659,659,,659,,,,659,659,,,,659,,659,659,659,659', +'659,659,659,,,,,,659,659,659,659,659,659,659,,,659,,,,,,,659,,,659,659', +'659,659,659,659,659,659,,659,659,659,,659,659,,659,659,659,,,,,,,,,', +',,,,,,,,,,659,,,659,,,659,659,,,659,,,,,,659,,,,,,,,659,,,,,659,659', +'659,659,659,659,,,,659,659,,,,,,,659,,,659,659,659,,,659,659,254,254', +'254,,254,,,,254,254,,,,254,,254,254,254,254,254,254,254,,,,,,254,254', +'254,254,254,254,254,,,254,,,,,,,254,,,254,254,254,254,254,254,254,254', +',254,254,254,,254,254,,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254', +'254,,,254,,,,,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254,254', +',,,,,,254,,,254,254,254,,,254,254,662,662,662,,662,,,,662,662,,,,662', +',662,662,662,662,662,662,662,,,,,,662,662,662,662,662,662,662,,,662', +',,,,,,662,,,662,662,662,662,662,662,662,662,662,662,662,662,,662,662', +',662,662,662,,,,,,,,,,,,,,,,,,,,662,,,662,,,662,662,,,662,,662,,662', +',662,,,,,,,,662,,,,,662,662,662,662,662,662,,,,662,662,,,,,,,662,,662', +'662,662,662,,,662,662,663,663,663,,663,,,,663,663,,,,663,,663,663,663', +'663,663,663,663,,,,,,663,663,663,663,663,663,663,,,663,,,,,,,663,,,663', +'663,663,663,663,663,663,663,663,663,663,663,,663,663,,663,663,663,,', +',,,,,,,,,,,,,,,,,663,,,663,,,663,663,,,663,,,,663,,663,,,,,,,,663,,', +',,663,663,663,663,663,663,,,,663,663,,,,,,,663,,663,663,663,663,,,663', +'663,664,664,664,,664,,,,664,664,,,,664,,664,664,664,664,664,664,664', +',,,,,664,664,664,664,664,664,664,,,664,,,,,,,664,,,664,664,664,664,664', +'664,664,664,,664,664,664,,664,664,,664,664,664,,,,,,,,,,,,,,,,,,,,664', +',,664,,,664,664,,,664,,,,,,664,,,,,,,,664,,,,,664,664,664,664,664,664', +',,,664,664,,,,,,,664,,,664,664,664,,,664,664,665,665,665,,665,,,,665', +'665,,,,665,,665,665,665,665,665,665,665,,,,,,665,665,665,665,665,665', +'665,,,665,,,,,,,665,,,665,665,665,665,665,665,665,665,,665,665,665,', +'665,665,,665,665,665,,,,,,,,,,,,,,,,,,,,665,,,665,,,665,665,,,665,,', +',,,665,,,,,,,,665,,,,,665,665,665,665,665,665,,,,665,665,,,,,,,665,', +',665,665,665,,,665,665,255,255,255,,255,,,,255,255,,,,255,,255,255,255', +'255,255,255,255,,,,,,255,255,255,255,255,255,255,,,255,,,,,,,255,,,255', +'255,255,255,255,255,255,255,,255,255,255,,255,255,,255,255,255,,,,,', +',,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255', +'255,255,255,255,255,,,,255,255,,,,,,,255,,,255,255,255,,,255,255,670', +'670,670,,670,,,,670,670,,,,670,,670,670,670,670,670,670,670,,,,,,670', +'670,670,670,670,670,670,,,670,,,,,,,670,,,670,670,670,670,670,670,670', +'670,,670,670,670,,670,670,,670,670,670,,,,,,,,,,,,,,,,,,,,670,,,670', +',,670,670,,,670,,,,,,670,,,,,,,,670,,,,,670,670,670,670,670,670,,,,670', +'670,,,,,,,670,,,670,670,670,,,670,670,671,671,671,,671,,,,671,671,,', +',671,,671,671,671,671,671,671,671,,,,,,671,671,671,671,671,671,671,', +',671,,,,,,,671,,,671,671,671,671,671,671,671,671,,671,671,671,,671,671', +',671,671,671,,,,,,,,,,,,,,,,,,,,671,,,671,,,671,671,,,671,,,,,,671,', +',,,,,,671,,,,,671,671,671,671,671,671,,,,671,671,,,,,,,671,,,671,671', +'671,,,671,671,256,256,256,,256,,,,256,256,,,,256,,256,256,256,256,256', +'256,256,,,,,,256,256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256', +'256,256,256,256,256,,256,256,256,,256,256,,256,256,256,,,,,,,,,,,,,', +',,,,,,256,,,256,,,256,256,,,256,,,,,,256,,,,,,,,256,,,,,256,256,256', +'256,256,256,,,,256,256,,,,,,,256,,,256,256,256,,,256,256,257,257,257', +',257,,,,257,257,,,,257,,257,257,257,257,257,257,257,,,,,,257,257,257', +'257,257,257,257,,,257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257', +'257,257,,257,257,,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257', +',,257,,,,,,257,,,,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,,,', +',,,257,,,257,257,257,,,257,257,258,258,258,,258,,,,258,258,,,,258,,258', +'258,258,258,258,258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,', +',258,,,258,258,258,258,258,258,258,258,,258,258,258,,258,258,,258,258', +'258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258', +',,,,258,258,258,258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258', +'258,259,259,259,,259,,,,259,259,,,,259,,259,259,259,259,259,259,259', +',,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259', +'259,259,259,,259,259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259', +',,259,,,259,259,,,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259', +',,,259,259,,,,,,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260', +'260,,,,260,,260,260,260,260,260,260,260,,,,,,260,260,260,260,260,260', +'260,,,260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260,260,260,', +'260,260,,260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,', +',,,260,,,,,,,,260,,,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,', +',260,260,260,,,260,260,261,261,261,,261,,,,261,261,,,,261,,261,261,261', +'261,261,261,261,,,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261', +'261,261,261,261,261,261,261,,261,261,261,,261,261,,261,261,261,,,,,', +',,,,,,,,,,,,,,261,,,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261', +'261,261,261,261,261,,,,261,261,,,,,,,261,,,261,261,261,,,261,261,262', +'262,262,,262,,,,262,262,,,,262,,262,262,262,262,262,262,262,,,,,,262', +'262,262,262,262,262,262,,,262,,,,,,,262,,,262,262,262,262,262,262,262', +'262,,262,262,262,,262,262,,262,262,262,,,,,,,,,,,,,,,,,,,,262,,,262', +',,262,262,,,262,,,,,,262,,,,,,,,262,,,,,262,262,262,262,262,262,,,,262', +'262,,,,,,,262,,,262,262,262,,,262,262,263,263,263,,263,,,,263,263,,', +',263,,263,263,263,263,263,263,263,,,,,,263,263,263,263,263,263,263,', +',263,,,,,,,263,,,263,263,263,263,263,263,263,263,,263,263,263,,263,263', +',263,263,263,,,,,,,,,,,,,,,,,,,,263,,,263,,,263,263,,,263,,,,,,263,', +',,,,,,263,,,,,263,263,263,263,263,263,,,,263,263,,,,,,,263,,,263,263', +'263,,,263,263,695,695,695,,695,,,,695,695,,,,695,,695,695,695,695,695', +'695,695,,,,,,695,695,695,695,695,695,695,,,695,,,,,,,695,,,695,695,695', +'695,695,695,695,695,,695,695,695,,695,695,,695,695,695,,,,,,,,,,,,,', +',,,,,,695,,,695,,,695,695,,,695,,,,,,695,,,,,,,,695,,,,,695,695,695', +'695,695,695,,,,695,695,,,,,,,695,,,695,695,695,,,695,695,700,700,700', +',700,,,,700,700,,,,700,,700,700,700,700,700,700,700,,,,,,700,700,700', +'700,700,700,700,,,700,,,,,,,700,,,700,700,700,700,700,700,700,700,,700', +'700,700,,700,700,,,,700,,,,,,,,,,,,,,,,,,,,700,,,700,,,700,700,,,700', +',,,,,,,,,,,,,,,,,,700,700,700,700,700,700,,,,700,700,,,,,,,700,,,700', +'700,700,,,700,700,264,264,264,,264,,,,264,264,,,,264,,264,264,264,264', +'264,264,264,,,,,,264,264,264,264,264,264,264,,,264,,,,,,,264,,,264,264', +'264,264,264,264,264,264,,264,264,264,,264,264,,264,264,264,,,,,,,,,', +',,,,,,,,,,264,,,264,,,264,264,,,264,,,,,,264,,,,,,,,264,,,,,264,264', +'264,264,264,264,,,,264,264,,,,,,,264,,,264,264,264,,,264,264,265,265', +'265,,265,,,,265,265,,,,265,,265,265,265,265,265,265,265,,,,,,265,265', +'265,265,265,265,265,,,265,,,,,,,265,,,265,265,265,265,265,265,265,265', +',265,265,265,,265,265,,265,265,265,,,,,,,,,,,,,,,,,,,,265,,,265,,,265', +'265,,,265,,,,,,265,,,,,,,,265,,,,,265,265,265,265,265,265,,,,265,265', +',,,,,,265,,,265,265,265,,,265,265,266,266,266,,266,,,,266,266,,,,266', +',266,266,266,266,266,266,266,,,,,,266,266,266,266,266,266,266,,,266', +',,,,,,266,,,266,266,266,266,266,266,266,266,,266,266,266,,266,266,,266', +'266,266,,,,,,,,,,,,,,,,,,,,266,,,266,,,266,266,,,266,,,,,,266,,,,,,', +',266,,,,,266,266,266,266,266,266,,,,266,266,,,,,,,266,,,266,266,266', +',,266,266,267,267,267,,267,,,,267,267,,,,267,,267,267,267,267,267,267', +'267,,,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267,267,267,267', +'267,267,267,267,,267,267,267,,267,267,,267,267,267,,,,,,,,,,,,,,,,,', +',,267,,,267,,,267,267,,,267,,,,,,267,,,,,,,,267,,,,,267,267,267,267', +'267,267,,,,267,267,,,,,,,267,,,267,267,267,,,267,267,268,268,268,,268', +',,,268,268,,,,268,,268,268,268,268,268,268,268,,,,,,268,268,268,268', +'268,268,268,,,268,,,,,,,268,,,268,268,268,268,268,268,268,268,,268,268', +'268,,268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268,,,268,268,,,268', +',,,,,268,,,,,,,,268,,,,,268,268,268,268,268,268,,,,268,268,,,,,,,268', +',,268,268,268,,,268,268,711,711,711,,711,,,,711,711,,,,711,,711,711', +'711,711,711,711,711,,,,,,711,711,711,711,711,711,711,,,711,,,,,,,711', +',,711,711,711,711,711,711,711,711,,711,711,711,,711,711,,,,711,,,,,', +',,,,,,,,,,,,,,711,,,711,,,711,711,,,711,,,,,,,,,,,,,,,,,,,711,711,711', +'711,711,711,,,,711,711,,,,,,,711,,,711,711,711,,,711,711,712,712,712', +',712,,,,712,712,,,,712,,712,712,712,712,712,712,712,,,,,,712,712,712', +'712,712,712,712,,,712,,,,,,,712,,,712,712,712,712,712,712,712,712,,712', +'712,712,,712,712,,712,712,712,,,,,,,,,,,,,,,,,,,,712,,,712,,,712,712', +',,712,,,,,,712,,,,,,,,712,,,,,712,712,712,712,712,712,,,,712,712,,,', +',,,712,,,712,712,712,,,712,712,269,269,269,,269,,,,269,269,,,,269,,269', +'269,269,269,269,269,269,,,,,,269,269,269,269,269,269,269,,,269,,,,,', +',269,,,269,269,269,269,269,269,269,269,,269,269,269,,269,269,,269,269', +'269,,,,,,,,,,,,,,,,,,,,269,,,269,,,269,269,,,269,,,,,,269,,,,,,,,269', +',,,,269,269,269,269,269,269,,,,269,269,,,,,,,269,,,269,269,269,,,269', +'269,717,717,717,,717,,,,717,717,,,,717,,717,717,717,717,717,717,717', +',,,,,717,717,717,717,717,717,717,,,717,,,,,,,717,,,717,717,717,717,717', +'717,717,717,,717,717,717,,717,717,,717,717,717,,,,,,,,,,,,,,,,,,,,717', +',,717,,,717,717,,,717,,717,,,,717,,,,,,,,717,,,,,717,717,717,717,717', +'717,,,,717,717,,,,,,,717,,,717,717,717,,,717,717,722,722,722,,722,,', +',722,722,,,,722,,722,722,722,722,722,722,722,,,,,,722,722,722,722,722', +'722,722,,,722,,,,,,,722,,,722,722,722,722,722,722,722,722,722,722,722', +'722,,722,722,,722,722,722,,,,,,,,,,,,,,,,,,,,722,,,722,,,722,722,,,722', +',722,,,,722,,,,,,,,722,,,,,722,722,722,722,722,722,,,,722,722,,,,,,', +'722,,722,722,722,722,,,722,722,725,725,725,,725,,,,725,725,,,,725,,725', +'725,725,725,725,725,725,,,,,,725,725,725,725,725,725,725,,,725,,,,,', +',725,,,725,725,725,725,725,725,725,725,725,725,725,725,,725,725,,725', +'725,725,,,,,,,,,,,,,,,,,,,,725,,,725,,,725,725,,,725,,,,,,725,,,,,,', +',725,,,,,725,725,725,725,725,725,,,,725,725,,,,,,,725,,725,725,725,725', +',,725,725,274,274,274,,274,,,,274,274,,,,274,,274,274,274,274,274,274', +'274,,,,,,274,274,274,274,274,274,274,,,274,,,,,,,274,,,274,274,274,274', +'274,274,274,274,,274,274,274,,274,274,,274,274,274,,,,,,,,,,,,,,,,,', +',,274,,,274,,,274,274,,,274,,,,,,274,,,,,,,,274,,,,,274,274,274,274', +'274,274,,,,274,274,,,,,,,274,,,274,274,274,,,274,274,741,741,741,,741', +',,,741,741,,,,741,,741,741,741,741,741,741,741,,,,,,741,741,741,741', +'741,741,741,,,741,,,,,,,741,,,741,741,741,741,741,741,741,741,,741,741', +'741,,741,741,,741,741,741,,,,,,,,,,,,,,,,,,,,741,,,741,,,741,741,,,741', +',,,,,741,,,,,,,,741,,,,,741,741,741,741,741,741,,,,741,741,,,,,,,741', +',,741,741,741,31,,741,741,,,,31,31,31,,,31,31,31,781,31,781,781,781', +'781,781,,,,,31,31,,,,781,,,,,31,31,,31,31,31,31,31,,,,,,,,,,781,,,,', +',,,,781,781,781,781,,31,31,31,31,31,31,31,31,31,31,31,31,31,31,,,31', +'31,31,,,31,,31,31,,,31,31,,31,781,31,,31,,31,31,31,31,31,31,31,,31,', +'31,,,,,,,,,,,,,31,31,504,31,,31,,,,504,504,504,31,,504,504,504,975,504', +'975,975,975,975,975,,,,504,504,,,,,975,,,,,504,504,,504,504,504,504', +'504,,,,,,,,,,975,,,,,,,,,975,975,975,975,,,,,,,,,,,,,504,,30,,,,,504', +',30,30,30,504,504,30,30,30,,30,,975,,,,,,,30,30,30,,,,,504,504,,,30', +'30,,30,30,30,30,30,,,504,,,,,504,,,,,,,504,,,,,,,,,30,30,30,30,30,30', +'30,30,30,30,30,30,30,30,,,30,30,30,,,30,,30,30,,,30,30,,30,,30,,30,', +'30,30,30,30,30,30,30,,30,30,30,,,,,,,,,,,,,30,30,465,30,,30,,,,465,465', +'465,30,,465,465,465,980,465,980,980,980,980,980,,,,465,465,465,465,', +',980,,,,,465,465,,465,465,465,465,465,,,,,,,,,,980,,,,,,,,,,,980,980', +',465,465,465,465,465,465,465,465,465,465,465,465,465,465,,,465,465,465', +',,465,,,465,,,465,465,,465,980,465,,465,,465,465,465,465,465,465,465', +',465,465,465,565,,565,565,565,565,565,,,,,,465,465,465,465,565,465,60', +'465,,,,,465,60,60,60,,,60,60,60,,60,,,,565,,,,,,60,60,60,565,565,565', +'565,,,,60,60,,60,60,60,60,60,,,,,,,,,,,,,,,,,,,,,,565,,60,60,60,60,60', +'60,60,60,60,60,60,60,60,60,,,60,60,60,,,60,,,60,,,60,60,,60,,60,,60', +',60,60,60,60,60,60,60,,60,,60,739,,739,739,739,739,739,,,,,,60,60,60', +'60,739,60,455,60,,,,,60,455,455,455,,,455,455,455,,455,,,,739,,,,,455', +'455,455,,,,739,739,,,,455,455,,455,455,455,455,455,,,,,,,,,,,,,,,,,', +',,,,739,,455,455,455,455,455,455,455,455,455,455,455,455,455,455,,,455', +'455,455,,,455,,455,455,,,455,455,,455,,455,,455,,455,455,455,455,455', +'455,455,,455,455,455,,,,,,,,,,,,,455,455,464,455,,455,,,,464,464,464', +'455,,464,464,464,824,464,824,824,824,824,824,,,,464,464,464,464,,,824', +',,,,464,464,,464,464,464,464,464,,,,,,,,,,824,,,,,,,,,824,824,824,824', +',464,464,464,464,464,464,464,464,464,464,464,464,464,464,,,464,464,464', +',,464,,824,464,,,464,464,,464,824,464,,464,,464,464,464,464,464,464', +'464,,464,464,464,,,,,,,,,,,,,464,464,464,464,,464,,464,,,,,464,421,421', +'421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421', +'421,421,421,421,421,,,,421,421,421,421,421,421,421,421,421,421,,,,,', +'421,421,421,421,421,421,421,421,421,,,421,,,,,,,,,421,421,,421,421,421', +'421,421,421,421,,,421,421,,,,421,421,421,421,,,,,,,,,,,,,,421,421,,421', +'421,421,421,421,421,421,421,421,421,421,,,421,421,,,,,,,,,,421,,,,,', +',,,421,,,,,421,651,651,651,651,651,651,651,651,651,651,651,651,651,651', +'651,651,651,651,651,651,651,651,651,651,,,,651,651,651,651,651,651,651', +'651,651,651,,,,,,651,651,651,651,651,651,651,651,651,,,651,,,,,,,,,651', +'651,,651,651,651,651,651,651,651,,,651,651,,,,651,651,651,651,,,,,,', +',,,,,,,651,651,,651,651,651,651,651,651,651,651,651,651,651,,,651,651', +',,,,,,,,,651,,,,,,,,,651,,,,,651,11,11,11,11,11,11,11,11,11,11,11,11', +'11,11,11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11,11', +',,,,,11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,,11,11,,11,11,11,11,11', +'11,11,,,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11,11', +'11,11,11,11,,,11,11,,,,,,,,,,11,,,,,,,,,11,,,,,11,12,12,12,12,12,12', +'12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12', +'12,12,12,12,12,12,,,,,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12', +',12,12,12,12,12,12,12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12', +'12,12,12,12,12,12,12,12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,,,,,12', +'103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103', +'103,103,103,103,103,103,103,,,,103,103,103,103,103,103,103,103,103,103', +',,,,,103,103,103,103,103,103,103,103,103,103,103,103,,103,,,,,,,103', +'103,,103,103,103,103,103,103,103,,,103,103,,,,103,103,103,103,,,,,,', +',,,,,,,103,103,,103,103,103,103,103,103,103,103,103,103,103,,,103,,', +',,,,,,,,,,,,,,,,,103,,,,,103,783,783,783,783,783,783,783,783,783,783', +'783,783,783,783,783,783,783,783,783,783,783,783,783,783,,,,783,783,783', +'783,783,783,783,783,783,783,,,,,,783,783,783,783,783,783,783,783,783', +',,783,,,,,,,,,783,783,,783,783,783,783,783,783,783,,,783,783,,,,783', +'783,783,783,,,,,,,,,,,,,,783,783,,783,783,783,783,783,783,783,783,783', +'783,783,,,783,,,,,,,,,,,,,,,,,,,,783,,,,,783,75,75,75,75,75,75,75,75', +'75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,,,,75,75,75,75,75,75', +'75,75,75,75,,,,,,75,75,75,75,75,75,75,75,75,75,75,75,,75,,,,,,,75,75', +',75,75,75,75,75,75,75,,,75,75,,,,75,75,75,75,,,,,,75,,,,,,,,75,75,,75', +'75,75,75,75,75,75,75,75,75,75,,,75,,,,,,,,,,548,548,,,548,,,,,,75,,', +'548,548,75,548,548,548,548,548,548,548,,,548,548,,,,548,548,548,548', +',,,,,548,,,,,,,,548,548,,548,548,548,548,548,548,548,548,548,548,548', +',,548,,,,,,,,,,1034,1034,,,1034,,,,,,548,,,1034,1034,548,1034,1034,1034', +'1034,1034,1034,1034,,,1034,1034,,,,1034,1034,1034,1034,,,,,,1034,,,', +',,,,1034,1034,,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034', +',,1034,,,,,,,,,,773,773,,,773,,,,,,1034,,,773,773,1034,773,773,773,773', +'773,773,773,,,773,773,,,,773,773,773,773,,,,,,773,,,,,,,,773,773,,773', +'773,773,773,773,773,773,773,773,773,773,,,773,,,,,,,,,,1029,1029,,,1029', +',,,,,773,,,1029,1029,773,1029,1029,1029,1029,1029,1029,1029,,,1029,1029', +',,,1029,1029,1029,1029,,,,,,1029,,,,,,,,1029,1029,,1029,1029,1029,1029', +'1029,1029,1029,1029,1029,1029,1029,,,1029,,,,,,,,,,473,473,,,473,,,', +',,1029,,,473,473,1029,473,473,473,473,473,473,473,,,473,473,,,,473,473', +'473,473,,,,,,473,,,,,,,,473,473,,473,473,473,473,473,473,473,473,473', +'473,473,,,473,,,,,,,,,,1035,1035,,,1035,,,,,,473,,,1035,1035,473,1035', +'1035,1035,1035,1035,1035,1035,,,1035,1035,,,,1035,1035,1035,1035,,,', +',,1035,,,,,,,,1035,1035,,1035,1035,1035,1035,1035,1035,1035,1035,1035', +'1035,1035,,,1035,,,,,,,,,,472,472,,,472,,,,,,1035,,,472,472,1035,472', +'472,472,472,472,472,472,,,472,472,,,,472,472,472,472,,,,,,472,,,,,,', +',472,472,,472,472,472,472,472,472,472,472,472,472,472,,,472,,,,,,,,', +',230,230,,,230,,,,,,472,,,230,230,472,230,230,230,230,230,230,230,,', +'230,230,,,,230,230,230,230,,,,,,230,,,,,,,,230,230,,230,230,230,230', +'230,230,230,230,230,230,230,,,230,,,,,,,,,,229,229,,,229,,,,,,230,,', +'229,229,230,229,229,229,229,229,229,229,,,229,229,,,,229,229,229,229', +',,,,,229,,,,,,,,229,229,,229,229,229,229,229,229,229,229,229,229,229', +',,229,,,,,,,,,,537,537,,,537,,,,,,229,,,537,537,229,537,537,537,537', +'537,537,537,,,537,537,,,,537,537,537,537,,,,,,537,,,,,,,,537,537,,537', +'537,537,537,537,537,537,537,537,537,537,,,537,,,,,,,,,,538,538,,,538', +',,,,,537,,,538,538,537,538,538,538,538,538,538,538,,,538,538,,,,538', +'538,538,538,,,,,,538,,,,,,,,538,538,,538,538,538,538,538,538,538,538', +'538,538,538,,,538,,,,,,,,,,772,772,,,772,,,,,,538,,,772,772,538,772', +'772,772,772,772,772,772,,,772,772,,,,772,772,772,772,,,,,,772,,,,,,', +',772,772,,772,772,772,772,772,772,772,772,772,772,772,,1053,772,1053', +'1053,1053,1053,1053,,,,,278,278,,,278,1053,,,,,772,,,278,278,772,278', +'278,278,278,278,278,278,,,278,278,1053,,,278,278,278,278,,,1053,1053', +'1053,1053,,,,,,,,278,278,,278,278,278,278,278,278,278,278,278,278,278', +',,278,,,,,,,,,1053,657,657,,,657,,,,,,278,,,657,657,278,657,657,657', +'657,657,657,657,,,657,657,,,,657,657,657,657,,,,,,657,,,,,,,,657,657', +',657,657,657,657,657,657,657,657,657,657,657,,,657,,,,,,,,,,608,608', +',,608,,,,,,657,,,608,608,657,608,608,608,608,608,608,608,,,608,608,', +',,608,608,608,608,,,,,,608,,,,,,,,608,608,,608,608,608,608,608,608,608', +'608,608,608,608,,,608,,,,,,,,,,658,658,,,658,,,,,,608,,,658,658,608', +'658,658,658,658,658,658,658,,,658,658,,,,658,658,658,658,,,,,,658,,', +',,,,,658,658,,658,658,658,658,658,658,658,658,658,658,658,,,658,,,,', +',,,,,609,609,,,609,,,,,,658,,,609,609,658,609,609,609,609,609,609,609', +',,609,609,,,,609,609,609,609,,,,,,609,,,,,,,,609,609,,609,609,609,609', +'609,609,609,609,609,609,609,,,609,1055,,1055,1055,1055,1055,1055,,,547', +'547,,,547,,,1055,,,609,,,547,547,609,547,547,547,547,547,547,547,,,547', +'547,,,1055,547,547,547,547,,,,,,547,1055,1055,,,,,,547,547,,547,547', +'547,547,547,547,547,547,547,547,547,,1057,547,1057,1057,1057,1057,1057', +',,,,,1055,,,,1057,,,,,547,,,,1059,547,1059,1059,1059,1059,1059,,,,,', +',1057,,352,1059,352,352,352,352,352,,,1057,1057,,,,,782,352,782,782', +'782,782,782,,1059,,,,,,,,782,,,1059,1059,,,352,352,,,,1057,,,,352,352', +'352,352,,,782,1082,,1082,1082,1082,1082,1082,,782,782,782,782,,,1059', +'945,1082,945,945,945,945,945,,,,,,,,352,947,945,947,947,947,947,947', +',1082,,,,,,782,,947,,,1082,1082,,,945,735,,735,735,735,735,735,,,,945', +'945,,,947,943,735,943,943,943,943,943,,,,947,947,,,1082,737,943,737', +'737,737,737,737,,735,,,,,,945,,737,735,735,735,735,,,943,,,,,,947,,', +',,943,943,,,737,941,,941,941,941,941,941,,737,737,737,737,,,735,,941', +',,,,,,,,,,,,943,,,,,,,,,941,,,,,,737,,,941,941,941,941,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,941' ] + racc_action_check = arr = ::Array.new(26050, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -1838,316 +1838,335 @@ end racc_action_pointer = [ - nil, 1328, 4443, 61, nil, 416, nil, nil, 12006, 1482, - nil, 24121, 23456, -20, nil, -42, 81, 1272, 427, 46, - 610, nil, -73, 16486, 1764, 185, nil, 604, nil, 20, - 24366, 24491, 16066, 16206, 5006, nil, 918, 5706, 5846, nil, - 89, 428, 389, 173, 164, 9766, 10046, 11026, 118, 780, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 23324, - nil, -68, 18026, nil, -19, nil, 18866, 11586, nil, nil, - 11726, 11866, 171, nil, 24254, nil, nil, nil, nil, nil, - -86, nil, nil, nil, nil, nil, nil, 140, 159, 163, - 217, 23988, nil, nil, nil, nil, nil, nil, 380, nil, - nil, 512, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 19426, nil, nil, nil, nil, 19286, - 18586, 18166, 17886, 16906, 239, nil, 253, nil, nil, nil, + nil, 1341, 4286, 57, nil, 315, nil, nil, 11851, 1310, + nil, 23770, 23908, -26, nil, 37, 43, 607, 111, 946, + 180, nil, -73, 14231, 1325, 187, nil, 557, nil, 164, + 22837, 22629, 6111, 6391, 7371, nil, 2030, 8071, 8211, nil, + 95, 397, 301, 224, 298, 9051, 9331, 669, 10031, 159, + 1079, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 23097, nil, 10871, nil, nil, -10, nil, 11291, 11431, nil, + nil, 11571, 11711, 241, nil, 24322, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 67, nil, nil, nil, nil, nil, nil, 200, + 216, 226, 234, 24046, nil, nil, nil, nil, nil, nil, + 132, nil, nil, 652, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 12691, nil, nil, nil, + nil, 12831, 12971, 13111, 13251, 13951, 264, nil, 949, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 236, nil, 4584, - 22646, 21946, 21666, 25502, 25298, nil, 21246, 21106, 20966, 20826, - 20686, 20546, nil, nil, 849, 194, 231, 314, 291, 235, - 308, nil, 10466, 3456, 309, 9626, 8786, 8366, 7666, 7526, - 7246, 7106, 6966, 5986, 5426, 15786, 15226, 14666, 13826, 13686, - 11446, 12706, 12426, 12286, 12146, 18446, 6826, 12846, 13266, 14946, - 15086, nil, nil, 25023, nil, nil, 306, 15366, nil, 323, - nil, nil, nil, 15506, nil, nil, 15646, nil, 2187, nil, - 314, 351, nil, 16346, 402, 5146, nil, 366, 5286, nil, - nil, 259, nil, 1467, 5566, 359, 4866, 397, 436, 412, - 6406, 1905, 1203, 1200, 1131, 507, 1103, nil, 474, 448, - -14, nil, nil, nil, 503, 161, 473, 10886, nil, 429, - 537, 962, nil, 541, nil, 20126, 3315, nil, 20266, 521, - nil, 449, 507, 527, 21806, nil, nil, 25564, 13, 21, - 23, 22366, 16766, 224, 608, 504, 22, 24, 921, 582, - 30, 653, nil, nil, 19006, nil, 19146, 655, 615, 676, - 681, 738, 201, 388, 549, 570, nil, 706, nil, nil, - nil, nil, nil, 316, nil, 382, nil, 222, nil, 555, - 249, nil, 556, -58, nil, 565, -41, nil, 567, 125, - nil, 412, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1764, 23855, nil, nil, nil, nil, - 578, nil, nil, 575, 13406, 578, nil, nil, 1059, 582, - nil, nil, 581, 596, 124, 353, 24683, nil, nil, nil, - 255, 130, 644, nil, nil, 23194, 23064, nil, 1341, nil, - 594, nil, nil, 777, nil, nil, nil, nil, 141, nil, - 24887, 24955, 19986, 328, 19846, 19706, 19566, 3597, 4725, 804, - 945, 675, 677, 689, 701, 5286, 5426, 3197, 5146, 4584, - 4443, 4302, 4020, 3738, 3456, 3315, 5006, 4866, 659, 462, - 4161, 3879, 1482, -13, 24616, nil, nil, nil, nil, nil, - nil, 118, -57, 643, 648, nil, nil, 17746, nil, nil, - 17606, nil, 17466, nil, 17326, nil, nil, 17046, 1608, 659, - 660, nil, nil, 661, 16626, 667, 22926, 24751, 24819, 1341, - 743, nil, 22786, 708, nil, 22506, 22226, 25672, 25604, 1623, - 22086, 833, 846, 632, nil, nil, 21526, nil, nil, 21386, - nil, 746, nil, 283, 774, 28, 24580, nil, 735, 738, - nil, 739, 743, 748, nil, nil, nil, nil, nil, nil, - nil, 747, 648, nil, nil, 20406, nil, nil, nil, 839, - nil, nil, nil, 840, nil, nil, 847, 4161, 887, nil, - 777, 60, 63, 884, 896, nil, 11306, 26083, 26015, 35, - nil, 225, 263, -4, nil, 1059, nil, 9, 10746, nil, - 25961, nil, 10606, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 186, nil, nil, 130, nil, nil, - nil, 780, nil, nil, 781, nil, 802, nil, 23589, nil, - 787, 10326, 9906, 430, 830, 9486, 9206, 9066, 8926, 829, - nil, nil, nil, 8646, 8506, 833, nil, 7946, 7806, nil, - 171, 105, 0, 644, 805, 918, 804, nil, nil, 25795, - nil, nil, 915, -10, -43, nil, nil, nil, nil, 815, - nil, 857, 6266, nil, nil, nil, 762, -108, 6126, 817, - nil, 828, 158, 90, 865, 320, 1244, 867, 829, 13966, - 2469, 892, 139, 946, 13546, nil, 838, 447, nil, nil, - nil, 4725, 3033, 848, 335, nil, nil, 220, 23288, nil, - 23158, nil, 23028, nil, 12566, nil, 608, nil, 849, 223, - 855, nil, nil, nil, nil, 653, nil, 982, nil, nil, - nil, nil, 991, nil, 18306, 877, 36, -4, 31, 66, - 6686, nil, 990, nil, 25091, 25159, 18726, nil, nil, nil, - 114, 425, 3738, 1200, 575, 315, 23722, 147, 760, 3597, - nil, nil, nil, nil, nil, nil, nil, 876, 12986, 3033, - 13126, nil, 879, nil, 2892, nil, 2751, nil, nil, 2610, - nil, 1200, nil, 2328, 14106, 14246, 14386, 14526, 133, 14806, - 880, 884, nil, 889, 901, 902, nil, 923, 913, 910, - 904, 15926, nil, nil, 1341, nil, nil, nil, 1482, 1623, - nil, nil, 922, 205, nil, nil, 1044, nil, 3174, 928, - 978, nil, nil, nil, nil, 954, 1062, 946, 944, nil, - nil, nil, 954, 956, nil, 957, 958, nil, 966, nil, - nil, 970, 3160, 969, 3190, nil, 1090, nil, 6546, 1091, - 2046, 2187, nil, 19, 5, 31, 289, 1236, nil, 975, - 3879, 7386, nil, 419, 1096, 1106, 993, nil, nil, nil, - nil, nil, nil, nil, nil, 1009, 1012, nil, 2046, 8086, - 8226, 1905, 344, nil, nil, 25810, nil, nil, 25834, nil, - 25849, nil, nil, 1037, 1186, 9346, 1062, 1094, 1141, 2328, - 1041, 1150, nil, 2751, nil, nil, -7, 10186, nil, nil, - nil, nil, nil, 25886, nil, 25903, nil, 25910, nil, 25940, - nil, nil, nil, nil, 373, 641, 1042, nil, 32, nil, - 1163, 1173, 11166, 4020, nil, nil, 1178, 48, nil, nil, - nil, nil, 24455, nil, 1061, nil, nil, 1063, 1064, 1069, - 1078, nil, 1079, nil, 434, nil, nil, nil, 682, 25227, - nil, nil, 1099, nil, nil, nil, 2892, 520, 452, 340, - 1158, 102, nil, 1085, 1095, 1097, 1098, 1099, 3197, 1107, - 3301, 2469, nil, nil, nil, 415, 1059, nil, nil, 4302, - 2610, nil, 25734, nil, 25741, nil, 25758, nil, 443, nil, - nil, nil, 1327, 1152, 1156, nil, 1249, 17186, 25434, 25366, - 516, 25289, nil, nil, nil, nil, 3391, 1131, 636, nil, - nil, nil, 1254, 1273, 1278, 1161, 1162, 1166, 1171, nil, - nil, 1186, -11, 10, -9, 1095, 1184, 1194, nil, nil, - nil, nil, 24330, nil, nil, nil, nil, -8, nil, -105, - nil ] + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 275, nil, 3863, 14651, 14791, 15211, 15351, 15491, 15631, 24979, + 24906, nil, 15771, 15911, 16051, nil, nil, 723, 266, 147, + 366, -77, 284, 350, nil, 16331, 3017, 359, 16471, 16751, + 17031, 17311, 17451, 17591, 18291, 18991, 19411, 19551, 19691, 19831, + 19971, 20111, 20251, 20391, 20811, 20951, 21091, 21231, 21371, 21791, + nil, nil, nil, nil, 22351, nil, nil, nil, 25271, nil, + nil, 361, 5271, nil, nil, 383, nil, nil, nil, 5551, + nil, nil, 5831, nil, 2030, nil, 383, 385, nil, 7231, + 449, 7511, nil, 7651, 7791, nil, nil, -71, nil, nil, + 7931, 1466, nil, 409, 1748, 429, 492, 457, 8351, 1184, + 709, 528, 491, 546, 437, nil, 520, 486, -19, nil, + nil, nil, 530, 185, 501, 9191, nil, 415, 574, 751, + nil, 578, 9611, nil, 9751, 3158, 1451, 528, 10171, 10451, + nil, nil, 25738, -3, -11, -8, 10591, 2594, 2312, 168, + 659, 546, 5, -5, 1115, 632, -19, 677, nil, nil, + 11011, nil, 11151, 465, 494, 325, 577, 243, 612, 372, + 217, -24, nil, 204, nil, nil, nil, nil, nil, 196, + nil, 366, nil, 385, nil, 595, 262, nil, 610, nil, + 621, 40, nil, 625, -25, nil, 359, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 23494, nil, nil, nil, nil, 639, nil, nil, 633, + 11991, 635, nil, nil, 624, nil, 1046, 126, nil, nil, + nil, 1043, nil, nil, nil, nil, nil, 1184, 647, nil, + nil, 646, 657, 365, 422, 23229, nil, nil, nil, 912, + 784, 698, nil, nil, 23357, 22965, nil, nil, nil, 148, + nil, 698, 24833, 24687, 12131, 331, 12271, 12411, 12551, 2171, + 2312, 450, 707, 732, 735, 740, 747, 3722, 3581, 3464, + 2453, 2594, 2735, 2876, 3017, 3158, 607, 738, 862, 3299, + 1748, 729, 809, nil, 22757, nil, nil, nil, nil, nil, + nil, nil, nil, 693, 696, nil, nil, 13391, nil, nil, + 13531, nil, 13671, nil, nil, nil, nil, 13811, 1592, 705, + 710, nil, nil, 717, 14091, 721, 14371, 25052, 25125, 862, + 758, nil, 14511, 721, nil, 778, 14931, 25636, 24395, 3440, + 1466, 15071, 859, 868, 753, nil, nil, 412, 387, 785, + 768, nil, 123, 794, nil, 23028, nil, 755, 757, nil, + 765, 770, 774, nil, nil, nil, nil, nil, nil, nil, + 762, -33, nil, nil, 16191, nil, nil, nil, 855, nil, + nil, nil, 858, nil, nil, 865, 3722, 905, nil, 3581, + 56, 909, 915, 921, 932, nil, nil, 16611, 25417, 25563, + 25, nil, 267, 304, 323, nil, 865, nil, 835, 16891, + nil, 854, nil, nil, nil, 17171, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 290, nil, nil, + 302, nil, nil, nil, 827, nil, nil, 828, nil, 2876, + nil, 23632, nil, 831, 17731, 17871, 18011, 25344, 25490, 18151, + 349, 867, 18431, 18571, 18711, 18851, 867, nil, nil, nil, + 19131, 19271, 880, nil, nil, nil, 108, 368, 520, 0, + 872, 876, nil, -50, 985, 136, nil, 901, nil, 1013, + nil, nil, 898, nil, 940, 20531, nil, nil, nil, 89, + 20671, 900, nil, 904, 21, 23, 942, 172, 915, 944, + 906, 21511, 21651, 969, 27, 24, nil, 21931, nil, nil, + nil, nil, 22071, nil, nil, 22211, nil, nil, nil, 22, + 911, 186, nil, nil, 585, 25846, nil, 25876, nil, 23160, + nil, 22491, nil, 520, nil, 922, 139, 930, nil, nil, + nil, nil, 511, nil, 1043, nil, nil, nil, nil, nil, + 1058, nil, 5411, 943, 22, 28, 6, 154, 4004, nil, + 829, nil, 25198, 24541, 5691, nil, nil, nil, 679, 4709, + 1043, 22593, 25753, 24184, 53, 650, 2453, nil, nil, 321, + nil, nil, nil, 957, nil, 942, 5971, 953, 279, 211, + 264, 392, 1607, 6251, nil, 951, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 6531, 6671, 6811, 6951, + 310, 7091, nil, nil, 23321, nil, 4427, nil, nil, 969, + nil, -17, nil, nil, nil, 954, 302, nil, nil, nil, + nil, nil, nil, nil, 4991, nil, 955, 997, nil, nil, + 413, nil, 1325, 1466, 968, 977, 977, nil, nil, nil, + 996, 1001, nil, 1004, 1005, nil, 1009, nil, nil, 1017, + 616, 1026, 819, nil, 1147, nil, nil, 8491, nil, 4850, + 1156, nil, nil, -10, 7, 1157, 203, 660, nil, 1043, + 4568, 8631, 99, 1162, nil, 1048, 165, nil, nil, nil, + nil, nil, nil, nil, 1038, nil, nil, 1048, 367, nil, + nil, 8771, 8911, 1889, 1052, 1053, nil, 1062, 1063, 1067, + nil, 1088, 1072, 1065, 5131, nil, nil, nil, nil, 4145, + 3440, nil, 50, 9471, nil, nil, 1097, 1202, 921, nil, + nil, 25915, nil, 25861, nil, 25807, nil, 25822, nil, nil, + nil, nil, 257, 645, 1083, nil, -1, nil, nil, 9891, + 3299, nil, nil, 1211, 359, nil, nil, 1212, nil, nil, + 1133, nil, 121, nil, nil, 22721, nil, nil, 583, nil, + 22929, nil, nil, 1115, 10311, 916, 1170, nil, 1218, 2735, + 948, 974, 1043, 1185, 362, nil, nil, nil, 187, nil, + nil, nil, 1115, 1118, 1137, 1142, 1145, 527, 1146, 513, + 2171, nil, 399, nil, nil, 1889, nil, 1607, 1150, nil, + nil, 1155, 1167, 1168, 1177, nil, 1178, nil, 1184, 24614, + nil, nil, 1305, 10731, 24468, 24760, 1187, nil, 1311, 715, + nil, nil, nil, nil, 847, 1184, 643, nil, nil, nil, + 1306, 1308, nil, 25260, nil, 25627, nil, 25698, nil, 25723, + nil, nil, 1228, 1232, nil, 1197, 36, 39, -9, 1220, + nil, 1203, 1204, nil, nil, nil, 1205, 1208, 1209, 1210, + 11, nil, 25792, nil, nil, nil, nil, -85, nil ] racc_action_default = [ - -1, -624, -623, -624, -2, -610, -4, -5, -624, -8, - -9, -624, -624, -624, -29, -624, -624, -624, -280, -624, - -40, -43, -612, -624, -48, -50, -51, -52, -57, -257, - -257, -257, -294, -333, -334, -69, -623, -73, -81, -83, - -624, -516, -517, -624, -624, -624, -624, -624, -612, -238, - -271, -272, -273, -274, -275, -276, -277, -278, -279, -599, - -282, -285, -623, -292, -302, -405, -624, -624, -307, -310, - -610, -624, -318, -325, -624, -335, -336, -447, -448, -449, - -450, -451, -452, -623, -455, -623, -623, -623, -623, -623, - -623, -623, -492, -498, -500, -501, -502, -503, -597, -505, - -506, -598, -508, -509, -510, -511, -512, -513, -514, -515, - -520, -521, 1051, -3, -611, -619, -620, -621, -7, -624, - -624, -624, -624, -624, -624, -17, -624, -112, -113, -114, - -115, -116, -117, -118, -119, -120, -124, -125, -126, -127, - -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, - -188, -189, -190, -191, -192, -193, -194, -22, -121, -623, - -624, -624, -623, -624, -624, -609, -624, -624, -624, -624, - -624, -612, -613, -47, -624, -516, -517, -624, -280, -624, - -624, -230, -624, -623, -624, -624, -624, -624, -624, -624, - -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, - -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, - -624, -411, -414, -624, -607, -608, -58, -624, -301, -624, - -428, -431, -64, -623, -425, -65, -612, -66, -239, -252, - -623, -623, -256, -624, -262, -624, -592, -612, -624, -67, - -68, -610, -13, -14, -624, -71, -623, -612, -624, -74, - -77, -623, -89, -90, -624, -624, -97, -294, -297, -612, - -418, -333, -334, -337, -426, -624, -79, -624, -85, -290, - -499, -624, -215, -216, -231, -624, -623, -284, -624, -624, - -240, -616, -616, -624, -623, -303, -304, -548, -49, -624, - -624, -624, -624, -610, -624, -611, -516, -517, -624, -624, - -280, -624, -358, -359, -624, -321, -624, -112, -113, -154, - -155, -156, -172, -177, -184, -187, -328, -624, -516, -517, - -587, -588, -453, -624, -476, -624, -478, -624, -480, -624, - -624, -460, -624, -624, -466, -624, -624, -472, -624, -624, - -474, -624, -491, -493, -494, -495, -496, -6, -622, -23, - -24, -25, -26, -27, -623, -624, -19, -20, -21, -122, - -624, -30, -39, -267, -624, -624, -266, -31, -197, -612, - -247, -248, -623, -623, -600, -601, -257, -423, -602, -603, - -601, -600, -257, -422, -424, -602, -603, -37, -205, -38, - -624, -41, -42, -195, -262, -44, -45, -46, -612, -300, - -624, -624, -623, -290, -624, -624, -624, -206, -207, -208, - -209, -210, -211, -212, -213, -217, -218, -219, -220, -221, - -222, -223, -224, -225, -226, -227, -228, -229, -232, -233, - -234, -235, -612, -623, -257, -600, -601, -54, -59, -258, - -419, -623, -623, -612, -612, -296, -253, -624, -261, -254, - -624, -259, -624, -263, -624, -596, -12, -611, -16, -612, - -70, -288, -86, -75, -624, -612, -623, -624, -624, -96, - -624, -499, -624, -82, -87, -624, -624, -624, -624, -236, - -624, -439, -624, -286, -614, -241, -618, -617, -243, -618, - -291, -624, -590, -616, -624, -624, -548, -408, -586, -586, - -531, -533, -533, -533, -547, -549, -550, -551, -552, -553, - -554, -555, -624, -557, -559, -561, -566, -568, -569, -571, - -576, -578, -579, -581, -582, -583, -624, -623, -349, -350, - -623, -624, -624, -624, -624, -434, -623, -624, -624, -290, - -315, -107, -108, -624, -110, -624, -280, -624, -624, -326, - -548, -330, -624, -454, -477, -482, -483, -485, -456, -479, - -457, -481, -458, -459, -624, -462, -464, -624, -465, -468, - -469, -624, -470, -471, -624, -497, -624, -18, -624, -28, - -270, -624, -624, -427, -624, -249, -251, -624, -624, -60, - -245, -246, -420, -624, -624, -62, -421, -624, -624, -299, - -600, -601, -600, -601, -612, -195, -624, -394, -395, -612, - -397, -412, -53, -415, -623, -429, -432, -244, -295, -623, - -260, -264, -624, -593, -594, -595, -15, -72, -624, -78, - -84, -612, -600, -601, -623, -93, -95, -624, -80, -624, - -204, -214, -612, -623, -623, -283, -612, -616, -293, -591, - -406, -623, -623, -612, -624, -529, -530, -624, -624, -540, - -624, -543, -624, -545, -624, -360, -624, -362, -364, -371, - -612, -560, -570, -580, -584, -623, -351, -623, -308, -352, - -353, -311, -624, -314, -624, -612, -600, -601, -604, -289, - -624, -107, -108, -109, -624, -624, -623, -319, -522, -523, - -624, -322, -623, -623, -548, -624, -624, -612, -624, -623, - -461, -463, -467, -473, -475, -10, -123, -268, -624, -198, - -624, -615, -623, -33, -200, -34, -201, -61, -35, -203, - -36, -202, -63, -196, -624, -624, -624, -624, -427, -624, - -586, -586, -376, -623, -623, -623, -393, -624, -612, -399, - -555, -563, -564, -574, -623, -417, -416, -55, -623, -623, - -255, -265, -76, -91, -88, -298, -623, -356, -623, -440, - -623, -441, -442, -287, -242, -624, -624, -612, -586, -567, - -585, -532, -533, -533, -558, -533, -533, -577, -533, -555, - -572, -612, -624, -369, -624, -556, -624, -354, -624, -624, - -623, -623, -313, -624, -427, -624, -107, -108, -111, -612, - -623, -624, -525, -624, -624, -624, -612, -527, -331, -589, - -484, -487, -488, -489, -490, -624, -269, -32, -199, -250, - -624, -237, -624, -374, -375, -384, -378, -386, -624, -389, - -624, -391, -396, -624, -624, -624, -562, -624, -624, -623, - -624, -624, -11, -623, -446, -357, -624, -624, -444, -409, - -410, -407, -528, -624, -536, -624, -538, -624, -541, -624, - -544, -546, -361, -363, -367, -624, -372, -305, -624, -306, - -624, -624, -624, -623, -316, -427, -624, -624, -323, -327, - -329, -526, -548, -486, -586, -565, -377, -623, -623, -623, - -623, -575, -623, -398, -612, -401, -403, -404, -573, -624, - -290, -413, -624, -430, -433, -445, -623, -98, -99, -624, - -624, -106, -443, -533, -533, -533, -533, -365, -624, -370, - -624, -623, -309, -312, -264, -623, -623, -320, -524, -623, - -623, -373, -624, -381, -624, -383, -624, -387, -624, -390, - -392, -400, -624, -289, -604, -56, -439, -623, -624, -624, - -105, -624, -534, -537, -539, -542, -624, -368, -623, -435, - -436, -437, -624, -624, -624, -623, -623, -623, -623, -402, - -438, -612, -600, -601, -604, -104, -533, -366, -355, -317, - -324, -332, -624, -379, -382, -385, -388, -427, -535, -623, - -380 ] + -1, -648, -647, -648, -2, -634, -4, -5, -648, -8, + -9, -648, -648, -648, -35, -648, -648, -39, -648, -648, + -294, -50, -636, -648, -55, -60, -61, -62, -66, -271, + -271, -271, -309, -343, -344, -78, -647, -82, -90, -92, + -648, -538, -539, -648, -648, -648, -648, -230, -648, -636, + -244, -285, -286, -287, -288, -289, -290, -291, -292, -293, + -621, -296, -298, -305, -307, -317, -423, -648, -648, -57, + -57, -634, -648, -327, -334, -648, -345, -346, -348, -349, + -350, -351, -352, -353, -354, -355, -356, -357, -366, -468, + -469, -470, -471, -472, -473, -647, -476, -647, -647, -647, + -486, -647, -647, -647, -514, -520, -522, -523, -524, -525, + -619, -527, -528, -620, -530, -531, -532, -533, -534, -535, + -536, -537, -542, -543, 1089, -3, -635, -643, -644, -645, + -7, -648, -648, -648, -648, -648, -648, -23, -648, -121, + -122, -123, -124, -125, -126, -127, -128, -129, -133, -134, + -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, + -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, + -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, + -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, + -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, + -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, + -195, -196, -197, -198, -199, -200, -201, -202, -203, -204, + -28, -130, -647, -648, -648, -648, -648, -648, -647, -648, + -648, -631, -648, -648, -636, -637, -54, -648, -538, -539, + -648, -294, -648, -648, -236, -648, -647, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -245, -246, -247, -248, -648, -359, -452, -431, -648, -632, + -633, -67, -648, -316, -358, -648, -445, -447, -73, -647, + -442, -74, -636, -75, -251, -266, -647, -647, -270, -648, + -276, -648, -614, -648, -648, -76, -77, -634, -17, -18, + -648, -21, -22, -80, -647, -636, -648, -83, -86, -647, + -98, -99, -648, -648, -106, -309, -312, -636, -435, -343, + -344, -347, -443, -648, -88, -648, -94, -304, -521, -648, + -224, -225, -648, -237, -648, -647, -300, -636, -647, -647, + -318, -319, -570, -56, -648, -648, -648, -647, -647, -634, + -648, -635, -538, -539, -648, -648, -294, -648, -376, -377, + -648, -330, -648, -121, -122, -164, -165, -166, -182, -187, + -194, -197, -337, -648, -538, -539, -609, -610, -474, -648, + -498, -648, -500, -648, -502, -648, -648, -481, -648, -647, + -648, -648, -494, -648, -648, -496, -648, -513, -515, -516, + -517, -518, -6, -646, -29, -30, -31, -32, -33, -10, + -11, -648, -25, -26, -27, -131, -648, -36, -38, -281, + -648, -648, -280, -37, -648, -40, -648, -294, -48, -49, + -205, -256, -276, -51, -52, -41, -206, -256, -636, -261, + -262, -647, -647, -622, -623, -271, -440, -624, -625, -623, + -622, -271, -439, -441, -624, -625, -47, -214, -53, -636, + -315, -648, -648, -648, -647, -304, -648, -648, -648, -215, + -216, -217, -218, -219, -220, -221, -222, -226, -227, -228, + -229, -231, -232, -233, -234, -235, -238, -239, -240, -241, + -636, -249, -648, -453, -271, -622, -623, -64, -68, -272, + -436, -449, -452, -636, -636, -311, -267, -648, -275, -268, + -648, -273, -648, -277, -617, -618, -16, -635, -20, -636, + -79, -302, -95, -84, -648, -636, -647, -648, -648, -105, + -648, -521, -648, -91, -96, -648, -648, -648, -648, -250, + -242, -648, -460, -648, -636, -299, -252, -640, -640, -648, + -648, -612, -640, -648, -424, -570, -427, -608, -608, -553, + -555, -555, -555, -569, -571, -572, -573, -574, -575, -576, + -577, -648, -579, -581, -583, -588, -590, -591, -593, -598, + -600, -601, -603, -604, -605, -648, -647, -367, -368, -647, + -648, -648, -648, -648, -648, -362, -455, -647, -648, -648, + -304, -57, -116, -117, -648, -119, -648, -294, -647, -648, + -335, -548, -340, -629, -630, -648, -475, -499, -504, -505, + -507, -477, -501, -478, -503, -479, -480, -648, -483, -485, + -648, -488, -490, -491, -648, -492, -493, -648, -519, -647, + -24, -648, -34, -284, -648, -648, -647, -648, -648, -648, + -444, -648, -263, -265, -648, -648, -69, -259, -260, -437, + -648, -648, -71, -438, -314, -638, -622, -623, -622, -623, + -636, -648, -430, -647, -63, -432, -449, -648, -450, -648, + -258, -310, -647, -274, -278, -648, -615, -616, -19, -81, + -648, -87, -93, -636, -622, -623, -647, -102, -104, -648, + -89, -648, -648, -223, -636, -647, -360, -647, -297, -365, + -301, -253, -642, -641, -255, -642, -306, -308, -613, -648, + -636, -648, -551, -552, -648, -648, -562, -648, -565, -648, + -567, -648, -378, -648, -380, -382, -389, -636, -582, -592, + -602, -606, -647, -369, -647, -58, -370, -371, -322, -323, + -648, -325, -648, -636, -622, -623, -626, -303, -647, -116, + -117, -118, -648, -648, -647, -328, -544, -546, -331, -647, + -647, -570, -570, -648, -636, -648, -647, -482, -484, -648, + -487, -495, -497, -648, -132, -282, -648, -636, -622, -623, + -623, -622, -257, -648, -639, -647, -43, -208, -44, -209, + -70, -45, -211, -46, -210, -72, -648, -648, -648, -648, + -444, -648, -412, -413, -636, -415, -647, -434, -433, -648, + -446, -647, -448, -269, -279, -85, -100, -97, -213, -313, + -13, -15, -361, -363, -647, -467, -461, -647, -462, -463, + -640, -425, -647, -647, -417, -636, -608, -589, -607, -554, + -555, -555, -580, -555, -555, -599, -555, -577, -594, -636, + -648, -387, -648, -578, -648, -364, -372, -648, -374, -647, + -648, -59, -324, -648, -444, -648, -116, -117, -120, -636, + -647, -648, -648, -648, -338, -636, -648, -341, -611, -506, + -509, -510, -511, -512, -648, -489, -12, -283, -444, -42, + -207, -264, -648, -243, -608, -608, -394, -647, -647, -647, + -411, -648, -636, -577, -585, -586, -596, -454, -65, -647, + -647, -466, -648, -648, -465, -254, -648, -648, -648, -426, + -550, -648, -558, -648, -560, -648, -563, -648, -566, -568, + -379, -381, -385, -648, -390, -320, -648, -375, -321, -648, + -647, -326, -444, -648, -648, -332, -336, -648, -547, -549, + -548, -508, -648, -392, -393, -402, -396, -404, -648, -407, + -648, -409, -414, -648, -648, -584, -648, -451, -647, -647, + -107, -108, -648, -648, -115, -464, -428, -429, -636, -419, + -421, -422, -555, -555, -555, -555, -383, -648, -388, -648, + -647, -278, -647, -329, -545, -647, -339, -647, -608, -587, + -395, -647, -647, -647, -647, -597, -647, -416, -595, -648, + -304, -14, -460, -647, -648, -648, -114, -418, -648, -648, + -556, -559, -561, -564, -648, -386, -647, -456, -457, -458, + -648, -648, -391, -648, -399, -648, -401, -648, -405, -648, + -408, -410, -303, -626, -459, -636, -622, -623, -626, -113, + -420, -555, -384, -373, -333, -342, -647, -647, -647, -647, + -444, -557, -648, -397, -400, -403, -406, -647, -398 ] clist = [ -'6,299,220,419,366,584,262,280,280,280,135,135,130,130,125,208,327,335', -'488,213,416,393,499,133,133,577,580,439,325,4,693,274,523,279,279,279', -'117,331,442,532,670,547,753,670,705,706,263,633,846,114,339,340,113', -'297,343,673,313,313,316,320,330,743,794,837,493,426,432,338,338,834', -'720,338,9,923,554,130,951,118,9,816,957,374,926,376,378,381,384,387', -'390,376,313,797,130,955,673,266,272,275,728,731,295,117,375,399,400', -'401,402,223,391,535,538,614,851,849,617,484,597,344,599,740,338,338', -'338,338,986,354,604,860,598,661,611,863,989,615,356,827,615,665,666', -'752,600,277,289,290,756,942,850,341,334,696,796,328,281,281,281,326', -'367,747,798,351,336,541,370,979,499,954,663,333,545,700,337,628,483', -'804,491,808,449,492,670,670,951,809,332,397,9,415,1019,734,957,820,906', -'673,415,403,372,373,899,377,380,1,664,1029,383,386,389,870,758,759,392', -'861,420,923,858,279,427,436,1017,405,412,445,446,447,448,832,841,353', -'450,207,17,679,893,495,829,945,17,902,124,688,602,342,2,,280,654,732', -',834,,,224,703,280,510,,1037,,,,224,224,224,,17,304,304,,837,504,279', -',490,420,,,279,,,279,498,498,834,524,788,554,,,883,884,947,520,,,224', -'224,411,417,224,348,,,437,441,426,432,,,517,681,,813,807,,,509,,274', -',,515,313,513,699,117,527,912,581,582,,,533,521,795,542,801,,507,313', -'554,506,,17,1038,338,338,,224,224,224,224,17,587,709,711,713,,,,,,834', -'295,,,854,508,295,,761,,684,761,1020,934,313,117,313,489,735,,684,833', -',835,,990,494,601,281,,,583,777,,812,,16,281,782,,634,,16,6,649,135', -',130,,627,,810,,,,,,,133,,,498,498,670,,640,,,641,,16,,626,,646,673', -'17,224,224,224,684,991,,224,224,224,224,224,224,667,668,420,427,436', -'279,543,,,,866,17,,,656,,677,864,865,,442,,680,,,,9,824,,,524,,,657', -'640,,,641,524,935,,657,657,554,639,224,,,,,645,224,,298,224,,821,1030', -',16,,,,,,810,420,,16,279,427,436,17,,17,,,,304,17,427,436,,692,,313', -',,,859,,933,,313,,304,,,,,,,662,,17,,224,,801,948,,801,949,,801,,801', -',,224,224,,,,,936,,,,676,,,595,,595,,420,973,,279,427,436,,,966,,,,', -'684,,751,,,16,757,791,,,,,,,,729,729,981,,806,669,,,,,,,,,16,135,748', -'130,17,766,914,916,634,918,920,,921,799,133,,524,805,,,1021,815,,828', -',823,,814,,,697,,,1047,,634,657,,1025,,801,498,801,415,801,,801,,410', -'845,,,224,554,,,640,799,,641,868,16,646,16,,817,822,,16,,,313,298,,', -',1023,1024,,,,,313,853,,,869,,,634,801,,,16,,773,775,817,855,817,,778', -'780,,,441,,17,,,,,,,304,338,224,,420,436,427,279,304,,,,,,,772,224,130', -',,,298,,,,,298,,,,498,792,,1012,1013,1014,1015,,799,,,862,911,,,,867', -',,,,886,886,886,,,922,16,1031,,,,,17,,,17,,,,,,224,,904,,830,,908,830', -'313,941,,,224,,,944,224,,791,,928,791,,791,1048,,,634,,,,,29,937,,,', -'338,29,,,,877,,,,,,684,,338,224,224,29,,,,224,224,,,224,29,29,29,,29', -',,,,,,,729,,,,,,,,938,,,,,,16,,,,304,,,,29,29,,,29,,313,304,,,,,,,,', -'793,,313,17,17,,,,,,1001,,,791,,791,,791,,791,,886,886,886,886,,886', -',,,,,29,,,,436,29,29,29,29,29,224,,988,,16,1008,224,16,,836,,838,17', -'17,,,,817,,17,18,791,,,,,18,,830,,224,792,,,792,,792,,,420,,,279,427', -'436,634,,,,,817,,,,18,306,306,886,886,886,886,896,,,17,887,889,891,17', -'17,,,,,,,725,,17,727,,886,,,,29,29,29,29,350,,,29,29,29,29,29,29,,,', -',,,,,,,224,29,17,17,,,,,,,,,17,224,,,,,,,16,16,,,18,,,,,,792,,792,18', -'792,29,792,,,,,29,,,29,,,958,,,,17,,,,17,,,,969,,,29,,29,,,,,29,,16', -'16,,,,,,16,950,792,952,,,,17,,,,,,,825,826,29,42,29,,,,,42,,,974,,975', -',976,29,29,993,995,997,999,,1000,,17,18,,,,16,,,,16,16,42,303,303,,17', -',,,16,17,,,17,17,18,,,,,,,875,,,,,,,,,224,,,,,347,,,369,,16,16,,29,', -',,,,,16,,,,1026,,1027,,1028,,1043,1044,1045,1046,,,898,,,,900,901,,1036', -',18,,18,42,,905,306,18,,1050,,,42,,16,,29,,16,,,,,306,,,,,,1049,,,18', -',,,,930,931,,,,,,,,,,16,,,,,,,,,,,,596,,596,,,,,,,,,29,,,,,,,,,29,16', -'41,,,,962,,41,,965,,,,29,,16,,42,,,16,,,16,16,,,,,18,,,,,,41,302,302', -',985,,42,,,,,,,,,,,,,,,,,,,29,,,29,,,,,,29,346,,1006,368,,,,,,,,29,', -',,29,,1018,,,,,1022,,,,,,,,,,42,,42,,,,303,42,,,,41,,,,,,,29,29,41,', -',303,29,29,,,29,,18,,42,,,,,306,,,,,,,,306,,,,,,,,,,,,,,,369,,369,,', -',,,,,,,,,,,,,,,,,29,29,,,,,19,,,,,,19,,,,,,18,,,18,,,41,,,,42,,,,,,', -',,,,29,19,,,,,29,,,41,,,29,29,,,,,,29,,,,,,,,,,,29,,,,,,352,,,,,,,,', -',,,,,,,,,,,,,,,,,,,29,,,,29,29,41,,41,,,,302,41,29,19,306,,,,,,,,19', -',,306,42,302,,,,,,303,,,41,18,18,,,303,29,,29,29,,,,,,,,,29,29,,,,,', -'413,,,368,,368,,444,,,,561,,,,,,,,,,,,,,,,18,18,,,,29,874,18,42,29,', -'42,,,,,,,,,19,,,,,,41,,440,,,,,,,,,,,29,,,,,19,,501,,503,596,,505,18', -',,,18,18,,,,,,,,,18,,,,,,29,,,,,,,,,,,,,,,29,,,,,29,,,29,29,544,18,18', -',,,,,19,,19,18,303,,,19,29,,,,,,,303,,,,,,,,,41,,,42,42,,,302,19,,,', -',,596,302,,,18,,,,18,,,,971,,,,,,,,,,,,,,,,,,,,,,630,,,,18,,42,42,,', -',,,42,,,561,,,,,,41,,,41,,,,,,,715,,,,,18,19,,,,,,,,,,,,,,18,,,369,', -'18,42,,18,18,42,42,,,,,,,561,,42,,,,,,,,,,,671,,,544,,674,,675,,,,,', -',,,,,,,,42,42,,,,,,,,,42,,,,,,,,671,302,,544,,,,800,,,,,302,,,,,,,19', -',,,,41,41,,369,,721,,42,,,,42,,,,968,,,,,,,,,,,,,,,,,561,,561,,,,,,715', -'42,,843,,,,,,,,41,41,,,,,,41,,,,,,,19,,,19,,,767,,,42,671,544,,561,', -',,,,,,,,,42,,,,,42,,,42,42,,368,,,41,,,,41,41,,,,811,,,,,41,,,,,,,,', -',,,,,,,,819,440,,,,,,,,,,,,,,41,41,,,,840,,,,,41,,,,,,,715,,715,,,,', -',444,,,,,,,,,,,,,,,19,19,,,,368,,,,41,,,,41,,,,967,,876,800,,231,800', -',,,,,,,278,278,278,,,,,,,,,,41,322,323,324,,561,,,19,19,,,,,,19,977', -'715,278,,,,,,,,,,,,,,,41,561,,,,,,,,,,,,,,41,,,,,41,,,41,41,,,19,,,', -'19,19,,,,,715,,715,,19,,,,,,,,,,800,,,544,,,,,,,,,,,,,,,,,,,19,19,715', -',,,,,,,19,,,,,,,,,,,,,,,,,,,,,,,,984,,,,,,,,,,,,,,,19,,,,19,,,,972,', -',278,418,278,,,,438,443,,,,,,,,,,,,,,,231,19,,457,458,459,460,461,462', -'463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479', -'480,481,482,,,,,,19,278,,,,,,278,,,278,,,,,19,,278,,278,19,,278,19,19', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,529,,,,,,,,,278,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,438,655,418,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,278,,,278,,278,,278,,,,,,,,,,,,278,,,,,,,,,690', -'691,,,,,,,,,,278,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,', -',,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,769,,,278,278', -'774,776,,,,,779,781,,,655,783,,,,,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,', -',,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,278,,,,,,,,', -',,,278,,,,,,,,,,,,,,,,,,,,,,278,,878,,,,,,,,,,,,,,774,776,781,779,,881', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,278,878,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,278' ] - racc_goto_table = arr = ::Array.new(3255, nil) +'6,290,233,129,382,350,229,448,331,331,29,277,4,660,279,604,29,455,461', +'596,599,296,296,296,715,295,295,295,125,344,543,29,408,317,147,147,357', +'358,696,553,29,29,29,331,29,508,9,137,221,145,145,780,9,445,142,142', +'353,353,466,566,353,519,432,433,573,126,504,338,513,129,29,841,732,733', +'862,29,29,874,880,29,281,288,291,354,355,313,855,359,297,297,297,315', +'236,390,360,392,394,397,334,402,405,392,747,502,865,439,346,627,439', +'687,951,634,771,439,638,637,918,999,142,1025,353,353,353,353,349,293', +'305,306,826,130,954,736,738,740,29,618,370,620,470,29,29,29,29,29,1001', +'391,142,414,415,416,417,406,890,619,721,724,892,1015,372,728,779,621', +'967,783,970,881,693,920,755,693,9,421,428,922,369,220,998,564,851,418', +'921,696,352,729,698,930,511,512,831,683,1047,762,847,932,1025,388,515', +'389,393,396,456,1,840,640,399,401,404,899,785,786,407,1008,431,431,443', +'444,519,1070,891,530,649,295,468,469,472,136,449,860,419,701,29,29,29', +'29,29,29,29,710,857,1019,29,29,29,696,1001,820,625,412,685,951,2,555', +'386,680,29,559,510,560,760,342,455,461,351,651,869,1045,686,1021,836', +'367,888,296,730,465,775,295,929,573,983,278,383,296,295,622,829,295', +'862,449,345,331,29,347,427,438,518,518,438,29,554,348,29,438,1072,290', +',129,331,540,865,537,,693,693,,862,703,,,29,,,,29,316,,706,547,29,884', +',526,544,,,,706,1048,557,297,689,,331,,331,1031,353,556,561,297,,,608', +',29,528,788,541,129,638,789,,940,908,313,29,29,29,527,313,529,,1073', +'600,674,535,509,,,533,861,,863,603,,,514,763,,,,,,,,,835,706,641,862', +',1017,,,,558,562,,,,,,,,,,,,690,691,973,974,942,944,657,946,948,668', +'949,661,696,810,,673,699,,797,815,,,702,,,,456,147,455,461,935,,518', +'518,,,667,962,,833,650,720,145,,,,,142,,,295,919,,,,449,893,894,668', +'446,,,,681,467,29,,,,,,895,896,806,808,,573,573,,811,813,,,,,667,,1064', +'331,666,788,456,426,,,672,331,,,465,,456,,,,,1052,,,,,,295,544,,,316', +'449,29,439,,544,,714,,,,29,439,439,937,960,,,439,439,889,,684,848,,', +'29,693,706,,1040,1041,1042,1043,,,833,,,,692,,,,,768,456,,465,,,963', +'1002,,,,,,465,,,,,,989,756,,295,316,856,,29,449,316,29,778,,,,,,784', +'29,777,,839,1022,,1010,1023,,,828,,29,456,909,1080,,1081,29,,,,,,,,', +',,601,602,,6,,295,,873,465,,449,,,29,,793,661,,,29,29,,,1049,,,827,331', +'29,29,147,,,668,29,29,673,822,331,661,439,,,794,898,145,518,,,9,142', +'915,544,1076,,,,465,,,667,,431,837,,1050,854,1051,897,845,,849,,,805', +',,,,,438,467,32,446,,,,,32,438,438,,,,,438,438,,,661,456,,,32,,,878', +'883,878,,,,32,32,32,939,32,,,,,,,295,,,718,,449,950,,,29,661,850,,,', +'29,,,,32,29,29,,,32,32,,29,32,,,,968,,,,518,854,,,,,,,29,1065,,,465', +',,758,759,,761,706,,,,142,,,822,,,,,29,,,,,,,,,1018,,934,915,,,915,32', +'915,29,,,32,32,32,32,32,29,29,,,,,353,,,661,,,438,858,,,858,,,,353,', +',752,,29,754,29,,,965,,,956,969,331,,,29,29,,,854,864,331,866,,964,', +',,,,807,809,976,976,976,,812,814,,,,915,,915,,915,,915,,,,,,,29,29,', +',,,,,,32,32,32,32,32,32,32,915,,331,32,32,32,,,838,1014,,,,916,,29,', +'32,,,,,,,882,1037,1034,,,,,,,845,,,,917,,,,,,,29,,924,,,,,,456,32,,', +',878,,,32,,,32,,29,976,976,976,976,29,976,29,295,,,,,449,,,32,,,,32', +',,29,,32,878,661,,,,,,,910,,,885,,,19,,,,,,19,807,809,814,812,32,,,465', +'904,976,976,976,976,465,237,32,32,32,,,976,,,237,237,237,955,19,322', +'322,,,958,,,,,961,,,,,1003,,1004,966,1005,,927,858,,,916,19,,916,,916', +'237,237,,,237,364,,,931,,,,,,,,936,,,,,1024,,1026,924,,,924,,,924,,924', +',,,,,910,,,,,957,,,,,,,,,,,,,,1013,,19,,1016,,,237,237,237,237,19,,', +',916,,916,32,916,,916,,,42,1071,,,,,42,,,,,,987,988,,1077,,1078,,1079', +'916,,,,924,,924,,924,,924,,,,42,321,321,,,,,,,1012,1087,,,32,,,,,,924', +',,32,,,,42,,580,1074,1075,,,,,,363,32,1032,385,19,237,436,237,237,436', +'237,,,,436,237,237,,,,,,,1046,977,979,981,,19,,,,,,,,,,,,,,,,,,32,,', +'32,,,,,42,,,32,,,,,,42,237,,,,,32,,237,,,237,32,,,,,,,,,,,,,,,,,19,', +',,19,,,32,322,19,,,,32,32,,,,,,,,32,32,,322,,,32,32,,,,,,19,1054,1056', +'1058,1060,,1061,,,,,237,19,19,,,,,,,,,,42,,616,,616,,,,,,,,,,,,,,,,', +',,16,42,,,,,16,,,,1083,1084,1085,1086,,,,,,,,1088,,,,,,,,,,,580,,16', +',,,,,,,,,,32,,,742,,,32,,,,,32,32,,,16,,,32,,42,,,,42,368,,,321,42,', +',,,,32,,,237,,,,,,,321,,,,,,,,,,42,,,32,,,,,,,,,42,42,41,,,,,,41,32', +',,16,385,,385,,32,32,,,16,,,19,,,,,,,322,,237,,,41,320,320,322,,,32', +',32,,,,237,,,,,,,32,32,,,,,,41,,,,,,,,,,362,,,384,,,,,,,,,,,,,,,580', +',580,19,32,32,19,,742,,,871,,,237,,,,16,,434,,,434,,,237,,434,,,,237', +',,32,41,,,,,,16,,,41,580,580,,,,,,,,,19,,,,,,436,237,32,,,,,,,436,436', +',,,,436,436,,42,,,,,32,,321,,923,32,,32,,,321,,,,,,,,,,,16,322,32,,16', +',,,,16,,,322,,,,,,,,,,,,,,41,,,742,,742,,,,16,,,,,,,,42,,,42,16,16,', +'41,,,,,,,,,,,,,,,,,,,19,,,,18,,237,,,,18,19,19,,,,,,19,,,,,,,,,42,,', +',580,,,,436,,,18,,,,1006,742,,41,,,,41,,,,320,41,,,,19,,,,,,18,923,', +',923,,320,,,,,,19,,321,,41,,,,19,19,,,,321,,,41,41,,,,742,,742,,,,,', +'384,,384,,237,,19,,,,,,,,,,,19,237,,,,,18,,,,,,742,,,18,,,,,,923,,,42', +',16,,,,,,,,985,42,42,,,19,19,,42,992,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,', +',,,,,,,,,42,,,,,,,,,,,,1028,16,,,16,19,42,,18,,18,,,18,42,42,,,18,,', +',,,,,19,,,,,19,18,19,,,,,,,,42,,,,,41,,,237,,,42,320,16,,,,,,434,320', +',,,,,,,434,434,,,,,434,434,,,,,,,,,,385,,,,,42,42,,,991,18,,,,18,,,', +',18,,,,,,,,,,41,,,41,,,,42,,,,,,,,20,18,,,,,20,,,,,,,18,18,,385,,,,', +'42,,,,,,,,,,,,,20,324,324,,41,,429,442,42,16,,,,42,,42,,,,,16,16,,,', +',20,16,,,,,,,,,366,,,,,,,,434,,,,,,,,,,,320,,,,,,,,,,,320,16,,,,,,,', +',,,,,,,521,,523,16,524,525,,,20,,,16,16,,,,,20,,,,,,,,,,,,,,,,,,,,,16', +',,41,,,,,,,,16,563,,41,41,,,,,,41,,,,,,,,18,,,,,,,,,,,,,,,,,,,,,16,16', +',,995,,,,,,,41,,,,,20,,437,,,437,,,,,437,,,41,,16,,,,,,41,41,,20,,,653', +',,,,18,,,18,,,,,,,,,16,,,,41,,,,,,,,,,,41,,,,,,16,,,,,16,,16,,,,,,,', +',,,,,18,,,20,,,18,20,384,,,324,20,41,41,18,18,990,,,,18,18,,,,,,324', +'694,,,563,,697,,,,20,,,,,,41,,,,,,20,20,,,,,,,,,,,,617,,617,,,384,,', +',,41,,,,,,,,,,,,,,,,,,,,,41,,748,,,41,,41,,,,,,,,,,,,,,,,,,18,,,,,,', +',,,,18,18,,,,,,18,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,795,,,,,,,,694,563,', +'18,,,,,,,,,,,,,,,,,,18,,,,,,,,18,18,,,834,,,,,,,,,,,,,20,,,,,,,324,', +'846,18,,,,694,324,,563,,,,18,,,,,,,,,,,,868,,,,,,,,,,,,,,,,,,,,,442', +',,,,,18,18,,,,,,,,20,,,20,,,,,,,,,,,,,,,,907,,,18,,,,,,,,,,,244,,,,', +',,,,294,294,294,,,,,,,18,,20,,340,341,,343,437,,,,,,,,,437,437,,,18', +',437,437,,18,,18,,,,,,,,,,,,,,,,,,,,,,,,,324,,,,,,,,,,,324,,,,,,,,,', +',,,,,,,,,563,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,1011,20', +'20,,,,,903,20,,,,,,,,,,,,,,,,,437,,,,,,,,,,,,,,,,,,,,,,,20,,,294,441', +',,447,294,,,,447,,,,,,20,,,,,,,244,20,20,479,480,481,482,483,484,485', +'486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,,,,20,501', +',,,,,,,294,,20,,,,,294,,,294,,,,,,,294,,294,,294,294,,,,,,,,,,,,,,617', +',,,,20,20,,,994,,,,,,,,,,,,,,,549,,550,,,,294,294,,,,,20,,,,,,,,,,,', +',,,,,,,,,,,,617,,,,,20,,,,,,,,,,,,,,,,,,,,,20,,,,,20,,20,,,,,,,,,,,', +',,,,,,,294,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,294,,447,447,447', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,294,,,294,,294,,,,,,,,,,,,,,294', +',,,,,,,,,713,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,294,,,,,,,,,,,,,,', +',,,,,,,,294,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,294,447,294', +',,802,,,294,294,447,447,,,,,447,447,,,,,,,,,,,,,,,,,,,,,,,,294,,,,,', +',,,,,,,,,,,447,,,,,294,,,,,294,,,294,,,,,,,,,,,,,,,,294,,,,,,,,,,,,', +',,,,,,,,294,,,,,,,,,,,,294,,,,,,,,,,,,,,,,,,,,,,294,,,,,,,447,,,,,,', +',,,,,,447,447,447,447,,913,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,294,447,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,294,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,294' ] + racc_goto_table = arr = ::Array.new(3808, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2157,89 +2176,102 @@ end clist = [ -'6,53,34,25,60,95,155,71,71,71,65,65,61,61,17,17,51,89,42,27,30,60,76', -'64,64,92,92,30,34,2,13,74,55,36,36,36,98,71,20,10,77,154,99,77,139,139', -'39,26,93,8,19,19,5,50,19,199,68,68,54,67,6,58,144,194,25,40,40,32,32', -'189,134,32,9,132,185,61,195,7,9,14,150,6,135,6,6,6,6,6,6,6,68,147,61', -'149,199,41,41,41,94,94,49,98,172,19,19,19,19,22,172,72,72,175,108,14', -'175,40,59,5,59,109,32,32,32,32,110,111,176,112,113,43,176,114,115,176', -'116,147,176,43,43,117,118,48,48,48,119,120,106,105,104,103,136,102,73', -'73,73,101,100,97,142,96,91,88,87,135,76,148,75,70,151,152,153,66,156', -'157,160,161,51,162,77,77,195,163,73,7,9,71,164,165,150,166,167,199,71', -'9,170,171,46,173,174,1,45,149,177,178,179,180,181,182,183,184,6,132', -'58,36,74,61,135,33,31,32,32,32,32,188,134,21,27,18,24,55,147,51,191', -'192,24,15,11,55,198,107,3,,71,25,95,,189,,,24,154,71,51,,135,,,,24,24', -'24,,24,24,24,,194,34,36,,74,6,,,36,,,36,6,6,189,53,26,185,,,139,139', -'144,34,,,24,24,22,22,24,24,,,22,22,40,40,,,27,25,,26,43,,,50,,74,,,50', -'68,54,72,98,27,139,19,19,,,32,67,145,6,190,,8,68,185,5,,24,93,32,32', -',24,24,24,24,24,27,187,187,187,,,,,,189,49,,,26,9,49,,176,,40,176,14', -'94,68,98,68,48,25,,40,145,,145,,99,48,39,73,,,5,42,,55,,23,73,42,,34', -',23,6,51,65,,61,,17,,76,,,,,,,64,,,6,6,77,,6,,,74,,23,,2,,74,199,24', -'24,24,24,40,139,,24,24,24,24,24,24,51,51,6,74,61,36,73,,,,154,24,,,34', -',51,10,10,,20,,51,,,,9,72,,,53,,,6,6,,,74,53,26,,6,6,185,41,24,,,,,41', -'24,,12,24,,30,13,,23,,,,,,76,6,,23,36,74,61,24,,24,,,,24,24,74,61,,32', -',68,,,,25,,92,,68,,24,,,,,,,41,,24,,24,,190,145,,190,145,,190,,190,', -',24,24,,,,,10,,,,9,,,24,,24,,6,145,,36,74,61,,,92,,,,,40,,32,,,23,32', -'138,,,,,,,,98,98,92,,89,73,,,,,,,,,23,65,98,61,24,17,187,187,34,187', -'187,,187,34,64,,53,155,,,95,51,,138,,51,,53,,,73,,,26,,34,6,,145,,190', -'6,190,71,190,,190,,12,51,,,24,185,,,6,34,,74,60,23,74,23,,6,6,,23,,', -'68,12,,,,10,10,,,,,68,71,,,51,,,34,190,,,23,,22,22,6,19,6,,22,22,,,22', -',24,,,,,,,24,32,24,,6,61,74,36,24,,,,,,,73,24,61,,,,12,,,,,12,,,,6,140', -',187,187,187,187,,34,,,98,51,,,,98,,,,,6,6,6,,,51,23,25,,,,,24,,,24', -',,,,,24,,6,,140,,6,140,68,51,,,24,,,138,24,,138,,19,138,,138,187,,,34', -',,,,44,19,,,,32,44,,,,22,,,,,,40,,32,24,24,44,,,,24,24,,,24,44,44,44', -',44,,,,,,,,98,,,,,,,,98,,,,,,23,,,,24,,,,44,44,,,44,,68,24,,,,,,,,,143', -',68,24,24,,,,,,34,,,138,,138,,138,,138,,6,6,6,6,,6,,,,,,44,,,,61,44', -'44,44,44,44,24,,98,,23,27,24,23,,143,,143,24,24,,,,6,,24,28,138,,,,', -'28,,140,,24,140,,,140,,140,,,6,,,36,74,61,34,,,,,6,,,,28,28,28,6,6,6', -'6,24,,,24,141,141,141,24,24,,,,,,,12,,24,12,,6,,,,44,44,44,44,28,,,44', -'44,44,44,44,44,,,,,,,,,,,24,44,24,24,,,,,,,,,24,24,,,,,,,23,23,,,28', -',,,,,140,,140,28,140,44,140,,,,,44,,,44,,,24,,,,24,,,,24,,,,24,,,44', -',44,,,,,44,,23,23,,,,,,23,143,140,143,,,,24,,,,,,,12,12,44,57,44,,,', -',57,,,143,,143,,143,44,44,141,141,141,141,,141,,24,28,,,,23,,,,23,23', -'57,57,57,,24,,,,23,24,,,24,24,28,,,,,,,12,,,,,,,,,24,,,,,57,,,57,,23', -'23,,44,,,,,,,23,,,,143,,143,,143,,141,141,141,141,,,12,,,,12,12,,143', -',28,,28,57,,12,28,28,,141,,,57,,23,,44,,23,,,,,28,,,,,,143,,,28,,,,', -'12,12,,,,,,,,,,23,,,,,,,,,,,,28,,28,,,,,,,,,44,,,,,,,,,44,23,56,,,,12', -',56,,12,,,,44,,23,,57,,,23,,,23,23,,,,,28,,,,,,56,56,56,,12,,57,,,,', -',,,,,,,,,,,,,,44,,,44,,,,,,44,56,,12,56,,,,,,,,44,,,,44,,12,,,,,12,', -',,,,,,,,57,,57,,,,57,57,,,,56,,,,,,,44,44,56,,,57,44,44,,,44,,28,,57', -',,,,28,,,,,,,,28,,,,,,,,,,,,,,,57,,57,,,,,,,,,,,,,,,,,,,,44,44,,,,,29', -',,,,,29,,,,,,28,,,28,,,56,,,,57,,,,,,,,,,,44,29,,,,,44,,,56,,,44,44', -',,,,,44,,,,,,,,,,,44,,,,,,29,,,,,,,,,,,,,,,,,,,,,,,,,,,,44,,,,44,44', -'56,,56,,,,56,56,44,29,28,,,,,,,,29,,,28,57,56,,,,,,57,,,56,28,28,,,57', -'44,,44,44,,,,,,,,,44,44,,,,,,69,,,56,,56,,69,,,,133,,,,,,,,,,,,,,,,28', -'28,,,,44,28,28,57,44,,57,,,,,,,,,29,,,,,,56,,29,,,,,,,,,,,44,,,,,29', -',69,,69,28,,69,28,,,,28,28,,,,,,,,,28,,,,,,44,,,,,,,,,,,,,,,44,,,,,44', -',,44,44,69,28,28,,,,,,29,,29,28,57,,,29,44,,,,,,,57,,,,,,,,,56,,,57', -'57,,,56,29,,,,,,28,56,,,28,,,,28,,,,28,,,,,,,,,,,,,,,,,,,,,,69,,,,28', -',57,57,,,,,,57,,,133,,,,,,56,,,56,,,,,,,133,,,,,28,29,,,,,,,,,,,,,,28', -',,57,,28,57,,28,28,57,57,,,,,,,133,,57,,,,,,,,,,,69,,,69,,69,,69,,,', -',,,,,,,,,,57,57,,,,,,,,,57,,,,,,,,69,56,,69,,,,133,,,,,56,,,,,,,29,', -',,,56,56,,57,,69,,57,,,,57,,,,57,,,,,,,,,,,,,,,,,133,,133,,,,,,133,57', -',133,,,,,,,,56,56,,,,,,56,,,,,,,29,,,29,,,69,,,57,69,69,,133,,,,,,,', -',,,57,,,,,57,,,57,57,,56,,,56,,,,56,56,,,,69,,,,,56,,,,,,,,,,,,,,,,', -'69,29,,,,,,,,,,,,,,56,56,,,,69,,,,,56,,,,,,,133,,133,,,,,,69,,,,,,,', -',,,,,,,29,29,,,,56,,,,56,,,,56,,,,56,,69,133,,35,133,,,,,,,,35,35,35', -',,,,,,,,,56,35,35,35,,133,,,29,29,,,,,,29,133,133,35,,,,,,,,,,,,,,,56', -'133,,,,,,,,,,,,,,56,,,,,56,,,56,56,,,29,,,,29,29,,,,,133,,133,,29,,', -',,,,,,,133,,,69,,,,,,,,,,,,,,,,,,,29,29,133,,,,,,,,29,,,,,,,,,,,,,,', -',,,,,,,,,69,,,,,,,,,,,,,,,29,,,,29,,,,29,,,35,35,35,,,,35,35,,,,,,,', -',,,,,,,35,29,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', -'35,35,35,35,35,35,35,35,,,,,,29,35,,,,,,35,,,35,,,,,29,,35,,35,29,,35', -'29,29,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,35,35,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,35,,,,,,,,,,,,35,,,,,,,,,35,35,,', -',,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,35,35,35,35,,,,,35', -'35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,', -',,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,', -',,,,35,,35,,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] - racc_goto_check = arr = ::Array.new(3255, nil) +'6,87,39,120,69,104,37,35,79,79,53,173,2,36,37,115,53,49,49,108,108,84', +'84,84,15,45,45,45,5,39,64,53,69,62,74,74,41,41,220,12,53,53,53,79,53', +'51,9,21,21,73,73,123,9,32,70,70,30,30,32,172,30,89,28,28,205,8,49,77', +'35,120,53,17,155,155,210,53,53,109,111,53,50,50,50,23,23,58,164,23,86', +'86,86,59,26,6,5,6,6,6,63,6,6,6,150,174,215,24,9,195,24,52,148,195,67', +'24,195,194,160,166,70,216,30,30,30,30,130,57,57,57,162,7,151,208,208', +'208,53,68,131,68,60,53,53,53,53,53,167,191,70,23,23,23,23,191,132,133', +'85,85,134,135,136,85,137,138,139,140,141,44,90,152,42,90,9,31,29,158', +'25,22,165,168,169,9,164,220,170,171,20,18,177,178,180,182,183,184,185', +'186,216,189,60,190,192,193,87,1,16,196,197,198,199,200,201,202,203,151', +'84,84,30,30,89,166,204,60,13,45,30,30,37,11,6,209,10,64,53,53,53,53', +'53,53,53,64,212,213,53,53,53,220,167,36,219,7,88,148,3,60,100,35,53', +'83,87,103,115,80,49,49,106,75,150,151,54,160,36,117,67,84,172,70,119', +'45,162,205,164,48,124,84,45,125,52,45,210,6,126,79,53,127,26,26,6,6', +'26,53,128,129,53,26,151,87,,120,79,39,215,37,,90,90,,210,35,,,53,,,', +'53,14,,49,37,53,36,,5,62,,,,49,111,84,86,174,,79,,79,17,30,6,6,86,,', +'37,,53,9,195,77,120,195,194,,155,36,58,53,53,53,8,58,59,,109,23,60,59', +'57,,,63,161,,161,5,,,57,35,,,,,,,,,64,49,6,210,,123,,,,86,86,,,,,,,', +',,,,60,60,155,155,208,208,37,208,208,87,208,39,220,51,,87,60,,35,51', +',,60,,,,87,74,49,49,85,,6,6,,,6,36,,89,21,60,73,,,,,70,,,45,161,,,,6', +'12,12,87,76,,,,39,76,53,,,,,,172,172,32,32,,205,205,,32,32,,,,,6,,15', +'79,50,195,87,14,,,50,79,,,70,,87,,,,,155,,,,,,45,62,,,14,6,53,24,,62', +',30,,,,53,24,24,12,108,,,24,24,35,,50,28,,,53,90,49,,208,208,208,208', +',,89,,,,86,,,,,41,87,,70,,,12,161,,,,,,70,,,,,,108,120,,45,14,154,,53', +'6,14,53,30,,,,,,30,53,6,,60,161,,108,161,,,104,,53,87,32,36,,208,53', +',,,,,,,,,,14,14,,6,,45,,60,70,,6,,,53,,2,39,,,53,53,,,115,,,173,79,53', +'53,74,,,87,53,53,87,6,79,39,24,,,21,60,73,6,,,9,70,154,62,161,,,,70', +',,6,,84,62,,12,39,12,69,6,,6,,,86,,,,,,26,76,56,76,,,,,56,26,26,,,,', +'26,26,,,39,87,,,56,,,6,84,6,,,,56,56,56,60,56,,,,,,,45,,,102,,6,60,', +',53,39,86,,,,53,,,,56,53,53,,,56,56,,53,56,,,,60,,,,6,39,,,,,,,53,35', +',,70,,,102,102,,102,49,,,,70,,,6,,,,,53,,,,,,,,,154,,6,154,,,154,56', +'154,53,,,56,56,56,56,56,53,53,,,,,30,,,39,,,26,156,,,156,,,,30,,,14', +',53,14,53,,,120,,,23,120,79,,,53,53,,,39,159,79,159,,23,,,,,,76,76,6', +'6,6,,76,76,,,,154,,154,,154,,154,,,,,,,53,53,,,,,,,,56,56,56,56,56,56', +'56,154,,79,56,56,56,,,76,120,,,,156,,53,,56,,,,,,,102,39,37,,,,,,,6', +',,,159,,,,,,,53,,211,,,,,,87,56,,,,6,,,56,,,56,,53,6,6,6,6,53,6,53,45', +',,,,6,,,56,,,,56,,,53,,56,6,39,,,,,,,76,,,14,,,34,,,,,,34,76,76,76,76', +'56,,,70,14,6,6,6,6,70,34,56,56,56,,,6,,,34,34,34,102,34,34,34,,,102', +',,,,102,,,,,159,,159,102,159,,14,156,,,156,34,,156,,156,34,34,,,34,34', +',,14,,,,,,,,14,,,,,159,,159,211,,,211,,,211,,211,,,,,,76,,,,,14,,,,', +',,,,,,,,,102,,34,,102,,,34,34,34,34,34,,,,156,,156,56,156,,156,,,66', +'159,,,,,66,,,,,,14,14,,159,,159,,159,156,,,,211,,211,,211,,211,,,,66', +'66,66,,,,,,,14,159,,,56,,,,,,211,,,56,,,,66,,149,102,102,,,,,,66,56', +'14,66,34,34,34,34,34,34,34,,,,34,34,34,,,,,,,14,157,157,157,,34,,,,', +',,,,,,,,,,,,,56,,,56,,,,,66,,,56,,,,,,66,34,,,,,56,,34,,,34,56,,,,,', +',,,,,,,,,,,34,,,,34,,,56,34,34,,,,56,56,,,,,,,,56,56,,34,,,56,56,,,', +',,34,157,157,157,157,,157,,,,,34,34,34,,,,,,,,,,66,,34,,34,,,,,,,,,', +',,,,,,,,,27,66,,,,,27,,,,157,157,157,157,,,,,,,,157,,,,,,,,,,,149,,27', +',,,,,,,,,,56,,,149,,,56,,,,,56,56,,,27,,,56,,66,,,,66,27,,,66,66,,,', +',,56,,,34,,,,,,,66,,,,,,,,,,66,,,56,,,,,,,,,66,66,65,,,,,,65,56,,,27', +'66,,66,,56,56,,,27,,,34,,,,,,,34,,34,,,65,65,65,34,,,56,,56,,,,34,,', +',,,,56,56,,,,,,65,,,,,,,,,,65,,,65,,,,,,,,,,,,,,,149,,149,34,56,56,34', +',149,,,149,,,34,,,,27,,27,,,27,,,34,,27,,,,34,,,56,65,,,,,,27,,,65,149', +'149,,,,,,,,,34,,,,,,34,34,56,,,,,,,34,34,,,,,34,34,,66,,,,,56,,66,,149', +'56,,56,,,66,,,,,,,,,,,27,34,56,,27,,,,,27,,,34,,,,,,,,,,,,,,65,,,149', +',149,,,,27,,,,,,,,66,,,66,27,27,,65,,,,,,,,,,,,,,,,,,,34,,,,33,,34,', +',,33,34,34,,,,,,34,,,,,,,,,66,,,,149,,,,34,,,33,,,,149,149,,65,,,,65', +',,,65,65,,,,34,,,,,,33,149,,,149,,65,,,,,,34,,66,,65,,,,34,34,,,,66', +',,65,65,,,,149,,149,,,,,,65,,65,,34,,34,,,,,,,,,,,34,34,,,,,33,,,,,', +'149,,,33,,,,,,149,,,66,,27,,,,,,,,34,66,66,,,34,34,,66,34,,,,,,,,,,', +',,,,,,,,,,,,,,,,34,,,,,,,,,,,,66,,,,,,,,,,,,34,27,,,27,34,66,,33,,33', +',,33,66,66,,,33,,,,,,,,34,,,,,34,33,34,,,,,,,,66,,,,,65,,,34,,,66,65', +'27,,,,,,27,65,,,,,,,,27,27,,,,,27,27,,,,,,,,,,66,,,,,66,66,,,66,33,', +',,33,,,,,33,,,,,,,,,,65,,,65,,,,66,,,,,,,,38,33,,,,,38,,,,,,,33,33,', +'66,,,,,66,,,,,,,,,,,,,38,38,38,,65,,82,82,66,27,,,,66,,66,,,,,27,27', +',,,,38,27,,,,,,,,,38,,,,,,,,27,,,,,,,,,,,65,,,,,,,,,,,65,27,,,,,,,,', +',,,,,,82,,82,27,82,82,,,38,,,27,27,,,,,38,,,,,,,,,,,,,,,,,,,,,27,,,65', +',,,,,,,27,82,,65,65,,,,,,65,,,,,,,,33,,,,,,,,,,,,,,,,,,,,,27,27,,,27', +',,,,,,65,,,,,38,,38,,,38,,,,,38,,,65,,27,,,,,,65,65,,38,,,82,,,,,33', +',,33,,,,,,,,,27,,,,65,,,,,,,,,,,65,,,,,,27,,,,,27,,27,,,,,,,,,,,,,33', +',,38,,,33,38,65,,,38,38,65,65,33,33,65,,,,33,33,,,,,,38,82,,,82,,82', +',,,38,,,,,,65,,,,,,38,38,,,,,,,,,,,,38,,38,,,65,,,,,65,,,,,,,,,,,,,', +',,,,,,,65,,82,,,65,,65,,,,,,,,,,,,,,,,,,33,,,,,,,,,,,33,33,,,,,,33,', +',,,,,,,,,,,,,,,33,,,,,,,,,,,,82,,,,,,,,82,82,,33,,,,,,,,,,,,,,,,,,33', +',,,,,,,33,33,,,82,,,,,,,,,,,,,38,,,,,,,38,,82,33,,,,82,38,,82,,,,33', +',,,,,,,,,,,82,,,,,,,,,,,,,,,,,,,,,82,,,,,,33,33,,,,,,,,38,,,38,,,,,', +',,,,,,,,,,82,,,33,,,,,,,,,,,40,,,,,,,,,40,40,40,,,,,,,33,,38,,40,40', +',40,38,,,,,,,,,38,38,,,33,,38,38,,33,,33,,,,,,,,,,,,,,,,,,,,,,,,,38', +',,,,,,,,,,38,,,,,,,,,,,,,,,,,,,82,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,38,,,,,,,,,,82,38,38,,,,,38,38,,,,,,,,,,,,,,,,,38,,,,,,,,,,,,,,,', +',,,,,,,38,,,40,40,,,40,40,,,,40,,,,,,38,,,,,,,40,38,38,40,40,40,40,40', +'40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,,,,38,40,,,,,,,,40', +',38,,,,,40,,,40,,,,,,,40,,40,,40,40,,,,,,,,,,,,,,38,,,,,38,38,,,38,', +',,,,,,,,,,,,,40,,40,,,,40,40,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,38,,,,,38', +',,,,,,,,,,,,,,,,,,,,38,,,,,38,,38,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,40,40,40,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,40,,,40,,40,,,,,,,,,,,,,,40,,,,,,,,,,40,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,40,40,40,,,40,,,40,40,40,40,,,,,40,40,,', +',,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,40,,,,,40,,,,,40,,,40,,,,,,', +',,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,', +',,40,,,,,,,40,,,,,,,,,,,,,40,40,40,40,,40,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,40', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40' ] + racc_goto_check = arr = ::Array.new(3808, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2249,48 +2281,54 @@ end racc_goto_pointer = [ - nil, 199, 27, 240, nil, 47, -2, 69, 44, 70, - -287, 226, 465, -501, -614, -581, nil, 3, 215, -16, - -179, 154, 84, 393, 226, -209, -372, 2, 984, 1547, - -190, 8, 1, 92, -20, 2247, 1, nil, nil, 19, - -148, 66, -248, -354, 842, -287, -611, nil, 109, 64, - 17, -45, nil, -36, 20, -285, 1358, 1167, -532, -238, - -70, 1, nil, nil, 12, -1, -238, 15, 19, 1499, - 105, -25, -222, 120, 1, -318, -259, -457, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 88, -173, -47, - nil, 95, -314, -677, -483, -339, 88, -440, 31, -558, - 82, 95, 90, -384, 85, 79, -582, 170, -619, -471, - -810, 53, -620, -227, -620, -806, 61, -460, -226, -457, - -723, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -769, 1383, -492, -762, -509, nil, -55, -504, - 112, 238, -501, 265, -597, -328, nil, -568, -729, -801, - -814, -169, -376, 105, -296, -19, -89, -488, nil, nil, - -96, -490, -94, -485, -799, -398, -505, -630, nil, nil, - 114, 112, 17, 111, 111, -269, -247, 114, 114, 114, - -553, -400, -400, 117, -540, -263, nil, -200, -485, -639, - -326, -472, -649, nil, -647, -812, nil, nil, -133, -445 ] + nil, 201, 10, 250, nil, 23, -2, 121, 60, 44, + 92, 215, -306, -200, 287, -528, -513, -644, -655, nil, + -343, 36, 163, 16, -119, 102, 69, 1445, -161, -51, + -11, 34, -174, 1826, 1056, -221, -435, -13, 2168, -20, + 2774, -33, -432, nil, -590, -7, nil, nil, 252, -212, + 51, -236, -402, 8, -241, nil, 724, 93, 49, 55, + -96, nil, -4, 60, -305, 1559, 1202, -502, -235, -71, + 43, nil, nil, 38, 23, -162, 249, 23, nil, -29, + 212, nil, 1987, -93, -11, -403, 56, -29, -256, -236, + -351, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 177, nil, 217, -92, -60, nil, 196, nil, -335, -675, + nil, -676, nil, nil, nil, -345, nil, 197, nil, -344, + -2, nil, nil, -570, 205, -100, 227, 229, -48, 236, + 60, 63, -623, -218, -622, -808, 84, -460, -221, -732, + -459, -733, nil, nil, nil, nil, nil, nil, -760, 914, + -479, -742, -657, nil, -129, -495, 142, 381, -651, 166, + -708, -356, -555, nil, -644, -762, -821, -794, -175, -551, + 116, -381, -293, -14, -173, nil, nil, -100, -100, nil, + -500, nil, -314, -822, -415, -525, -654, nil, nil, 103, + 102, 48, 100, 100, -281, -282, -196, 104, 104, 104, + -578, -421, -421, 107, -558, -288, nil, nil, -439, -508, + -661, 175, -493, -733, nil, -633, -859, nil, nil, -141, + -482 ] racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 292, 7, 345, 293, - nil, nil, 531, nil, 847, nil, 291, nil, nil, nil, - 14, 15, 21, 230, 321, nil, nil, 745, 228, 229, - nil, nil, 20, nil, 329, 24, 25, 26, 27, nil, - 687, nil, nil, nil, 310, nil, nil, 28, 421, 35, - nil, nil, 37, 40, 39, nil, 225, 226, 594, nil, - 132, 429, 131, 134, 78, 79, nil, 93, 49, 284, - nil, 422, nil, 423, 434, 642, 496, 282, 267, 50, - 51, 52, 53, 54, 55, 56, 57, 58, nil, 268, - 64, nil, nil, nil, nil, nil, nil, nil, 578, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 5, nil, 308, 7, 361, 311, + nil, nil, nil, nil, 552, nil, nil, nil, nil, 307, + 309, nil, nil, nil, 14, 15, 21, 242, nil, nil, + 17, nil, 435, 243, 339, nil, nil, 773, 241, 471, + 24, nil, nil, 356, nil, 25, 26, 27, nil, 709, + nil, nil, nil, 328, nil, 28, 325, 450, 35, nil, + nil, 37, 40, 39, nil, 238, 239, 615, nil, 144, + 458, 143, 146, 90, 91, nil, 440, 105, 47, 50, + 274, 545, 300, nil, 451, nil, 452, 463, 669, 516, + 298, 282, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 61, nil, nil, 283, 65, nil, 67, nil, nil, + 68, 876, 69, 70, 71, nil, 72, nil, 73, nil, + 597, 74, 75, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 717, 839, nil, 718, 946, 790, 549, nil, - 550, nil, nil, 551, nil, 553, 658, nil, nil, nil, - 559, nil, nil, nil, 755, nil, nil, nil, 433, 269, - nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, - 82, nil, nil, nil, nil, nil, 609, nil, nil, nil, - nil, nil, nil, nil, nil, 831, 548, nil, 552, 563, - 565, 566, 802, 569, 570, 803, 573, 576, nil, 286 ] + nil, nil, 287, 276, 717, 844, 606, 877, 744, 867, + nil, 745, 1020, 914, 568, nil, 569, nil, nil, 570, + nil, 572, nil, 823, nil, nil, nil, 578, nil, nil, + nil, nil, nil, nil, nil, 462, 285, nil, nil, 688, + nil, 503, nil, nil, nil, nil, nil, 89, 92, 94, + nil, nil, nil, nil, nil, 632, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 859, 782, 567, nil, 571, + 582, 584, 585, 925, 588, 589, 926, 592, 595, nil, + 302 ] racc_reduce_table = [ 0, 0, :racc_error, @@ -2301,626 +2339,650 @@ 1, 148, :_reduce_none, 3, 148, :_reduce_6, 2, 148, :_reduce_none, - 1, 151, :_reduce_8, + 1, 151, :_reduce_none, 0, 155, :_reduce_9, - 5, 151, :_reduce_10, - 4, 154, :_reduce_11, - 2, 156, :_reduce_12, - 1, 160, :_reduce_none, - 1, 160, :_reduce_none, - 3, 160, :_reduce_15, - 2, 160, :_reduce_16, - 0, 177, :_reduce_17, - 4, 153, :_reduce_18, - 3, 153, :_reduce_19, - 3, 153, :_reduce_20, - 3, 153, :_reduce_21, - 2, 153, :_reduce_22, - 3, 153, :_reduce_23, - 3, 153, :_reduce_24, + 3, 151, :_reduce_10, + 0, 157, :_reduce_11, + 4, 154, :_reduce_12, + 0, 162, :_reduce_13, + 6, 156, :_reduce_14, + 3, 156, :_reduce_15, + 2, 158, :_reduce_16, + 1, 163, :_reduce_none, + 1, 163, :_reduce_none, + 3, 163, :_reduce_19, + 2, 163, :_reduce_20, + 1, 164, :_reduce_none, + 1, 164, :_reduce_22, + 0, 175, :_reduce_23, + 4, 153, :_reduce_24, 3, 153, :_reduce_25, 3, 153, :_reduce_26, 3, 153, :_reduce_27, - 4, 153, :_reduce_28, - 1, 153, :_reduce_none, + 2, 153, :_reduce_28, + 3, 153, :_reduce_29, 3, 153, :_reduce_30, 3, 153, :_reduce_31, - 6, 153, :_reduce_32, - 5, 153, :_reduce_33, - 5, 153, :_reduce_34, - 5, 153, :_reduce_35, - 5, 153, :_reduce_36, + 3, 153, :_reduce_32, + 3, 153, :_reduce_33, + 4, 153, :_reduce_34, + 1, 153, :_reduce_none, + 3, 153, :_reduce_36, 3, 153, :_reduce_37, 3, 153, :_reduce_38, - 3, 153, :_reduce_39, 1, 153, :_reduce_none, - 3, 164, :_reduce_41, - 3, 164, :_reduce_42, - 1, 176, :_reduce_none, - 3, 176, :_reduce_44, - 3, 176, :_reduce_45, - 3, 176, :_reduce_46, - 2, 176, :_reduce_47, + 3, 168, :_reduce_40, + 3, 168, :_reduce_41, + 6, 168, :_reduce_42, + 5, 168, :_reduce_43, + 5, 168, :_reduce_44, + 5, 168, :_reduce_45, + 5, 168, :_reduce_46, + 3, 168, :_reduce_47, + 1, 176, :_reduce_48, 1, 176, :_reduce_none, - 1, 163, :_reduce_49, - 1, 166, :_reduce_none, - 1, 166, :_reduce_none, - 1, 181, :_reduce_none, - 4, 181, :_reduce_53, - 0, 189, :_reduce_54, - 0, 190, :_reduce_55, - 6, 186, :_reduce_56, - 1, 188, :_reduce_57, - 2, 180, :_reduce_58, - 3, 180, :_reduce_59, - 4, 180, :_reduce_60, - 5, 180, :_reduce_61, - 4, 180, :_reduce_62, - 5, 180, :_reduce_63, - 2, 180, :_reduce_64, - 2, 180, :_reduce_65, - 2, 180, :_reduce_66, - 2, 180, :_reduce_67, - 2, 180, :_reduce_68, + 1, 174, :_reduce_none, + 3, 174, :_reduce_51, + 3, 174, :_reduce_52, + 3, 174, :_reduce_53, + 2, 174, :_reduce_54, + 1, 174, :_reduce_none, + 1, 167, :_reduce_56, + 0, 187, :_reduce_57, + 0, 188, :_reduce_58, + 4, 185, :_reduce_59, + 1, 170, :_reduce_none, + 1, 170, :_reduce_none, + 1, 190, :_reduce_none, + 4, 190, :_reduce_63, + 0, 198, :_reduce_64, + 4, 195, :_reduce_65, + 1, 197, :_reduce_66, + 2, 189, :_reduce_67, + 3, 189, :_reduce_68, + 4, 189, :_reduce_69, + 5, 189, :_reduce_70, + 4, 189, :_reduce_71, + 5, 189, :_reduce_72, + 2, 189, :_reduce_73, + 2, 189, :_reduce_74, + 2, 189, :_reduce_75, + 2, 189, :_reduce_76, + 2, 189, :_reduce_77, + 1, 169, :_reduce_none, + 3, 169, :_reduce_79, + 1, 203, :_reduce_none, + 3, 203, :_reduce_81, + 1, 202, :_reduce_82, + 2, 202, :_reduce_83, + 3, 202, :_reduce_84, + 5, 202, :_reduce_85, + 2, 202, :_reduce_86, + 4, 202, :_reduce_87, + 2, 202, :_reduce_88, + 4, 202, :_reduce_89, + 1, 202, :_reduce_90, + 3, 202, :_reduce_91, + 1, 206, :_reduce_none, + 3, 206, :_reduce_93, + 2, 205, :_reduce_94, + 3, 205, :_reduce_95, + 1, 208, :_reduce_96, + 3, 208, :_reduce_97, + 1, 207, :_reduce_98, + 1, 207, :_reduce_99, + 4, 207, :_reduce_100, + 3, 207, :_reduce_101, + 3, 207, :_reduce_102, + 3, 207, :_reduce_103, + 3, 207, :_reduce_104, + 2, 207, :_reduce_105, + 1, 207, :_reduce_106, + 1, 171, :_reduce_107, + 1, 171, :_reduce_108, + 4, 171, :_reduce_109, + 3, 171, :_reduce_110, + 3, 171, :_reduce_111, + 3, 171, :_reduce_112, + 3, 171, :_reduce_113, + 2, 171, :_reduce_114, + 1, 171, :_reduce_115, + 1, 211, :_reduce_116, + 1, 211, :_reduce_none, + 2, 212, :_reduce_118, + 1, 212, :_reduce_119, + 3, 212, :_reduce_120, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_none, + 1, 213, :_reduce_124, + 1, 213, :_reduce_125, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 165, :_reduce_128, 1, 165, :_reduce_none, - 3, 165, :_reduce_70, - 1, 194, :_reduce_none, - 3, 194, :_reduce_72, - 1, 193, :_reduce_73, - 2, 193, :_reduce_74, - 3, 193, :_reduce_75, - 5, 193, :_reduce_76, - 2, 193, :_reduce_77, - 4, 193, :_reduce_78, - 2, 193, :_reduce_79, - 4, 193, :_reduce_80, - 1, 193, :_reduce_81, - 3, 193, :_reduce_82, - 1, 197, :_reduce_none, - 3, 197, :_reduce_84, - 2, 196, :_reduce_85, - 3, 196, :_reduce_86, - 1, 199, :_reduce_87, - 3, 199, :_reduce_88, - 1, 198, :_reduce_89, - 1, 198, :_reduce_90, - 4, 198, :_reduce_91, - 3, 198, :_reduce_92, - 3, 198, :_reduce_93, - 3, 198, :_reduce_94, - 3, 198, :_reduce_95, - 2, 198, :_reduce_96, - 1, 198, :_reduce_97, - 1, 173, :_reduce_98, - 1, 173, :_reduce_99, - 4, 173, :_reduce_100, - 3, 173, :_reduce_101, - 3, 173, :_reduce_102, - 3, 173, :_reduce_103, - 3, 173, :_reduce_104, - 2, 173, :_reduce_105, - 1, 173, :_reduce_106, - 1, 202, :_reduce_107, - 1, 202, :_reduce_none, - 2, 203, :_reduce_109, - 1, 203, :_reduce_110, - 3, 203, :_reduce_111, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_115, - 1, 204, :_reduce_116, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 161, :_reduce_119, - 1, 161, :_reduce_none, - 1, 162, :_reduce_121, - 0, 210, :_reduce_122, - 4, 162, :_reduce_123, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 3, 179, :_reduce_195, - 5, 179, :_reduce_196, - 3, 179, :_reduce_197, - 5, 179, :_reduce_198, - 6, 179, :_reduce_199, - 5, 179, :_reduce_200, - 5, 179, :_reduce_201, - 5, 179, :_reduce_202, - 5, 179, :_reduce_203, - 4, 179, :_reduce_204, - 3, 179, :_reduce_205, - 3, 179, :_reduce_206, - 3, 179, :_reduce_207, - 3, 179, :_reduce_208, - 3, 179, :_reduce_209, - 3, 179, :_reduce_210, - 3, 179, :_reduce_211, - 3, 179, :_reduce_212, - 3, 179, :_reduce_213, - 4, 179, :_reduce_214, - 2, 179, :_reduce_215, - 2, 179, :_reduce_216, - 3, 179, :_reduce_217, - 3, 179, :_reduce_218, - 3, 179, :_reduce_219, - 3, 179, :_reduce_220, - 3, 179, :_reduce_221, - 3, 179, :_reduce_222, - 3, 179, :_reduce_223, - 3, 179, :_reduce_224, - 3, 179, :_reduce_225, - 3, 179, :_reduce_226, - 3, 179, :_reduce_227, - 3, 179, :_reduce_228, - 3, 179, :_reduce_229, - 2, 179, :_reduce_230, - 2, 179, :_reduce_231, - 3, 179, :_reduce_232, - 3, 179, :_reduce_233, - 3, 179, :_reduce_234, - 3, 179, :_reduce_235, - 3, 179, :_reduce_236, - 6, 179, :_reduce_237, - 1, 179, :_reduce_none, - 1, 213, :_reduce_239, + 1, 166, :_reduce_130, + 0, 219, :_reduce_131, + 4, 166, :_reduce_132, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, 1, 214, :_reduce_none, - 2, 214, :_reduce_241, - 4, 214, :_reduce_242, - 2, 214, :_reduce_243, - 3, 218, :_reduce_244, - 1, 219, :_reduce_none, - 1, 219, :_reduce_none, - 1, 169, :_reduce_247, - 1, 169, :_reduce_248, - 2, 169, :_reduce_249, - 4, 169, :_reduce_250, - 2, 169, :_reduce_251, - 1, 192, :_reduce_252, - 2, 192, :_reduce_253, - 2, 192, :_reduce_254, - 4, 192, :_reduce_255, - 1, 192, :_reduce_256, - 0, 222, :_reduce_257, - 2, 185, :_reduce_258, - 2, 221, :_reduce_259, - 2, 220, :_reduce_260, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 3, 184, :_reduce_205, + 3, 184, :_reduce_206, + 6, 184, :_reduce_207, + 5, 184, :_reduce_208, + 5, 184, :_reduce_209, + 5, 184, :_reduce_210, + 5, 184, :_reduce_211, + 0, 225, :_reduce_212, + 5, 184, :_reduce_213, + 3, 184, :_reduce_214, + 3, 184, :_reduce_215, + 3, 184, :_reduce_216, + 3, 184, :_reduce_217, + 3, 184, :_reduce_218, + 3, 184, :_reduce_219, + 3, 184, :_reduce_220, + 3, 184, :_reduce_221, + 3, 184, :_reduce_222, + 4, 184, :_reduce_223, + 2, 184, :_reduce_224, + 2, 184, :_reduce_225, + 3, 184, :_reduce_226, + 3, 184, :_reduce_227, + 3, 184, :_reduce_228, + 3, 184, :_reduce_229, + 1, 184, :_reduce_none, + 3, 184, :_reduce_231, + 3, 184, :_reduce_232, + 3, 184, :_reduce_233, + 3, 184, :_reduce_234, + 3, 184, :_reduce_235, + 2, 184, :_reduce_236, + 2, 184, :_reduce_237, + 3, 184, :_reduce_238, + 3, 184, :_reduce_239, + 3, 184, :_reduce_240, + 3, 184, :_reduce_241, + 3, 184, :_reduce_242, + 6, 184, :_reduce_243, + 1, 184, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 3, 222, :_reduce_249, + 3, 222, :_reduce_250, + 1, 226, :_reduce_251, + 1, 227, :_reduce_none, + 2, 227, :_reduce_253, + 4, 227, :_reduce_254, + 2, 227, :_reduce_255, 1, 220, :_reduce_none, - 1, 215, :_reduce_262, - 2, 215, :_reduce_263, - 3, 215, :_reduce_264, - 4, 215, :_reduce_265, - 1, 175, :_reduce_266, - 1, 175, :_reduce_267, - 3, 174, :_reduce_268, - 4, 174, :_reduce_269, - 2, 174, :_reduce_270, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_281, - 0, 245, :_reduce_282, - 4, 212, :_reduce_283, - 2, 212, :_reduce_284, - 0, 246, :_reduce_285, - 0, 247, :_reduce_286, - 5, 212, :_reduce_287, - 3, 212, :_reduce_288, - 3, 212, :_reduce_289, - 2, 212, :_reduce_290, - 3, 212, :_reduce_291, - 0, 248, :_reduce_292, - 4, 212, :_reduce_293, - 1, 212, :_reduce_294, - 4, 212, :_reduce_295, - 3, 212, :_reduce_296, - 1, 212, :_reduce_297, - 5, 212, :_reduce_298, - 4, 212, :_reduce_299, - 3, 212, :_reduce_300, - 2, 212, :_reduce_301, - 1, 212, :_reduce_none, - 2, 212, :_reduce_303, - 2, 212, :_reduce_304, - 6, 212, :_reduce_305, - 6, 212, :_reduce_306, - 0, 249, :_reduce_307, - 0, 250, :_reduce_308, - 7, 212, :_reduce_309, - 0, 251, :_reduce_310, - 0, 252, :_reduce_311, - 7, 212, :_reduce_312, - 5, 212, :_reduce_313, - 4, 212, :_reduce_314, - 0, 253, :_reduce_315, - 0, 254, :_reduce_316, - 9, 212, :_reduce_317, - 0, 255, :_reduce_318, - 0, 256, :_reduce_319, - 7, 212, :_reduce_320, - 0, 257, :_reduce_321, - 0, 258, :_reduce_322, - 0, 259, :_reduce_323, - 9, 212, :_reduce_324, - 0, 260, :_reduce_325, - 0, 261, :_reduce_326, - 6, 212, :_reduce_327, - 0, 262, :_reduce_328, - 6, 212, :_reduce_329, - 0, 263, :_reduce_330, - 0, 264, :_reduce_331, - 9, 212, :_reduce_332, - 1, 212, :_reduce_333, - 1, 212, :_reduce_334, - 1, 212, :_reduce_335, - 1, 212, :_reduce_336, - 1, 168, :_reduce_337, + 3, 220, :_reduce_257, + 3, 231, :_reduce_258, + 1, 232, :_reduce_none, + 1, 232, :_reduce_none, + 1, 179, :_reduce_none, + 1, 179, :_reduce_none, + 2, 179, :_reduce_263, + 4, 179, :_reduce_264, + 2, 179, :_reduce_265, + 1, 201, :_reduce_266, + 2, 201, :_reduce_267, + 2, 201, :_reduce_268, + 4, 201, :_reduce_269, + 1, 201, :_reduce_270, + 0, 235, :_reduce_271, + 2, 194, :_reduce_272, + 2, 234, :_reduce_273, + 2, 233, :_reduce_274, + 1, 233, :_reduce_none, + 1, 228, :_reduce_276, + 2, 228, :_reduce_277, + 3, 228, :_reduce_278, + 4, 228, :_reduce_279, + 1, 173, :_reduce_280, + 1, 173, :_reduce_281, + 3, 172, :_reduce_282, + 4, 172, :_reduce_283, + 2, 172, :_reduce_284, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_295, + 0, 270, :_reduce_296, + 4, 223, :_reduce_297, + 0, 271, :_reduce_298, + 3, 223, :_reduce_299, + 0, 272, :_reduce_300, + 4, 223, :_reduce_301, + 3, 223, :_reduce_302, + 3, 223, :_reduce_303, + 2, 223, :_reduce_304, + 0, 273, :_reduce_305, + 4, 223, :_reduce_306, + 0, 274, :_reduce_307, + 4, 223, :_reduce_308, + 1, 223, :_reduce_309, + 4, 223, :_reduce_310, + 3, 223, :_reduce_311, + 1, 223, :_reduce_312, + 5, 223, :_reduce_313, + 4, 223, :_reduce_314, + 3, 223, :_reduce_315, + 2, 223, :_reduce_316, + 1, 223, :_reduce_none, + 2, 223, :_reduce_318, + 2, 223, :_reduce_319, + 6, 223, :_reduce_320, + 6, 223, :_reduce_321, + 4, 223, :_reduce_322, + 4, 223, :_reduce_323, + 5, 223, :_reduce_324, + 4, 223, :_reduce_325, + 6, 223, :_reduce_326, + 0, 275, :_reduce_327, + 0, 276, :_reduce_328, + 7, 223, :_reduce_329, + 0, 277, :_reduce_330, + 0, 278, :_reduce_331, + 0, 279, :_reduce_332, + 9, 223, :_reduce_333, + 0, 280, :_reduce_334, + 0, 281, :_reduce_335, + 6, 223, :_reduce_336, + 0, 282, :_reduce_337, + 0, 283, :_reduce_338, + 7, 223, :_reduce_339, + 0, 284, :_reduce_340, + 0, 285, :_reduce_341, + 9, 223, :_reduce_342, + 1, 223, :_reduce_343, + 1, 223, :_reduce_344, + 1, 223, :_reduce_345, + 1, 223, :_reduce_346, + 1, 178, :_reduce_347, + 1, 245, :_reduce_none, + 1, 251, :_reduce_none, + 1, 254, :_reduce_none, + 1, 256, :_reduce_none, + 1, 257, :_reduce_none, + 1, 258, :_reduce_none, + 1, 260, :_reduce_none, + 1, 262, :_reduce_none, 1, 265, :_reduce_none, 1, 266, :_reduce_none, - 1, 267, :_reduce_none, - 1, 268, :_reduce_none, - 1, 269, :_reduce_none, - 1, 270, :_reduce_none, - 1, 271, :_reduce_none, - 1, 272, :_reduce_none, - 1, 273, :_reduce_none, - 1, 274, :_reduce_none, - 1, 275, :_reduce_none, - 1, 236, :_reduce_none, - 1, 236, :_reduce_none, - 2, 236, :_reduce_none, - 1, 238, :_reduce_none, - 1, 238, :_reduce_none, - 1, 237, :_reduce_none, - 5, 237, :_reduce_355, - 1, 158, :_reduce_none, - 2, 158, :_reduce_357, - 1, 240, :_reduce_none, - 1, 240, :_reduce_359, - 1, 276, :_reduce_none, - 3, 276, :_reduce_361, - 1, 279, :_reduce_362, - 3, 279, :_reduce_363, - 1, 278, :_reduce_364, - 4, 278, :_reduce_365, - 6, 278, :_reduce_366, - 3, 278, :_reduce_367, - 5, 278, :_reduce_368, - 2, 278, :_reduce_369, - 4, 278, :_reduce_370, - 1, 278, :_reduce_371, - 3, 278, :_reduce_372, - 4, 280, :_reduce_373, - 2, 280, :_reduce_374, - 2, 280, :_reduce_375, - 1, 280, :_reduce_376, - 2, 285, :_reduce_377, - 1, 285, :_reduce_none, - 6, 286, :_reduce_379, - 8, 286, :_reduce_380, - 4, 286, :_reduce_381, - 6, 286, :_reduce_382, - 4, 286, :_reduce_383, - 2, 286, :_reduce_384, - 6, 286, :_reduce_385, - 2, 286, :_reduce_386, - 4, 286, :_reduce_387, - 6, 286, :_reduce_388, - 2, 286, :_reduce_389, - 4, 286, :_reduce_390, - 2, 286, :_reduce_391, - 4, 286, :_reduce_392, - 1, 286, :_reduce_393, - 1, 187, :_reduce_394, - 1, 187, :_reduce_none, - 3, 290, :_reduce_396, - 1, 290, :_reduce_397, - 4, 290, :_reduce_398, + 1, 286, :_reduce_none, + 1, 287, :_reduce_none, + 1, 288, :_reduce_none, + 1, 289, :_reduce_none, + 1, 290, :_reduce_none, + 1, 160, :_reduce_none, 1, 291, :_reduce_none, - 4, 291, :_reduce_400, - 1, 292, :_reduce_401, - 3, 292, :_reduce_402, - 1, 293, :_reduce_403, - 1, 293, :_reduce_none, - 0, 297, :_reduce_405, - 3, 235, :_reduce_406, - 4, 295, :_reduce_407, - 1, 295, :_reduce_408, - 3, 296, :_reduce_409, - 3, 296, :_reduce_410, - 0, 300, :_reduce_411, - 0, 301, :_reduce_412, - 6, 299, :_reduce_413, - 2, 182, :_reduce_414, - 4, 182, :_reduce_415, - 5, 182, :_reduce_416, - 5, 182, :_reduce_417, - 0, 303, :_reduce_418, - 3, 234, :_reduce_419, - 4, 234, :_reduce_420, - 4, 234, :_reduce_421, - 3, 234, :_reduce_422, - 3, 234, :_reduce_423, - 3, 234, :_reduce_424, - 2, 234, :_reduce_425, - 1, 234, :_reduce_426, - 4, 234, :_reduce_427, - 0, 304, :_reduce_428, - 0, 305, :_reduce_429, - 6, 233, :_reduce_430, - 0, 306, :_reduce_431, - 0, 307, :_reduce_432, - 6, 233, :_reduce_433, - 0, 309, :_reduce_434, - 6, 239, :_reduce_435, - 1, 308, :_reduce_none, + 1, 246, :_reduce_none, + 1, 200, :_reduce_none, + 1, 252, :_reduce_none, + 1, 252, :_reduce_none, + 2, 252, :_reduce_none, + 1, 186, :_reduce_none, + 1, 186, :_reduce_none, + 1, 253, :_reduce_none, + 5, 253, :_reduce_373, + 1, 255, :_reduce_none, + 2, 255, :_reduce_375, + 1, 261, :_reduce_none, + 1, 261, :_reduce_377, + 1, 292, :_reduce_none, + 3, 292, :_reduce_379, + 1, 295, :_reduce_380, + 3, 295, :_reduce_381, + 1, 294, :_reduce_382, + 4, 294, :_reduce_383, + 6, 294, :_reduce_384, + 3, 294, :_reduce_385, + 5, 294, :_reduce_386, + 2, 294, :_reduce_387, + 4, 294, :_reduce_388, + 1, 294, :_reduce_389, + 3, 294, :_reduce_390, + 4, 296, :_reduce_391, + 2, 296, :_reduce_392, + 2, 296, :_reduce_393, + 1, 296, :_reduce_394, + 2, 301, :_reduce_395, + 1, 301, :_reduce_none, + 6, 302, :_reduce_397, + 8, 302, :_reduce_398, + 4, 302, :_reduce_399, + 6, 302, :_reduce_400, + 4, 302, :_reduce_401, + 2, 302, :_reduce_402, + 6, 302, :_reduce_403, + 2, 302, :_reduce_404, + 4, 302, :_reduce_405, + 6, 302, :_reduce_406, + 2, 302, :_reduce_407, + 4, 302, :_reduce_408, + 2, 302, :_reduce_409, + 4, 302, :_reduce_410, + 1, 302, :_reduce_411, + 1, 306, :_reduce_412, + 1, 306, :_reduce_413, + 3, 307, :_reduce_414, + 1, 307, :_reduce_415, + 4, 307, :_reduce_416, 1, 308, :_reduce_none, - 6, 157, :_reduce_438, - 0, 157, :_reduce_439, - 1, 310, :_reduce_440, + 4, 308, :_reduce_418, + 1, 309, :_reduce_419, + 3, 309, :_reduce_420, + 1, 310, :_reduce_421, 1, 310, :_reduce_none, - 1, 310, :_reduce_none, - 2, 311, :_reduce_443, - 1, 311, :_reduce_none, - 2, 159, :_reduce_445, - 1, 159, :_reduce_none, - 1, 223, :_reduce_447, - 1, 223, :_reduce_448, - 1, 223, :_reduce_none, - 1, 224, :_reduce_450, - 1, 313, :_reduce_451, - 1, 313, :_reduce_none, - 2, 313, :_reduce_453, - 3, 314, :_reduce_454, - 1, 314, :_reduce_455, - 3, 225, :_reduce_456, - 3, 226, :_reduce_457, - 3, 227, :_reduce_458, - 3, 227, :_reduce_459, - 1, 318, :_reduce_460, - 3, 318, :_reduce_461, - 1, 319, :_reduce_none, - 2, 319, :_reduce_463, - 3, 229, :_reduce_464, - 3, 229, :_reduce_465, - 1, 321, :_reduce_466, - 3, 321, :_reduce_467, - 3, 228, :_reduce_468, - 3, 228, :_reduce_469, - 3, 230, :_reduce_470, - 3, 230, :_reduce_471, - 1, 322, :_reduce_472, - 3, 322, :_reduce_473, - 1, 323, :_reduce_474, - 3, 323, :_reduce_475, - 1, 315, :_reduce_476, - 2, 315, :_reduce_477, - 1, 316, :_reduce_478, - 2, 316, :_reduce_479, - 1, 317, :_reduce_480, - 2, 317, :_reduce_481, - 1, 320, :_reduce_482, - 0, 325, :_reduce_483, - 3, 320, :_reduce_484, - 0, 326, :_reduce_485, - 4, 320, :_reduce_486, - 1, 324, :_reduce_487, - 1, 324, :_reduce_488, - 1, 324, :_reduce_489, - 1, 324, :_reduce_none, - 2, 208, :_reduce_491, - 1, 208, :_reduce_492, - 1, 327, :_reduce_none, + 0, 314, :_reduce_423, + 0, 315, :_reduce_424, + 4, 250, :_reduce_425, + 4, 312, :_reduce_426, + 1, 312, :_reduce_427, + 3, 313, :_reduce_428, + 3, 313, :_reduce_429, + 3, 317, :_reduce_430, + 2, 191, :_reduce_431, + 4, 191, :_reduce_432, + 5, 191, :_reduce_433, + 5, 191, :_reduce_434, + 0, 320, :_reduce_435, + 3, 249, :_reduce_436, + 4, 249, :_reduce_437, + 4, 249, :_reduce_438, + 3, 249, :_reduce_439, + 3, 249, :_reduce_440, + 3, 249, :_reduce_441, + 2, 249, :_reduce_442, + 1, 249, :_reduce_443, + 4, 249, :_reduce_444, + 0, 321, :_reduce_445, + 4, 248, :_reduce_446, + 0, 322, :_reduce_447, + 4, 248, :_reduce_448, + 0, 323, :_reduce_449, + 0, 324, :_reduce_450, + 4, 196, :_reduce_451, + 0, 325, :_reduce_452, + 0, 326, :_reduce_453, + 4, 318, :_reduce_454, + 0, 328, :_reduce_455, + 6, 259, :_reduce_456, 1, 327, :_reduce_none, 1, 327, :_reduce_none, - 1, 327, :_reduce_none, - 3, 209, :_reduce_497, - 1, 312, :_reduce_none, - 2, 312, :_reduce_499, - 1, 211, :_reduce_none, - 1, 211, :_reduce_none, - 1, 211, :_reduce_none, - 1, 211, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 201, :_reduce_509, - 1, 201, :_reduce_510, - 1, 201, :_reduce_511, - 1, 201, :_reduce_512, - 1, 201, :_reduce_513, - 1, 201, :_reduce_514, - 1, 201, :_reduce_515, - 1, 231, :_reduce_516, - 1, 231, :_reduce_517, - 1, 167, :_reduce_518, - 1, 167, :_reduce_519, - 1, 172, :_reduce_520, - 1, 172, :_reduce_521, - 1, 241, :_reduce_522, - 0, 328, :_reduce_523, - 4, 241, :_reduce_524, - 2, 241, :_reduce_525, - 3, 243, :_reduce_526, - 2, 243, :_reduce_527, - 4, 329, :_reduce_528, - 2, 329, :_reduce_529, - 2, 329, :_reduce_530, + 6, 159, :_reduce_459, + 0, 159, :_reduce_460, + 1, 329, :_reduce_461, 1, 329, :_reduce_none, - 2, 331, :_reduce_532, - 0, 331, :_reduce_533, - 6, 298, :_reduce_534, - 8, 298, :_reduce_535, - 4, 298, :_reduce_536, - 6, 298, :_reduce_537, - 4, 298, :_reduce_538, - 6, 298, :_reduce_539, - 2, 298, :_reduce_540, - 4, 298, :_reduce_541, - 6, 298, :_reduce_542, - 2, 298, :_reduce_543, - 4, 298, :_reduce_544, - 2, 298, :_reduce_545, - 4, 298, :_reduce_546, - 1, 298, :_reduce_547, - 0, 298, :_reduce_548, - 1, 294, :_reduce_549, - 1, 294, :_reduce_550, - 1, 294, :_reduce_551, - 1, 294, :_reduce_552, - 1, 277, :_reduce_none, - 1, 277, :_reduce_554, - 1, 333, :_reduce_none, - 3, 333, :_reduce_556, - 1, 287, :_reduce_557, - 3, 287, :_reduce_558, - 1, 334, :_reduce_none, - 2, 335, :_reduce_560, - 1, 335, :_reduce_561, - 2, 336, :_reduce_562, - 1, 336, :_reduce_563, - 1, 281, :_reduce_none, - 3, 281, :_reduce_565, + 1, 329, :_reduce_none, + 2, 330, :_reduce_464, 1, 330, :_reduce_none, - 3, 330, :_reduce_567, - 1, 337, :_reduce_none, - 1, 337, :_reduce_none, - 2, 282, :_reduce_570, - 1, 282, :_reduce_571, - 3, 338, :_reduce_572, - 3, 339, :_reduce_573, - 1, 288, :_reduce_574, - 3, 288, :_reduce_575, - 1, 332, :_reduce_576, - 3, 332, :_reduce_577, - 1, 340, :_reduce_none, - 1, 340, :_reduce_none, - 2, 289, :_reduce_580, - 1, 289, :_reduce_581, - 1, 341, :_reduce_none, - 1, 341, :_reduce_none, - 2, 284, :_reduce_584, - 2, 283, :_reduce_585, - 0, 283, :_reduce_586, - 1, 244, :_reduce_none, - 0, 342, :_reduce_588, - 4, 244, :_reduce_589, - 1, 232, :_reduce_590, - 2, 232, :_reduce_591, - 1, 217, :_reduce_none, - 3, 217, :_reduce_593, - 3, 343, :_reduce_594, - 3, 343, :_reduce_595, - 2, 343, :_reduce_596, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 184, :_reduce_none, - 1, 184, :_reduce_none, - 1, 184, :_reduce_none, - 1, 184, :_reduce_none, - 1, 302, :_reduce_none, - 1, 302, :_reduce_none, - 1, 302, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 171, :_reduce_none, + 2, 161, :_reduce_466, + 1, 161, :_reduce_none, + 1, 236, :_reduce_468, + 1, 236, :_reduce_469, + 1, 236, :_reduce_none, + 1, 237, :_reduce_471, + 1, 332, :_reduce_472, + 1, 332, :_reduce_none, + 2, 332, :_reduce_474, + 3, 333, :_reduce_475, + 1, 333, :_reduce_476, + 3, 238, :_reduce_477, + 3, 239, :_reduce_478, + 3, 240, :_reduce_479, + 3, 240, :_reduce_480, + 1, 337, :_reduce_481, + 3, 337, :_reduce_482, + 1, 338, :_reduce_none, + 2, 338, :_reduce_484, + 3, 242, :_reduce_485, + 0, 341, :_reduce_486, + 4, 242, :_reduce_487, + 1, 340, :_reduce_488, + 3, 340, :_reduce_489, + 3, 241, :_reduce_490, + 3, 241, :_reduce_491, + 3, 243, :_reduce_492, + 3, 243, :_reduce_493, + 1, 342, :_reduce_494, + 3, 342, :_reduce_495, + 1, 343, :_reduce_496, + 3, 343, :_reduce_497, + 1, 334, :_reduce_498, + 2, 334, :_reduce_499, + 1, 335, :_reduce_500, + 2, 335, :_reduce_501, + 1, 336, :_reduce_502, + 2, 336, :_reduce_503, + 1, 339, :_reduce_504, + 0, 345, :_reduce_505, + 3, 339, :_reduce_506, + 0, 346, :_reduce_507, + 4, 339, :_reduce_508, + 1, 344, :_reduce_509, + 1, 344, :_reduce_510, + 1, 344, :_reduce_511, + 1, 344, :_reduce_none, + 2, 217, :_reduce_513, + 1, 217, :_reduce_514, + 1, 347, :_reduce_none, + 1, 347, :_reduce_none, + 1, 347, :_reduce_none, + 1, 347, :_reduce_none, + 3, 218, :_reduce_519, + 1, 331, :_reduce_none, + 2, 331, :_reduce_521, + 1, 221, :_reduce_none, + 1, 221, :_reduce_none, + 1, 221, :_reduce_none, + 1, 221, :_reduce_none, + 1, 209, :_reduce_none, + 1, 209, :_reduce_none, + 1, 209, :_reduce_none, + 1, 209, :_reduce_none, + 1, 209, :_reduce_none, + 1, 210, :_reduce_531, + 1, 210, :_reduce_532, + 1, 210, :_reduce_533, + 1, 210, :_reduce_534, + 1, 210, :_reduce_535, + 1, 210, :_reduce_536, + 1, 210, :_reduce_537, + 1, 244, :_reduce_538, + 1, 244, :_reduce_539, + 1, 177, :_reduce_540, + 1, 177, :_reduce_541, + 1, 182, :_reduce_542, + 1, 182, :_reduce_543, + 0, 348, :_reduce_544, + 4, 263, :_reduce_545, + 1, 263, :_reduce_546, + 3, 267, :_reduce_547, + 0, 350, :_reduce_548, + 3, 267, :_reduce_549, + 4, 349, :_reduce_550, + 2, 349, :_reduce_551, + 2, 349, :_reduce_552, + 1, 349, :_reduce_none, + 2, 352, :_reduce_554, + 0, 352, :_reduce_555, + 6, 316, :_reduce_556, + 8, 316, :_reduce_557, + 4, 316, :_reduce_558, + 6, 316, :_reduce_559, + 4, 316, :_reduce_560, + 6, 316, :_reduce_561, + 2, 316, :_reduce_562, + 4, 316, :_reduce_563, + 6, 316, :_reduce_564, + 2, 316, :_reduce_565, + 4, 316, :_reduce_566, + 2, 316, :_reduce_567, + 4, 316, :_reduce_568, + 1, 316, :_reduce_569, + 0, 316, :_reduce_570, + 1, 311, :_reduce_571, + 1, 311, :_reduce_572, + 1, 311, :_reduce_573, + 1, 311, :_reduce_574, + 1, 293, :_reduce_none, + 1, 293, :_reduce_576, + 1, 354, :_reduce_none, + 3, 354, :_reduce_578, + 1, 303, :_reduce_579, + 3, 303, :_reduce_580, + 1, 355, :_reduce_none, + 2, 356, :_reduce_582, + 1, 356, :_reduce_583, + 2, 357, :_reduce_584, + 1, 357, :_reduce_585, + 1, 297, :_reduce_none, + 3, 297, :_reduce_587, + 1, 351, :_reduce_none, + 3, 351, :_reduce_589, + 1, 358, :_reduce_none, + 1, 358, :_reduce_none, + 2, 298, :_reduce_592, + 1, 298, :_reduce_593, + 3, 359, :_reduce_594, + 3, 360, :_reduce_595, + 1, 304, :_reduce_596, + 3, 304, :_reduce_597, + 1, 353, :_reduce_598, + 3, 353, :_reduce_599, + 1, 361, :_reduce_none, + 1, 361, :_reduce_none, + 2, 305, :_reduce_602, + 1, 305, :_reduce_603, + 1, 362, :_reduce_none, + 1, 362, :_reduce_none, + 2, 300, :_reduce_606, + 2, 299, :_reduce_607, + 0, 299, :_reduce_608, + 1, 268, :_reduce_none, + 0, 363, :_reduce_610, + 4, 268, :_reduce_611, + 1, 247, :_reduce_612, + 2, 247, :_reduce_none, + 1, 230, :_reduce_none, + 3, 230, :_reduce_615, + 3, 364, :_reduce_616, + 2, 364, :_reduce_617, + 2, 364, :_reduce_618, + 1, 199, :_reduce_none, + 1, 199, :_reduce_none, + 1, 199, :_reduce_none, + 1, 193, :_reduce_none, + 1, 193, :_reduce_none, + 1, 193, :_reduce_none, + 1, 193, :_reduce_none, + 1, 319, :_reduce_none, + 1, 319, :_reduce_none, + 1, 319, :_reduce_none, + 1, 269, :_reduce_none, + 1, 269, :_reduce_none, + 1, 181, :_reduce_none, + 1, 192, :_reduce_none, + 1, 192, :_reduce_none, 0, 149, :_reduce_none, 1, 149, :_reduce_none, - 0, 178, :_reduce_none, - 1, 178, :_reduce_none, - 2, 195, :_reduce_none, - 2, 170, :_reduce_none, - 0, 216, :_reduce_none, - 1, 216, :_reduce_none, - 1, 216, :_reduce_none, - 1, 242, :_reduce_619, - 1, 242, :_reduce_none, + 0, 183, :_reduce_none, + 1, 183, :_reduce_none, + 2, 204, :_reduce_none, + 2, 180, :_reduce_none, + 0, 229, :_reduce_none, + 1, 229, :_reduce_none, + 1, 229, :_reduce_none, + 1, 264, :_reduce_643, + 1, 264, :_reduce_none, 1, 152, :_reduce_none, - 2, 152, :_reduce_622, - 0, 150, :_reduce_623 ] + 2, 152, :_reduce_646, + 0, 150, :_reduce_647 ] -racc_reduce_n = 624 +racc_reduce_n = 648 -racc_shift_n = 1051 +racc_shift_n = 1089 racc_token_table = { false => 0, @@ -3065,8 +3127,8 @@ :tUBANG => 139, :tRATIONAL => 140, :tIMAGINARY => 141, - :tEQL => 142, - :tLOWEST => 143 } + :tLOWEST => 142, + :tEQL => 143 } racc_nt_base = 144 @@ -3231,8 +3293,8 @@ "tUBANG", "tRATIONAL", "tIMAGINARY", - "tEQL", "tLOWEST", + "tEQL", "$start", "program", "top_compstmt", @@ -3243,44 +3305,53 @@ "top_stmt", "terms", "stmt", - "bodystmt", + "begin_block", "@2", + "bodystmt", + "@3", "compstmt", "opt_rescue", - "opt_else", + "k_else", "opt_ensure", + "@4", "stmts", + "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", + "lhs", + "mrhs", + "mrhs_arg", + "expr", + "@5", + "command_rhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@3", "opt_nl", "arg", + "expr_value_do", + "do", + "@6", + "@7", "command", "block_command", "block_call", - "dot_or_colon", + "call_op2", "operation2", "command_args", "cmd_brace_block", - "opt_block_param", + "brace_body", "fcall", - "@4", - "@5", + "@8", "operation", + "k_return", "call_args", "mlhs_basic", "mlhs_inner", @@ -3299,9 +3370,13 @@ "fsym", "symbol", "dsym", - "@6", + "@9", + "arg_rhs", "simple_numeric", + "rel_expr", "primary", + "relop", + "@10", "arg_value", "aref_args", "args", @@ -3311,7 +3386,7 @@ "opt_paren_args", "opt_block_arg", "block_arg", - "@7", + "@11", "literal", "strings", "xstring", @@ -3321,23 +3396,31 @@ "symbols", "qsymbols", "var_ref", + "k_begin", + "k_end", "assoc_list", "brace_block", "method_call", "lambda", + "k_if", "then", "if_tail", - "do", + "k_unless", + "opt_else", + "k_while", + "k_until", + "k_case", "case_body", + "k_for", "for_var", + "k_class", "superclass", "term", + "k_module", + "k_def", "f_arglist", "singleton", - "@8", - "@9", - "@10", - "@11", + "dot_or_colon", "@12", "@13", "@14", @@ -3354,17 +3437,12 @@ "@25", "@26", "@27", - "k_begin", - "k_if", - "k_unless", - "k_while", - "k_until", - "k_case", - "k_for", - "k_class", - "k_module", - "k_def", - "k_end", + "k_do", + "k_do_block", + "k_rescue", + "k_ensure", + "k_when", + "k_elsif", "f_marg", "f_norm_arg", "f_margs", @@ -3379,6 +3457,7 @@ "f_arg", "f_block_optarg", "f_rest_arg", + "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", @@ -3387,18 +3466,20 @@ "f_larglist", "lambda_body", "@28", + "@29", "f_args", "do_block", - "@29", - "@30", + "do_body", "operation3", + "@30", "@31", "@32", "@33", "@34", "@35", - "cases", "@36", + "cases", + "@37", "exc_list", "exc_var", "numeric", @@ -3411,14 +3492,16 @@ "word", "string_content", "symbol_list", + "@38", "qword_list", "qsym_list", "string_dvar", - "@37", - "@38", - "sym", "@39", + "@40", + "sym", + "@41", "args_tail", + "@42", "f_kwarg", "opt_args_tail", "f_optarg", @@ -3431,7 +3514,7 @@ "f_block_opt", "restarg_mark", "blkarg_mark", - "@40", + "@43", "assoc" ] Racc_debug_parser = false @@ -3441,20 +3524,21 @@ # reduce 0 omitted def _reduce_1(val, _values, result) - self.lexer.lex_state = :expr_beg - + self.lexer.lex_state = EXPR_BEG + result end def _reduce_2(val, _values, result) result = new_compstmt val - + result end def _reduce_3(val, _values, result) - result = val[0] - + stmt, _ = val + result = stmt + result end @@ -3464,22 +3548,13 @@ def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] - + result end # reduce 7 omitted -def _reduce_8(val, _values, result) - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - - result -end +# reduce 8 omitted def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then @@ -3487,707 +3562,833 @@ yyerror "BEGIN in method" end self.env.extend - + result end def _reduce_10(val, _values, result) - result = new_iter s(:preexe), nil, val[3] - + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + result end def _reduce_11(val, _values, result) - result = new_body val - + result = lexer.lineno result end def _reduce_12(val, _values, result) - result = new_compstmt val - + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt + result end -# reduce 13 omitted +def _reduce_13(val, _values, result) + res = _values[-2] + yyerror "else without rescue is useless" unless res -# reduce 14 omitted - -def _reduce_15(val, _values, result) - result = self.block_append val[0], val[2] - result end -def _reduce_16(val, _values, result) - result = val[1] - debug20 2, val, result - +def _reduce_14(val, _values, result) + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + result end -def _reduce_17(val, _values, result) - lexer.lex_state = :expr_fname - result = self.lexer.lineno - +def _reduce_15(val, _values, result) + body, resc, ens = val + + result = new_body [body, resc, nil, ens] + result end -def _reduce_18(val, _values, result) - result = s(:alias, val[1], val[3]).line(val[2]) - +def _reduce_16(val, _values, result) + result = new_compstmt val + result end +# reduce 17 omitted + +# reduce 18 omitted + def _reduce_19(val, _values, result) - result = s(:valias, val[1].to_sym, val[2].to_sym) - + result = self.block_append val[0], val[2] + result end def _reduce_20(val, _values, result) - result = s(:valias, val[1].to_sym, :"$#{val[2]}") - + result = val[1] + debug20 2, val, result + result end -def _reduce_21(val, _values, result) - yyerror "can't make alias for the number variables" - - result -end +# reduce 21 omitted def _reduce_22(val, _values, result) - result = val[1] - + yyerror "BEGIN is permitted only at toplevel" + result end def _reduce_23(val, _values, result) - result = new_if val[2], val[0], nil - + lexer.lex_state = EXPR_FNAME + result end def _reduce_24(val, _values, result) - result = new_if val[2], nil, val[0] - + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line + result end def _reduce_25(val, _values, result) - result = new_while val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line + result end def _reduce_26(val, _values, result) - result = new_until val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line + result end def _reduce_27(val, _values, result) - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) - + yyerror "can't make alias for the number variables" + result end def _reduce_28(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 3 - yyerror "END in method; use at_exit" - end - result = new_iter s(:postexe), 0, val[2] - + result = val[1] + result end -# reduce 29 omitted +def _reduce_29(val, _values, result) + t, _, c = val + result = new_if c, t, nil + + result +end def _reduce_30(val, _values, result) - result = new_masgn val[0], val[2], :wrap - + f, _, c = val + result = new_if c, nil, f + result end def _reduce_31(val, _values, result) - result = new_op_asgn val - + e, _, c = val + result = new_while e, c, true + result end def _reduce_32(val, _values, result) - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - + e, _, c = val + result = new_until e, c, true + result end def _reduce_33(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn - end - result.line = val[0].line - + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody + result end def _reduce_34(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn + (_, line), _, stmt, _ = val + + if (self.in_def || self.in_single > 0) then + debug20 3 + yyerror "END in method; use at_exit" end - result.line = val[0].line - - result -end -def _reduce_35(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result - + result = new_iter s(:postexe).line(line), 0, stmt + result end +# reduce 35 omitted + def _reduce_36(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result - + result = new_masgn val[0], val[2], :wrap + result end def _reduce_37(val, _values, result) - self.backref_assign_error val[0] - + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + result end def _reduce_38(val, _values, result) - result = new_assign val[0], s(:svalue, val[2]) - + result = new_masgn val[0], val[2] + result end -def _reduce_39(val, _values, result) - result = new_masgn val[0], val[2] - +# reduce 39 omitted + +def _reduce_40(val, _values, result) + result = new_assign val[0], val[2] + result end -# reduce 40 omitted - def _reduce_41(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn val + result end def _reduce_42(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn1 val + result end -# reduce 43 omitted +def _reduce_43(val, _values, result) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + + result +end def _reduce_44(val, _values, result) - result = logical_op :and, val[0], val[2] - + result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + result end def _reduce_45(val, _values, result) - result = logical_op :or, val[0], val[2] - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_46(val, _values, result) - result = s(:call, val[2], :"!") - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_47(val, _values, result) - result = s(:call, val[1], :"!") - + self.backref_assign_error val[0] + result end -# reduce 48 omitted +def _reduce_48(val, _values, result) + expr, = val + result = value_expr expr -def _reduce_49(val, _values, result) - result = value_expr(val[0]) - result end +# reduce 49 omitted + # reduce 50 omitted -# reduce 51 omitted +def _reduce_51(val, _values, result) + lhs, _, rhs = val + result = logical_op :and, lhs, rhs + + result +end -# reduce 52 omitted +def _reduce_52(val, _values, result) + lhs, _, rhs = val + result = logical_op :or, lhs, rhs -def _reduce_53(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - result end -def _reduce_54(val, _values, result) - self.env.extend(:dynamic) - result = self.lexer.lineno - +def _reduce_53(val, _values, result) + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op + result end -def _reduce_55(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_54(val, _values, result) + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y + result end +# reduce 55 omitted + def _reduce_56(val, _values, result) - result = new_iter nil, val[2], val[4] - result.line = val[1] + result = value_expr(val[0]) - self.env.unextend - result end def _reduce_57(val, _values, result) - result = new_call nil, val[0].to_sym - + lexer.cond.push true + result end def _reduce_58(val, _values, result) - result = val[0].concat val[1].sexp_body # REFACTOR pattern - + lexer.cond.pop + result end def _reduce_59(val, _values, result) - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] - - result, operation = val[2], result - result.insert 1, operation - end - - result -end + _, expr, _, _ = val + result = expr -def _reduce_60(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3], val[1] - result end -def _reduce_61(val, _values, result) - recv, _, msg, args, block = val - call = new_call recv, msg.to_sym, args, val[1] - - block_dup_check call, block +# reduce 60 omitted - block.insert 1, call - result = block - - result -end +# reduce 61 omitted -def _reduce_62(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end +# reduce 62 omitted def _reduce_63(val, _values, result) - recv, _, msg, args, block = val - call = new_call recv, msg.to_sym, args - - block_dup_check call, block + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line - block.insert 1, call - result = block - result end def _reduce_64(val, _values, result) - result = new_super val[1] - + # self.env.extend(:dynamic) + result = self.lexer.lineno + result end def _reduce_65(val, _values, result) - result = new_yield val[1] - + _, line, body, _ = val + + result = body + result.line = line + + # self.env.unextend + result end def _reduce_66(val, _values, result) - line = val[0].last - result = s(:return, ret_args(val[1])).line(line) - + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno + result end def _reduce_67(val, _values, result) - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) - + call, args = val + result = call.concat args.sexp_body + result end def _reduce_68(val, _values, result) - line = val[0].last - result = s(:next, ret_args(val[1])).line(line) - + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result + result.insert 1, operation + end + result end -# reduce 69 omitted +def _reduce_69(val, _values, result) + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop + + result +end def _reduce_70(val, _values, result) - result = val[1] - + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args, val[1] + + block_dup_check call, block + + block.insert 1, call + result = block + result end -# reduce 71 omitted +def _reduce_71(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3] + + result +end def _reduce_72(val, _values, result) - result = s(:masgn, s(:array, val[1])) - + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args + + block_dup_check call, block + + block.insert 1, call + result = block + result end def _reduce_73(val, _values, result) - result = s(:masgn, val[0]) - + result = new_super val[1] + result end def _reduce_74(val, _values, result) - result = s(:masgn, val[0] << val[1].compact) - + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield + result end def _reduce_75(val, _values, result) - result = s(:masgn, val[0] << s(:splat, val[2])) - + line = val[0].last + result = s(:return, ret_args(val[1])).line(line) + result end def _reduce_76(val, _values, result) - ary1, _, splat, _, ary2 = val + (_, line), args = val + result = s(:break, ret_args(args)).line line - result = list_append ary1, s(:splat, splat) - result.concat ary2.sexp_body - result = s(:masgn, result) - result end def _reduce_77(val, _values, result) - result = s(:masgn, val[0] << s(:splat)) - - result -end + line = val[0].last + result = s(:next, ret_args(val[1])).line(line) -def _reduce_78(val, _values, result) - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - result end +# reduce 78 omitted + def _reduce_79(val, _values, result) - result = s(:masgn, s(:array, s(:splat, val[1]))) - - result -end + result = val[1] -def _reduce_80(val, _values, result) - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - result end +# reduce 80 omitted + def _reduce_81(val, _values, result) - result = s(:masgn, s(:array, s(:splat))) - + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l + result end def _reduce_82(val, _values, result) - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) - + head, = val + result = s(:masgn, head).line head.line + result end -# reduce 83 omitted +def _reduce_83(val, _values, result) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line + + result +end def _reduce_84(val, _values, result) - result = val[1] - + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line + result end def _reduce_85(val, _values, result) - result = s(:array, val[0]) - + ary1, _, splat, _, ary2 = val + + result = list_append ary1, s(:splat, splat).line(splat.line) + result.concat ary2.sexp_body + result = s(:masgn, result).line result.line + result end def _reduce_86(val, _values, result) - result = val[0] << val[1].compact - + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l + result end def _reduce_87(val, _values, result) - result = s(:array, val[0]) - + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end def _reduce_88(val, _values, result) - result = list_append val[0], val[2] - + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l + result end def _reduce_89(val, _values, result) - result = self.assignable val[0] - + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end def _reduce_90(val, _values, result) - result = self.assignable val[0] - + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l + result end def _reduce_91(val, _values, result) - result = self.aryset val[0], val[2] - - result -end + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l -def _reduce_92(val, _values, result) - result = new_attrasgn val[0], val[2], val[1] - result end +# reduce 92 omitted + def _reduce_93(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - + result = val[1] + result end def _reduce_94(val, _values, result) - result = new_attrasgn val[0], val[2], val[1] - + lhs, _ = val + result = s(:array, lhs).line lhs.line + result end def _reduce_95(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 7 - yyerror "dynamic constant assignment" - end + result = val[0] << val[1].compact - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) - result end def _reduce_96(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 8 - yyerror "dynamic constant assignment" - end + item, = val + result = s(:array, item).line item.line - result = s(:const, nil, s(:colon3, val[1].to_sym)) - result end def _reduce_97(val, _values, result) - self.backref_assign_error val[0] - + result = list_append val[0], val[2] + result end def _reduce_98(val, _values, result) result = self.assignable val[0] - + result end def _reduce_99(val, _values, result) result = self.assignable val[0] - debug20 9, val, result - + result end def _reduce_100(val, _values, result) result = self.aryset val[0], val[2] - + result end def _reduce_101(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end def _reduce_102(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - + recv, _, id = val + result = new_attrasgn recv, id + result end def _reduce_103(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end def _reduce_104(val, _values, result) if (self.in_def || self.in_single > 0) then - debug20 10 + debug20 7 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) - + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l + result end def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then - debug20 11 + debug20 8 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) - + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l + result end def _reduce_106(val, _values, result) self.backref_assign_error val[0] - + result end def _reduce_107(val, _values, result) - yyerror "class/module name must be CONSTANT" - + line = lexer.lineno + result = self.assignable val[0] + result.line = line + result end -# reduce 108 omitted +def _reduce_108(val, _values, result) + line = lexer.lineno + result = self.assignable val[0] + result.line = line + debug20 9, val, result -def _reduce_109(val, _values, result) - result = s(:colon3, val[1].to_sym) - result end -def _reduce_110(val, _values, result) - result = val[0].to_sym - +def _reduce_109(val, _values, result) + lhs, _, args, _ = val + result = self.aryset lhs, args + + result +end + +def _reduce_110(val, _values, result) + lhs, op, id = val + result = new_attrasgn lhs, id, op + result end def _reduce_111(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - + lhs, _, id = val + result = new_attrasgn lhs, id + + result +end + +def _reduce_112(val, _values, result) + result = new_attrasgn val[0], val[2], val[1] + + result +end + +def _reduce_113(val, _values, result) + expr, _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 10 + yyerror "dynamic constant assignment" + end + + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l + result end -# reduce 112 omitted +def _reduce_114(val, _values, result) + _, id = val -# reduce 113 omitted + if (self.in_def || self.in_single > 0) then + debug20 11 + yyerror "dynamic constant assignment" + end -# reduce 114 omitted + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l + + result +end def _reduce_115(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - + self.backref_assign_error val[0] + result end def _reduce_116(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - + yyerror "class/module name must be CONSTANT" + result end # reduce 117 omitted -# reduce 118 omitted +def _reduce_118(val, _values, result) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno -def _reduce_119(val, _values, result) - result = s(:lit, val[0].to_sym) - result end -# reduce 120 omitted +def _reduce_119(val, _values, result) + result = val[0].to_sym -def _reduce_121(val, _values, result) - result = new_undef val[0] - result end -def _reduce_122(val, _values, result) - lexer.lex_state = :expr_fname - +def _reduce_120(val, _values, result) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line + result end -def _reduce_123(val, _values, result) - result = new_undef val[0], val[3] - +# reduce 121 omitted + +# reduce 122 omitted + +# reduce 123 omitted + +def _reduce_124(val, _values, result) + lexer.lex_state = EXPR_END + result = val[0] + result end -# reduce 124 omitted +def _reduce_125(val, _values, result) + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym -# reduce 125 omitted + result +end # reduce 126 omitted # reduce 127 omitted -# reduce 128 omitted +def _reduce_128(val, _values, result) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno + + result +end # reduce 129 omitted -# reduce 130 omitted +def _reduce_130(val, _values, result) + result = new_undef val[0] + + result +end + +def _reduce_131(val, _values, result) + lexer.lex_state = EXPR_FNAME -# reduce 131 omitted + result +end -# reduce 132 omitted +def _reduce_132(val, _values, result) + result = new_undef val[0], val[3] + + result +end # reduce 133 omitted @@ -4313,1280 +4514,1376 @@ # reduce 194 omitted -def _reduce_195(val, _values, result) +# reduce 195 omitted + +# reduce 196 omitted + +# reduce 197 omitted + +# reduce 198 omitted + +# reduce 199 omitted + +# reduce 200 omitted + +# reduce 201 omitted + +# reduce 202 omitted + +# reduce 203 omitted + +# reduce 204 omitted + +def _reduce_205(val, _values, result) result = new_assign val[0], val[2] - - result -end -def _reduce_196(val, _values, result) - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - result end -def _reduce_197(val, _values, result) +def _reduce_206(val, _values, result) result = new_op_asgn val - + result end -def _reduce_198(val, _values, result) - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) - +def _reduce_207(val, _values, result) + result = new_op_asgn1 val + result end -def _reduce_199(val, _values, result) - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - +def _reduce_208(val, _values, result) + result = new_op_asgn2 val + result end -def _reduce_200(val, _values, result) +def _reduce_209(val, _values, result) result = new_op_asgn2 val - + result end -def _reduce_201(val, _values, result) - result = new_op_asgn2 val - +def _reduce_210(val, _values, result) + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line + result end -def _reduce_202(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - +def _reduce_211(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_203(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_212(val, _values, result) + result = self.lexer.lineno + result end -def _reduce_204(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_213(val, _values, result) + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_205(val, _values, result) - self.backref_assign_error val[0] - +def _reduce_214(val, _values, result) + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn + result end -def _reduce_206(val, _values, result) +def _reduce_215(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end - + result end -def _reduce_207(val, _values, result) +def _reduce_216(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end - + result end -def _reduce_208(val, _values, result) +def _reduce_217(val, _values, result) result = new_call val[0], :+, argl(val[2]) - + result end -def _reduce_209(val, _values, result) +def _reduce_218(val, _values, result) result = new_call val[0], :-, argl(val[2]) - + result end -def _reduce_210(val, _values, result) +def _reduce_219(val, _values, result) result = new_call val[0], :*, argl(val[2]) - + result end -def _reduce_211(val, _values, result) +def _reduce_220(val, _values, result) result = new_call val[0], :"/", argl(val[2]) - + result end -def _reduce_212(val, _values, result) +def _reduce_221(val, _values, result) result = new_call val[0], :"%", argl(val[2]) - + result end -def _reduce_213(val, _values, result) +def _reduce_222(val, _values, result) result = new_call val[0], :**, argl(val[2]) - + result end -def _reduce_214(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - +def _reduce_223(val, _values, result) + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + + result end -def _reduce_215(val, _values, result) +def _reduce_224(val, _values, result) result = new_call val[1], :"+@" - + result end -def _reduce_216(val, _values, result) +def _reduce_225(val, _values, result) result = new_call val[1], :"-@" - + result end -def _reduce_217(val, _values, result) +def _reduce_226(val, _values, result) result = new_call val[0], :"|", argl(val[2]) - + result end -def _reduce_218(val, _values, result) +def _reduce_227(val, _values, result) result = new_call val[0], :"^", argl(val[2]) - - result -end -def _reduce_219(val, _values, result) - result = new_call val[0], :"&", argl(val[2]) - result end -def _reduce_220(val, _values, result) - result = new_call val[0], :"<=>", argl(val[2]) - - result -end +def _reduce_228(val, _values, result) + result = new_call val[0], :"&", argl(val[2]) -def _reduce_221(val, _values, result) - result = new_call val[0], :">", argl(val[2]) - result end -def _reduce_222(val, _values, result) - result = new_call val[0], :">=", argl(val[2]) - - result -end +def _reduce_229(val, _values, result) + result = new_call val[0], :"<=>", argl(val[2]) -def _reduce_223(val, _values, result) - result = new_call val[0], :"<", argl(val[2]) - result end -def _reduce_224(val, _values, result) - result = new_call val[0], :"<=", argl(val[2]) - - result -end +# reduce 230 omitted -def _reduce_225(val, _values, result) +def _reduce_231(val, _values, result) result = new_call val[0], :"==", argl(val[2]) - + result end -def _reduce_226(val, _values, result) +def _reduce_232(val, _values, result) result = new_call val[0], :"===", argl(val[2]) - + result end -def _reduce_227(val, _values, result) +def _reduce_233(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) - + result end -def _reduce_228(val, _values, result) - result = new_match val[0], val[2] - +def _reduce_234(val, _values, result) + lhs, _, rhs = val + result = new_match lhs, rhs + result end -def _reduce_229(val, _values, result) - result = s(:not, new_match(val[0], val[2])) - +def _reduce_235(val, _values, result) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line + result end -def _reduce_230(val, _values, result) - result = new_call val[1], :"!" - +def _reduce_236(val, _values, result) + _, arg = val + result = new_call arg, :"!" + result.line arg.line + result end -def _reduce_231(val, _values, result) +def _reduce_237(val, _values, result) result = new_call value_expr(val[1]), :"~" - + result end -def _reduce_232(val, _values, result) +def _reduce_238(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) - + result end -def _reduce_233(val, _values, result) +def _reduce_239(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) - + result end -def _reduce_234(val, _values, result) +def _reduce_240(val, _values, result) result = logical_op :and, val[0], val[2] - + result end -def _reduce_235(val, _values, result) +def _reduce_241(val, _values, result) result = logical_op :or, val[0], val[2] - + result end -def _reduce_236(val, _values, result) - result = s(:defined, val[2]) - +def _reduce_242(val, _values, result) + (_, line), _, arg = val + result = s(:defined, arg).line line + result end -def _reduce_237(val, _values, result) - result = s(:if, val[0], val[2], val[5]) - +def _reduce_243(val, _values, result) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line + result end -# reduce 238 omitted +# reduce 244 omitted -def _reduce_239(val, _values, result) +# reduce 245 omitted + +# reduce 246 omitted + +# reduce 247 omitted + +# reduce 248 omitted + +def _reduce_249(val, _values, result) + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_250(val, _values, result) + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_251(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 240 omitted +# reduce 252 omitted -def _reduce_241(val, _values, result) +def _reduce_253(val, _values, result) result = args [val[0]] - + result end -def _reduce_242(val, _values, result) +def _reduce_254(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_243(val, _values, result) +def _reduce_255(val, _values, result) result = args [array_to_hash(val[0])] - - result -end -def _reduce_244(val, _values, result) - result = val[1] - result end -# reduce 245 omitted +# reduce 256 omitted -# reduce 246 omitted +def _reduce_257(val, _values, result) + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) -def _reduce_247(val, _values, result) - result = val[0] - result end -def _reduce_248(val, _values, result) - result = val[0] - +def _reduce_258(val, _values, result) + _, args, _ = val + result = args + result end -def _reduce_249(val, _values, result) +# reduce 259 omitted + +# reduce 260 omitted + +# reduce 261 omitted + +# reduce 262 omitted + +def _reduce_263(val, _values, result) result = args val - + result end -def _reduce_250(val, _values, result) +def _reduce_264(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_251(val, _values, result) +def _reduce_265(val, _values, result) result = args [array_to_hash(val[0])] - + result end -def _reduce_252(val, _values, result) +def _reduce_266(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val - + result end -def _reduce_253(val, _values, result) +def _reduce_267(val, _values, result) result = call_args val - result = self.arg_blk_pass val[0], val[1] - + result end -def _reduce_254(val, _values, result) - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] - +def _reduce_268(val, _values, result) + result = call_args [array_to_hash(val[0]), val[1]] + result end -def _reduce_255(val, _values, result) - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] - +def _reduce_269(val, _values, result) + result = call_args [val[0], array_to_hash(val[2]), val[3]] + result end -def _reduce_256(val, _values, result) +def _reduce_270(val, _values, result) result = call_args val - + result end -def _reduce_257(val, _values, result) - result = lexer.cmdarg.stack.dup # TODO: smell? +def _reduce_271(val, _values, result) + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true - + lexer.cmdarg.push false if lookahead + result end -def _reduce_258(val, _values, result) - lexer.cmdarg.stack.replace val[0] - result = val[1] - +def _reduce_272(val, _values, result) + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args + result end -def _reduce_259(val, _values, result) - result = s(:block_pass, val[1]) - +def _reduce_273(val, _values, result) + _, arg = val + result = s(:block_pass, arg).line arg.line + result end -def _reduce_260(val, _values, result) +def _reduce_274(val, _values, result) result = val[1] - + result end -# reduce 261 omitted +# reduce 275 omitted + +def _reduce_276(val, _values, result) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno -def _reduce_262(val, _values, result) - result = s(:array, val[0]) - result end -def _reduce_263(val, _values, result) - result = s(:array, s(:splat, val[1])) - +def _reduce_277(val, _values, result) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line + result end -def _reduce_264(val, _values, result) - result = self.list_append val[0], val[2] - +def _reduce_278(val, _values, result) + args, _, id = val + result = self.list_append args, id + result end -def _reduce_265(val, _values, result) - result = self.list_append val[0], s(:splat, val[3]) - +def _reduce_279(val, _values, result) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) + result end -def _reduce_266(val, _values, result) +def _reduce_280(val, _values, result) result = new_masgn_arg val[0] - + result end -def _reduce_267(val, _values, result) +def _reduce_281(val, _values, result) result = new_masgn_arg val[0], :wrap - + result end -def _reduce_268(val, _values, result) +def _reduce_282(val, _values, result) result = val[0] << val[2] - + result end -def _reduce_269(val, _values, result) - result = self.arg_concat val[0], val[3] - +def _reduce_283(val, _values, result) + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat + result end -def _reduce_270(val, _values, result) - result = s(:splat, val[1]) - +def _reduce_284(val, _values, result) + _, arg = val + result = s(:splat, arg).line arg.line + result end -# reduce 271 omitted +# reduce 285 omitted -# reduce 272 omitted +# reduce 286 omitted -# reduce 273 omitted +# reduce 287 omitted -# reduce 274 omitted +# reduce 288 omitted -# reduce 275 omitted +# reduce 289 omitted -# reduce 276 omitted +# reduce 290 omitted -# reduce 277 omitted +# reduce 291 omitted -# reduce 278 omitted +# reduce 292 omitted -# reduce 279 omitted +# reduce 293 omitted -# reduce 280 omitted +# reduce 294 omitted + +def _reduce_295(val, _values, result) + msg, = val + result = new_call nil, msg.to_sym -def _reduce_281(val, _values, result) - result = new_call nil, val[0].to_sym - result end -def _reduce_282(val, _values, result) +def _reduce_296(val, _values, result) + lexer.cmdarg.push false result = self.lexer.lineno - + result end -def _reduce_283(val, _values, result) - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end +def _reduce_297(val, _values, result) + lexer.cmdarg.pop + result = new_begin val - result.line = val[1] - result end -def _reduce_284(val, _values, result) - debug20 13, val, result - +def _reduce_298(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno + result end -def _reduce_285(val, _values, result) - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these - +def _reduce_299(val, _values, result) + _, line, _ = val + result = s(:begin).line line + result end -def _reduce_286(val, _values, result) - lexer.lex_state = :expr_endarg - +def _reduce_300(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result end -def _reduce_287(val, _values, result) - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] - +def _reduce_301(val, _values, result) + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt + result end -def _reduce_288(val, _values, result) - result = val[1] || s(:nil) +def _reduce_302(val, _values, result) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true - + + result +end + +def _reduce_303(val, _values, result) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line + result end -def _reduce_289(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - +def _reduce_304(val, _values, result) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno + result end -def _reduce_290(val, _values, result) - result = s(:colon3, val[1].to_sym) - +def _reduce_305(val, _values, result) + result = lexer.lineno result end -def _reduce_291(val, _values, result) - result = val[1] || s(:array) +def _reduce_306(val, _values, result) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args - + result.line line + result end -def _reduce_292(val, _values, result) +def _reduce_307(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_293(val, _values, result) +def _reduce_308(val, _values, result) result = new_hash val - + result end -def _reduce_294(val, _values, result) - result = s(:return) - +def _reduce_309(val, _values, result) + (_, line), = val + result = s(:return).line line + result end -def _reduce_295(val, _values, result) +def _reduce_310(val, _values, result) result = new_yield val[2] - + result end -def _reduce_296(val, _values, result) +def _reduce_311(val, _values, result) result = new_yield - + result end -def _reduce_297(val, _values, result) +def _reduce_312(val, _values, result) result = new_yield - + result end -def _reduce_298(val, _values, result) - result = s(:defined, val[3]) - +def _reduce_313(val, _values, result) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line + result end -def _reduce_299(val, _values, result) - result = s(:call, val[2], :"!") - +def _reduce_314(val, _values, result) + _, _, lhs, _ = val + result = new_call lhs, :"!" + result end -def _reduce_300(val, _values, result) +def _reduce_315(val, _values, result) debug20 14, val, result - + result end -def _reduce_301(val, _values, result) - oper, iter = val[0], val[1] - call = oper # FIX +def _reduce_316(val, _values, result) + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line - + # FIX: probably not: call.line = iter.line + result end -# reduce 302 omitted +# reduce 317 omitted -def _reduce_303(val, _values, result) +def _reduce_318(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter - + result end -def _reduce_304(val, _values, result) +def _reduce_319(val, _values, result) result = val[1] # TODO: fix lineno - - result -end -def _reduce_305(val, _values, result) - result = new_if val[1], val[3], val[4] - result end -def _reduce_306(val, _values, result) - result = new_if val[1], val[4], val[3] - - result -end +def _reduce_320(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, t, f -def _reduce_307(val, _values, result) - lexer.cond.push true - result end -def _reduce_308(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_321(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, f, t -def _reduce_309(val, _values, result) - result = new_while val[5], val[2], true - result end -def _reduce_310(val, _values, result) - lexer.cond.push true - - result -end +def _reduce_322(val, _values, result) + _, cond, body, _ = val + result = new_while body, cond, true -def _reduce_311(val, _values, result) - lexer.cond.pop - result end -def _reduce_312(val, _values, result) - result = new_until val[5], val[2], true - +def _reduce_323(val, _values, result) + _, cond, body, _ = val + result = new_until body, cond, true + result end -def _reduce_313(val, _values, result) +def _reduce_324(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line - + result end -def _reduce_314(val, _values, result) +def _reduce_325(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line - - result -end -def _reduce_315(val, _values, result) - lexer.cond.push true - result end -def _reduce_316(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_326(val, _values, result) + _, var, _, iter, body, _ = val + result = new_for iter, var, body -def _reduce_317(val, _values, result) - result = new_for val[4], val[1], val[7] - result end -def _reduce_318(val, _values, result) +def _reduce_327(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_319(val, _values, result) +def _reduce_328(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend - + result end -def _reduce_320(val, _values, result) +def _reduce_329(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_321(val, _values, result) +def _reduce_330(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_322(val, _values, result) +def _reduce_331(val, _values, result) result = self.in_def self.in_def = false - + result end -def _reduce_323(val, _values, result) +def _reduce_332(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend - + result end -def _reduce_324(val, _values, result) +def _reduce_333(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_325(val, _values, result) +def _reduce_334(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_326(val, _values, result) +def _reduce_335(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend - + result end -def _reduce_327(val, _values, result) +def _reduce_336(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_328(val, _values, result) - result = [self.in_def, self.lexer.cmdarg.stack.dup] +def _reduce_337(val, _values, result) + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments + result end -def _reduce_329(val, _values, result) - in_def, cmdarg = val[2] +def _reduce_338(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_339(val, _values, result) + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_330(val, _values, result) - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname - +def _reduce_340(val, _values, result) + lexer.lex_state = EXPR_FNAME + result end -def _reduce_331(val, _values, result) - self.in_single += 1 +def _reduce_341(val, _values, result) + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments + result end -def _reduce_332(val, _values, result) - line, cmdarg = val[5] - result = new_defs val - result[3].line line +def _reduce_342(val, _values, result) + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_333(val, _values, result) - result = s(:break) - +def _reduce_343(val, _values, result) + (_, line), = val + result = s(:break).line line + result end -def _reduce_334(val, _values, result) - result = s(:next) - +def _reduce_344(val, _values, result) + (_, line), = val + result = s(:next).line line + result end -def _reduce_335(val, _values, result) - result = s(:redo) - +def _reduce_345(val, _values, result) + (_, line), = val + result = s(:redo).line line + result end -def _reduce_336(val, _values, result) - result = s(:retry) - +def _reduce_346(val, _values, result) + (_, line), = val + result = s(:retry).line line + result end -def _reduce_337(val, _values, result) +def _reduce_347(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 338 omitted +# reduce 348 omitted -# reduce 339 omitted +# reduce 349 omitted -# reduce 340 omitted +# reduce 350 omitted -# reduce 341 omitted +# reduce 351 omitted -# reduce 342 omitted +# reduce 352 omitted -# reduce 343 omitted +# reduce 353 omitted -# reduce 344 omitted +# reduce 354 omitted -# reduce 345 omitted +# reduce 355 omitted -# reduce 346 omitted +# reduce 356 omitted -# reduce 347 omitted +# reduce 357 omitted -# reduce 348 omitted +# reduce 358 omitted -# reduce 349 omitted +# reduce 359 omitted -# reduce 350 omitted +# reduce 360 omitted -# reduce 351 omitted +# reduce 361 omitted -# reduce 352 omitted +# reduce 362 omitted -# reduce 353 omitted +# reduce 363 omitted -# reduce 354 omitted +# reduce 364 omitted + +# reduce 365 omitted + +# reduce 366 omitted + +# reduce 367 omitted + +# reduce 368 omitted + +# reduce 369 omitted + +# reduce 370 omitted + +# reduce 371 omitted + +# reduce 372 omitted + +def _reduce_373(val, _values, result) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line -def _reduce_355(val, _values, result) - result = s(:if, val[1], val[3], val[4]) - result end -# reduce 356 omitted +# reduce 374 omitted -def _reduce_357(val, _values, result) +def _reduce_375(val, _values, result) result = val[1] - + result end -# reduce 358 omitted +# reduce 376 omitted -def _reduce_359(val, _values, result) +def _reduce_377(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK - + result end -# reduce 360 omitted +# reduce 378 omitted -def _reduce_361(val, _values, result) +def _reduce_379(val, _values, result) result = val[1] - + result end -def _reduce_362(val, _values, result) - result = s(:array, val[0]) - +def _reduce_380(val, _values, result) + sym, = val + + result = s(:array, sym).line lexer.lineno + result end -def _reduce_363(val, _values, result) +def _reduce_381(val, _values, result) result = list_append val[0], val[2] - + result end -def _reduce_364(val, _values, result) +def _reduce_382(val, _values, result) args, = val result = block_var args - + result end -def _reduce_365(val, _values, result) +def _reduce_383(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym - + result end -def _reduce_366(val, _values, result) +def _reduce_384(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 - + result end -def _reduce_367(val, _values, result) +def _reduce_385(val, _values, result) args, _, _ = val result = block_var args, :* - + result end -def _reduce_368(val, _values, result) +def _reduce_386(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 - + result end -def _reduce_369(val, _values, result) +def _reduce_387(val, _values, result) _, splat = val result = block_var :"*#{splat}" - + result end -def _reduce_370(val, _values, result) +def _reduce_388(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args - + result end -def _reduce_371(val, _values, result) +def _reduce_389(val, _values, result) result = block_var :* - + result end -def _reduce_372(val, _values, result) +def _reduce_390(val, _values, result) _, _, args = val result = block_var :*, args - + result end -def _reduce_373(val, _values, result) +def _reduce_391(val, _values, result) result = call_args val - + result end -def _reduce_374(val, _values, result) +def _reduce_392(val, _values, result) result = call_args val - + result end -def _reduce_375(val, _values, result) +def _reduce_393(val, _values, result) result = call_args val - + result end -def _reduce_376(val, _values, result) - result = call_args val - +def _reduce_394(val, _values, result) + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line + result end -def _reduce_377(val, _values, result) +def _reduce_395(val, _values, result) result = args val - + result end -# reduce 378 omitted +# reduce 396 omitted -def _reduce_379(val, _values, result) +def _reduce_397(val, _values, result) result = args val - + result end -def _reduce_380(val, _values, result) +def _reduce_398(val, _values, result) result = args val - + result end -def _reduce_381(val, _values, result) +def _reduce_399(val, _values, result) result = args val - + result end -def _reduce_382(val, _values, result) +def _reduce_400(val, _values, result) result = args val - + result end -def _reduce_383(val, _values, result) +def _reduce_401(val, _values, result) result = args val - + result end -def _reduce_384(val, _values, result) +def _reduce_402(val, _values, result) + result = args(val) << nil + + result +end + +def _reduce_403(val, _values, result) result = args val - + result end -def _reduce_385(val, _values, result) +def _reduce_404(val, _values, result) result = args val - + result end -def _reduce_386(val, _values, result) +def _reduce_405(val, _values, result) result = args val - + result end -def _reduce_387(val, _values, result) +def _reduce_406(val, _values, result) result = args val - + result end -def _reduce_388(val, _values, result) +def _reduce_407(val, _values, result) result = args val - + result end -def _reduce_389(val, _values, result) +def _reduce_408(val, _values, result) result = args val - + result end -def _reduce_390(val, _values, result) +def _reduce_409(val, _values, result) result = args val - + result end -def _reduce_391(val, _values, result) +def _reduce_410(val, _values, result) result = args val - + result end -def _reduce_392(val, _values, result) +def _reduce_411(val, _values, result) result = args val - + result end -def _reduce_393(val, _values, result) - result = args val - +def _reduce_412(val, _values, result) + result = 0 result end -def _reduce_394(val, _values, result) - result = 0 +def _reduce_413(val, _values, result) + self.lexer.command_start = true + result end -# reduce 395 omitted - -def _reduce_396(val, _values, result) +def _reduce_414(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -def _reduce_397(val, _values, result) - self.lexer.command_start = true - result = s(:args) - +def _reduce_415(val, _values, result) + result = s(:args).line lexer.lineno + result end -def _reduce_398(val, _values, result) +def _reduce_416(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -# reduce 399 omitted +# reduce 417 omitted -def _reduce_400(val, _values, result) +def _reduce_418(val, _values, result) result = args val - + result end -def _reduce_401(val, _values, result) +def _reduce_419(val, _values, result) result = args val - + result end -def _reduce_402(val, _values, result) +def _reduce_420(val, _values, result) result = args val - + result end -def _reduce_403(val, _values, result) - result = s(:shadow, val[0].to_sym) - +def _reduce_421(val, _values, result) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line + result end -# reduce 404 omitted +# reduce 422 omitted -def _reduce_405(val, _values, result) +def _reduce_423(val, _values, result) self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest - + result end -def _reduce_406(val, _values, result) - lpar, args, body = val +def _reduce_424(val, _values, result) + lexer.cmdarg.push false + + result +end + +def _reduce_425(val, _values, result) + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend - + result.line = line + self.env.unextend # TODO: dynapush & dynapop + result end -def _reduce_407(val, _values, result) +def _reduce_426(val, _values, result) result = args val - + result end -def _reduce_408(val, _values, result) +def _reduce_427(val, _values, result) result = val[0] result = 0 if result == s(:args) - - result -end -def _reduce_409(val, _values, result) - result = val[1] - result end -def _reduce_410(val, _values, result) +def _reduce_428(val, _values, result) result = val[1] - - result -end -def _reduce_411(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - result end -def _reduce_412(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_429(val, _values, result) + result = val[1] + result end -def _reduce_413(val, _values, result) - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] +def _reduce_430(val, _values, result) + (_, line), iter, _ = val + result = iter.line line - self.env.unextend - result end -def _reduce_414(val, _values, result) +def _reduce_431(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); @@ -5596,465 +5893,523 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] - + cmd, blk = val + + result = blk + result.insert 1, cmd + result end -def _reduce_415(val, _values, result) +def _reduce_432(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_416(val, _values, result) +def _reduce_433(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_417(val, _values, result) +def _reduce_434(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_418(val, _values, result) +def _reduce_435(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_419(val, _values, result) - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body - +def _reduce_436(val, _values, result) + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno + result end -def _reduce_420(val, _values, result) +def _reduce_437(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] - + result end -def _reduce_421(val, _values, result) +def _reduce_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_422(val, _values, result) +def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym - + result end -def _reduce_423(val, _values, result) +def _reduce_440(val, _values, result) result = new_call val[0], :call, val[2], val[1] - + result end -def _reduce_424(val, _values, result) +def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2] - + result end -def _reduce_425(val, _values, result) +def _reduce_442(val, _values, result) result = new_super val[1] - + result end -def _reduce_426(val, _values, result) - result = s(:zsuper) - +def _reduce_443(val, _values, result) + result = s(:zsuper).line lexer.lineno + result end -def _reduce_427(val, _values, result) +def _reduce_444(val, _values, result) result = new_aref val - + result end -def _reduce_428(val, _values, result) +def _reduce_445(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - - result -end -def _reduce_429(val, _values, result) - result = nil # self.env.dynamic.keys - result end -def _reduce_430(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_446(val, _values, result) + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend - + result end -def _reduce_431(val, _values, result) +def _reduce_447(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - + result end -def _reduce_432(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_448(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + result end -def _reduce_433(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_449(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end - result = new_iter nil, args, body - result.line = line +def _reduce_450(val, _values, result) + result = lexer.cmdarg.store(false) + result +end + +def _reduce_451(val, _values, result) + line, cmdarg, param, cmpstmt = val + + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + + result +end + +def _reduce_452(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end + +def _reduce_453(val, _values, result) + lexer.cmdarg.push false + result +end + +def _reduce_454(val, _values, result) + line, _cmdarg, param, cmpstmt = val + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop self.env.unextend - + result end -def _reduce_434(val, _values, result) +def _reduce_455(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_435(val, _values, result) +def _reduce_456(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] - + result end -# reduce 436 omitted +# reduce 457 omitted -# reduce 437 omitted +# reduce 458 omitted -def _reduce_438(val, _values, result) +def _reduce_459(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above - + result end -def _reduce_439(val, _values, result) +def _reduce_460(val, _values, result) result = nil - + result end -def _reduce_440(val, _values, result) - result = s(:array, val[0]) - +def _reduce_461(val, _values, result) + arg, = val + result = s(:array, arg).line arg.line + result end -# reduce 441 omitted +# reduce 462 omitted -# reduce 442 omitted +# reduce 463 omitted -def _reduce_443(val, _values, result) +def _reduce_464(val, _values, result) result = val[1] - + result end -# reduce 444 omitted +# reduce 465 omitted -def _reduce_445(val, _values, result) - _, body = val +def _reduce_466(val, _values, result) + (_, line), body = val + + result = body || s(:nil).line(line) - result = body || s(:nil) - result end -# reduce 446 omitted +# reduce 467 omitted -def _reduce_447(val, _values, result) +def _reduce_468(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -def _reduce_448(val, _values, result) +def _reduce_469(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -# reduce 449 omitted +# reduce 470 omitted + +def _reduce_471(val, _values, result) + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str -def _reduce_450(val, _values, result) - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] - result end -def _reduce_451(val, _values, result) +def _reduce_472(val, _values, result) debug20 23, val, result - + result end -# reduce 452 omitted +# reduce 473 omitted -def _reduce_453(val, _values, result) +def _reduce_474(val, _values, result) result = self.literal_concat val[0], val[1] - + result end -def _reduce_454(val, _values, result) - result = val[1] - +def _reduce_475(val, _values, result) + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str + result end -def _reduce_455(val, _values, result) +def _reduce_476(val, _values, result) result = new_string val - + result end -def _reduce_456(val, _values, result) - result = new_xstring val[1] - +def _reduce_477(val, _values, result) + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? + result end -def _reduce_457(val, _values, result) +def _reduce_478(val, _values, result) result = new_regexp val - + result end -def _reduce_458(val, _values, result) - result = s(:array) - +def _reduce_479(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_459(val, _values, result) +def _reduce_480(val, _values, result) result = val[1] - + result end -def _reduce_460(val, _values, result) +def _reduce_481(val, _values, result) result = new_word_list - + result end -def _reduce_461(val, _values, result) +def _reduce_482(val, _values, result) result = val[0].dup << new_word_list_entry(val) - + result end -# reduce 462 omitted +# reduce 483 omitted -def _reduce_463(val, _values, result) +def _reduce_484(val, _values, result) result = self.literal_concat val[0], val[1] - + result end -def _reduce_464(val, _values, result) - result = s(:array) - +def _reduce_485(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_465(val, _values, result) - result = val[1] - +def _reduce_486(val, _values, result) + result = lexer.lineno result end -def _reduce_466(val, _values, result) - result = new_symbol_list - +def _reduce_487(val, _values, result) + _, line, list, _, = val + list.line = line + result = list + result end -def _reduce_467(val, _values, result) - result = val[0].dup << new_symbol_list_entry(val) - +def _reduce_488(val, _values, result) + result = new_symbol_list.line lexer.lineno + result end -def _reduce_468(val, _values, result) - result = s(:array) - +def _reduce_489(val, _values, result) + list, * = val + result = list.dup << new_symbol_list_entry(val) + result end -def _reduce_469(val, _values, result) +def _reduce_490(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +def _reduce_491(val, _values, result) result = val[1] - + result end -def _reduce_470(val, _values, result) - result = s(:array) - +def _reduce_492(val, _values, result) + result = s(:array).line lexer.lineno # FIX + result end -def _reduce_471(val, _values, result) +def _reduce_493(val, _values, result) result = val[1] - + result end -def _reduce_472(val, _values, result) +def _reduce_494(val, _values, result) result = new_qword_list - + result end -def _reduce_473(val, _values, result) +def _reduce_495(val, _values, result) result = val[0].dup << new_qword_list_entry(val) - + result end -def _reduce_474(val, _values, result) +def _reduce_496(val, _values, result) result = new_qsym_list - + result end -def _reduce_475(val, _values, result) +def _reduce_497(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) - + result end -def _reduce_476(val, _values, result) - result = s(:str, "") - +def _reduce_498(val, _values, result) + result = s(:str, "").line lexer.lineno + result end -def _reduce_477(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_499(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_478(val, _values, result) +def _reduce_500(val, _values, result) result = nil - + result end -def _reduce_479(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_501(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_480(val, _values, result) +def _reduce_502(val, _values, result) result = nil - + result end -def _reduce_481(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_503(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_482(val, _values, result) +def _reduce_504(val, _values, result) result = new_string val - + result end -def _reduce_483(val, _values, result) +def _reduce_505(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? - + lexer.lex_state = EXPR_BEG + result end -def _reduce_484(val, _values, result) - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) - +def _reduce_506(val, _values, result) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line + result end -def _reduce_485(val, _values, result) +def _reduce_507(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value - + lexer.lex_state = EXPR_BEG + result end -def _reduce_486(val, _values, result) - # TODO: tRCURLY -> tSTRING_END +def _reduce_508(val, _values, result) _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -6064,699 +6419,717 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end - + result end -def _reduce_487(val, _values, result) - result = s(:gvar, val[0].to_sym) +def _reduce_509(val, _values, result) + result = s(:gvar, val[0].to_sym).line lexer.lineno result end -def _reduce_488(val, _values, result) - result = s(:ivar, val[0].to_sym) +def _reduce_510(val, _values, result) + result = s(:ivar, val[0].to_sym).line lexer.lineno result end -def _reduce_489(val, _values, result) - result = s(:cvar, val[0].to_sym) +def _reduce_511(val, _values, result) + result = s(:cvar, val[0].to_sym).line lexer.lineno result end -# reduce 490 omitted +# reduce 512 omitted -def _reduce_491(val, _values, result) - lexer.lex_state = :expr_end +def _reduce_513(val, _values, result) + lexer.lex_state = EXPR_END result = val[1].to_sym - + result end -def _reduce_492(val, _values, result) +def _reduce_514(val, _values, result) result = val[0].to_sym - + result end -# reduce 493 omitted +# reduce 515 omitted -# reduce 494 omitted +# reduce 516 omitted -# reduce 495 omitted +# reduce 517 omitted -# reduce 496 omitted +# reduce 518 omitted -def _reduce_497(val, _values, result) - lexer.lex_state = :expr_end - result = val[1] +def _reduce_519(val, _values, result) + _, result, _ = val - result ||= s(:str, "") + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end - + result end -# reduce 498 omitted +# reduce 520 omitted -def _reduce_499(val, _values, result) +def _reduce_521(val, _values, result) result = -val[1] # TODO: pt_testcase - + result end -# reduce 500 omitted +# reduce 522 omitted -# reduce 501 omitted +# reduce 523 omitted -# reduce 502 omitted +# reduce 524 omitted -# reduce 503 omitted +# reduce 525 omitted -# reduce 504 omitted +# reduce 526 omitted -# reduce 505 omitted +# reduce 527 omitted -# reduce 506 omitted +# reduce 528 omitted -# reduce 507 omitted +# reduce 529 omitted -# reduce 508 omitted +# reduce 530 omitted -def _reduce_509(val, _values, result) - result = s(:nil) +def _reduce_531(val, _values, result) + result = s(:nil).line lexer.lineno result end -def _reduce_510(val, _values, result) - result = s(:self) +def _reduce_532(val, _values, result) + result = s(:self).line lexer.lineno result end -def _reduce_511(val, _values, result) - result = s(:true) +def _reduce_533(val, _values, result) + result = s(:true).line lexer.lineno result end -def _reduce_512(val, _values, result) - result = s(:false) +def _reduce_534(val, _values, result) + result = s(:false).line lexer.lineno result end -def _reduce_513(val, _values, result) - result = s(:str, self.file) +def _reduce_535(val, _values, result) + result = s(:str, self.file).line lexer.lineno result end -def _reduce_514(val, _values, result) - result = s(:lit, lexer.lineno) +def _reduce_536(val, _values, result) + result = s(:lit, lexer.lineno).line lexer.lineno result end -def _reduce_515(val, _values, result) +def _reduce_537(val, _values, result) + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end - + result end -def _reduce_516(val, _values, result) +def _reduce_538(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_517(val, _values, result) +def _reduce_539(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_518(val, _values, result) +def _reduce_540(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_519(val, _values, result) +def _reduce_541(val, _values, result) result = self.assignable val[0] debug20 29, val, result - - result -end -def _reduce_520(val, _values, result) - result = s(:nth_ref, val[0]) result end -def _reduce_521(val, _values, result) - result = s(:back_ref, val[0]) +def _reduce_542(val, _values, result) + result = s(:nth_ref, val[0]).line lexer.lineno result end -def _reduce_522(val, _values, result) - result = nil - +def _reduce_543(val, _values, result) + result = s(:back_ref, val[0]).line lexer.lineno result end -def _reduce_523(val, _values, result) - lexer.lex_state = :expr_beg - +def _reduce_544(val, _values, result) + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_524(val, _values, result) +def _reduce_545(val, _values, result) result = val[2] - + result end -def _reduce_525(val, _values, result) - yyerrok +def _reduce_546(val, _values, result) result = nil - debug20 30, val, result - + result end -def _reduce_526(val, _values, result) +def _reduce_547(val, _values, result) result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; - + result end -def _reduce_527(val, _values, result) - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true - +def _reduce_548(val, _values, result) + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + + result +end + +def _reduce_549(val, _values, result) + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_528(val, _values, result) +def _reduce_550(val, _values, result) result = args val - + result end -def _reduce_529(val, _values, result) +def _reduce_551(val, _values, result) result = args val - + result end -def _reduce_530(val, _values, result) +def _reduce_552(val, _values, result) result = args val - + result end -# reduce 531 omitted +# reduce 553 omitted -def _reduce_532(val, _values, result) +def _reduce_554(val, _values, result) result = val[1] - + result end -def _reduce_533(val, _values, result) +def _reduce_555(val, _values, result) result = nil - + result end -def _reduce_534(val, _values, result) +def _reduce_556(val, _values, result) result = args val - + result end -def _reduce_535(val, _values, result) +def _reduce_557(val, _values, result) result = args val - + result end -def _reduce_536(val, _values, result) +def _reduce_558(val, _values, result) result = args val - + result end -def _reduce_537(val, _values, result) +def _reduce_559(val, _values, result) result = args val - + result end -def _reduce_538(val, _values, result) +def _reduce_560(val, _values, result) result = args val - + result end -def _reduce_539(val, _values, result) +def _reduce_561(val, _values, result) result = args val - + result end -def _reduce_540(val, _values, result) +def _reduce_562(val, _values, result) result = args val - + result end -def _reduce_541(val, _values, result) +def _reduce_563(val, _values, result) result = args val - + result end -def _reduce_542(val, _values, result) +def _reduce_564(val, _values, result) result = args val - + result end -def _reduce_543(val, _values, result) +def _reduce_565(val, _values, result) result = args val - + result end -def _reduce_544(val, _values, result) +def _reduce_566(val, _values, result) result = args val - + result end -def _reduce_545(val, _values, result) +def _reduce_567(val, _values, result) result = args val - + result end -def _reduce_546(val, _values, result) +def _reduce_568(val, _values, result) result = args val - + result end -def _reduce_547(val, _values, result) +def _reduce_569(val, _values, result) result = args val - + result end -def _reduce_548(val, _values, result) +def _reduce_570(val, _values, result) result = args val - + result end -def _reduce_549(val, _values, result) +def _reduce_571(val, _values, result) yyerror "formal argument cannot be a constant" - + result end -def _reduce_550(val, _values, result) +def _reduce_572(val, _values, result) yyerror "formal argument cannot be an instance variable" - + result end -def _reduce_551(val, _values, result) +def _reduce_573(val, _values, result) yyerror "formal argument cannot be a global variable" - + result end -def _reduce_552(val, _values, result) +def _reduce_574(val, _values, result) yyerror "formal argument cannot be a class variable" - + result end -# reduce 553 omitted +# reduce 575 omitted -def _reduce_554(val, _values, result) +def _reduce_576(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier - + result end -# reduce 555 omitted +# reduce 577 omitted -def _reduce_556(val, _values, result) +def _reduce_578(val, _values, result) result = val[1] - + result end -def _reduce_557(val, _values, result) - case val[0] +def _reduce_579(val, _values, result) + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end - + result end -def _reduce_558(val, _values, result) +def _reduce_580(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item - + result end -# reduce 559 omitted +# reduce 581 omitted + +def _reduce_582(val, _values, result) + # TODO: new_kw_arg + (label, line), arg = val -def _reduce_560(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) - + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line + result end -def _reduce_561(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_583(val, _values, result) + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line - result = s(:array, s(:kwarg, identifier)) - result end -def _reduce_562(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_584(val, _values, result) + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id, expr).line(line)).line line - result = s(:array, s(:kwarg, identifier, val[1])) - result end -def _reduce_563(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_585(val, _values, result) + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line - result = s(:array, s(:kwarg, identifier)) - result end -# reduce 564 omitted +# reduce 586 omitted -def _reduce_565(val, _values, result) +def _reduce_587(val, _values, result) list, _, item = val result = list << item.last - + result end -# reduce 566 omitted +# reduce 588 omitted -def _reduce_567(val, _values, result) +def _reduce_589(val, _values, result) result = args val - + result end -# reduce 568 omitted +# reduce 590 omitted -# reduce 569 omitted +# reduce 591 omitted + +def _reduce_592(val, _values, result) + name = val[1].to_sym + self.assignable name + result = :"**#{name}" -def _reduce_570(val, _values, result) - result = :"**#{val[1]}" - result end -def _reduce_571(val, _values, result) +def _reduce_593(val, _values, result) result = :"**" - + result end -def _reduce_572(val, _values, result) +def _reduce_594(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names - + result end -def _reduce_573(val, _values, result) +def _reduce_595(val, _values, result) result = self.assignable val[0], val[2] - + result end -def _reduce_574(val, _values, result) - result = s(:block, val[0]) - +def _reduce_596(val, _values, result) + optblk, = val + result = s(:block, optblk).line optblk.line + result end -def _reduce_575(val, _values, result) - result = val[0] - result << val[2] - +def _reduce_597(val, _values, result) + optarg, _, optblk = val + result = optarg + result << optblk + result end -def _reduce_576(val, _values, result) - result = s(:block, val[0]) - +def _reduce_598(val, _values, result) + opt, = val + result = s(:block, opt).line opt.line + result end -def _reduce_577(val, _values, result) +def _reduce_599(val, _values, result) result = self.block_append val[0], val[2] - + result end -# reduce 578 omitted +# reduce 600 omitted -# reduce 579 omitted +# reduce 601 omitted -def _reduce_580(val, _values, result) +def _reduce_602(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" - + result end -def _reduce_581(val, _values, result) +def _reduce_603(val, _values, result) name = :"*" self.env[name] = :lvar result = name - + result end -# reduce 582 omitted +# reduce 604 omitted -# reduce 583 omitted +# reduce 605 omitted -def _reduce_584(val, _values, result) +def _reduce_606(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym - + result end -def _reduce_585(val, _values, result) +def _reduce_607(val, _values, result) result = val[1] - + result end -def _reduce_586(val, _values, result) +def _reduce_608(val, _values, result) result = nil - + result end -# reduce 587 omitted +# reduce 609 omitted + +def _reduce_610(val, _values, result) + lexer.lex_state = EXPR_BEG -def _reduce_588(val, _values, result) - lexer.lex_state = :expr_beg - result end -def _reduce_589(val, _values, result) +def _reduce_611(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit - - result -end -def _reduce_590(val, _values, result) - result = s(:array) - result end -def _reduce_591(val, _values, result) - result = val[0] - +def _reduce_612(val, _values, result) + result = s(:array).line lexer.lineno + result end -# reduce 592 omitted +# reduce 613 omitted + +# reduce 614 omitted -def _reduce_593(val, _values, result) +def _reduce_615(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash - + result end -def _reduce_594(val, _values, result) - result = s(:array, val[0], val[2]) - +def _reduce_616(val, _values, result) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line + result end -def _reduce_595(val, _values, result) - result = s(:array, s(:lit, val[0][0].to_sym), val.last) - +def _reduce_617(val, _values, result) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line + result end -def _reduce_596(val, _values, result) - result = s(:array, s(:kwsplat, val[1])) - +def _reduce_618(val, _values, result) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line + result end -# reduce 597 omitted +# reduce 619 omitted -# reduce 598 omitted +# reduce 620 omitted -# reduce 599 omitted +# reduce 621 omitted -# reduce 600 omitted +# reduce 622 omitted -# reduce 601 omitted +# reduce 623 omitted -# reduce 602 omitted +# reduce 624 omitted -# reduce 603 omitted +# reduce 625 omitted -# reduce 604 omitted +# reduce 626 omitted -# reduce 605 omitted +# reduce 627 omitted -# reduce 606 omitted +# reduce 628 omitted -# reduce 607 omitted +# reduce 629 omitted -# reduce 608 omitted +# reduce 630 omitted -# reduce 609 omitted +# reduce 631 omitted -# reduce 610 omitted +# reduce 632 omitted -# reduce 611 omitted +# reduce 633 omitted -# reduce 612 omitted +# reduce 634 omitted -# reduce 613 omitted +# reduce 635 omitted -# reduce 614 omitted +# reduce 636 omitted -# reduce 615 omitted +# reduce 637 omitted -# reduce 616 omitted +# reduce 638 omitted -# reduce 617 omitted +# reduce 639 omitted -# reduce 618 omitted +# reduce 640 omitted -def _reduce_619(val, _values, result) - yyerrok +# reduce 641 omitted + +# reduce 642 omitted + +def _reduce_643(val, _values, result) + yyerrok result end -# reduce 620 omitted +# reduce 644 omitted -# reduce 621 omitted +# reduce 645 omitted -def _reduce_622(val, _values, result) - yyerrok +def _reduce_646(val, _values, result) + yyerrok result end -def _reduce_623(val, _values, result) - result = nil; +def _reduce_647(val, _values, result) + result = nil; result end diff -Nru ruby-ruby-parser-3.11.0/lib/ruby21_parser.y ruby-ruby-parser-3.15.1/lib/ruby21_parser.y --- ruby-ruby-parser-3.11.0/lib/ruby21_parser.y 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby21_parser.y 2021-01-18 16:48:25.000000000 +0000 @@ -21,35 +21,35 @@ tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG tRATIONAL tIMAGINARY -prechigh - right tBANG tTILDE tUPLUS - right tPOW - right tUMINUS_NUM tUMINUS - left tSTAR2 tDIVIDE tPERCENT - left tPLUS tMINUS - left tLSHFT tRSHFT - left tAMPER2 - left tPIPE tCARET - left tGT tGEQ tLT tLEQ - nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH - left tANDOP - left tOROP - nonassoc tDOT2 tDOT3 - right tEH tCOLON - left kRESCUE_MOD - right tEQL tOP_ASGN - nonassoc kDEFINED - right kNOT - left kOR kAND - nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD - nonassoc tLBRACE_ARG - nonassoc tLOWEST preclow + nonassoc tLOWEST + nonassoc tLBRACE_ARG + nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD + left kOR kAND + right kNOT + nonassoc kDEFINED + right tEQL tOP_ASGN + left kRESCUE_MOD + right tEH tCOLON + nonassoc tDOT2 tDOT3 + left tOROP + left tANDOP + nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH + left tGT tGEQ tLT tLEQ + left tPIPE tCARET + left tAMPER2 + left tLSHFT tRSHFT + left tPLUS tMINUS + left tSTAR2 tDIVIDE tPERCENT # TODO: tSTAR2 -> tMULT + right tUMINUS_NUM tUMINUS + right tPOW + right tBANG tTILDE tUPLUS +prechigh rule program: { - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG } top_compstmt { @@ -58,7 +58,8 @@ top_compstmt: top_stmts opt_terms { - result = val[0] + stmt, _ = val + result = stmt } top_stmts: none @@ -70,14 +71,6 @@ | error top_stmt top_stmt: stmt - { - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - } | klBEGIN { if (self.in_def || self.in_single > 0) then @@ -86,14 +79,40 @@ end self.env.extend } - tLCURLY top_compstmt tRCURLY + begin_block { - result = new_iter s(:preexe), nil, val[3] + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + } + + begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY + { + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt } - bodystmt: compstmt opt_rescue opt_else opt_ensure + bodystmt: compstmt opt_rescue k_else { - result = new_body val + res = _values[-2] + yyerror "else without rescue is useless" unless res + } + compstmt + opt_ensure + { + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + } + | compstmt opt_rescue opt_ensure + { + body, resc, ens = val + + result = new_body [body, resc, nil, ens] } compstmt: stmts opt_terms @@ -102,8 +121,8 @@ } stmts: none - | stmt - | stmts terms stmt + | stmt_or_begin # TODO: newline_node ? + | stmts terms stmt_or_begin { result = self.block_append val[0], val[2] } @@ -113,22 +132,30 @@ debug20 2, val, result } + stmt_or_begin: stmt + | klBEGIN + { + yyerror "BEGIN is permitted only at toplevel" + } + stmt: kALIAS fitem { - lexer.lex_state = :expr_fname - result = self.lexer.lineno + lexer.lex_state = EXPR_FNAME } fitem { - result = s(:alias, val[1], val[3]).line(val[2]) + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line } | kALIAS tGVAR tGVAR { - result = s(:valias, val[1].to_sym, val[2].to_sym) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line } | kALIAS tGVAR tBACK_REF { - result = s(:valias, val[1].to_sym, :"$#{val[2]}") + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line } | kALIAS tGVAR tNTH_REF { @@ -140,54 +167,84 @@ } | stmt kIF_MOD expr_value { - result = new_if val[2], val[0], nil + t, _, c = val + result = new_if c, t, nil } | stmt kUNLESS_MOD expr_value { - result = new_if val[2], nil, val[0] + f, _, c = val + result = new_if c, nil, f } | stmt kWHILE_MOD expr_value { - result = new_while val[0], val[2], true + e, _, c = val + result = new_while e, c, true } | stmt kUNTIL_MOD expr_value { - result = new_until val[0], val[2], true + e, _, c = val + result = new_until e, c, true } | stmt kRESCUE_MOD stmt { - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody } | klEND tLCURLY compstmt tRCURLY { + (_, line), _, stmt, _ = val + if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end - result = new_iter s(:postexe), 0, val[2] + + result = new_iter s(:postexe).line(line), 0, stmt } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } - | var_lhs tOP_ASGN command_call + | lhs tEQL mrhs + { + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + } + | mlhs tEQL mrhs_arg + { + result = new_masgn val[0], val[2] + } + | expr + + command_asgn: lhs tEQL command_rhs + { + result = new_assign val[0], val[2] + } + # | lhs tEQL command_asgn + # { + # result = new_assign val[0], val[2] + # } + | var_lhs tOP_ASGN command_rhs { result = new_op_asgn val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn1 val } - | primary_value call_op tIDENTIFIER tOP_ASGN command_call + | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } - | primary_value call_op tCONSTANT tOP_ASGN command_call + | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' @@ -195,55 +252,53 @@ end result.line = val[0].line } - | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call + | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | backref tOP_ASGN command_call + | backref tOP_ASGN command_rhs { self.backref_assign_error val[0] } - | lhs tEQL mrhs - { - result = new_assign val[0], s(:svalue, val[2]) - } - | mlhs tEQL mrhs_arg - { - result = new_masgn val[0], val[2] - } - | expr - command_asgn: lhs tEQL command_call - { - result = new_assign val[0], val[2] - } - | lhs tEQL command_asgn + command_rhs: command_call =tOP_ASGN { - result = new_assign val[0], val[2] + expr, = val + result = value_expr expr } + | command_asgn expr: command_call | expr kAND expr { - result = logical_op :and, val[0], val[2] + lhs, _, rhs = val + result = logical_op :and, lhs, rhs } | expr kOR expr { - result = logical_op :or, val[0], val[2] + lhs, _, rhs = val + result = logical_op :or, lhs, rhs } | kNOT opt_nl expr { - result = s(:call, val[2], :"!") + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op } | tBANG command_call { - result = s(:call, val[1], :"!") + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y } | arg @@ -252,54 +307,71 @@ result = value_expr(val[0]) } + expr_value_do: { + lexer.cond.push true + } + expr_value do + { + lexer.cond.pop + } + { + _, expr, _, _ = val + result = expr + } + command_call: command | block_command block_command: block_call - | block_call dot_or_colon operation2 command_args + | block_call call_op2 operation2 command_args { - result = new_call val[0], val[2].to_sym, val[3] + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line } cmd_brace_block: tLBRACE_ARG { - self.env.extend(:dynamic) + # self.env.extend(:dynamic) result = self.lexer.lineno } - opt_block_param + brace_body tRCURLY { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - result = new_iter nil, val[2], val[4] - result.line = val[1] + _, line, body, _ = val - self.env.unextend + result = body + result.line = line + + # self.env.unextend } fcall: operation { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno } command: fcall command_args =tLOWEST { - result = val[0].concat val[1].sexp_body # REFACTOR pattern + call, args = val + result = call.concat args.sexp_body } | fcall command_args cmd_brace_block { - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] + call, args, block = val + + result = call.concat args.sexp_body - result, operation = val[2], result + if block then + block_dup_check result, block + + result, operation = block, result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { - result = new_call val[0], val[2].to_sym, val[3], val[1] + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop } | primary_value call_op operation2 command_args cmd_brace_block { @@ -331,17 +403,19 @@ } | kYIELD command_args { - result = new_yield val[1] + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield } - | kRETURN call_args + | k_return call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) + (_, line), args = val + result = s(:break, ret_args(args)).line line } | kNEXT call_args { @@ -358,56 +432,79 @@ mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { - result = s(:masgn, s(:array, val[1])) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l } mlhs_basic: mlhs_head { - result = s(:masgn, val[0]) + head, = val + result = s(:masgn, head).line head.line } | mlhs_head mlhs_item { - result = s(:masgn, val[0] << val[1].compact) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line } | mlhs_head tSTAR mlhs_node { - result = s(:masgn, val[0] << s(:splat, val[2])) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val - result = list_append ary1, s(:splat, splat) + result = list_append ary1, s(:splat, splat).line(splat.line) result.concat ary2.sexp_body - result = s(:masgn, result) + result = s(:masgn, result).line result.line } | mlhs_head tSTAR { - result = s(:masgn, val[0] << s(:splat)) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l } | mlhs_head tSTAR tCOMMA mlhs_post { - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR mlhs_node { - result = s(:masgn, s(:array, s(:splat, val[1]))) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l } | tSTAR mlhs_node tCOMMA mlhs_post { - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR { - result = s(:masgn, s(:array, s(:splat))) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l } | tSTAR tCOMMA mlhs_post { - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l } mlhs_item: mlhs_node @@ -418,7 +515,8 @@ mlhs_head: mlhs_item tCOMMA { - result = s(:array, val[0]) + lhs, _ = val + result = s(:array, lhs).line lhs.line } | mlhs_head mlhs_item tCOMMA { @@ -427,7 +525,8 @@ mlhs_post: mlhs_item { - result = s(:array, val[0]) + item, = val + result = s(:array, item).line item.line } | mlhs_post tCOMMA mlhs_item { @@ -452,7 +551,8 @@ } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + recv, _, id = val + result = new_attrasgn recv, id } | primary_value call_op tCONSTANT { @@ -465,7 +565,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l } | tCOLON3 tCONSTANT { @@ -474,7 +577,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, nil, s(:colon3, val[1].to_sym)) + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -483,24 +589,31 @@ lhs: user_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line } | keyword_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { - result = self.aryset val[0], val[2] + lhs, _, args, _ = val + result = self.aryset lhs, args } | primary_value call_op tIDENTIFIER # REFACTOR { - result = new_attrasgn val[0], val[2], val[1] + lhs, op, id = val + result = new_attrasgn lhs, id, op } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + lhs, _, id = val + result = new_attrasgn lhs, id } | primary_value call_op tCONSTANT # REFACTOR? { @@ -508,21 +621,27 @@ } | primary_value tCOLON2 tCONSTANT { + expr, _, id = val + if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l } | tCOLON3 tCONSTANT { + _, id = val + if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -537,7 +656,8 @@ cpath: tCOLON3 cname { - result = s(:colon3, val[1].to_sym) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno } | cname { @@ -545,27 +665,32 @@ } | primary_value tCOLON2 cname { - result = s(:colon2, val[0], val[2].to_sym) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line } fname: tIDENTIFIER | tCONSTANT | tFID | op { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[0] } | reswords { - lexer.lex_state = :expr_end - result = val[0] + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym } fsym: fname | symbol fitem: fsym { - result = s(:lit, val[0].to_sym) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno } | dsym @@ -576,7 +701,7 @@ | undef_list tCOMMA { - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fitem { @@ -588,6 +713,8 @@ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 + # TODO: tUBANG dead? + | tUBANG reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE @@ -599,68 +726,72 @@ | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL - arg: lhs tEQL arg + arg: lhs tEQL arg_rhs { result = new_assign val[0], val[2] } - | lhs tEQL arg kRESCUE_MOD arg - { - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - } - | var_lhs tOP_ASGN arg + | var_lhs tOP_ASGN arg_rhs { result = new_op_asgn val } - | var_lhs tOP_ASGN arg kRESCUE_MOD arg + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) + result = new_op_asgn1 val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg + | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn2 val } - | primary_value call_op tIDENTIFIER tOP_ASGN arg + | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = new_op_asgn2 val } - | primary_value call_op tCONSTANT tOP_ASGN arg + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { - result = new_op_asgn2 val + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg + | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] } - | primary_value tCOLON2 tCONSTANT tOP_ASGN arg + | tCOLON3 tCONSTANT { - yyerror "constant re-assignment" + result = self.lexer.lineno } - | tCOLON3 tCONSTANT tOP_ASGN arg + tOP_ASGN arg_rhs { - yyerror "constant re-assignment" + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] } - | backref tOP_ASGN arg + | backref tOP_ASGN arg_rhs { - self.backref_assign_error val[0] + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end } | arg tPLUS arg @@ -689,7 +820,9 @@ } | tUMINUS_NUM simple_numeric tPOW arg { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + } | tUPLUS arg { @@ -715,22 +848,7 @@ { result = new_call val[0], :"<=>", argl(val[2]) } - | arg tGT arg - { - result = new_call val[0], :">", argl(val[2]) - } - | arg tGEQ arg - { - result = new_call val[0], :">=", argl(val[2]) - } - | arg tLT arg - { - result = new_call val[0], :"<", argl(val[2]) - } - | arg tLEQ arg - { - result = new_call val[0], :"<=", argl(val[2]) - } + | rel_expr =tCMP | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) @@ -745,15 +863,19 @@ } | arg tMATCH arg { - result = new_match val[0], val[2] + lhs, _, rhs = val + result = new_match lhs, rhs } | arg tNMATCH arg { - result = s(:not, new_match(val[0], val[2])) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line } | tBANG arg { - result = new_call val[1], :"!" + _, arg = val + result = new_call arg, :"!" + result.line arg.line } | tTILDE arg { @@ -781,14 +903,33 @@ } | kDEFINED opt_nl arg { - result = s(:defined, val[2]) + (_, line), _, arg = val + result = s(:defined, arg).line line } | arg tEH arg opt_nl tCOLON arg { - result = s(:if, val[0], val[2], val[5]) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line } | primary + relop: tGT + | tLT + | tGEQ + | tLEQ + + rel_expr: arg relop arg =tGT + { + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + } + | rel_expr relop arg =tGT + { + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + } + arg_value: arg { result = value_expr(val[0]) @@ -808,22 +949,28 @@ result = args [array_to_hash(val[0])] } + arg_rhs: arg =tOP_ASGN + | arg kRESCUE_MOD arg + { + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + } + paren_args: tLPAREN2 opt_call_args rparen { - result = val[1] + _, args, _ = val + result = args } opt_paren_args: none | paren_args opt_call_args: none - { - result = val[0] - } | call_args - { - result = val[0] - } | args tCOMMA { result = args val @@ -845,17 +992,14 @@ | args opt_block_arg { result = call_args val - result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] + result = call_args [array_to_hash(val[0]), val[1]] } | args tCOMMA assocs opt_block_arg { - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] + result = call_args [val[0], array_to_hash(val[2]), val[3]] } | block_arg { @@ -863,18 +1007,45 @@ } command_args: { - result = lexer.cmdarg.stack.dup # TODO: smell? + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead } call_args { - lexer.cmdarg.stack.replace val[0] - result = val[1] + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args } block_arg: tAMPER arg_value { - result = s(:block_pass, val[1]) + _, arg = val + result = s(:block_pass, arg).line arg.line } opt_block_arg: tCOMMA block_arg @@ -885,19 +1056,27 @@ args: arg_value { - result = s(:array, val[0]) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno } | tSTAR arg_value { - result = s(:array, s(:splat, val[1])) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line } | args tCOMMA arg_value { - result = self.list_append val[0], val[2] + args, _, id = val + result = self.list_append args, id } | args tCOMMA tSTAR arg_value { - result = self.list_append val[0], s(:splat, val[3]) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) } mrhs_arg: mrhs @@ -915,11 +1094,14 @@ } | args tCOMMA tSTAR arg_value { - result = self.arg_concat val[0], val[3] + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat } | tSTAR arg_value { - result = s(:splat, val[1]) + _, arg = val + result = s(:splat, arg).line arg.line } primary: literal @@ -934,58 +1116,65 @@ | backref | tFID { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call nil, msg.to_sym } - | kBEGIN + | k_begin { + lexer.cmdarg.push false result = self.lexer.lineno } - bodystmt kEND + bodystmt k_end { - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] + lexer.cmdarg.pop + result = new_begin val } - | tLPAREN_ARG rparen + | tLPAREN_ARG { - debug20 13, val, result + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno } - | tLPAREN_ARG + rparen { - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these + _, line, _ = val + result = s(:begin).line line } - expr + | tLPAREN_ARG + stmt { - lexer.lex_state = :expr_endarg + lexer.lex_state = EXPR_ENDARG } rparen { - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt } | tLPAREN compstmt tRPAREN { - result = val[1] || s(:nil) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true } | primary_value tCOLON2 tCONSTANT { - result = s(:colon2, val[0], val[2].to_sym) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line } | tCOLON3 tCONSTANT { - result = s(:colon3, val[1].to_sym) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno } - | tLBRACK aref_args tRBRACK + | tLBRACK { result = lexer.lineno } aref_args tRBRACK { - result = val[1] || s(:array) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args + result.line line } | tLBRACE { @@ -995,9 +1184,10 @@ { result = new_hash val } - | kRETURN + | k_return { - result = s(:return) + (_, line), = val + result = s(:return).line line } | kYIELD tLPAREN2 call_args rparen { @@ -1013,11 +1203,14 @@ } | kDEFINED opt_nl tLPAREN2 expr rparen { - result = s(:defined, val[3]) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line } | kNOT tLPAREN2 expr rparen { - result = s(:call, val[2], :"!") + _, _, lhs, _ = val + result = new_call lhs, :"!" } | kNOT tLPAREN2 rparen { @@ -1025,11 +1218,11 @@ } | fcall brace_block { - oper, iter = val[0], val[1] - call = oper # FIX + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line + # FIX: probably not: call.line = iter.line } | method_call | method_call brace_block @@ -1043,61 +1236,42 @@ { result = val[1] # TODO: fix lineno } - | kIF expr_value then compstmt if_tail kEND - { - result = new_if val[1], val[3], val[4] - } - | kUNLESS expr_value then compstmt opt_else kEND - { - result = new_if val[1], val[4], val[3] - } - | kWHILE - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_if expr_value then compstmt if_tail k_end { - result = new_while val[5], val[2], true + _, c, _, t, f, _ = val + result = new_if c, t, f } - | kUNTIL + | k_unless expr_value then compstmt opt_else k_end { - lexer.cond.push true + _, c, _, t, f, _ = val + result = new_if c, f, t } - expr_value do + | k_while expr_value_do compstmt k_end { - lexer.cond.pop + _, cond, body, _ = val + result = new_while body, cond, true } - compstmt kEND + | k_until expr_value_do compstmt k_end { - result = new_until val[5], val[2], true + _, cond, body, _ = val + result = new_until body, cond, true } - | kCASE expr_value opt_terms case_body kEND + | k_case expr_value opt_terms case_body k_end { (_, line), expr, _, body, _ = val result = new_case expr, body, line } - | kCASE opt_terms case_body kEND + | k_case opt_terms case_body k_end { (_, line), _, body, _ = val result = new_case nil, body, line } - | kFOR for_var kIN + | k_for for_var kIN expr_value_do compstmt k_end { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop + _, var, _, iter, body, _ = val + result = new_for iter, var, body } - compstmt kEND - { - result = new_for val[4], val[1], val[7] - } - | kCLASS + | k_class { result = self.lexer.lineno } @@ -1109,13 +1283,13 @@ end self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kCLASS tLSHFT + | k_class tLSHFT { result = self.lexer.lineno } @@ -1130,13 +1304,13 @@ self.in_single = 0 self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kMODULE + | k_module { result = self.lexer.lineno } @@ -1148,74 +1322,90 @@ self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kDEF fname + | k_def fname { - result = [self.in_def, self.lexer.cmdarg.stack.dup] + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt { result = lexer.lineno } k_end { - in_def, cmdarg = val[2] + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body } - | kDEF singleton dot_or_colon + | k_def singleton dot_or_colon { - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fname { - self.in_single += 1 + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt k_end { - line, cmdarg = val[5] - result = new_defs val - result[3].line line + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body } | kBREAK { - result = s(:break) + (_, line), = val + result = s(:break).line line } | kNEXT { - result = s(:next) + (_, line), = val + result = s(:next).line line } | kREDO { - result = s(:redo) + (_, line), = val + result = s(:redo).line line } | kRETRY { - result = s(:retry) + (_, line), = val + result = s(:retry).line line } primary_value: primary @@ -1234,7 +1424,15 @@ k_class: kCLASS k_module: kMODULE k_def: kDEF + k_do: kDO + k_do_block: kDO_BLOCK + k_rescue: kRESCUE + k_ensure: kENSURE + k_when: kWHEN + k_else: kELSE + k_elsif: kELSIF k_end: kEND + k_return: kRETURN then: term | kTHEN @@ -1244,9 +1442,11 @@ | kDO_COND if_tail: opt_else - | kELSIF expr_value then compstmt if_tail + | k_elsif expr_value then compstmt if_tail { - result = s(:if, val[1], val[3], val[4]) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line } opt_else: none @@ -1269,7 +1469,9 @@ f_marg_list: f_marg { - result = s(:array, val[0]) + sym, = val + + result = s(:array, sym).line lexer.lineno } | f_marg_list tCOMMA f_marg { @@ -1343,7 +1545,9 @@ } | f_block_arg { - result = call_args val + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line } opt_block_args_tail: tCOMMA block_args_tail @@ -1374,7 +1578,7 @@ } | f_arg tCOMMA { - result = args val + result = args(val) << nil } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { @@ -1415,18 +1619,22 @@ opt_block_param: none { result = 0 } | block_param_def + { + self.lexer.command_start = true + } block_param_def: tPIPE opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } | tOROP { - self.lexer.command_start = true - result = s(:args) + result = s(:args).line lexer.lineno } | tPIPE block_param opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } @@ -1447,26 +1655,33 @@ bvar: tIDENTIFIER { - result = s(:shadow, val[0].to_sym) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line } | f_bad_arg lambda: { self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } - f_larglist lambda_body + f_larglist + { + lexer.cmdarg.push false + } + lambda_body { - lpar, args, body = val + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend + result.line = line + self.env.unextend # TODO: dynapush & dynapop } f_larglist: tLPAREN2 f_args opt_bv_decl rparen @@ -1483,28 +1698,15 @@ { result = val[1] } - | kDO_LAMBDA compstmt kEND + | kDO_LAMBDA bodystmt kEND { result = val[1] } - do_block: kDO_BLOCK - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt kEND + do_block: k_do_block do_body kEND { - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] - - self.env.unextend + (_, line), iter, _ = val + result = iter.line line } block_call: command do_block @@ -1518,14 +1720,16 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] + cmd, blk = val + + result = blk + result.insert 1, cmd } - | block_call dot_or_colon operation2 opt_paren_args + | block_call call_op2 operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } - | block_call dot_or_colon operation2 opt_paren_args brace_block + | block_call call_op2 operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val @@ -1534,7 +1738,7 @@ result = iter2 } - | block_call dot_or_colon operation2 command_args do_block + | block_call call_op2 operation2 command_args do_block { iter1, _, name, args, iter2 = val @@ -1550,8 +1754,10 @@ } paren_args { - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno } | primary_value call_op operation2 opt_paren_args { @@ -1579,7 +1785,7 @@ } | kSUPER { - result = s(:zsuper) + result = s(:zsuper).line lexer.lineno } | primary_value tLBRACK2 opt_call_args rbracket { @@ -1591,39 +1797,55 @@ self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY + brace_body tRCURLY { - _, line, args, _, body, _ = val + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend } - | kDO + | k_do { self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + do_body kEND { - result = nil # self.env.dynamic.keys + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend } - compstmt kEND + + brace_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { result = lexer.cmdarg.store(false) } + opt_block_param compstmt { - _, line, args, _, body, _ = val + line, cmdarg, param, cmpstmt = val - result = new_iter nil, args, body - result.line = line + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + } + do_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { lexer.cmdarg.push false } + opt_block_param + compstmt + { + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop self.env.unextend } - case_body: kWHEN + case_body: k_when { result = self.lexer.lineno } @@ -1636,12 +1858,12 @@ cases: opt_else | case_body - opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue + opt_rescue: k_rescue exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) @@ -1654,7 +1876,8 @@ exc_list: arg_value { - result = s(:array, val[0]) + arg, = val + result = s(:array, arg).line arg.line } | mrhs | none @@ -1665,28 +1888,33 @@ } | none - opt_ensure: kENSURE compstmt + opt_ensure: k_ensure compstmt { - _, body = val + (_, line), body = val - result = body || s(:nil) + result = body || s(:nil).line(line) } | none literal: numeric { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | symbol { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | dsym strings: string { - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str } string: tCHAR @@ -1701,7 +1929,11 @@ string1: tSTRING_BEG string_contents tSTRING_END { - result = val[1] + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str } | tSTRING { @@ -1710,7 +1942,8 @@ xstring: tXSTRING_BEG xstring_contents tSTRING_END { - result = new_xstring val[1] + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? } regexp: tREGEXP_BEG regexp_contents tREGEXP_END @@ -1720,7 +1953,7 @@ words: tWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tWORDS_BEG word_list tSTRING_END { @@ -1744,25 +1977,28 @@ symbols: tSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } - | tSYMBOLS_BEG symbol_list tSTRING_END + | tSYMBOLS_BEG { result = lexer.lineno } symbol_list tSTRING_END { - result = val[1] + _, line, list, _, = val + list.line = line + result = list } symbol_list: none { - result = new_symbol_list + result = new_symbol_list.line lexer.lineno } | symbol_list word tSPACE { - result = val[0].dup << new_symbol_list_entry(val) + list, * = val + result = list.dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tQWORDS_BEG qword_list tSTRING_END { @@ -1771,7 +2007,7 @@ qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno # FIX } | tQSYMBOLS_BEG qsym_list tSTRING_END { @@ -1798,11 +2034,12 @@ string_contents: none { - result = s(:str, "") + result = s(:str, "").line lexer.lineno } | string_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } xstring_contents: none @@ -1811,7 +2048,8 @@ } | xstring_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } regexp_contents: none @@ -1820,7 +2058,8 @@ } | regexp_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } string_content: tSTRING_CONTENT @@ -1832,42 +2071,46 @@ result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? + lexer.lex_state = EXPR_BEG } string_dvar { - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value + lexer.lex_state = EXPR_BEG } - compstmt tRCURLY + compstmt + tSTRING_DEND { - # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -1877,24 +2120,24 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end } - string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } - | tIVAR { result = s(:ivar, val[0].to_sym) } - | tCVAR { result = s(:cvar, val[0].to_sym) } + string_dvar: tGVAR { result = s(:gvar, val[0].to_sym).line lexer.lineno } + | tIVAR { result = s(:ivar, val[0].to_sym).line lexer.lineno } + | tCVAR { result = s(:cvar, val[0].to_sym).line lexer.lineno } | backref symbol: tSYMBEG sym { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[1].to_sym } | tSYMBOL @@ -1906,18 +2149,19 @@ dsym: tSYMBEG xstring_contents tSTRING_END { - lexer.lex_state = :expr_end - result = val[1] + _, result, _ = val + + lexer.lex_state = EXPR_END - result ||= s(:str, "") + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end @@ -1940,19 +2184,20 @@ | tCONSTANT | tCVAR -keyword_variable: kNIL { result = s(:nil) } - | kSELF { result = s(:self) } - | kTRUE { result = s(:true) } - | kFALSE { result = s(:false) } - | k__FILE__ { result = s(:str, self.file) } - | k__LINE__ { result = s(:lit, lexer.lineno) } +keyword_variable: kNIL { result = s(:nil).line lexer.lineno } + | kSELF { result = s(:self).line lexer.lineno } + | kTRUE { result = s(:true).line lexer.lineno } + | kFALSE { result = s(:false).line lexer.lineno } + | k__FILE__ { result = s(:str, self.file).line lexer.lineno } + | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno } | k__ENCODING__ { + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end } @@ -1977,43 +2222,42 @@ debug20 29, val, result } - backref: tNTH_REF { result = s(:nth_ref, val[0]) } - | tBACK_REF { result = s(:back_ref, val[0]) } + backref: tNTH_REF { result = s(:nth_ref, val[0]).line lexer.lineno } + | tBACK_REF { result = s(:back_ref, val[0]).line lexer.lineno } - superclass: term + superclass: tLT { - result = nil - } - | tLT - { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG + lexer.command_start = true } expr_value term { result = val[2] } - | error term + | none { - yyerrok result = nil - debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; } - | f_args term - { - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true + | { + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + } + f_args term + { + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg @@ -2134,12 +2378,13 @@ f_arg: f_arg_item { - case val[0] + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" @@ -2152,7 +2397,7 @@ if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item @@ -2162,38 +2407,42 @@ f_kw: f_label arg_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? + # TODO: new_kw_arg + (label, line), arg = val + identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line } | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } f_block_kw: f_label primary_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + result = s(:array, s(:kwarg, id, expr).line(line)).line line } | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } f_block_kwarg: f_block_kw @@ -2214,7 +2463,9 @@ f_kwrest: kwrest_mark tIDENTIFIER { - result = :"**#{val[1]}" + name = val[1].to_sym + self.assignable name + result = :"**#{name}" } | kwrest_mark { @@ -2234,17 +2485,20 @@ f_block_optarg: f_block_opt { - result = s(:block, val[0]) + optblk, = val + result = s(:block, optblk).line optblk.line } | f_block_optarg tCOMMA f_block_opt { - result = val[0] - result << val[2] + optarg, _, optblk = val + result = optarg + result << optblk } f_optarg: f_opt { - result = s(:block, val[0]) + opt, = val + result = s(:block, opt).line opt.line } | f_optarg tCOMMA f_opt { @@ -2289,7 +2543,7 @@ singleton: var_ref | tLPAREN2 { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG } expr rparen { @@ -2298,14 +2552,11 @@ result.sexp_type == :lit } - assoc_list: none # [!nil] + assoc_list: none { - result = s(:array) - } - | assocs trailer # [!nil] - { - result = val[0] + result = s(:array).line lexer.lineno } + | assocs trailer assocs: assoc | assocs tCOMMA assoc @@ -2319,15 +2570,21 @@ assoc: arg_value tASSOC arg_value { - result = s(:array, val[0], val[2]) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line } - | tLABEL opt_nl arg_value + | tLABEL arg_value { - result = s(:array, s(:lit, val[0][0].to_sym), val.last) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line } | tDSTAR arg_value { - result = s(:array, s(:kwsplat, val[1])) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line } operation: tIDENTIFIER | tCONSTANT | tFID @@ -2335,6 +2592,10 @@ operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT + + call_op2: call_op + | tCOLON2 + opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN @@ -2354,6 +2615,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: diff -Nru ruby-ruby-parser-3.11.0/lib/ruby22_parser.rb ruby-ruby-parser-3.15.1/lib/ruby22_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby22_parser.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby22_parser.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,7 +1,7 @@ # # DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.4.14 -# from Racc grammer file "". +# This file is automatically generated by Racc 1.5.0 +# from Racc grammar file "". # require 'racc/parser.rb' @@ -10,6 +10,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: @@ -19,883 +20,892 @@ ##### State transition tables begin ### clist = [ -'-607,-100,273,-102,584,-103,271,-607,-607,-607,756,271,665,-607,-607', -'271,-607,-615,825,-516,590,221,-509,-103,242,-607,-516,271,584,-509', -'584,-105,-101,636,584,-516,-607,-607,584,-607,-607,-607,-607,-607,529', -'-101,664,218,219,-106,652,83,222,708,-94,736,239,222,-98,84,241,240', -'237,238,-102,-100,-99,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607', -'-607,-607,-607,-607,-603,736,-607,-607,-607,736,649,218,219,-504,-607', -'-418,270,-607,218,219,-504,270,-607,-105,-607,270,-607,-607,-607,-607', -'-607,-607,-607,-104,-607,-607,-607,270,-100,755,-102,116,-103,-100,-94', -'-102,115,-103,-289,-607,-607,-94,-93,-603,-607,-289,-289,-289,116,-96', -'222,-289,-289,115,-289,116,-102,116,939,-101,115,116,115,-92,-101,116', -'115,-97,116,-94,115,707,-94,115,-289,-289,-89,-289,-289,-289,-289,-289', -'-93,-91,-90,629,-94,626,-84,-604,-92,222,610,747,264,116,-518,748,222', -'116,115,265,-70,-262,115,-289,-289,-289,-289,-289,-289,-289,-289,-289', -'-289,-289,-289,-289,-289,855,825,-289,-289,-289,610,648,-518,-519,-95', -'-289,634,529,-289,94,95,94,95,-289,-89,-289,627,-289,-289,-289,-289', -'-289,-289,-289,628,-289,625,-289,-98,612,611,608,242,-92,-600,610,242', -'887,242,-607,-289,-289,790,-95,776,-289,-607,-607,-607,-96,680,-607', -'-607,-607,242,-607,222,-104,-98,-99,222,612,611,-105,-607,-607,-607', -'-607,-92,116,768,-92,-601,624,115,-607,-607,621,-607,-607,-607,-607', -'-607,617,569,-92,-91,-504,96,97,96,97,610,-100,-504,572,612,611,-101', -'-600,-100,222,791,-504,-607,766,-607,-607,-607,-607,-607,-607,-607,-607', -'-607,-607,-607,-607,-607,-607,456,-600,-607,-607,-607,-507,792,-607', -'580,579,-607,-84,-507,-607,-607,-427,-607,-601,-607,610,-607,-507,-607', -'-607,-607,-607,-607,-607,-607,569,-607,-607,-607,612,611,630,665,-607', -'-103,-601,572,684,573,610,-607,-607,-607,-607,-607,-603,-607,-289,-607', -'-607,222,665,-106,1009,-289,-289,-289,642,-102,-289,-289,-289,665,-289', -'-427,215,664,-607,222,580,579,-427,966,-289,-289,-289,612,611,618,541', -'-427,752,543,-289,-289,664,-289,-289,-289,-289,-289,564,534,561,560', -'559,664,562,-427,-92,612,611,613,573,564,610,561,560,559,695,562,700', -'-607,-101,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', -'-289,-289,-519,216,-289,-289,-289,215,793,-289,-507,701,-289,610,214', -'-289,-289,-507,-289,704,-289,504,-289,212,-289,-289,-289,-289,-289,-289', -'-289,-515,-289,541,-289,710,540,713,-515,-607,612,611,608,985,-90,-97', -'-607,-289,-289,-289,-289,-603,-289,-507,-289,-607,851,643,-99,-106,-507', -'-507,-507,-510,-104,-507,-507,-507,714,-507,-510,264,716,-607,612,611', -'623,-507,265,-507,-507,-507,242,116,610,218,219,615,115,-507,-507,-513', -'-507,-507,-507,-507,-507,541,-513,-94,543,718,-514,720,564,-511,561', -'560,559,-514,562,408,-511,-103,239,728,410,409,241,240,-507,-507,-507', -'-507,-507,-507,-507,-507,-507,-507,-507,-507,-507,-507,116,729,-507', -'-507,-507,115,-507,-507,722,730,-507,612,611,-507,-507,732,-507,725', -'-507,595,-507,590,-507,-507,-507,-507,-507,-507,-507,739,-507,594,-507', -'564,-512,561,560,559,569,562,541,-512,926,543,400,-507,-507,-507,-507', -'572,-507,-504,-507,590,-289,218,219,769,-504,-504,-504,-289,-507,-504', -'-504,-504,-604,-504,116,-290,-289,567,550,115,770,-504,-290,-504,-504', -'-504,577,576,580,579,116,-290,771,-504,-504,115,-504,-504,-504,-504', -'-504,564,-263,561,560,559,544,562,564,777,561,560,559,538,562,564,242', -'561,560,559,489,562,573,530,-504,-504,-504,-504,-504,-504,-504,-504', -'-504,-504,-504,-504,-504,-504,489,722,-504,-504,-504,-280,-504,-504', -'722,526,-504,273,-280,-504,-504,722,-504,725,-504,222,-504,-280,-504', -'-504,-504,-504,-504,-504,-504,242,-504,564,-504,561,560,559,963,562', -'561,560,559,795,562,261,-337,-504,-504,-504,-504,987,-504,-337,-504', -'502,296,72,73,74,12,60,-337,239,-504,66,67,241,240,504,70,722,68,69', -'71,33,34,75,76,3,931,855,825,222,32,31,30,104,103,105,106,878,879,22', -'276,880,110,111,653,11,48,695,13,108,107,109,98,59,100,99,101,222,102', -'110,111,523,94,95,273,45,46,44,242,246,251,252,253,248,250,258,259,254', -'255,-289,235,236,-290,116,256,257,-289,43,115,-290,36,-604,273,61,62', -'-289,116,63,-290,38,239,115,245,47,241,240,237,238,249,247,243,23,244', -'580,579,-289,91,83,85,86,87,89,-289,218,219,84,92,-604,260,695,-239', -'-289,242,65,218,219,81,88,90,825,222,96,97,296,72,73,74,12,60,516,515', -'-516,66,67,222,222,849,70,-516,68,69,71,33,34,75,76,222,-516,825,859', -'-69,32,31,30,104,103,105,106,222,222,22,504,502,499,273,637,11,48,489', -'13,108,107,109,98,59,100,99,101,221,102,110,111,-264,94,95,458,45,46', -'44,242,246,251,252,253,248,250,258,259,254,255,-517,235,236,215,457', -'256,257,-517,43,886,1016,36,455,889,61,62,-517,713,63,1014,38,239,892', -'245,47,241,240,237,238,249,247,243,23,244,895,897,215,91,83,85,86,87', -'89,593,215,899,84,92,222,260,901,966,591,902,65,411,695,81,88,90,752', -'112,96,97,296,72,73,74,12,60,910,406,-280,66,67,-262,914,916,70,-280', -'68,69,71,33,34,75,76,917,-280,222,713,920,32,31,30,104,103,105,106,922', -'924,22,926,926,222,932,653,11,48,934,13,108,107,109,98,59,100,99,101', -'390,102,110,111,936,94,95,387,45,46,44,242,246,251,252,253,248,250,258', -'259,254,255,215,235,236,215,384,256,257,532,43,381,522,36,357,1005,61', -'62,454,222,63,520,38,239,946,245,47,241,240,237,238,249,247,243,23,244', -'947,222,215,91,83,85,86,87,89,750,-517,950,84,92,-265,260,222,-517,752', -'960,65,321,967,81,88,90,-517,968,96,97,296,72,73,74,12,60,970,971,-290', -'66,67,320,987,261,70,-290,68,69,71,33,34,75,76,989,-290,990,994,713', -'32,31,30,104,103,105,106,999,963,22,561,560,559,1001,562,11,48,1003', -'13,108,107,109,98,59,100,99,101,1005,102,110,111,1005,94,95,1012,45', -'46,44,242,246,251,252,253,248,250,258,259,254,255,215,235,236,1017,1018', -'256,257,453,43,926,926,36,926,1023,61,62,454,987,63,217,38,239,211,245', -'47,241,240,237,238,249,247,243,23,244,-604,-603,700,91,83,85,86,87,89', -'210,987,1046,84,92,1047,260,1048,1049,1005,1005,65,1005,222,81,88,90', -'209,641,96,97,296,72,73,74,12,60,640,222,,66,67,,,,70,,68,69,71,33,34', -'75,76,119,120,121,122,123,32,31,30,104,103,105,106,,,22,119,120,121', -'122,123,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', -'45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256', -'257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', -'23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97', -'296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,119,120,121', -'122,123,32,31,30,104,103,105,106,,,22,119,120,121,122,123,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251', -'252,253,248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62', -',,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85', -'86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60', -',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', -',22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256', -'257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', -'23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97', -'8,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254', -'255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240', -'237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65', -',,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248', -'250,258,259,254,255,,235,236,,,256,257,,43,,,298,,,61,62,,,63,,38,239', -',245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84', -'92,,260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', -',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246', -'251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61', -'62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83', -'85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256', -'257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', -'23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97', -'296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255', -',235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237', -'238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,222,260,,,,,65', -',,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248', -'250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239', -',245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84', -'92,,260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', -',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246', -'251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61', -'62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83', -'85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256', -'257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', -'23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97', -'296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255', -',235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237', -'238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81', -'88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250', -'258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245', -'47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92', -',260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,242,11,48,', -'13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246', -'251,252,253,248,250,258,239,254,255,,241,240,237,238,256,257,,43,,,36', -',,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91', -'83,85,86,87,89,,,,84,92,,564,,561,560,559,65,562,,81,88,90,,,96,97,296', -'72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,722,,,,,32,31,30', -'104,103,105,106,,564,22,561,560,559,,562,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,242,,,,,,,564,722,561,560,559', -',562,,,256,257,,43,,,36,,242,61,62,,,63,,38,239,,245,47,241,240,237', -'238,256,257,243,23,244,722,,,91,83,85,86,87,89,,,239,84,92,,241,240', -'237,238,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,-627', -'-627,-627,-627,248,250,,,-627,-627,,,,,,256,257,,43,,,36,,,61,62,,,63', -',38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87', -'89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,', -'11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -'242,,,,,,,,,,,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241', -'240,237,238,,,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250', -'258,259,254,255,,-627,-627,,,256,257,,43,,,36,,,61,62,,,63,,38,239,', -'245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,,,,,', -',,,,,,,,,,256,257,,43,,,298,,,61,62,,,63,,38,239,,245,47,241,240,237', -'238,,,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,', -',96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,', -'32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,242,-627,-627,-627,-627,248,250,,', -'-627,-627,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240', -'237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,242,-627,-627,-627,-627', -'248,250,,,-627,-627,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245', -'47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69', -'71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,-627,-627', -'-627,-627,248,250,,,-627,-627,,,,,,256,257,,43,,,298,,,61,62,,,63,,38', -'239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11', -'48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242', -'246,251,252,253,248,250,258,259,254,255,,-627,-627,,,256,257,,43,,,36', -',,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,242,-627,-627,-627,-627,248,250,,,-627,-627,,,,,,256,257,', -'43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23', -'244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,296,72', -'73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', -'105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,242,-627,-627,-627,-627,248,250,,,-627,-627,,,,,,256', -'257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', -'23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,8,72', -'73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', -'105,106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,242,246,251,252,253,248,250,,,254,255,,,,,,256', -'257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', -'23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72', -'73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104', -'103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,242,,,,,,,,,,,,,,,,256,257,,227,,,233,,,61,62,,,63', -',,239,,245,47,241,240,237,238,,,243,232,244,,,,91,83,85,86,87,89,,,', -'84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46,44,242,,,,,,', -',,,,,,,,,256,257,,227,,,233,,,61,62,,,63,,,239,283,245,47,241,240,237', -'238,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,', -',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,242,,,,,,,,,,,,,,,,256,257,,227,,,233,,,61', -'62,,,63,,,239,,245,47,241,240,237,238,,,,23,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', -',,,,311,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,317,,', -',,,,,,,,,,,,,,,,,307,,,303,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,534,,61,62,,,63,,,,,,47,,,,,,,,232,,,,', -'91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', -',22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', -',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', -',234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94', -'95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,283,,47,,', -',,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', -'316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289', -'102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,', -'63,,677,,283,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65', -',290,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314', -'75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', -',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', -'314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,289,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,', -',,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,286,85,86,87,89', -',,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70', -',68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,', -',48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,', -',,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,774,,,,47,,,,,,,,232,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', -',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,', -',,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232', -',,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', -'105,106,,,234,,,,,,,311,,,108,107,109,596,59,100,99,597,,102,110,111', -',94,95,,,,317,,,,,,,,,,,,,,,,,,,,598,,,233,,,61,62,,,63,,,,,,,,,,,,', -',,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', -'105,106,,,234,,,,,,,311,,,108,107,109,596,59,100,99,597,,102,110,111', -',94,95,,,,317,,,,,,,,,,,,,,,,,,,,598,,,233,,,61,62,,,63,,,,,,,,,,,,', -',,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,', -',,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', -'316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', -'310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', -',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,', -',,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', -'99,101,289,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233', -',,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,', -',,,65,,290,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', -',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', -'314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,227,,,233,,,61,62,,,63,,677,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,311', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,317,,,,,,,,,,', -',,,,,,,,,977,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,677,,,,47,,,,,,,,232,,,,,91,286', -'85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73,74,,60,,', -',66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234', -',,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232', -',,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94', -'95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47', -',,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,', -',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289', -'102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,', -'63,,285,,283,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65', -',290,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', -'76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,311,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,307,,,303', -',,61,62,,,63,,302,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', -'76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,311,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,307,,,233', -',,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,319,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', -'76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', -',233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', -'314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,311,,', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,317,,,,,,,,,,,,', -',,,,,,,904,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106', -',,234,,,,,,,311,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', -',,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,,,47,,,,,', -',,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,116,,,,,115,65,,,81,88,90,,', -'96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', -'316,104,103,105,106,,,234,,,,,,,311,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,351,,,36,,,61,62,,,63,', -'38,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,', -'96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -'285,,283,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', -',,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61', -'62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36', -',,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,', -',,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', -',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,400,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', -',,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', -',233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', -',233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', -',233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', -',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', -'314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,311,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,307', -',,303,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,', -',,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', -',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,400,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,416,,,,47,,,,,,,,232,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,', -',,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,', -',,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,', -',,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232', -',,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,283,,47', -',,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,', -',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', -'310,316,104,103,105,106,,,234,,,,,,,311,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,904,,,233,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,416,,,,47', -',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,222,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', -'316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', -'310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', -',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,', -',,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', -'76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', -',233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', -'314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', -',,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,677,,283,,47,,,,,,,,232', -',,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', -',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', -'47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', -'316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', -'310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', -',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,', -',,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', -'76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', -',233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', -'314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', -',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', -'47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', -'316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', -'310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', -',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,', -',,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', -'76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', -',233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', -'314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106', -',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105', -'106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', -',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', -'47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285', -',283,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,', -',,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', -'61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', -'99,101,289,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233', -',,61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287', -',,,,,,65,,290,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', -'98,59,100,99,101,289,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91,286,85,86,87', -'89,,,,84,287,222,,,,,,65,,290,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234', -',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234', -',,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232', -',,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', -',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', -'47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', -'316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', -',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', -'310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', -',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,', -',,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61', -'62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', -'76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', -',233,,,61,62,,,63,,285,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', -',,,,311,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,317,,', -',,,,,,,,,,,,,,,,,307,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86', -'87,89,,,,84,92,,,,518,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,', -',,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232,', -',,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', -'105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,416,,,,47', -',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', -'104,103,105,106,,,234,,,,,,,311,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,61,62,,,63,,,,', -',,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', -'104,103,105,106,,,234,,,,,,,311,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,61,62,,,63,,,,', -',,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', -'104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', -'47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,-281', -',96,97,,,,-281,-281,-281,,,-281,-281,-281,564,-281,561,560,559,569,562', -',,,,-281,-281,-281,,,572,,,,,-281,-281,,-281,-281,-281,-281,-281,,,', -',,,,,,567,760,,,,,,,,577,576,580,579,,-281,-281,-281,-281,-281,-281', -'-281,-281,-281,-281,-281,-281,-281,-281,,,-281,-281,-281,,,-281,,,-281', -',,-281,-281,,-281,573,-281,,-281,,-281,-281,-281,-281,-281,-281,-281', -',-281,,-281,,,,,,,,,,,,,-281,-281,-281,-281,-608,-281,,-281,,,,-608', -'-608,-608,,,-608,-608,-608,564,-608,561,560,559,569,562,,,,-608,-608', -'-608,-608,,,572,,,,,-608,-608,,-608,-608,-608,-608,-608,,,,,,,,,,567', -',,,,,,,,,,580,579,,-608,-608,-608,-608,-608,-608,-608,-608,-608,-608', -'-608,-608,-608,-608,,,-608,-608,-608,,,-608,,,-608,,,-608,-608,,-608', -'573,-608,,-608,,-608,-608,-608,-608,-608,-608,-608,,-608,-608,-608,', -',,,,,,,,,,,-608,-608,-608,-608,-609,-608,,-608,,,,-609,-609,-609,,,-609', -'-609,-609,564,-609,561,560,559,569,562,,,,-609,-609,-609,-609,,,572', -',,,,-609,-609,,-609,-609,-609,-609,-609,,,,,,,,,,567,,,,,,,,,,,580,579', -',-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609', -',,-609,-609,-609,,,-609,,,-609,,,-609,-609,,-609,573,-609,,-609,,-609', -'-609,-609,-609,-609,-609,-609,,-609,-609,-609,,,,,,,,,,,,,-609,-609', -'-609,-609,,-609,,-609,176,187,177,200,173,193,183,182,203,204,198,181', -'180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', -'199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,397,396', -'128,,398,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', -'159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200,173,193,183,182', -'203,204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195', -'202,197,196,189,199,184,172,191,190,,,,,,171,178,169,170,166,167,168', -'127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143', -',,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146', -'144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200,173,193', -'183,182,203,204,198,181,180,175,201,205,206,185,174,188,192,194,186', -'179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178,169,170', -'166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148,145,147', -',,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151', -'152,146,144,136,159,137,,,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177', -'200,173,193,183,182,203,204,198,181,180,175,201,205,206,185,174,188', -'192,194,186,179,,,,195,202,197,366,365,367,364,172,191,190,,,,,,171', -'178,169,170,361,362,363,359,129,100,99,360,,102,,,,,,,161,162,,157,139', -'140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,373,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,,,,,,,,,', -',,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201', -'205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172', -'191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,,,,,,,,,161,162', -',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,', -',,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,91,,,', -',,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', -'180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', -'199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', -',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', -'150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', -'204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', -'197,196,189,199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127', -'129,126,,128,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143', -',,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146', -'144,136,159,137,,,165,91,,,,-626,,,,,,92,-626,-626,-626,,,-626,-626', -'-626,158,-626,,,,,,,,,-626,-626,-626,,,,,,,,,-626,-626,,-626,-626,-626', -'-626,-626,,,,,,,,,,,,,,,,,,,,,,,,-626,-626,-626,-626,-626,-626,-626', -'-626,-626,-626,-626,-626,-626,-626,,,-626,-626,-626,,,-626,,273,-626', -',,-626,-626,,-626,,-626,,-626,,-626,-626,-626,-626,-626,-626,-626,,-626', -'-626,-626,,,,,,,,,,,,-626,-626,-626,,-626,,-626,-626,-626,-626,,,-626', -'-626,-626,564,-626,561,560,559,569,562,,,,-626,-626,,,,,572,,,,,-626', -'-626,,-626,-626,-626,-626,-626,,,564,,561,560,559,569,562,567,,,,,,', -',,572,,580,579,,-297,,,,,,,-297,-297,-297,,-626,-297,-297,-297,,-297', -'567,-626,,,,,273,-626,,-297,-297,580,579,,573,,,,,-297,-297,,-297,-297', -'-297,-297,-297,,-626,-626,,,,,,,,,,,,,-626,,,573,,-626,,,-297,-297,-297', -'-297,-297,-297,-297,-297,-297,-297,-297,-297,-297,-297,,,-297,-297,-297', -',,-297,,276,-297,,,-297,-297,,-297,,-297,,-297,,-297,-297,-297,-297', -'-297,-297,-297,,-297,,-297,,,,,,,,,,,,-426,-297,-297,,-297,,-297,-426', -'-426,-426,,,-426,-426,-426,564,-426,561,560,559,569,562,,,,-426,-426', -'-426,,,,572,,,,,-426,-426,,-426,-426,-426,-426,-426,,,,,,,,,,567,,,', -',,,,,577,576,580,579,,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426', -'-426,-426,-426,-426,,,-426,-426,-426,,,-426,,273,-426,,,-426,-426,,-426', -'573,-426,,-426,,-426,-426,-426,-426,-426,-426,-426,,-426,-426,-426,', -',,,,433,437,,,432,,,-426,-426,,-426,,-426,161,162,,157,139,140,141,148', -'145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160', -'156,155,151,152,146,144,136,159,137,,,165,,,,,742,430,,,743,,,,,,,,', -'161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150', -',,,,,273,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,,,,,744,437,,,745,,,,,,,,,161,162,158,157,139,140,141,148,145', -'147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,,564,165,561,560,559,569,562,,,,,,,', -',,572,,,,,158,,,,,,,,,564,,561,560,559,569,562,,567,691,437,,,692,,', -'572,577,576,580,579,,161,162,,157,139,140,141,148,145,147,,,142,143', -',,567,163,164,149,150,,,,,,273,580,579,,,573,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,,,165,,,,,688,430,,,689,,573,,,,,,,161', -'162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,', -',,273,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,', -'165,,,,,426,430,,,427,,,,,,,,,161,162,158,157,139,140,141,148,145,147', -',,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155', -'151,152,146,144,136,159,137,,564,165,561,560,559,569,562,,,,,,,,,,572', -',,,,158,,,,,,,,,,,,,,,,,567,657,437,,,658,,,,577,576,580,579,,161,162', -',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,222,,,273', -',,,,573,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,564', -'165,561,560,559,569,562,564,,561,560,559,569,562,,,572,,,,,158,,572', -'564,,561,560,559,569,562,,,,,,,,567,760,572,,,,,567,,577,576,580,579', -',,,577,576,580,579,,,,,567,,564,,561,560,559,569,562,577,576,580,579', -',,,655,430,572,,656,573,,,,,,,573,161,162,,157,139,140,141,148,145,147', -',567,142,143,,,573,163,164,149,150,,580,579,,,273,,,,,,,,154,153,,138', -'160,156,155,151,152,146,144,136,159,137,,564,165,561,560,559,569,562', -'573,,,,,,,,,572,,,,,158,,,,,,,,,564,,561,560,559,569,562,,567,1041,437', -',,1042,,,572,577,576,580,579,,161,162,,157,139,140,141,148,145,147,', -',142,143,,,567,163,164,149,150,,,,,,273,580,579,,,573,,,154,153,,138', -'160,156,155,151,152,146,144,136,159,137,,,165,,,,,1039,430,,,1040,,573', -',,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', -'150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159', -'137,,,165,,,,,487,430,,,488,,,,,,,,,161,162,158,157,139,140,141,148', -'145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,,564,165,561,560,559,569,562,564,,561', -'560,559,569,562,,,572,,,,,158,,572,564,,561,560,559,569,562,564,,561', -'560,559,569,562,567,,572,,,,,567,,572,,580,579,,,,577,576,580,579,,', -',,567,,,,,,,567,,577,576,580,579,,,,1011,437,580,579,1010,573,,,,,,', -'573,161,162,,157,139,140,141,148,145,147,,,142,143,,,573,163,164,149', -'150,,,573,,,273,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', -'159,137,,564,165,561,560,559,569,562,,,863,437,,,864,,,572,,,,,158,161', -'162,,157,139,140,141,148,145,147,,,142,143,,,567,163,164,149,150,,,', -',,273,580,579,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159', -'137,,,165,,,,,487,430,,,488,,573,,,,,,,161,162,158,157,139,140,141,148', -'145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160', -'156,155,151,152,146,144,136,159,137,,564,165,561,560,559,569,562,,,', -',,,,,,572,,,,,158,,,,,,,,,,,,,,,,,567,657,437,,,658,,,,577,576,580,579', -',161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,', -',,,,273,,,,,573,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,,,,,655,430,,,656,,,,,,,,,161,162,158,157,139,140,141,148,145', -'147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158' ] - racc_action_table = arr = ::Array.new(26475, nil) +'-303,807,-110,647,601,601,-541,-303,-303,-303,-115,-93,735,-303,-303', +'-101,-303,255,650,95,225,226,235,-103,255,-109,-79,96,601,-108,773,-114', +'-113,523,774,601,-303,-303,917,-303,-303,-303,-303,-303,-111,601,-112', +'-109,-111,252,761,-112,829,254,253,232,252,-110,-109,731,254,253,858', +'-108,284,-107,646,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303', +'-303,-303,-303,-303,649,-101,-303,-303,-303,828,673,225,226,-103,-303', +'225,226,-303,-109,284,284,-625,-303,884,-303,608,-303,-303,-303,-303', +'-303,-303,-303,235,-303,-115,-303,-624,-106,-110,-101,128,128,-101,-110', +'-624,127,127,-103,-303,-303,-103,-104,-100,-303,-628,284,-99,-101,-105', +'-104,-303,-628,-628,-628,128,-103,-113,-628,-628,127,-628,128,128,286', +'964,-102,127,127,-103,-628,-111,128,-112,-109,-101,-111,127,-112,-109', +'857,-628,-628,-98,-628,-628,-628,-628,-628,128,821,235,829,730,127,235', +'286,286,-540,272,273,106,107,631,128,234,225,226,-628,127,-621,-435', +'-628,-628,-628,-628,-628,-628,-628,-628,-628,-628,-628,-628,-628,-628', +'828,668,-628,-628,-628,477,674,286,271,270,-628,847,235,-628,-444,235', +'667,848,-628,668,-628,-112,-628,-628,-628,-628,-628,-628,-628,-107,-628', +'-628,-628,106,107,-628,631,-526,633,632,629,631,-628,-103,-526,-628', +'-628,-624,-102,-621,-628,-628,-628,-526,108,109,723,-628,-112,-628,-628', +'-628,-115,-111,-628,-628,-628,-444,-628,-628,586,-621,631,-110,-444', +'626,-112,-628,-628,-628,-628,589,627,-444,-212,-628,720,820,-628,-628', +'716,-628,-628,-628,-628,-628,715,633,632,629,553,-444,633,632,581,631', +'578,577,576,-533,579,791,108,109,597,596,-533,235,701,-628,-628,-628', +'-628,-628,-628,-628,-628,-628,-628,-628,-628,-628,-628,633,632,-628', +'-628,-628,-628,822,-628,-114,910,-628,-110,-628,-628,-628,590,-628,-624', +'-628,704,-628,-628,-628,-628,-628,-628,-628,-628,-628,586,-628,-628', +'-628,633,632,634,-93,-532,235,-628,589,667,911,631,-532,-628,-628,-628', +'-628,1012,-628,631,-628,-303,631,727,-278,-628,729,128,-303,-303,-303', +'-111,127,-303,-303,-303,-294,-303,235,-539,235,597,596,-294,235,-212', +'-539,-303,-303,-303,235,-101,-294,1043,-622,-539,727,-303,-303,729,-303', +'-303,-303,-303,-303,581,-110,578,577,576,231,579,633,632,639,590,631', +'776,685,636,633,632,651,633,632,794,778,-105,-303,-303,-303,-303,-303', +'-303,-303,-303,-303,-303,-303,-303,-303,-303,-114,-531,-303,-303,-303', +'-529,823,-303,-531,255,-303,255,-529,-303,-303,255,-303,-622,-303,-540', +'-303,-529,-303,-303,-303,-303,-303,-303,-303,128,-303,255,-303,231,127', +'633,632,-304,807,-622,474,877,-541,232,-304,-303,-303,-303,-303,475', +'-303,-303,-303,-304,916,-534,678,-303,-303,-303,-303,-98,-534,-113,-303', +'-303,581,-303,578,577,576,586,579,880,884,581,-107,578,577,576,-100', +'579,589,727,-99,-106,729,-303,-303,-303,-303,-303,-303,-303,-303,-109', +'-303,423,289,-108,-115,-625,425,424,584,-303,581,-537,578,577,576,666', +'579,747,-537,597,596,665,-303,-303,-303,-303,-303,-303,-303,-303,-303', +'-303,-303,-303,-303,-303,225,226,-303,-303,-303,581,673,578,577,576', +'-303,579,747,-303,128,597,596,590,-303,127,-303,750,-303,-303,-303,-303', +'-303,-303,-303,235,-303,581,-303,578,577,576,586,579,727,128,658,726', +'-535,747,127,-303,-303,589,-303,-535,-303,-628,750,880,884,-538,657', +'-303,-628,-628,-628,231,-538,-113,-628,-628,231,-628,1034,584,567,-538', +'255,1034,225,226,-628,778,594,593,597,596,778,-276,933,655,715,-628', +'-628,231,-628,-628,-628,-628,-628,648,280,645,-276,581,231,578,577,576', +'252,579,-536,230,254,253,250,251,938,-536,590,642,228,638,-628,-628', +'-628,-628,-628,-628,-628,-628,-628,-628,-628,-628,-628,-628,-304,-529', +'-628,-628,-628,747,674,-304,-529,943,-628,235,-526,-628,957,738,-304', +'255,-628,-526,-628,946,-628,-628,-628,-628,-628,-628,-628,948,-628,-628', +'-628,265,266,581,950,578,577,576,586,579,952,952,235,-628,-628,958,-628', +'252,-628,589,-529,254,253,250,251,-628,723,-529,-529,-529,723,-111,-529', +'-529,-529,723,-529,235,255,723,235,584,-347,976,-529,-279,-529,-529', +'-529,-347,594,593,597,596,265,266,-529,-529,-347,-529,-529,-529,-529', +'-529,614,1005,613,578,577,576,252,579,258,414,254,253,250,251,608,977', +'256,738,257,980,983,985,590,-529,-529,-529,-529,-529,-529,-529,-529', +'-529,-529,-529,-529,-529,-529,987,-304,-529,-529,-529,-538,-529,-529', +'-304,235,-529,989,-538,-529,-529,235,-529,-304,-529,255,-529,-538,-529', +'-529,-529,-529,-529,-529,-529,1001,-529,1002,-529,548,544,581,289,578', +'577,576,586,579,-539,235,292,-529,-529,-529,-529,-539,-529,589,-529', +'-526,541,1014,534,-529,-539,533,-526,-526,-526,-529,235,-526,-526,-526', +'723,-526,255,723,581,584,578,577,576,-526,579,-526,-526,-526,594,593', +'597,596,265,266,785,-526,-526,-78,-526,-526,-526,-526,-526,581,523,578', +'577,576,252,579,258,1032,254,253,250,251,747,521,256,1005,257,578,577', +'576,590,579,-526,-526,-526,-526,-526,-526,-526,-526,-526,-526,-526,-526', +'-526,-526,518,747,-526,-526,-526,255,-526,-526,1035,847,-526,289,508', +'-526,-526,234,-526,255,-526,479,-526,1041,-526,-526,-526,-526,-526,-526', +'-526,478,-526,1044,-526,265,266,952,952,252,952,1049,476,254,253,250', +'251,-526,-526,-526,-526,252,-526,258,-526,254,253,250,251,-526,131,132', +'133,134,135,-526,311,85,86,87,12,78,1014,426,231,79,80,421,404,738,83', +'540,81,82,84,33,34,76,77,1058,538,1060,1062,1064,88,31,30,116,115,117', +'118,905,906,22,1064,907,122,123,662,11,49,313,13,120,119,121,110,60', +'112,111,113,401,114,122,123,399,106,107,720,45,46,44,255,259,260,261', +'262,272,273,267,268,263,264,-294,248,249,231,396,265,266,-294,43,372', +'661,36,235,338,62,63,-294,337,64,659,38,252,1014,258,48,254,253,250', +'251,271,270,256,23,257,723,723,231,103,95,97,98,99,101,550,275,227,96', +'104,-625,269,-624,-251,475,235,66,224,223,93,100,102,222,952,108,109', +'311,85,86,87,12,78,1014,1087,231,79,80,1064,1064,1064,83,612,81,82,84', +'33,34,76,77,124,610,825,1064,235,88,31,30,116,115,117,118,275,508,22', +'834,836,521,523,662,11,49,313,13,120,119,121,110,60,112,111,113,508', +'114,122,123,808,106,107,3,45,46,44,255,259,260,261,262,272,273,267,268', +'263,264,-303,248,249,231,-277,265,266,-303,43,715,1040,36,-625,235,62', +'63,-303,796,64,1038,38,252,795,258,48,254,253,250,251,271,270,256,23', +'257,289,785,-303,103,95,97,98,99,101,-303,780,289,96,104,-625,269,715', +'723,-303,255,66,608,723,93,100,102,723,757,108,109,311,85,86,87,12,78', +'755,235,754,79,80,753,745,743,83,741,81,82,84,33,34,76,77,131,132,133', +'134,135,88,31,30,116,115,117,118,739,875,22,131,132,133,134,135,11,49', +'313,13,120,119,121,110,60,112,111,113,738,114,122,123,235,106,107,884', +'45,46,44,255,259,260,261,262,272,273,267,268,263,264,723,248,249,,,265', +'266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271,270,256', +'23,257,,,,103,95,97,98,99,101,,,,96,104,,269,,,,,66,,,93,100,102,,,108', +'109,311,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,131,132', +'133,134,135,88,31,30,116,115,117,118,,,22,,,,,,11,49,313,13,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255,259,260,261', +'262,272,273,267,268,263,264,,248,249,,,265,266,,43,,,36,,,62,63,,,64', +',38,252,,258,48,254,253,250,251,271,270,256,23,257,,,,103,95,97,98,99', +'101,,,,96,104,,269,,,,,66,,,93,100,102,,,108,109,311,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,11,49,313,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,255,259,260,261,262,272,273,267,268,263,264,,248,249,', +',265,266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271,270', +'256,23,257,,,,103,95,97,98,99,101,,,,96,104,,269,,,,,66,,,93,100,102', +',,108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,313,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,255,259,260,261,262,272', +'273,267,268,263,264,,248,249,,,265,266,,43,,,36,,,62,63,,,64,,38,252', +',258,48,254,253,250,251,271,270,256,23,257,,,,103,95,97,98,99,101,,', +',96,104,,269,,,,,66,,,93,100,102,,,108,109,311,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,11,49,313,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,255,259,260,261,262,272,273,267,268,263,264,,248,249,,,265', +'266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271,270,256', +'23,257,,,,103,95,97,98,99,101,,,,96,104,235,269,,,,,66,,,93,100,102', +',,108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,313,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,255,259,260,261,262,272', +'273,267,268,263,264,,248,249,,,265,266,,43,,,36,,,62,63,,,64,,38,252', +',258,48,254,253,250,251,271,270,256,23,257,,,,103,95,97,98,99,101,,', +',96,104,,269,,,,,66,,,93,100,102,,,108,109,8,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,581,22,578', +'577,576,,579,11,49,10,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,255,-650,-650,-650,-650,272,273,,747,-650,-650,,', +',,,265,266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271', +'270,256,23,257,,,,103,95,97,98,99,101,,,,96,104,,581,,578,577,576,66', +'579,,93,100,102,,,108,109,8,85,86,87,12,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,747,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255,-650', +'-650,-650,-650,272,273,,,-650,-650,,,,,,265,266,,43,,,36,,,62,63,,,64', +',38,252,,258,48,254,253,250,251,271,270,256,23,257,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,311,85,86,87,12,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,11,49,313,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,255,-650,-650,-650,-650,272,273,,,-650,-650,,,,,,265,266,', +'43,,,315,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271,270,256,23', +'257,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109', +'311,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,313,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,255,-650,-650,-650,-650,272,273,,,-650', +'-650,,,,,,265,266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250', +'251,271,270,256,23,257,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,313,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255,259,260,261,262', +'272,273,267,,263,264,,,,,,265,266,,43,,,36,,,62,63,,,64,,38,252,,258', +'48,254,253,250,251,271,270,256,23,257,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,313', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255', +'259,260,261,262,272,273,267,268,263,264,,-650,-650,,,265,266,,43,,,36', +',,62,63,,,64,,38,252,,258,48,254,253,250,251,271,270,256,23,257,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,311,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,313,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,255,259,260,261,262,272,273,267,268,263,264,', +'-650,-650,,,265,266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250', +'251,271,270,256,23,257,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,313,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255,259,260,261,262', +'272,273,,,263,264,,,,,,265,266,,43,,,36,,,62,63,,,64,,38,252,,258,48', +'254,253,250,251,271,270,256,23,257,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,313', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,255', +'-650,-650,-650,-650,272,273,,,-650,-650,,,,,,265,266,,43,,,36,,,62,63', +',,64,,38,252,,258,48,254,253,250,251,271,270,256,23,257,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,311,85,86,87,12', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,22,,,,,,11,49,313,13,120,119,121,110,60,112,111,113,,114,122,123,', +'106,107,,45,46,44,255,-650,-650,-650,-650,272,273,,,-650,-650,,,,,,265', +'266,,43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,271,270,256', +'23,257,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,311,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,313,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,255,,,,,,,,,,,,,,,,265,266,', +'43,,,36,,,62,63,,,64,,38,252,,258,48,254,253,250,251,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,311,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,313,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,11,49,313,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,313', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,315,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,311,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,313,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,11,49,313,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'315,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,313', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,311,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,313,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,11,49,313,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,311,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,313', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,311,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,313,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,304,114,122,123,,106,107,,45,46,44,', +',,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,', +',,103,302,97,98,99,101,,,,96,104,,,,,,,66,,305,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,304,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',301,,299,,48,,,,,,,,245,,,,,103,302,97,98,99,101,,,,96,104,,,,,,,66', +',305,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110', +'60,112,111,113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,,,,103,302,97,98,99', +'101,,,,96,104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,328,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,', +'334,,,,,,,,,,,,,,,,,,,,324,,,320,,,62,63,,,64,,319,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117', +'118,,,247,,,,,,,328,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,,,334,,,,,,,,,,,,,,,,,,,,324,,,246,,,62,63,,,64,,,,,,,,,,,,,,,', +',,,103,95,97,98,99,101,,,,96,104,,,,336,,,66,,,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333', +'116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,128,,,,,127,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,328,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,,,334,,,,,,,,,,,,,,,,,,,,366,,,36,,,62', +'63,,,64,,38,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60', +'112,111,113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,,,,103,302,97,98,99,101', +',,,96,104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,10,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,414,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,', +',246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82', +'84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,', +',,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,431,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,431,,', +',48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63', +',,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,', +',246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,304,114,122,123,,106,107,,45,46,44,', +',,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,', +',,103,302,97,98,99,101,,,,96,104,,,,,,,66,,305,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,', +',246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +'235,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121', +'110,60,112,111,113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,,,,103,302,97', +'98,99,101,,,,96,104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',247,,,,,,,49,,,120,119,121,110,60,112,111,113,304,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,299,,48', +',,,,,,,245,,,,,103,302,97,98,99,101,,,,96,104,,,,,,,66,,305,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113', +'304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,301,,299,,48,,,,,,,,245,,,,,103,302,97,98,99,101,,,,96,104', +'235,,,,,,66,,305,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,328', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,,334,,,,,,', +',,,,,,,,,,,,,991,,,246,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117', +'118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,698,,,,48,', +',,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88', +'327,333,116,115,117,118,,,247,,,,,,,328,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,334,,,,,,,,,,,,,,,,,,,,324,,,246,,,62,63', +',,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,536,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77', +',,,,,88,327,333,116,115,117,118,,,247,,,,,,,328,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,,,334,,,,,,,,,,,,,,,,,,,,324,,,320', +',,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331', +'76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,328,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,334,,,,,,,,,,,,,,,,,,,,998', +',,246,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,553,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,304,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',301,,,,48,,,,,,,,245,,,,,103,302,97,98,99,101,,,,96,104,,,,,,,66,,305', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76', +'77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110', +'60,112,111,113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,302,97,98,99,101', +',,,96,104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,', +'49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117', +'118,,,247,,,,,,,328,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,,,334,,,,,,,,,,,,,,,,,,,,991,,,246,,,62,63,,,64,,,,,,,,,,,,,,,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,', +'246,,,62,63,,,64,,,,299,,48,,,,,,,,245,,,,,103,302,97,98,99,101,,,,96', +'104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,328', +',,120,119,121,615,60,112,111,616,,114,122,123,,106,107,,,,334,,,,,,', +',,,,,,,,,,,,,617,,,246,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,328,,,120,119,121,615,60,112,111,616,,114,122,123,,106,107,,,', +'334,,,,,,,,,,,,,,,,,,,,617,,,246,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88', +'327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331', +'76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121', +'110,60,112,111,113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,,,,103,302,97', +'98,99,101,,,,96,104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,', +'49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117', +'118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,304,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,698,,299', +',48,,,,,,,,245,,,,,103,302,97,98,99,101,,,,96,104,,,,,,,66,,305,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,', +'246,,,62,63,,,64,,,,299,,48,,,,,,,,245,,,,,103,302,97,98,99,101,,,,96', +'104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,', +',,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,11,49,313,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,414,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327', +'333,116,115,117,118,,,247,,,,,,,328,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,,,334,,,,,,,,,,,,,,,,,,,,324,,,320,,,62,63,,', +'64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111', +'113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,301,,299,,48,,,,,,,,245,,,,,103,302,97,98,99,101,,,,96', +'104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,328', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,,334,,,,,,', +',,,,,,,,,,,,,324,,,320,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,304', +'114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63', +',,64,,301,,299,,48,,,,,,,,245,,,,,103,302,97,98,99,101,,,,96,104,,,', +',,,66,,305,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,301,,,,48,,,,,,,,245,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116', +'115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,', +',,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,', +'246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,302,97,98,99,101,,,,96,104', +',,,,,,66,,305,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120', +'119,121,110,60,112,111,113,304,114,122,123,,106,107,,45,46,44,,,,,,', +',,,,,,,,,,,,,240,,,246,,,62,63,,,64,,698,,,,48,,,,,,,,245,,,,,103,302', +'97,98,99,101,,,,96,104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117', +'118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,431,,,,48,', +',,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88', +'327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60', +'112,111,113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240', +',,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,,,,103,302,97,98,99,101', +',,,96,104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,', +',,,,,328,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,,334', +',,,,,,,,,,,,,,,,,,,324,,,320,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327', +'333,116,115,117,118,,,247,,,,,,,328,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,,,334,,,,,,,,,,,,,,,,,,,,324,,,320,,,62,63,,', +'64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,800,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,', +',120,119,121,110,60,112,111,113,304,114,122,123,,106,107,,45,46,44,', +',,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,301,,299,,48,,,,,,,,245,,', +',,103,302,97,98,99,101,,,,96,104,,,,,,,66,,305,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333', +'116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64', +',,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,', +',,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246', +',,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,304,114,122,123,,106,107,,45,46,44,,,,,,,,,,', +',,,,,,,,,240,,,246,,,62,63,,,64,,698,,299,,48,,,,,,,,245,,,,,103,302', +'97,98,99,101,,,,96,104,,,,,,,66,,305,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,330,331,76,77,,,,,,88,327,333,116,115,117', +'118,,,247,,,,,,,49,,,120,119,121,110,60,112,111,113,304,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,299', +',48,,,,,,,,245,,,,,103,302,97,98,99,101,,,,96,104,,,,,,,66,,305,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62', +'63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,247,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,240,', +',246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'330,331,76,77,,,,,,88,327,333,116,115,117,118,,,247,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,247,,,,', +',,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,247,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,240,,,246,,,62,63,,,64,,,,,,48,,,,,,,,245', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,-649,,108,109', +',,,-649,-649,-649,,,-649,-649,-649,581,-649,578,577,576,586,579,,,,-649', +'-649,,,,,589,,,,,-649,-649,,-649,-649,-649,-649,-649,,,,,,,,,,584,,', +',,,,,,,,597,596,,,,,,,,,,,,,-649,,-649,,,,,-649,,-649,-649,-649,289', +'-649,-649,-649,-649,,-649,,590,,,,,,,-649,-649,-649,,,,,-649,-649,,', +'-649,-649,,-649,-649,-649,-649,-649,,,-649,,,,,-649,,,,,,,-649,,,,,', +',,,-649,-649,-649,-649,-649,-649,-649,-649,-649,-649,-649,-649,-649', +'-649,,,-649,-649,-649,,,-649,,289,-649,,,-649,-649,,-649,,-649,,-649', +',-649,-649,-649,-649,-649,-649,-649,,-649,-649,-649,,,,,,,,,,,,,-649', +'-649,-312,-649,,-649,,,,-312,-312,-312,-649,,-312,-312,-312,581,-312', +'578,577,576,586,579,,,,,-312,-312,,,,589,,,,,-312,-312,,-312,-312,-312', +'-312,-312,,,,,,,,,,584,,,,,,,,,594,593,597,596,,-312,-312,-312,-312', +'-312,-312,-312,-312,-312,-312,-312,-312,-312,-312,,,-312,-312,-312,', +',-312,,292,-312,,,-312,-312,,-312,590,-312,,-312,,-312,-312,-312,-312', +'-312,-312,-312,,-312,,-312,,,,,,,,,,,,,-312,-312,-295,-312,,-312,,,', +'-295,-295,-295,-312,,-295,-295,-295,581,-295,578,577,576,586,579,,,', +',-295,-295,-295,,,589,,,,,-295,-295,,-295,-295,-295,-295,-295,,,,,,', +',,,584,,,,,,,,,594,593,597,596,,-295,-295,-295,-295,-295,-295,-295,-295', +'-295,-295,-295,-295,-295,-295,,,-295,-295,-295,,,-295,,,-295,,,-295', +'-295,,-295,590,-295,,-295,,-295,-295,-295,-295,-295,-295,-295,,-295', +',-295,581,,578,577,576,586,579,,,,,,-295,-295,-295,-295,589,-295,-630', +'-295,,,,,-295,-630,-630,-630,,,-630,-630,-630,,-630,,,,584,,,,,-630', +'-630,-630,-630,,,597,596,,,,-630,-630,,-630,-630,-630,-630,-630,,,,', +',,,,,,,,,,,,,,,,,590,,-630,-630,-630,-630,-630,-630,-630,-630,-630,-630', +'-630,-630,-630,-630,,,-630,-630,-630,,,-630,,,-630,,,-630,-630,,-630', +',-630,,-630,,-630,-630,-630,-630,-630,-630,-630,,-630,-630,-630,581', +',578,577,576,586,579,,,,,,-630,-630,-630,-630,589,-630,-629,-630,,,', +',-630,-629,-629,-629,,,-629,-629,-629,,-629,,,,584,,,,,-629,-629,-629', +'-629,594,593,597,596,,,,-629,-629,,-629,-629,-629,-629,-629,,,,,,,,', +',,,,,,,,,,,,,590,,-629,-629,-629,-629,-629,-629,-629,-629,-629,-629', +'-629,-629,-629,-629,,,-629,-629,-629,,,-629,,,-629,,,-629,-629,,-629', +',-629,,-629,,-629,-629,-629,-629,-629,-629,-629,,-629,-629,-629,581', +',578,577,576,586,579,,,,,,-629,-629,-629,-629,589,-629,-443,-629,,,', +',-629,-443,-443,-443,,,-443,-443,-443,,-443,,,,584,,,,,-443,-443,-443', +',,,597,596,,,,-443,-443,,-443,-443,-443,-443,-443,,,,,,,,,,,,,,,,,,', +',,,590,,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443', +'-443,-443,,,-443,-443,-443,,,-443,,289,-443,,,-443,-443,,-443,,-443', +',-443,,-443,-443,-443,-443,-443,-443,-443,,-443,-443,-443,,,,,,,,,,', +',,-443,-443,,-443,,-443,,,,,,,-443,189,200,190,213,186,206,196,195,216', +'217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215', +'210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139', +'141,138,,140,,,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158', +'156,148,171,149,,,177,103,,,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190', +'213,186,206,196,195,216,217,211,194,193,188,214,218,219,198,187,201', +'205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203,,,,,,184', +'191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172', +'168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,,,,,,,,170,,,', +',178,189,200,190,213,186,206,196,195,216,217,211,194,193,188,214,218', +'219,198,187,201,205,207,199,192,,,,208,215,210,381,380,382,379,185,204', +'203,,,,,,184,191,182,183,376,377,378,374,141,112,111,375,,114,,,,,,', +'173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,', +',,,388,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,', +',177,,,,,,,,,,,,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195', +'216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208', +'215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181', +'139,141,,,140,,,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158', +'156,148,171,149,,,177,103,,,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190', +'213,186,206,196,195,216,217,211,194,193,188,214,218,219,198,187,201', +'205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203,,,,,,184', +'191,182,183,179,180,181,139,141,411,410,140,,412,,,,,,,173,174,,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,', +',,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211,194,193', +'188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209,202,212', +'197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140,,,,,', +',,,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,', +'177,103,,,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196', +'195,216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192', +',,,208,215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179', +'180,181,139,141,,,140,,,,,,,,,173,174,,169,151,152,153,160,157,159,', +',154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163', +'164,158,156,148,171,149,,,177,103,,,,,,,,,,104,,506,458,,,507,,,170', +',,,,178,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161', +'162,,,,,,289,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171', +'149,,,177,,,,,,,,,,805,465,,,804,,,,,,170,,,173,174,178,169,151,152', +'153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166,165', +',150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,679,458', +',,680,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,', +',,175,176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167,163,164,158', +'156,148,171,149,,,177,,,,,,,,,,681,465,,,682,,,,,,170,,,173,174,178', +'169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,289,,', +',,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,', +',,,,,802,458,,,803,,,,,,170,,,173,174,178,169,151,152,153,160,157,159', +',,154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,768,458,,,769,,,,,,170,,', +'173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,289,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,770,465,,,771,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,891,465,,,892', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,1068,465,,,1067,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,', +',1071,458,,,1072,,,,,,170,,,173,174,178,169,151,152,153,160,157,159', +',,154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,581,177,578,577,576,586,579,,,,,506,458', +',,507,589,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155', +'584,,,175,176,161,162,,,,,597,596,,,,,,,,166,165,,150,172,168,167,163', +'164,158,156,148,171,149,,,177,,,,,,,,,590,681,465,,,682,,,,,,170,,,173', +'174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,', +',,289,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,', +'177,,,,,,,,,,679,458,,,680,,,,,,170,,,173,174,178,169,151,152,153,160', +'157,159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150,172', +'168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,1073,465,,,1074,', +',,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176', +'161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148', +'171,149,,,177,,,,,,,,,,711,465,,,712,,,,,,170,,,173,174,178,169,151', +'152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,289,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,708', +'458,,,709,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,289,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,,,,,,,,,,454,458,,,455,,,,,,170,,,173,174', +'178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,289', +',,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,581', +',578,577,576,586,579,,,461,465,,,460,,,589,,,170,,,173,174,178,169,151', +'152,153,160,157,159,,,154,155,,,584,175,176,161,162,,,,,,289,597,596', +',,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,581,177,578', +'577,576,586,579,,,,,,590,,,,589,,,,,170,,,,,178,581,,578,577,576,586', +'579,,,,,584,,,,,589,,,,594,593,597,596,581,,578,577,576,586,579,581', +',578,577,576,586,579,584,581,589,578,577,576,586,579,,589,235,597,596', +',,,,589,590,,,,,,584,,,,,,,584,,,,597,596,,,584,594,593,597,596,,590', +',,,,597,596,581,,578,577,576,586,579,581,,578,577,576,586,579,,,589', +'590,,,,,,589,590,581,,578,577,576,586,579,590,,,,,,584,,,589,,,,584', +',,,597,596,,,,594,593,597,596,,,,,581,584,578,577,576,586,579,,,,594', +'593,597,596,,,589,,,,,590,,,,,,,590,,,,,,,,,,584,,,,,,,,590,594,593', +'597,596,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,590' ] + racc_action_table = arr = ::Array.new(26190, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -905,946 +915,931 @@ end clist = [ -'433,1054,434,1041,913,1040,312,433,433,433,602,64,669,433,433,668,433', -'61,992,304,992,22,365,743,481,433,304,29,860,365,935,594,1039,417,341', -'304,433,433,342,433,433,433,433,433,455,742,669,698,698,352,442,80,61', -'549,689,587,481,22,348,80,481,481,481,481,744,861,349,433,433,433,433', -'433,433,433,433,433,433,433,433,433,433,1041,862,433,433,433,586,433', -'450,450,359,433,29,312,433,763,763,359,64,433,455,433,668,433,433,433', -'433,433,433,433,745,433,433,433,29,1054,602,1041,913,1040,1054,689,1041', -'913,1040,432,433,433,743,433,744,433,432,432,432,602,594,698,432,432', -'602,432,860,433,935,860,1039,860,341,935,742,1039,342,341,352,587,689', -'342,549,689,587,432,432,348,432,432,432,432,432,744,861,349,391,689', -'388,683,745,688,450,506,598,369,862,41,598,763,586,862,369,683,415,586', -'432,432,432,432,432,432,432,432,432,432,432,432,432,432,731,731,432', -'432,432,622,432,225,226,745,432,412,321,432,317,317,44,44,432,41,432', -'390,432,432,432,432,432,432,432,391,432,388,432,41,506,506,506,463,688', -'596,619,464,794,465,657,432,432,655,432,638,432,657,657,657,321,506', -'657,657,657,466,657,495,432,225,226,496,622,622,321,657,657,657,657', -'688,761,622,688,597,387,761,657,657,384,657,657,657,657,657,381,889', -'688,638,596,317,317,44,44,393,794,596,889,619,619,655,596,638,513,656', -'596,691,619,657,657,657,657,657,657,657,657,657,657,657,657,657,657', -'228,596,657,657,657,597,657,657,889,889,657,514,597,657,657,820,657', -'597,657,382,657,597,657,657,657,657,657,657,657,710,657,657,657,393', -'393,393,494,691,656,597,710,517,889,377,691,657,657,657,657,691,657', -'658,657,691,961,493,228,961,658,658,658,426,657,658,658,658,485,658', -'820,965,494,691,519,710,710,820,965,658,658,658,382,382,382,547,820', -'965,547,658,658,493,658,658,658,658,658,931,524,931,931,931,485,931', -'820,426,377,377,377,710,725,375,725,725,725,527,725,535,863,426,658', -'658,658,658,658,658,658,658,658,658,658,658,658,658,42,18,658,658,658', -'17,658,658,360,536,658,385,17,658,658,360,658,545,658,548,658,17,658', -'658,658,658,658,658,658,363,658,333,658,552,333,553,363,863,375,375', -'375,931,42,18,863,658,658,658,658,863,658,101,658,863,725,427,42,18', -'101,101,101,366,658,101,101,101,555,101,366,27,556,863,385,385,385,101', -'27,101,101,101,461,756,379,537,537,379,756,101,101,362,101,101,101,101', -'101,703,362,427,703,557,361,566,722,367,722,722,722,361,722,126,367', -'427,461,574,126,126,461,461,101,101,101,101,101,101,101,101,101,101', -'101,101,101,101,293,578,101,101,101,293,101,101,722,581,101,379,379', -'101,101,583,101,722,101,353,101,588,101,101,101,101,101,101,101,589', -'101,351,101,339,364,339,339,339,339,339,334,364,1043,334,347,101,101', -'101,101,339,101,98,101,346,864,757,757,626,98,98,98,864,101,98,98,98', -'864,98,345,523,864,339,339,345,629,98,523,98,98,98,339,339,339,339,5', -'523,631,98,98,5,98,98,98,98,98,932,635,932,932,932,335,932,567,639,567', -'567,567,331,567,851,325,851,851,851,644,851,339,322,98,98,98,98,98,98', -'98,98,98,98,98,98,98,98,650,932,98,98,98,308,98,98,567,318,98,316,308', -'98,98,851,98,567,98,659,98,308,98,98,98,98,98,98,98,462,98,849,98,849', -'849,849,1009,849,1009,1009,1009,661,1009,667,49,98,98,98,98,1044,98', -'49,98,674,857,857,857,857,857,857,49,462,98,857,857,462,462,676,857', -'849,857,857,857,857,857,857,857,1,849,1025,1025,311,857,857,857,857', -'857,857,857,764,764,857,310,764,764,764,445,857,857,685,857,857,857', -'857,857,857,857,857,857,687,857,857,857,307,857,857,690,857,857,857', -'445,445,445,445,445,445,445,445,445,445,445,692,445,445,1017,870,445', -'445,692,857,870,1017,857,692,693,857,857,692,944,857,1017,857,445,944', -'445,857,445,445,445,445,445,445,445,857,445,713,713,1042,857,857,857', -'857,857,857,1042,20,20,857,857,1042,445,694,445,1042,697,857,340,340', -'857,857,857,699,702,857,857,997,997,997,997,997,997,301,300,974,997', -'997,709,299,724,997,974,997,997,997,997,997,997,997,726,974,733,738', -'297,997,997,997,997,997,997,997,741,289,997,284,281,280,269,420,997', -'997,266,997,997,997,997,997,997,997,997,997,234,997,997,997,773,997', -'997,230,997,997,997,420,420,420,420,420,420,420,420,420,420,420,975', -'420,420,976,229,420,420,975,997,778,976,997,227,796,997,997,975,797', -'997,976,997,420,799,420,997,420,420,420,420,420,420,420,997,420,800', -'801,350,997,997,997,997,997,997,350,903,803,997,997,804,420,805,903', -'350,806,997,207,819,997,997,997,903,3,997,997,996,996,996,996,996,996', -'823,124,978,996,996,826,827,832,996,978,996,996,996,996,996,996,996', -'833,978,834,835,839,996,996,996,996,996,996,996,840,842,996,843,845', -'848,850,660,996,996,853,996,996,996,996,996,996,996,996,996,90,996,996', -'996,856,996,996,89,996,996,996,660,660,660,660,660,660,660,660,660,660', -'660,323,660,660,306,88,660,660,323,996,87,306,996,72,1056,996,996,323', -'866,996,306,996,660,871,660,996,660,660,660,660,660,660,660,996,660', -'872,873,600,996,996,996,996,996,996,600,305,882,996,996,883,660,48,305', -'600,900,996,43,904,996,996,996,305,905,996,996,993,993,993,993,993,993', -'907,908,748,993,993,40,933,25,993,748,993,993,993,993,993,993,993,937', -'748,938,943,951,993,993,993,993,993,993,993,954,901,993,901,901,901', -'955,901,993,993,956,993,993,993,993,993,993,993,993,993,957,993,993', -'993,959,993,993,969,993,993,993,696,696,696,696,696,696,696,696,696', -'696,696,224,696,696,977,980,696,696,224,993,981,982,993,983,984,993', -'993,224,986,993,19,993,696,16,696,993,696,696,696,696,696,696,696,993', -'696,1010,1011,1013,993,993,993,993,993,993,15,1024,1029,993,993,1030', -'696,1031,1032,1033,1034,993,1035,1038,993,993,993,13,425,993,993,988', -'988,988,988,988,988,424,421,,988,988,,,,988,,988,988,988,988,988,988', -'988,682,682,682,682,682,988,988,988,988,988,988,988,,,988,295,295,295', -'295,295,988,988,,988,988,988,988,988,988,988,988,988,,988,988,988,,988', -'988,,988,988,988,278,278,278,278,278,278,278,278,278,278,278,,278,278', -',,278,278,,988,,,988,,,988,988,,,988,,988,278,,278,988,278,278,278,278', -'278,278,278,988,278,,,,988,988,988,988,988,988,,,,988,988,,278,,,,,988', -',,988,988,988,,,988,988,973,973,973,973,973,973,,,,973,973,,,,973,,973', -'973,973,973,973,973,973,9,9,9,9,9,973,973,973,973,973,973,973,,,973', -'512,512,512,512,512,973,973,,973,973,973,973,973,973,973,973,973,,973', -'973,973,,973,973,,973,973,973,775,775,775,775,775,775,775,775,775,775', -'775,,775,775,,,775,775,,973,,,973,,,973,973,,,973,,973,775,,775,973', -'775,775,775,775,775,775,775,973,775,,,,973,973,973,973,973,973,,,,973', -'973,,775,,,,,973,,,973,973,973,,,973,973,940,940,940,940,940,940,,,', -'940,940,,,,940,,940,940,940,940,940,940,940,,,,,,940,940,940,940,940', -'940,940,,,940,,,,,,940,940,,940,940,940,940,940,940,940,940,940,,940', -'940,940,,940,940,,940,940,940,780,780,780,780,780,780,780,780,780,780', -'780,,780,780,,,780,780,,940,,,940,,,940,940,,,940,,940,780,,780,940', -'780,780,780,780,780,780,780,940,780,,,,940,940,940,940,940,940,,,,940', -'940,,780,,,,,940,,,940,940,940,,,940,940,2,2,2,2,2,2,,,,2,2,,,,2,,2', -'2,2,2,2,2,2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2', -'2,,2,2,,2,2,2,782,782,782,782,782,782,782,782,782,782,782,,782,782,', -',782,782,,2,,,2,,,2,2,,,2,,2,782,,782,2,782,782,782,782,782,782,782', -'2,782,,,,2,2,2,2,2,2,,,,2,2,,782,,,,,2,,,2,2,2,,,2,2,36,36,36,36,36', -'36,,,,36,36,,,,36,,36,36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,', -'36,,,,,,36,36,,36,36,36,36,36,36,36,36,36,,36,36,36,,36,36,,36,36,36', -'785,785,785,785,785,785,785,785,785,785,785,,785,785,,,785,785,,36,', -',36,,,36,36,,,36,,36,785,,785,36,785,785,785,785,785,785,785,36,785', -',,,36,36,36,36,36,36,,,,36,36,,785,,,,,36,,,36,36,36,,,36,36,910,910', -'910,910,910,910,,,,910,910,,,,910,,910,910,910,910,910,910,910,,,,,', -'910,910,910,910,910,910,910,,,910,,,,,,910,910,,910,910,910,910,910', -'910,910,910,910,,910,910,910,,910,910,,910,910,910,787,787,787,787,787', -'787,787,787,787,787,787,,787,787,,,787,787,,910,,,910,,,910,910,,,910', -',910,787,,787,910,787,787,787,787,787,787,787,910,787,,,,910,910,910', -'910,910,910,,,,910,910,,787,,,,,910,,,910,910,910,,,910,910,906,906', -'906,906,906,906,,,,906,906,,,,906,,906,906,906,906,906,906,906,,,,,', -'906,906,906,906,906,906,906,,,906,,,,,,906,906,,906,906,906,906,906', -'906,906,906,906,,906,906,906,,906,906,,906,906,906,789,789,789,789,789', -'789,789,789,789,789,789,,789,789,,,789,789,,906,,,906,,,906,906,,,906', -',906,789,,789,906,789,789,789,789,789,789,789,906,789,,,,906,906,906', -'906,906,906,,,,906,906,,789,,,,,906,,,906,906,906,,,906,906,867,867', -'867,867,867,867,,,,867,867,,,,867,,867,867,867,867,867,867,867,,,,,', -'867,867,867,867,867,867,867,,,867,,,,,,867,867,,867,867,867,867,867', -'867,867,867,867,,867,867,867,,867,867,,867,867,867,484,484,484,484,484', -'484,484,484,484,484,484,,484,484,,,484,484,,867,,,867,,,867,867,,,867', -',867,484,,484,867,484,484,484,484,484,484,484,867,484,,,,867,867,867', -'867,867,867,,,,867,867,484,484,,,,,867,,,867,867,867,,,867,867,858,858', -'858,858,858,858,,,,858,858,,,,858,,858,858,858,858,858,858,858,,,,,', -'858,858,858,858,858,858,858,,,858,,,,,,858,858,,858,858,858,858,858', -'858,858,858,858,,858,858,858,,858,858,,858,858,858,440,440,440,440,440', -'440,440,440,440,440,440,,440,440,,,440,440,,858,,,858,,,858,858,,,858', -',858,440,,440,858,440,440,440,440,440,440,440,858,440,,,,858,858,858', -'858,858,858,,,,858,858,,440,,,,,858,,,858,858,858,,,858,858,825,825', -'825,825,825,825,,,,825,825,,,,825,,825,825,825,825,825,825,825,,,,,', -'825,825,825,825,825,825,825,,,825,,,,,,825,825,,825,825,825,825,825', -'825,825,825,825,,825,825,825,,825,825,,825,825,825,885,885,885,885,885', -'885,885,885,885,885,885,,885,885,,,885,885,,825,,,825,,,825,825,,,825', -',825,885,,885,825,885,885,885,885,885,885,885,825,885,,,,825,825,825', -'825,825,825,,,,825,825,,885,,,,,825,,,825,825,825,,,825,825,815,815', -'815,815,815,815,,,,815,815,,,,815,,815,815,815,815,815,815,815,,,,,', -'815,815,815,815,815,815,815,,,815,,,,,,815,815,,815,815,815,815,815', -'815,815,815,815,,815,815,815,,815,815,,815,815,815,888,888,888,888,888', -'888,888,888,888,888,888,,888,888,,,888,888,,815,,,815,,,815,815,,,815', -',815,888,,888,815,888,888,888,888,888,888,888,815,888,,,,815,815,815', -'815,815,815,,,,815,815,,888,,,,,815,,,815,815,815,,,815,815,814,814', -'814,814,814,814,,,,814,814,,,,814,,814,814,814,814,814,814,814,,,,,', -'814,814,814,814,814,814,814,,,814,,,,,,814,814,,814,814,814,814,814', -'814,814,814,814,,814,814,814,,814,814,,814,814,814,24,24,24,24,24,24', -'24,24,24,24,24,,24,24,,,24,24,,814,,,814,,,814,814,,,814,,814,24,,24', -'814,24,24,24,24,24,24,24,814,24,,,,814,814,814,814,814,814,,,,814,814', -',24,,,,,814,,,814,814,814,,,814,814,209,209,209,209,209,209,,,,209,209', -',,,209,,209,209,209,209,209,209,209,,,,,,209,209,209,209,209,209,209', -',,209,,,,,,209,209,,209,209,209,209,209,209,209,209,209,,209,209,209', -',209,209,,209,209,209,533,533,533,533,533,533,533,533,533,533,533,,533', -'533,,,533,533,,209,,,209,,,209,209,,,209,,209,533,,533,209,533,533,533', -'533,533,533,533,209,533,,,,209,209,209,209,209,209,,,,209,209,,533,', -',,,209,,,209,209,209,,,209,209,810,810,810,810,810,810,,,,810,810,,', -',810,,810,810,810,810,810,810,810,,,,,,810,810,810,810,810,810,810,', -',810,,,,,480,810,810,,810,810,810,810,810,810,810,810,810,,810,810,810', -',810,810,,810,810,810,483,483,483,483,483,483,483,483,480,483,483,,480', -'480,480,480,483,483,,810,,,810,,,810,810,,,810,,810,483,,483,810,483', -'483,483,483,483,483,483,810,483,,,,810,810,810,810,810,810,,,,810,810', -',987,,987,987,987,810,987,,810,810,810,,,810,810,233,233,233,233,233', -'233,,,,233,233,,,,233,,233,233,233,233,233,233,233,987,,,,,233,233,233', -'233,233,233,233,,1023,233,1023,1023,1023,,1023,233,233,,233,233,233', -'233,233,233,233,233,233,,233,233,233,,233,233,,233,233,233,471,,,,,', -',985,1023,985,985,985,,985,,,471,471,,233,,,233,,469,233,233,,,233,', -'233,471,,471,233,471,471,471,471,469,469,471,233,471,985,,,233,233,233', -'233,233,233,,,469,233,233,,469,469,469,469,,233,,,233,233,233,,,233', -'233,765,765,765,765,765,765,,,,765,765,,,,765,,765,765,765,765,765,765', -'765,,,,,,765,765,765,765,765,765,765,,,765,,,,,,765,765,,765,765,765', -'765,765,765,765,765,765,,765,765,765,,765,765,,765,765,765,475,475,475', -'475,475,475,475,,,475,475,,,,,,475,475,,765,,,765,,,765,765,,,765,,765', -'475,,475,765,475,475,475,475,475,475,475,765,475,,,,765,765,765,765', -'765,765,,,,765,765,,,,,,,765,,,765,765,765,,,765,765,759,759,759,759', -'759,759,,,,759,759,,,,759,,759,759,759,759,759,759,759,,,,,,759,759', -'759,759,759,759,759,,,759,,,,,,759,759,,759,759,759,759,759,759,759', -'759,759,,759,759,759,,759,759,,759,759,759,474,,,,,,,,,,,,,,,,474,474', -',759,,,759,,,759,759,,,759,,759,474,,474,759,474,474,474,474,,,474,759', -'474,,,,759,759,759,759,759,759,,,,759,759,,,,,,,759,,,759,759,759,,', -'759,759,758,758,758,758,758,758,,,,758,758,,,,758,,758,758,758,758,758', -'758,758,,,,,,758,758,758,758,758,758,758,,,758,,,,,,758,758,,758,758', -'758,758,758,758,758,758,758,,758,758,758,,758,758,,758,758,758,459,459', -'459,459,459,459,459,459,459,459,459,,459,459,,,459,459,,758,,,758,,', -'758,758,,,758,,758,459,,459,758,459,459,459,459,459,459,459,758,459', -',,,758,758,758,758,758,758,,,,758,758,,,,,,,758,,,758,758,758,,,758', -'758,298,298,298,298,298,298,,,,298,298,,,,298,,298,298,298,298,298,298', -'298,,,,,,298,298,298,298,298,298,298,,,298,,,,,,298,298,,298,298,298', -'298,298,298,298,298,298,,298,298,298,,298,298,,298,298,298,472,,,,,', -',,,,,,,,,,472,472,,298,,,298,,,298,298,,,298,,298,472,,472,298,472,472', -'472,472,,,472,298,472,,,,298,298,298,298,298,298,,,,298,298,,,,,,,298', -',,298,298,298,,,298,298,708,708,708,708,708,708,,,,708,708,,,,708,,708', -'708,708,708,708,708,708,,,,,,708,708,708,708,708,708,708,,,708,,,,,', -'708,708,,708,708,708,708,708,708,708,708,708,,708,708,708,,708,708,', -'708,708,708,476,476,476,476,476,476,476,,,476,476,,,,,,476,476,,708', -',,708,,,708,708,,,708,,708,476,,476,708,476,476,476,476,476,476,476', -'708,476,,,,708,708,708,708,708,708,,,,708,708,,,,,,,708,,,708,708,708', -',,708,708,707,707,707,707,707,707,,,,707,707,,,,707,,707,707,707,707', -'707,707,707,,,,,,707,707,707,707,707,707,707,,,707,,,,,,707,707,,707', -'707,707,707,707,707,707,707,707,,707,707,707,,707,707,,707,707,707,470', -'470,470,470,470,470,470,,,470,470,,,,,,470,470,,707,,,707,,,707,707', -',,707,,707,470,,470,707,470,470,470,470,470,470,470,707,470,,,,707,707', -'707,707,707,707,,,,707,707,,,,,,,707,,,707,707,707,,,707,707,303,303', -'303,303,303,303,,,,303,303,,,,303,,303,303,303,303,303,303,303,,,,,', -'303,303,303,303,303,303,303,,,303,,,,,,303,303,,303,303,303,303,303', -'303,303,303,303,,303,303,303,,303,303,,303,303,303,477,477,477,477,477', -'477,477,,,477,477,,,,,,477,477,,303,,,303,,,303,303,,,303,,303,477,', -'477,303,477,477,477,477,477,477,477,303,477,,,,303,303,303,303,303,303', -',,,303,303,,,,,,,303,,,303,303,303,,,303,303,328,328,328,328,328,328', -',,,328,328,,,,328,,328,328,328,328,328,328,328,,,,,,328,328,328,328', -'328,328,328,,,328,,,,,,328,328,,328,328,328,328,328,328,328,328,328', -',328,328,328,,328,328,,328,328,328,460,460,460,460,460,460,460,460,460', -'460,460,,460,460,,,460,460,,328,,,328,,,328,328,,,328,,328,460,,460', -'328,460,460,460,460,460,460,460,328,460,,,,328,328,328,328,328,328,', -',,328,328,,,,,,,328,,,328,328,328,,,328,328,585,585,585,585,585,585', -',,,585,585,,,,585,,585,585,585,585,585,585,585,,,,,,585,585,585,585', -'585,585,585,,,585,,,,,,585,585,,585,585,585,585,585,585,585,585,585', -',585,585,585,,585,585,,585,585,585,478,478,478,478,478,478,478,,,478', -'478,,,,,,478,478,,585,,,585,,,585,585,,,585,,585,478,,478,585,478,478', -'478,478,478,478,478,585,478,,,,585,585,585,585,585,585,,,,585,585,,', -',,,,585,,,585,585,585,,,585,585,582,582,582,582,582,582,,,,582,582,', -',,582,,582,582,582,582,582,582,582,,,,,,582,582,582,582,582,582,582', -',,582,,,,,,582,582,,582,582,582,582,582,582,582,582,582,,582,582,582', -',582,582,,582,582,582,479,479,479,479,479,479,479,,,479,479,,,,,,479', -'479,,582,,,582,,,582,582,,,582,,582,479,,479,582,479,479,479,479,479', -'479,479,582,479,,,,582,582,582,582,582,582,,,,582,582,,,,,,,582,,,582', -'582,582,,,582,582,406,406,406,406,406,406,,,,406,406,,,,406,,406,406', -'406,406,406,406,406,,,,,,406,406,406,406,406,406,406,,,406,,,,,,406', -'406,406,406,406,406,406,406,406,406,406,406,,406,406,406,,406,406,,406', -'406,406,482,482,482,482,482,482,482,,,482,482,,,,,,482,482,,406,,,406', -',,406,406,,,406,,406,482,,482,406,482,482,482,482,482,482,482,406,482', -',,,406,406,406,406,406,406,,,,406,406,,,,,,,406,,,406,406,406,,,406', -'406,795,795,795,,795,,,,795,795,,,,795,,795,795,795,795,795,795,795', -',,,,,795,795,795,795,795,795,795,,,795,,,,,,,795,,,795,795,795,795,795', -'795,795,795,,795,795,795,,795,795,,795,795,795,473,,,,,,,,,,,,,,,,473', -'473,,795,,,795,,,795,795,,,795,,,473,,473,795,473,473,473,473,,,473', -'795,473,,,,795,795,795,795,795,795,,,,795,795,,,,,,,795,,,795,795,795', -',,795,795,886,886,886,,886,,,,886,886,,,,886,,886,886,886,886,886,886', -'886,,,,,,886,886,886,886,886,886,886,,,886,,,,,,,886,,,886,886,886,886', -'886,886,886,886,886,886,886,886,,886,886,,886,886,886,468,,,,,,,,,,', -',,,,,468,468,,886,,,886,,,886,886,,,886,,,468,886,468,886,468,468,468', -'468,,,,886,,,,,886,886,886,886,886,886,,,,886,886,,,,,,,886,,886,886', -'886,886,,,886,886,868,868,868,,868,,,,868,868,,,,868,,868,868,868,868', -'868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,,868,,,868,868', -'868,868,868,868,868,868,,868,868,868,,868,868,,868,868,868,467,,,,,', -',,,,,,,,,,467,467,,868,,,868,,,868,868,,,868,,,467,,467,868,467,467', -'467,467,,,,868,,,,,868,868,868,868,868,868,,,,868,868,,,,,,,868,,,868', -'868,868,,,868,868,677,677,677,,677,,,,677,677,,,,677,,677,677,677,677', -'677,677,677,,,,,,677,677,677,677,677,677,677,,,677,,,,,,,677,,,677,677', -'677,677,677,677,677,677,,677,677,677,,677,677,,677,677,677,,,,,,,,,', -',,,,,,,,,,677,,,677,,,677,677,,,677,,,,,,677,,,,,,,,677,,,,,677,677', -'677,677,677,677,,,,677,677,,,,,,,677,,,677,677,677,,,677,677,653,653', -'653,,653,,,,653,653,,,,653,,653,653,653,653,653,653,653,,,,,,653,653', -'653,653,653,653,653,,,653,,,,,,,653,,,653,653,653,653,653,653,653,653', -',653,653,653,,653,653,,653,653,653,,,,,,,,,,,,,,,,,,,,653,,,653,,,653', -'653,,,653,,,,,,653,,,,,,,,653,,,,,653,653,653,653,653,653,,,,653,653', -',,,,,,653,,,653,653,653,,,653,653,319,319,319,,319,,,,319,319,,,,319', -',319,319,319,319,319,319,319,,,,,,319,319,319,319,319,319,319,,,319', -',,,,,,319,,,319,319,319,319,319,319,319,319,,319,319,319,,319,319,,', -',319,,,,,,,,,,,,,,,,,,,,319,,,319,,,319,319,,,319,,,,,,,,,,,,,,,,,,', -'319,319,319,319,319,319,,,,319,319,,,,,,,319,,,319,319,319,,,319,319', -'652,652,652,,652,,,,652,652,,,,652,,652,652,652,652,652,652,652,,,,', -',652,652,652,652,652,652,652,,,652,,,,,,,652,,,652,652,652,652,652,652', -'652,652,,652,652,652,,652,652,,652,652,652,,,,,,,,,,,,,,,,,,,,652,,', -'652,,,652,652,,,652,,,,,,652,,,,,,,,652,,,,,652,652,652,652,652,652', -',,,652,652,,,,,,,652,,,652,652,652,,,652,652,649,649,649,,649,,,,649', -'649,,,,649,,649,649,649,649,649,649,649,,,,,,649,649,649,649,649,649', -'649,,,649,,,,,,,649,,,649,649,649,649,649,649,649,649,,649,649,649,', -'649,649,,649,649,649,,,,,,,,,,,,,,,,,,,,649,,,649,,,649,649,,,649,,', -',,,649,,,,,,,,649,,,,,649,649,649,649,649,649,,,,649,649,,,,,,,649,', -',649,649,649,,,649,649,648,648,648,,648,,,,648,648,,,,648,,648,648,648', -'648,648,648,648,,,,,,648,648,648,648,648,648,648,,,648,,,,,,,648,,,648', -'648,648,648,648,648,648,648,,648,648,648,,648,648,,648,648,648,,,,,', -',,,,,,,,,,,,,,648,,,648,,,648,648,,,648,,,,,,648,,,,,,,,648,,,,,648', -'648,648,648,648,648,,,,648,648,,,,,,,648,,,648,648,648,,,648,648,643', -'643,643,,643,,,,643,643,,,,643,,643,643,643,643,643,643,643,,,,,,643', -'643,643,643,643,643,643,,,643,,,,,,,643,,,643,643,643,643,643,643,643', -'643,,643,643,643,,643,643,,643,643,643,,,,,,,,,,,,,,,,,,,,643,,,643', -',,643,643,,,643,,,,,,643,,,,,,,,643,,,,,643,643,643,643,643,643,,,,643', -'643,,,,,,,643,,,643,643,643,,,643,643,327,327,327,,327,,,,327,327,,', -',327,,327,327,327,327,327,327,327,,,,,,327,327,327,327,327,327,327,', -',327,,,,,,,327,,,327,327,327,327,327,327,327,327,,327,327,327,,327,327', -',327,327,327,,,,,,,,,,,,,,,,,,,,327,,,327,327,,327,327,,,327,,,,,,327', -',,,,,,,327,,,,,327,327,327,327,327,327,,,,327,327,,,,,,,327,,,327,327', -'327,,,327,327,330,330,330,,330,,,,330,330,,,,330,,330,330,330,330,330', -'330,330,,,,,,330,330,330,330,330,330,330,,,330,,,,,,,330,,,330,330,330', -'330,330,330,330,330,,330,330,330,,330,330,,330,330,330,,,,,,,,,,,,,', -',,,,,,330,,,330,,,330,330,,,330,,,,,,330,,,,,,,,330,,,,,330,330,330', -'330,330,330,,,,330,330,,,,,,,330,,,330,330,330,,,330,330,642,642,642', -',642,,,,642,642,,,,642,,642,642,642,642,642,642,642,,,,,,642,642,642', -'642,642,642,642,,,642,,,,,,,642,,,642,642,642,642,642,642,642,642,,642', -'642,642,,642,642,,642,642,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642', -',,642,,,,,,642,,,,,,,,642,,,,,642,642,642,642,642,642,,,,642,642,,,', -',,,642,,,642,642,642,,,642,642,641,641,641,,641,,,,641,641,,,,641,,641', -'641,641,641,641,641,641,,,,,,641,641,641,641,641,641,641,,,641,,,,,', -',641,,,641,641,641,641,641,641,641,641,641,641,641,641,,641,641,,641', -'641,641,,,,,,,,,,,,,,,,,,,,641,,,641,,,641,641,,,641,,,,641,,641,,,', -',,,,641,,,,,641,641,641,641,641,641,,,,641,641,,,,,,,641,,641,641,641', -'641,,,641,641,640,640,640,,640,,,,640,640,,,,640,,640,640,640,640,640', -'640,640,,,,,,640,640,640,640,640,640,640,,,640,,,,,,,640,,,640,640,640', -'640,640,640,640,640,640,640,640,640,,640,640,,640,640,640,,,,,,,,,,', -',,,,,,,,,640,,,640,,,640,640,,,640,,640,,640,,640,,,,,,,,640,,,,,640', -'640,640,640,640,640,,,,640,640,,,,,,,640,,640,640,640,640,,,640,640', -'637,637,637,,637,,,,637,637,,,,637,,637,637,637,637,637,637,637,,,,', -',637,637,637,637,637,637,637,,,637,,,,,,,637,,,637,637,637,637,637,637', -'637,637,,637,637,637,,637,637,,637,637,637,,,,,,,,,,,,,,,,,,,,637,,', -'637,,,637,637,,,637,,,,,,637,,,,,,,,637,,,,,637,637,637,637,637,637', -',,,637,637,,,,,,,637,,,637,637,637,,,637,637,336,336,336,,336,,,,336', -'336,,,,336,,336,336,336,336,336,336,336,,,,,,336,336,336,336,336,336', -'336,,,336,,,,,,,336,,,336,336,336,336,336,336,336,336,336,336,336,336', -',336,336,,336,336,336,,,,,,,,,,,,,,,,,,,,336,,,336,,,336,336,,,336,', -',,,,336,,,,,,,,336,,,,,336,336,336,336,336,336,,,,336,336,,,,,,,336', -',336,336,336,336,,,336,336,636,636,636,,636,,,,636,636,,,,636,,636,636', -'636,636,636,636,636,,,,,,636,636,636,636,636,636,636,,,636,,,,,,,636', -',,636,636,636,636,636,636,636,636,,636,636,636,,636,636,,636,636,636', -',,,,,,,,,,,,,,,,,,,636,,,636,,,636,636,,,636,,636,,,,636,,,,,,,,636', -',,,,636,636,636,636,636,636,,,,636,636,,,,,,,636,,,636,636,636,,,636', -'636,343,343,343,,343,,,,343,343,,,,343,,343,343,343,343,343,343,343', -',,,,,343,343,343,343,343,343,343,,,343,,,,,,,343,,,343,343,343,343,343', -'343,343,343,,343,343,343,,343,343,,343,343,343,,,,,,,,,,,,,,,,,,,,343', -',,343,,,343,343,,,343,,,,,,343,,,,,,,,343,,,,,343,343,343,343,343,343', -',,,343,343,,,,,,,343,,,343,343,343,,,343,343,344,344,344,,344,,,,344', -'344,,,,344,,344,344,344,344,344,344,344,,,,,,344,344,344,344,344,344', -'344,,,344,,,,,,,344,,,344,344,344,344,344,344,344,344,,344,344,344,', -'344,344,,344,344,344,,,,,,,,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,', -',,,344,,,,,,,,344,,,,,344,344,344,344,344,344,,,,344,344,,,,,,,344,', -',344,344,344,,,344,344,607,607,607,,607,,,,607,607,,,,607,,607,607,607', -'607,607,607,607,,,,,,607,607,607,607,607,607,607,,,607,,,,,,,607,,,607', -'607,607,607,607,607,607,607,,607,607,607,,607,607,,607,607,607,,,,,', -',,,,,,,,,,,,,,607,,,607,,,607,607,,,607,,,,,,607,,,,,,,,607,,,,,607', -'607,607,607,607,607,,,,607,607,,,,,,,607,,,607,607,607,,,607,607,603', -'603,603,,603,,,,603,603,,,,603,,603,603,603,603,603,603,603,,,,,,603', -'603,603,603,603,603,603,,,603,,,,,,,603,,,603,603,603,603,603,603,603', -'603,,603,603,603,,603,603,,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603', -',,603,603,,,603,,,,,,603,,,,,,,,603,,,,,603,603,603,603,603,603,,,,603', -'603,,,,,,,603,,,603,603,603,,,603,603,591,591,591,,591,,,,591,591,,', -',591,,591,591,591,591,591,591,591,,,,,,591,591,591,591,591,591,591,', -',591,,,,,,,591,,,591,591,591,591,591,591,591,591,591,591,591,591,,591', -'591,,591,591,591,,,,,,,,,,,,,,,,,,,,591,,,591,,,591,591,,,591,,591,', -'591,,591,,,,,,,,591,,,,,591,591,591,591,591,591,,,,591,591,,,,,,,591', -',591,591,591,591,,,591,591,356,356,356,,356,,,,356,356,,,,356,,356,356', -'356,356,356,356,356,,,,,,356,356,356,356,356,356,356,,,356,,,,,,,356', -',,356,356,356,356,356,356,356,356,,356,356,356,,356,356,,,,356,,,,,', -',,,,,,,,,,,,,,356,,,356,,,356,356,,,356,,,,,,,,,,,,,,,,,,,356,356,356', -'356,356,356,,,,356,356,,,,,,,356,,,356,356,356,,,356,356,358,358,358', -',358,,,,358,358,,,,358,,358,358,358,358,358,358,358,,,,,,358,358,358', -'358,358,358,358,,,358,,,,,,,358,,,358,358,358,358,358,358,358,358,,358', -'358,358,,358,358,,,,358,,,,,,,,,,,,,,,,,,,,358,,,358,,,358,358,,,358', -',,,,,,,,,,,,,,,,,,358,358,358,358,358,358,,,,358,358,,,,,,,358,,,358', -'358,358,,,358,358,1014,1014,1014,,1014,,,,1014,1014,,,,1014,,1014,1014', -'1014,1014,1014,1014,1014,,,,,,1014,1014,1014,1014,1014,1014,1014,,,1014', -',,,,,,1014,,,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014', -'1014,,1014,1014,,1014,1014,1014,,,,,,,,,,,,,,,,,,,,1014,,,1014,,,1014', -'1014,,,1014,,1014,,1014,,1014,,,,,,,,1014,,,,,1014,1014,1014,1014,1014', -'1014,,,,1014,1014,,,,,,,1014,,1014,1014,1014,1014,,,1014,1014,416,416', -'416,,416,,,,416,416,,,,416,,416,416,416,416,416,416,416,,,,,,416,416', -'416,416,416,416,416,,,416,,,,,,,416,,,416,416,416,416,416,416,416,416', -',416,416,416,,416,416,,416,416,416,,,,,,,,,,,,,,,,,,,,416,,,416,,,416', -'416,,,416,,,,,,416,,,,,,,,416,,,,,416,416,416,416,416,416,,,,416,416', -',,,,,,416,,,416,416,416,,,416,416,570,570,570,,570,,,,570,570,,,,570', -',570,570,570,570,570,570,570,,,,,,570,570,570,570,570,570,570,,,570', -',,,,,,570,,,570,570,570,570,570,570,570,570,,570,570,570,,570,570,,570', -'570,570,,,,,,,,,,,,,,,,,,,,570,,,570,,,570,570,,,570,,,,,,570,,,,,,', -',570,,,,,570,570,570,570,570,570,,,,570,570,,,,,,,570,,,570,570,570', -',,570,570,543,543,543,,543,,,,543,543,,,,543,,543,543,543,543,543,543', -'543,,,,,,543,543,543,543,543,543,543,,,543,,,,,,,543,,,543,543,543,543', -'543,543,543,543,543,543,543,543,,543,543,,543,543,543,,,,,,,,,,,,,,', -',,,,,543,,,543,,,543,543,,,543,,,,,,543,,,,,,,,543,,,,,543,543,543,543', -'543,543,,,,543,543,,,,,,,543,,543,543,543,543,,,543,543,23,23,23,,23', -',,,23,23,,,,23,,23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23', -',,,,,,23,,,23,23,23,23,23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,', -',,,,,,,,,,,,,23,,,23,,,23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23', -'23,23,,,,23,23,,,,,,,23,,,23,23,23,,,23,23,939,939,939,,939,,,,939,939', -',,,939,,939,939,939,939,939,939,939,,,,,,939,939,939,939,939,939,939', -',,939,,,,,,,939,,,939,939,939,939,939,939,939,939,,939,939,939,,939', -'939,,939,939,939,,,,,,,,,,,,,,,,,,,,939,,,939,,,939,939,,,939,,939,', -',,939,,,,,,,,939,,,,,939,939,939,939,939,939,,,,939,939,,,,,,,939,,', -'939,939,939,,,939,939,914,914,914,,914,,,,914,914,,,,914,,914,914,914', -'914,914,914,914,,,,,,914,914,914,914,914,914,914,,,914,,,,,,,914,,,914', -'914,914,914,914,914,914,914,,914,914,914,,914,914,,,,914,,,,,,,,,,,', -',,,,,,,,914,,,914,,,914,914,,,914,,,,,,,,,,,,,,,,,,,914,914,914,914', -'914,914,,,,914,914,,,,,,,914,,,914,914,914,,,914,914,540,540,540,,540', -',,,540,540,,,,540,,540,540,540,540,540,540,540,,,,,,540,540,540,540', -'540,540,540,,,540,,,,,,,540,,,540,540,540,540,540,540,540,540,540,540', -'540,540,,540,540,,540,540,540,,,,,,,,,,,,,,,,,,,,540,,,540,,,540,540', -',,540,,540,,,,540,,,,,,,,540,,,,,540,540,540,540,540,540,,,,540,540', -',,,,,,540,,540,540,540,540,,,540,540,32,32,32,,32,,,,32,32,,,,32,,32', -'32,32,32,32,32,32,,,,,,32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32', -'32,32,32,32,32,32,32,32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,', -'32,,,32,32,,,32,,32,,32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32', -',,,,,,32,,32,32,32,32,,,32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33', -'33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33', -'33,33,33,33,33,33,33,,33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33', -'33,,,33,,33,,33,,33,,,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33', -',33,33,33,33,,,33,33,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34', -'34,,,,,,34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34', -'34,34,34,34,,34,34,,34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34', -',34,,34,,34,,,,,,,,34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34', -'34,34,,,34,34,534,534,534,,534,,,,534,534,,,,534,,534,534,534,534,534', -'534,534,,,,,,534,534,534,534,534,534,534,,,534,,,,,,,534,,,534,534,534', -'534,534,534,534,534,,534,534,534,,534,534,,534,534,534,,,,,,,,,,,,,', -',,,,,,534,,,534,,,534,534,,,534,,,,,,534,,,,,,,,534,,,,,534,534,534', -'534,534,534,,,,534,534,,,,,,,534,,,534,534,534,,,534,534,37,37,37,,37', -',,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37', -',,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,,,,', -',,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37,37', -',,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,,38,,38', -'38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38,38', -'38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38,,,38', -'38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,,,38,,,38', -'38,38,,,38,38,530,530,530,,530,,,,530,530,,,,530,,530,530,530,530,530', -'530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,,,530,,,530,530,530', -'530,530,530,530,530,,530,530,530,,530,530,,530,530,530,,,,,,,,,,,,,', -',,,,,,530,,,530,,,530,530,,,530,,,,,,530,,,,,,,,530,,,,,530,530,530', -'530,530,530,,,,530,530,,,,,,,530,,,530,530,530,,,530,530,529,529,529', -',529,,,,529,529,,,,529,,529,529,529,529,529,529,529,,,,,,529,529,529', -'529,529,529,529,,,529,,,,,,,529,,,529,529,529,529,529,529,529,529,,529', -'529,529,,529,529,,529,529,529,,,,,,,,,,,,,,,,,,,,529,,,529,,,529,529', -',,529,,,,,,529,,,,,,,,529,,,,,529,529,529,529,529,529,,,,529,529,,,', -',,,529,,,529,529,529,,,529,529,902,902,902,,902,,,,902,902,,,,902,,902', -'902,902,902,902,902,902,,,,,,902,902,902,902,902,902,902,,,902,,,,,', -',902,,,902,902,902,902,902,902,902,902,,902,902,902,,902,902,,,,902', -',,,,,,,,,,,,,,,,,,,902,,,902,,,902,902,,,902,,,,,,,,,,,,,,,,,,,902,902', -'902,902,902,902,,,,902,902,,,,,,,902,,,902,902,902,,,902,902,887,887', -'887,,887,,,,887,887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887', -'887,887,887,887,887,,,887,,,,,,,887,,,887,887,887,887,887,887,887,887', -',887,887,887,,887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887,,,887', -'887,,,887,,,,,,887,,,,,,,,887,,,,,887,887,887,887,887,887,,,,887,887', -',,,,,,887,,,887,887,887,,,887,887,45,45,45,,45,,,,45,45,,,,45,,45,45', -'45,45,45,45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45', -'45,45,45,45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,', -'45,45,,,45,,,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45', -',,45,45,45,,,45,45,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46', -',,,,,46,46,46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46', -'46,46,,46,46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,', -'46,,,,,,,,46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46', -'46,526,526,526,,526,,,,526,526,,,,526,,526,526,526,526,526,526,526,', -',,,,526,526,526,526,526,526,526,,,526,,,,,,,526,,,526,526,526,526,526', -'526,526,526,,526,526,526,,526,526,,,,526,,,,,,,,,,,,,,,,,,,,526,,,526', -',,526,526,,,526,,,,,,,,,,,,,,,,,,,526,526,526,526,526,526,,,,526,526', -',,,,,,526,,,526,526,526,,,526,526,62,62,62,,62,,,,62,62,,,,62,,62,62', -'62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62,,,62,62,62,62', -'62,62,62,62,62,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62', -',,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,', -',,62,,62,62,62,62,,,62,62,66,66,66,,66,,,,66,66,,,,66,,66,66,66,66,66', -'66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66,66,66,66,66,66', -'66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,,,,,,66,,,66,,,66,66,,,66', -',,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,,66,66,,,,,,,66,,,66,66,66', -',,66,66,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67,,,,,,67,67', -'67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67,67,,67', -'67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67,,,,,,,', -'67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,,,67,67,70,70', -'70,,70,,,,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70,70,70,70,70,70', -',,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70,70,,70,70,70,', -',,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,70,,,,,,,,70,,,,,70,70,70', -'70,70,70,,,,70,70,70,,,,,70,70,,,70,70,70,,,70,70,71,71,71,,71,,,,71', -'71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71,,,,,,', -'71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,,,71,,,,,,,,,,,,,,,,', -',,,71,,,71,,,71,71,,,71,,71,,,,,,,,,,,,,,,,,71,71,71,71,71,71,,,,71', -'71,,,,,,,71,,,71,71,71,,,71,71,520,520,520,,520,,,,520,520,,,,520,,520', -'520,520,520,520,520,520,,,,,,520,520,520,520,520,520,520,,,520,,,,,', -',520,,,520,520,520,520,520,520,520,520,520,520,520,520,,520,520,,520', -'520,520,,,,,,,,,,,,,,,,,,,,520,,,520,,,520,520,,,520,,520,,520,,520', -',,,,,,,520,,,,,520,520,520,520,520,520,,,,520,520,,,,,,,520,,520,520', -'520,520,,,520,520,855,855,855,,855,,,,855,855,,,,855,,855,855,855,855', -'855,855,855,,,,,,855,855,855,855,855,855,855,,,855,,,,,,,855,,,855,855', -'855,855,855,855,855,855,,855,855,855,,855,855,,855,855,855,,,,,,,,,', -',,,,,,,,,,855,,,855,,,855,855,,,855,,,,,,855,,,,,,,,855,,,,,855,855', -'855,855,855,855,,,,855,855,,,,,,,855,,,855,855,855,,,855,855,8,8,8,8', -'8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8', -'8,8,8,8,8,8,,8,8,8,,8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8', -',,,8,,,,,,,,8,,,,,8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,114,114,114', -'114,114,,,,114,114,,,,114,,114,114,114,114,114,114,114,,,,,,114,114', -'114,114,114,114,114,,,114,,,,,,114,114,114,114,114,114,114,114,114,114', -'114,114,,114,114,114,,114,114,,114,114,114,,,,,,,,,,,,,,,,,,,,114,,', -'114,,,114,114,,,114,,114,,,,114,,,,,,,,114,,,,,114,114,114,114,114,114', -',,,114,114,,,,,,114,114,,,114,114,114,,,114,114,119,119,119,,119,,,', -'119,119,,,,119,,119,119,119,119,119,119,119,,,,,,119,119,119,119,119', -'119,119,,,119,,,,,,,119,,,119,119,119,119,119,119,119,119,,119,119,119', -',119,119,,119,119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119,119,,,119,', -',,,,119,,,,,,,,119,,,,,119,119,119,119,119,119,,,,119,119,,,,,,,119', -',,119,119,119,,,119,119,120,120,120,,120,,,,120,120,,,,120,,120,120', -'120,120,120,120,120,,,,,,120,120,120,120,120,120,120,,,120,,,,,,,120', -',,120,120,120,120,120,120,120,120,,120,120,120,,120,120,,120,120,120', -',,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120,,,,,,,,120,,,', -',120,120,120,120,120,120,,,,120,120,,,,,,,120,,,120,120,120,,,120,120', -'121,121,121,,121,,,,121,121,,,,121,,121,121,121,121,121,121,121,,,,', -',121,121,121,121,121,121,121,,,121,,,,,,,121,,,121,121,121,121,121,121', -'121,121,,121,121,121,,121,121,,121,121,121,,,,,,,,,,,,,,,,,,,,121,,', -'121,,,121,121,,,121,,,,,,121,,,,,,,,121,,,,,121,121,121,121,121,121', -',,,121,121,,,,,,,121,,,121,121,121,,,121,121,122,122,122,,122,,,,122', -'122,,,,122,,122,122,122,122,122,122,122,,,,,,122,122,122,122,122,122', -'122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122,,122,122,122,', -'122,122,,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122,,', -',,,122,,,,,,,,122,,,,,122,122,122,122,122,122,,,,122,122,,,,,,,122,', -',122,122,122,,,122,122,123,123,123,123,123,,,,123,123,,,,123,,123,123', -'123,123,123,123,123,,,,,,123,123,123,123,123,123,123,,,123,,,,,,123', -'123,,123,123,123,123,123,123,123,123,123,,123,123,123,,123,123,,123', -'123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123,,,123,,123,,,,123,,,', -',,,,123,,,,,123,123,123,123,123,123,,,,123,123,,,,,,,123,,,123,123,123', -',,123,123,518,518,518,,518,,,,518,518,,,,518,,518,518,518,518,518,518', -'518,,,,,,518,518,518,518,518,518,518,,,518,,,,,,,518,,,518,518,518,518', -'518,518,518,518,,518,518,518,,518,518,,,,518,,,,,,,,,,,,,,,,,,,,518', -',,518,,,518,518,,,518,,,,,,,,,,,,,,,,,,,518,518,518,518,518,518,,,,518', -'518,,,,,,,518,,,518,518,518,,,518,518,511,511,511,511,511,,,,511,511', -',,,511,,511,511,511,511,511,511,511,,,,,,511,511,511,511,511,511,511', -',,511,,,,,,511,511,,511,511,511,511,511,511,511,511,511,,511,511,511', -',511,511,,511,511,511,,,,,,,,,,,,,,,,,,,,511,,,511,,,511,511,,,511,', -'511,,,,511,,,,,,,,511,,,,,511,511,511,511,511,511,,,,511,511,,,,,,511', -'511,,,511,511,511,,,511,511,508,508,508,,508,,,,508,508,,,,508,,508', -'508,508,508,508,508,508,,,,,,508,508,508,508,508,508,508,,,508,,,,,', -',508,,,508,508,508,508,508,508,508,508,,508,508,508,,508,508,,508,508', -'508,,,,,,,,,,,,,,,,,,,,508,,,508,,,508,508,,,508,,,,,,508,,,,,,,,508', -',,,,508,508,508,508,508,508,,,,508,508,,,,,,,508,,,508,508,508,,,508', -'508,504,504,504,,504,,,,504,504,,,,504,,504,504,504,504,504,504,504', -',,,,,504,504,504,504,504,504,504,,,504,,,,,,,504,,,504,504,504,504,504', -'504,504,504,,504,504,504,,504,504,,504,504,504,,,,,,,,,,,,,,,,,,,,504', -',,504,,,504,504,,,504,,,,,,504,,,,,,,,504,,,,,504,504,504,504,504,504', -',,,504,504,,,,,,,504,,,504,504,504,,,504,504,210,210,210,,210,,,,210', -'210,,,,210,,210,210,210,210,210,210,210,,,,,,210,210,210,210,210,210', -'210,,,210,,,,,,,210,,,210,210,210,210,210,210,210,210,,210,210,210,', -'210,210,,210,210,210,,,,,,,,,,,,,,,,,,,,210,,,210,,,210,210,,,210,,210', -',,,210,,,,,,,,210,,,,,210,210,210,210,210,210,,,,210,210,,,,,,,210,', -',210,210,210,,,210,210,211,211,211,,211,,,,211,211,,,,211,,211,211,211', -'211,211,211,211,,,,,,211,211,211,211,211,211,211,,,211,,,,,,,211,,,211', -'211,211,211,211,211,211,211,,211,211,211,,211,211,,211,211,211,,,,,', -',,,,,,,,,,,,,,211,,,211,,,211,211,,,211,,,,,,211,,,,,,,,211,,,,,211', -'211,211,211,211,211,,,,211,211,,,,,,,211,,,211,211,211,,,211,211,212', -'212,212,,212,,,,212,212,,,,212,,212,212,212,212,212,212,212,,,,,,212', -'212,212,212,212,212,212,,,212,,,,,,,212,,,212,212,212,212,212,212,212', -'212,212,212,212,212,,212,212,,212,212,212,,,,,,,,,,,,,,,,,,,,212,,,212', -',,212,212,,,212,,212,,212,,212,,,,,,,,212,,,,,212,212,212,212,212,212', -',,,212,212,,,,,,,212,,212,212,212,212,,,212,212,502,502,502,,502,,,', -'502,502,,,,502,,502,502,502,502,502,502,502,,,,,,502,502,502,502,502', -'502,502,,,502,,,,,,,502,,,502,502,502,502,502,502,502,502,502,502,502', -'502,,502,502,,502,502,502,,,,,,,,,,,,,,,,,,,,502,,,502,,,502,502,,,502', -',,,502,,502,,,,,,,,502,,,,,502,502,502,502,502,502,,,,502,502,,,,,,', -'502,,502,502,502,502,,,502,502,807,807,807,,807,,,,807,807,,,,807,,807', -'807,807,807,807,807,807,,,,,,807,807,807,807,807,807,807,,,807,,,,,', -',807,,,807,807,807,807,807,807,807,807,,807,807,807,,807,807,,,,807', -',,,,,,,,,,,,,,,,,,,807,,,807,,,807,807,,,807,,,,,,,,,,,,,,,,,,,807,807', -'807,807,807,807,,,,807,807,,,,,,,807,,,807,807,807,,,807,807,216,216', -'216,,216,,,,216,216,,,,216,,216,216,216,216,216,216,216,,,,,,216,216', -'216,216,216,216,216,,,216,,,,,,,216,,,216,216,216,216,216,216,216,216', -',216,216,216,,216,216,,216,216,216,,,,,,,,,,,,,,,,,,,,216,,,216,,,216', -'216,,,216,,,,,,216,,,,,,,,216,,,,,216,216,216,216,216,216,,,,216,216', -',,,,,,216,,,216,216,216,,,216,216,217,217,217,,217,,,,217,217,,,,217', -',217,217,217,217,217,217,217,,,,,,217,217,217,217,217,217,217,,,217', -',,,,,,217,,,217,217,217,217,217,217,217,217,,217,217,217,,217,217,,217', -'217,217,,,,,,,,,,,,,,,,,,,,217,,,217,,,217,217,,,217,,217,,,,217,,,', -',,,,217,,,,,217,217,217,217,217,217,,,,217,217,,,,,,,217,,,217,217,217', -',,217,217,218,218,218,,218,,,,218,218,,,,218,,218,218,218,218,218,218', -'218,,,,,,218,218,218,218,218,218,218,,,218,,,,,,,218,,,218,218,218,218', -'218,218,218,218,,218,218,218,,218,218,,218,218,218,,,,,,,,,,,,,,,,,', -',,218,,,218,,,218,218,,,218,,,,,,218,,,,,,,,218,,,,,218,218,218,218', -'218,218,,,,218,218,,,,,,,218,,,218,218,218,,,218,218,219,219,219,,219', -',,,219,219,,,,219,,219,219,219,219,219,219,219,,,,,,219,219,219,219', -'219,219,219,,,219,,,,,,,219,,,219,219,219,219,219,219,219,219,,219,219', -'219,,219,219,,219,219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219', -',,,,,219,,,,,,,,219,,,,,219,219,219,219,219,219,,,,219,219,,,,,,,219', -',,219,219,219,,,219,219,220,220,220,,220,,,,220,220,,,,220,,220,220', -'220,220,220,220,220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220', -',,220,220,220,220,220,220,220,220,,220,220,220,,220,220,,220,220,220', -',,,,,,,,,,,,,,,,,,,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,220,,,', -',220,220,220,220,220,220,,,,220,220,,,,,,,220,,,220,220,220,,,220,220', -'221,221,221,,221,,,,221,221,,,,221,,221,221,221,221,221,221,221,,,,', -',221,221,221,221,221,221,221,,,221,,,,,,,221,,,221,221,221,221,221,221', -'221,221,,221,221,221,,221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,', -'221,,,221,221,,,221,,,,,,221,,,,,,,,221,,,,,221,221,221,221,221,221', -',,,221,221,221,,,,,,221,,,221,221,221,,,221,221,47,47,47,,47,,,,47,47', -',,,47,,47,47,47,47,47,47,47,,,,,,47,47,47,47,47,47,47,,,47,,,,,,,47', -',,47,47,47,47,47,47,47,47,,47,47,47,,47,47,,47,47,47,,,,,,,,,,,,,,,', -',,,,47,,,47,,,47,47,,,47,,,,,,47,,,,,,,,47,,,,,47,47,47,47,47,47,,,', -'47,47,,,,,,,47,,,47,47,47,,,47,47,793,793,793,,793,,,,793,793,,,,793', -',793,793,793,793,793,793,793,,,,,,793,793,793,793,793,793,793,,,793', -',,,,,,793,,,793,793,793,793,793,793,793,793,,793,793,793,,793,793,,793', -'793,793,,,,,,,,,,,,,,,,,,,,793,,,793,,,793,793,,,793,,,,,,793,,,,,,', -',793,,,,,793,793,793,793,793,793,,,,793,793,,,,,,,793,,,793,793,793', -',,793,793,792,792,792,,792,,,,792,792,,,,792,,792,792,792,792,792,792', -'792,,,,,,792,792,792,792,792,792,792,,,792,,,,,,,792,,,792,792,792,792', -'792,792,792,792,,792,792,792,,792,792,,792,792,792,,,,,,,,,,,,,,,,,', -',,792,,,792,,,792,792,,,792,,,,,,792,,,,,,,,792,,,,,792,792,792,792', -'792,792,,,,792,792,,,,,,,792,,,792,792,792,,,792,792,791,791,791,,791', -',,,791,791,,,,791,,791,791,791,791,791,791,791,,,,,,791,791,791,791', -'791,791,791,,,791,,,,,,,791,,,791,791,791,791,791,791,791,791,,791,791', -'791,,791,791,,791,791,791,,,,,,,,,,,,,,,,,,,,791,,,791,,,791,791,,,791', -',,,,,791,,,,,,,,791,,,,,791,791,791,791,791,791,,,,791,791,,,,,,,791', -',,791,791,791,,,791,791,790,790,790,,790,,,,790,790,,,,790,,790,790', -'790,790,790,790,790,,,,,,790,790,790,790,790,790,790,,,790,,,,,,,790', -',,790,790,790,790,790,790,790,790,,790,790,790,,790,790,,790,790,790', -',,,,,,,,,,,,,,,,,,,790,,,790,,,790,790,,,790,,,,,,790,,,,,,,,790,,,', -',790,790,790,790,790,790,,,,790,790,,,,,,,790,,,790,790,790,,,790,790', -'776,776,776,,776,,,,776,776,,,,776,,776,776,776,776,776,776,776,,,,', -',776,776,776,776,776,776,776,,,776,,,,,,,776,,,776,776,776,776,776,776', -'776,776,,776,776,776,,776,776,,776,776,776,,,,,,,,,,,,,,,,,,,,776,,', -'776,,,776,776,,,776,,,,,,776,,,,,,,,776,,,,,776,776,776,776,776,776', -',,,776,776,,,,,,,776,,,776,776,776,,,776,776,774,774,774,,774,,,,774', -'774,,,,774,,774,774,774,774,774,774,774,,,,,,774,774,774,774,774,774', -'774,,,774,,,,,,,774,,,774,774,774,774,774,774,774,774,,774,774,774,', -'774,774,,774,774,774,,,,,,,,,,,,,,,,,,,,774,,,774,,,774,774,,,774,,', -',,,774,,,,,,,,774,,,,,774,774,774,774,774,774,,,,774,774,,,,,,,774,', -',774,774,774,,,774,774,232,232,232,,232,,,,232,232,,,,232,,232,232,232', -'232,232,232,232,,,,,,232,232,232,232,232,232,232,,,232,,,,,,,232,,,232', -'232,232,232,232,232,232,232,,232,232,232,,232,232,,232,232,232,,,,,', -',,,,,,,,,,,,,,232,,,232,,,232,232,,,232,,,,,,232,,,,,,,,232,,,,,232', -'232,232,232,232,232,,,,232,232,,,,,,,232,,,232,232,232,,,232,232,499', -'499,499,,499,,,,499,499,,,,499,,499,499,499,499,499,499,499,,,,,,499', -'499,499,499,499,499,499,,,499,,,,,,,499,,,499,499,499,499,499,499,499', -'499,499,499,499,499,,499,499,,499,499,499,,,,,,,,,,,,,,,,,,,,499,,,499', -',,499,499,,,499,,499,,499,,499,,,,,,,,499,,,,,499,499,499,499,499,499', -',,,499,499,,,,,,,499,,499,499,499,499,,,499,499,235,235,235,,235,,,', -'235,235,,,,235,,235,235,235,235,235,235,235,,,,,,235,235,235,235,235', -'235,235,,,235,,,,,,,235,,,235,235,235,235,235,235,235,235,,235,235,235', -',235,235,,235,235,235,,,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,', -',,,,235,,,,,,,,235,,,,,235,235,235,235,235,235,,,,235,235,,,,,,,235', -',,235,235,235,,,235,235,236,236,236,,236,,,,236,236,,,,236,,236,236', -'236,236,236,236,236,,,,,,236,236,236,236,236,236,236,,,236,,,,,,,236', -',,236,236,236,236,236,236,236,236,,236,236,236,,236,236,,236,236,236', -',,,,,,,,,,,,,,,,,,,236,,,236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,', -',236,236,236,236,236,236,,,,236,236,,,,,,,236,,,236,236,236,,,236,236', -'237,237,237,,237,,,,237,237,,,,237,,237,237,237,237,237,237,237,,,,', -',237,237,237,237,237,237,237,,,237,,,,,,,237,,,237,237,237,237,237,237', -'237,237,,237,237,237,,237,237,,237,237,237,,,,,,,,,,,,,,,,,,,,237,,', -'237,,,237,237,,,237,,,,,,237,,,,,,,,237,,,,,237,237,237,237,237,237', -',,,237,237,,,,,,,237,,,237,237,237,,,237,237,238,238,238,,238,,,,238', -'238,,,,238,,238,238,238,238,238,238,238,,,,,,238,238,238,238,238,238', -'238,,,238,,,,,,,238,,,238,238,238,238,238,238,238,238,,238,238,238,', -'238,238,,238,238,238,,,,,,,,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,', -',,,238,,,,,,,,238,,,,,238,238,238,238,238,238,,,,238,238,,,,,,,238,', -',238,238,238,,,238,238,239,239,239,,239,,,,239,239,,,,239,,239,239,239', -'239,239,239,239,,,,,,239,239,239,239,239,239,239,,,239,,,,,,,239,,,239', -'239,239,239,239,239,239,239,,239,239,239,,239,239,,239,239,239,,,,,', -',,,,,,,,,,,,,,239,,,239,,,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239', -'239,239,239,239,239,,,,239,239,,,,,,,239,,,239,239,239,,,239,239,240', -'240,240,,240,,,,240,240,,,,240,,240,240,240,240,240,240,240,,,,,,240', -'240,240,240,240,240,240,,,240,,,,,,,240,,,240,240,240,240,240,240,240', -'240,,240,240,240,,240,240,,240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240', -',,240,240,,,240,,,,,,240,,,,,,,,240,,,,,240,240,240,240,240,240,,,,240', -'240,,,,,,,240,,,240,240,240,,,240,240,241,241,241,,241,,,,241,241,,', -',241,,241,241,241,241,241,241,241,,,,,,241,241,241,241,241,241,241,', -',241,,,,,,,241,,,241,241,241,241,241,241,241,241,,241,241,241,,241,241', -',241,241,241,,,,,,,,,,,,,,,,,,,,241,,,241,,,241,241,,,241,,,,,,241,', -',,,,,,241,,,,,241,241,241,241,241,241,,,,241,241,,,,,,,241,,,241,241', -'241,,,241,241,242,242,242,,242,,,,242,242,,,,242,,242,242,242,242,242', -'242,242,,,,,,242,242,242,242,242,242,242,,,242,,,,,,,242,,,242,242,242', -'242,242,242,242,242,,242,242,242,,242,242,,242,242,242,,,,,,,,,,,,,', -',,,,,,242,,,242,,,242,242,,,242,,,,,,242,,,,,,,,242,,,,,242,242,242', -'242,242,242,,,,242,242,,,,,,,242,,,242,242,242,,,242,242,243,243,243', -',243,,,,243,243,,,,243,,243,243,243,243,243,243,243,,,,,,243,243,243', -'243,243,243,243,,,243,,,,,,,243,,,243,243,243,243,243,243,243,243,,243', -'243,243,,243,243,,243,243,243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243', -',,243,,,,,,243,,,,,,,,243,,,,,243,243,243,243,243,243,,,,243,243,,,', -',,,243,,,243,243,243,,,243,243,244,244,244,,244,,,,244,244,,,,244,,244', -'244,244,244,244,244,244,,,,,,244,244,244,244,244,244,244,,,244,,,,,', -',244,,,244,244,244,244,244,244,244,244,,244,244,244,,244,244,,244,244', -'244,,,,,,,,,,,,,,,,,,,,244,,,244,,,244,244,,,244,,,,,,244,,,,,,,,244', -',,,,244,244,244,244,244,244,,,,244,244,,,,,,,244,,,244,244,244,,,244', -'244,245,245,245,,245,,,,245,245,,,,245,,245,245,245,245,245,245,245', +'460,913,1071,402,355,356,239,460,460,460,367,703,569,460,460,708,460', +'483,405,92,788,788,767,709,482,889,703,92,961,364,617,613,771,565,617', +'888,460,460,824,460,460,460,460,460,1073,937,1072,1085,770,483,603,769', +'835,483,483,438,482,768,913,562,482,482,733,239,329,363,402,460,460', +'460,460,460,460,460,460,460,460,460,460,460,460,405,708,460,460,460', +'835,460,718,718,709,460,470,470,460,824,688,65,771,460,1017,460,1017', +'460,460,460,460,460,460,460,788,460,438,460,770,367,1071,708,355,356', +'708,1071,1073,355,356,709,460,460,709,460,889,460,461,29,364,708,613', +'771,460,461,461,461,961,709,460,461,461,961,461,888,603,329,888,770', +'888,603,769,461,1073,937,1072,1085,768,1073,937,1072,1085,733,461,461', +'363,461,461,461,461,461,308,680,718,686,561,308,470,688,65,238,47,47', +'334,334,390,5,22,782,782,711,5,615,29,461,461,461,461,461,461,461,461', +'461,461,461,461,461,461,686,455,461,461,461,241,461,29,47,47,461,719', +'556,461,841,22,802,719,461,803,461,680,461,461,461,461,461,461,461,238', +'461,461,461,44,44,711,525,615,390,390,390,640,711,455,615,461,461,711', +'461,615,461,711,681,615,334,334,555,461,455,681,681,681,241,461,681', +'681,681,841,681,711,977,615,793,802,841,384,803,681,681,681,681,977', +'384,841,476,891,554,679,681,681,547,681,681,681,681,681,545,525,525', +'525,542,841,640,640,957,392,957,957,957,382,957,640,44,44,977,977,382', +'537,525,681,681,681,681,681,681,681,681,681,681,681,681,681,681,793', +'793,681,681,681,891,681,681,476,793,681,679,891,681,681,977,681,891', +'681,535,681,891,681,681,681,681,681,681,681,735,681,681,681,392,392', +'392,532,381,531,891,735,454,797,397,381,681,681,681,681,957,681,407', +'681,682,643,560,799,681,560,901,682,682,682,681,901,682,682,682,999', +'682,515,996,801,735,735,999,514,338,996,682,682,682,1003,454,999,1003', +'616,996,855,682,682,855,682,682,682,682,682,750,454,750,750,750,619', +'750,397,397,397,735,394,619,503,394,407,407,407,643,643,643,619,338', +'682,682,682,682,682,682,682,682,682,682,682,682,682,682,338,380,682', +'682,682,616,682,682,380,487,682,486,616,682,682,485,682,616,682,41,682', +'616,682,682,682,682,682,682,682,969,682,484,682,237,969,394,394,541', +'663,616,237,750,42,20,541,682,682,682,682,237,682,804,682,541,809,379', +'472,682,804,804,804,41,379,682,804,804,985,804,985,985,985,985,985,1051', +'1051,1049,41,1049,1049,1049,663,1049,985,564,42,20,564,804,804,712,804', +'804,804,804,804,663,712,138,462,42,20,712,138,138,985,712,584,378,584', +'584,584,453,584,1049,378,985,985,452,804,804,804,804,804,804,804,804', +'804,804,804,804,804,804,354,354,804,804,804,747,804,747,747,747,804', +'747,584,804,360,738,738,985,804,360,804,584,804,804,804,804,804,804', +'804,449,804,353,804,353,353,353,353,353,559,897,435,559,377,747,897', +'804,804,353,804,377,804,805,747,756,756,995,432,804,805,805,805,990', +'995,804,805,805,1033,805,990,353,353,995,497,1033,17,17,805,990,353', +'353,353,353,1033,430,833,427,840,805,805,27,805,805,805,805,805,404', +'27,401,851,875,19,875,875,875,497,875,376,19,497,497,497,497,852,376', +'353,399,19,396,805,805,805,805,805,805,805,805,805,805,805,805,805,805', +'774,375,805,805,805,875,805,774,375,859,805,860,374,805,875,861,774', +'490,805,374,805,865,805,805,805,805,805,805,805,866,805,805,805,490', +'490,567,868,567,567,567,567,567,869,871,874,805,805,876,805,490,805', +'567,113,490,490,490,490,805,879,113,113,113,885,805,113,113,113,890', +'113,894,551,898,900,567,50,909,113,912,113,113,113,50,567,567,567,567', +'551,551,113,113,50,113,113,113,113,113,368,1043,366,1043,1043,1043,551', +'1043,551,362,551,551,551,551,361,919,551,920,551,922,923,924,567,113', +'113,113,113,113,113,113,113,113,113,113,113,113,113,926,1041,113,113', +'113,321,113,113,1041,927,113,928,321,113,113,348,113,1041,113,342,113', +'321,113,113,113,113,113,113,113,941,113,942,113,339,335,980,333,980', +'980,980,980,980,322,328,327,113,113,113,113,322,113,980,113,110,324', +'959,318,113,322,317,110,110,110,113,316,110,110,110,968,110,502,972', +'958,980,958,958,958,110,958,110,110,110,980,980,980,980,502,502,975', +'110,110,314,110,110,110,110,110,877,300,877,877,877,502,877,502,988', +'502,502,502,502,958,297,502,943,502,943,943,943,980,943,110,110,110', +'110,110,110,110,110,110,110,110,110,110,110,296,877,110,110,110,498', +'110,110,991,993,110,285,281,110,110,247,110,488,110,243,110,998,110', +'110,110,110,110,110,110,242,110,1007,110,488,488,1008,1009,498,1010', +'1011,240,498,498,498,498,110,110,110,110,488,110,488,110,488,488,488', +'488,110,530,530,530,530,530,110,1020,1020,1020,1020,1020,1020,1013,220', +'323,1020,1020,136,102,1023,1020,323,1020,1020,1020,1020,1020,1020,1020', +'1026,323,1027,1028,1029,1020,1020,1020,1020,1020,1020,1020,789,789,1020', +'1031,789,789,789,442,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020', +'1020,1020,101,1020,1020,1020,100,1020,1020,1037,1020,1020,1020,442,442', +'442,442,442,442,442,442,442,442,442,325,442,442,437,99,442,442,325,1020', +'73,437,1020,49,43,1020,1020,325,40,1020,437,1020,442,1050,442,1020,442', +'442,442,442,442,442,442,1020,442,1055,1056,340,1020,1020,1020,1020,1020', +'1020,340,25,18,1020,1020,1067,442,1068,442,340,1070,1020,16,15,1020', +'1020,1020,13,1076,1020,1020,1022,1022,1022,1022,1022,1022,1077,1081', +'365,1022,1022,1082,1083,1084,1022,365,1022,1022,1022,1022,1022,1022', +'1022,3,365,684,1092,683,1022,1022,1022,1022,1022,1022,1022,687,675,1022', +'690,692,695,697,448,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022', +'1022,1022,669,1022,1022,1022,664,1022,1022,1,1022,1022,1022,448,448', +'448,448,448,448,448,448,448,448,448,892,448,448,997,656,448,448,892', +'1022,705,997,1022,892,707,1022,1022,892,650,1022,997,1022,448,647,448', +'1022,448,448,448,448,448,448,448,1022,448,710,624,1074,1022,1022,1022', +'1022,1022,1022,1074,621,713,1022,1022,1074,448,714,607,1074,717,1022', +'606,605,1022,1022,1022,604,600,1022,1022,830,830,830,830,830,830,598', +'734,595,830,830,591,583,574,830,573,830,830,830,830,830,830,830,347', +'347,347,347,347,830,830,830,830,830,830,830,572,749,830,312,312,312', +'312,312,830,830,830,830,830,830,830,830,830,830,830,830,570,830,830', +'830,751,830,830,758,830,830,830,294,294,294,294,294,294,294,294,294', +'294,294,764,294,294,,,294,294,,830,,,830,,,830,830,,,830,,830,294,,294', +'830,294,294,294,294,294,294,294,830,294,,,,830,830,830,830,830,830,', +',,830,830,,294,,,,,830,,,830,830,830,,,830,830,849,849,849,849,849,849', +',,,849,849,,,,849,,849,849,849,849,849,849,849,9,9,9,9,9,849,849,849', +'849,849,849,849,,,849,,,,,,849,849,849,849,849,849,849,849,849,849,849', +'849,,849,849,849,,849,849,,849,849,849,24,24,24,24,24,24,24,24,24,24', +'24,,24,24,,,24,24,,849,,,849,,,849,849,,,849,,849,24,,24,849,24,24,24', +'24,24,24,24,849,24,,,,849,849,849,849,849,849,,,,849,849,,24,,,,,849', +',,849,849,849,,,849,849,857,857,857,857,857,857,,,,857,857,,,,857,,857', +'857,857,857,857,857,857,,,,,,857,857,857,857,857,857,857,,,857,,,,,', +'857,857,857,857,857,857,857,857,857,857,857,857,,857,857,857,,857,857', +',857,857,857,552,552,552,552,552,552,552,552,552,552,552,,552,552,,', +'552,552,,857,,,857,,,857,857,,,857,,857,552,,552,857,552,552,552,552', +'552,552,552,857,552,,,,857,857,857,857,857,857,,,,857,857,,552,,,,,857', +',,857,857,857,,,857,857,858,858,858,858,858,858,,,,858,858,,,,858,,858', +'858,858,858,858,858,858,,,,,,858,858,858,858,858,858,858,,,858,,,,,', +'858,858,858,858,858,858,858,858,858,858,858,858,,858,858,858,,858,858', +',858,858,858,918,918,918,918,918,918,918,918,918,918,918,,918,918,,', +'918,918,,858,,,858,,,858,858,,,858,,858,918,,918,858,918,918,918,918', +'918,918,918,858,918,,,,858,858,858,858,858,858,,,,858,858,,918,,,,,858', +',,858,858,858,,,858,858,884,884,884,884,884,884,,,,884,884,,,,884,,884', +'884,884,884,884,884,884,,,,,,884,884,884,884,884,884,884,,,884,,,,,', +'884,884,884,884,884,884,884,884,884,884,884,884,,884,884,884,,884,884', +',884,884,884,501,501,501,501,501,501,501,501,501,501,501,,501,501,,', +'501,501,,884,,,884,,,884,884,,,884,,884,501,,501,884,501,501,501,501', +'501,501,501,884,501,,,,884,884,884,884,884,884,,,,884,884,501,501,,', +',,884,,,884,884,884,,,884,884,895,895,895,895,895,895,,,,895,895,,,', +'895,,895,895,895,895,895,895,895,,,,,,895,895,895,895,895,895,895,,', +'895,,,,,,895,895,895,895,895,895,895,895,895,895,895,895,,895,895,895', +',895,895,,895,895,895,806,806,806,806,806,806,806,806,806,806,806,,806', +'806,,,806,806,,895,,,895,,,895,895,,,895,,895,806,,806,895,806,806,806', +'806,806,806,806,895,806,,,,895,895,895,895,895,895,,,,895,895,,806,', +',,,895,,,895,895,895,,,895,895,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2', +'2,,,,,,2,2,2,2,2,2,2,,1014,2,1014,1014,1014,,1014,2,2,2,2,2,2,2,2,2', +'2,2,2,,2,2,2,,2,2,,2,2,2,493,493,493,493,493,493,493,,1014,493,493,', +',,,,493,493,,2,,,2,,,2,2,,,2,,2,493,,493,2,493,493,493,493,493,493,493', +'2,493,,,,2,2,2,2,2,2,,,,2,2,,1012,,1012,1012,1012,2,1012,,2,2,2,,,2', +'2,652,652,652,652,652,652,,,,652,652,,,,652,,652,652,652,652,652,652', +'652,1012,,,,,652,652,652,652,652,652,652,,,652,,,,,,652,652,652,652', +'652,652,652,652,652,652,652,652,,652,652,652,,652,652,,652,652,652,492', +'492,492,492,492,492,492,,,492,492,,,,,,492,492,,652,,,652,,,652,652', +',,652,,652,492,,492,652,492,492,492,492,492,492,492,652,492,,,,652,652', +'652,652,652,652,,,,652,652,,,,,,,652,,,652,652,652,,,652,652,36,36,36', +'36,36,36,,,,36,36,,,,36,,36,36,36,36,36,36,36,,,,,,36,36,36,36,36,36', +'36,,,36,,,,,,36,36,36,36,36,36,36,36,36,36,36,36,,36,36,36,,36,36,,36', +'36,36,491,491,491,491,491,491,491,,,491,491,,,,,,491,491,,36,,,36,,', +'36,36,,,36,,36,491,,491,36,491,491,491,491,491,491,491,36,491,,,,36', +'36,36,36,36,36,,,,36,36,,,,,,,36,,,36,36,36,,,36,36,602,602,602,602', +'602,602,,,,602,602,,,,602,,602,602,602,602,602,602,602,,,,,,602,602', +'602,602,602,602,602,,,602,,,,,,602,602,602,602,602,602,602,602,602,602', +'602,602,,602,602,602,,602,602,,602,602,602,496,496,496,496,496,496,496', +',,496,496,,,,,,496,496,,602,,,602,,,602,602,,,602,,602,496,,496,602', +'496,496,496,496,496,496,496,602,496,,,,602,602,602,602,602,602,,,,602', +'602,,,,,,,602,,,602,602,602,,,602,602,599,599,599,599,599,599,,,,599', +'599,,,,599,,599,599,599,599,599,599,599,,,,,,599,599,599,599,599,599', +'599,,,599,,,,,,599,599,599,599,599,599,599,599,599,599,599,599,,599', +'599,599,,599,599,,599,599,599,500,500,500,500,500,500,500,500,,500,500', +',,,,,500,500,,599,,,599,,,599,599,,,599,,599,500,,500,599,500,500,500', +'500,500,500,500,599,500,,,,599,599,599,599,599,599,,,,599,599,,,,,,', +'599,,,599,599,599,,,599,599,359,359,359,359,359,359,,,,359,359,,,,359', +',359,359,359,359,359,359,359,,,,,,359,359,359,359,359,359,359,,,359', +',,,,,359,359,359,359,359,359,359,359,359,359,359,359,,359,359,359,,359', +'359,,359,359,359,481,481,481,481,481,481,481,481,481,481,481,,481,481', +',,481,481,,359,,,359,,,359,359,,,359,,359,481,,481,359,481,481,481,481', +'481,481,481,359,481,,,,359,359,359,359,359,359,,,,359,359,,,,,,,359', +',,359,359,359,,,359,359,358,358,358,358,358,358,,,,358,358,,,,358,,358', +'358,358,358,358,358,358,,,,,,358,358,358,358,358,358,358,,,358,,,,,', +'358,358,358,358,358,358,358,358,358,358,358,358,,358,358,358,,358,358', +',358,358,358,480,480,480,480,480,480,480,480,480,480,480,,480,480,,', +'480,480,,358,,,358,,,358,358,,,358,,358,480,,480,358,480,480,480,480', +'480,480,480,358,480,,,,358,358,358,358,358,358,,,,358,358,,,,,,,358', +',,358,358,358,,,358,358,934,934,934,934,934,934,,,,934,934,,,,934,,934', +'934,934,934,934,934,934,,,,,,934,934,934,934,934,934,934,,,934,,,,,', +'934,934,934,934,934,934,934,934,934,934,934,934,,934,934,934,,934,934', +',934,934,934,499,499,499,499,499,499,499,,,499,499,,,,,,499,499,,934', +',,934,,,934,934,,,934,,934,499,,499,934,499,499,499,499,499,499,499', +'934,499,,,,934,934,934,934,934,934,,,,934,934,,,,,,,934,,,934,934,934', +',,934,934,935,935,935,935,935,935,,,,935,935,,,,935,,935,935,935,935', +'935,935,935,,,,,,935,935,935,935,935,935,935,,,935,,,,,,935,935,935', +'935,935,935,935,935,935,935,935,935,,935,935,935,,935,935,,935,935,935', +'495,495,495,495,495,495,495,,,495,495,,,,,,495,495,,935,,,935,,,935', +'935,,,935,,935,495,,495,935,495,495,495,495,495,495,495,935,495,,,,935', +'935,935,935,935,935,,,,935,935,,,,,,,935,,,935,935,935,,,935,935,346', +'346,346,346,346,346,,,,346,346,,,,346,,346,346,346,346,346,346,346,', +',,,,346,346,346,346,346,346,346,,,346,,,,,,346,346,346,346,346,346,346', +'346,346,346,346,346,,346,346,346,,346,346,,346,346,346,494,494,494,494', +'494,494,494,,,494,494,,,,,,494,494,,346,,,346,,,346,346,,,346,,346,494', +',494,346,494,494,494,494,494,494,494,346,494,,,,346,346,346,346,346', +'346,,,,346,346,,,,,,,346,,,346,346,346,,,346,346,772,772,772,772,772', +'772,,,,772,772,,,,772,,772,772,772,772,772,772,772,,,,,,772,772,772', +'772,772,772,772,,,772,,,,,,772,772,772,772,772,772,772,772,772,772,772', +'772,,772,772,772,,772,772,,772,772,772,489,,,,,,,,,,,,,,,,489,489,,772', +',,772,,,772,772,,,772,,772,489,,489,772,489,489,489,489,,,,772,,,,,772', +'772,772,772,772,772,,,,772,772,,,,,,,772,,,772,772,772,,,772,772,783', +'783,783,783,783,783,,,,783,783,,,,783,,783,783,783,783,783,783,783,', +',,,,783,783,783,783,783,783,783,,,783,,,,,,783,783,783,783,783,783,783', +'783,783,783,783,783,,783,783,783,,783,783,,783,783,783,,,,,,,,,,,,,', +',,,,,,783,,,783,,,783,783,,,783,,783,,,,783,,,,,,,,783,,,,,783,783,783', +'783,783,783,,,,783,783,,,,,,,783,,,783,783,783,,,783,783,784,784,784', +'784,784,784,,,,784,784,,,,784,,784,784,784,784,784,784,784,,,,,,784', +'784,784,784,784,784,784,,,784,,,,,,784,784,784,784,784,784,784,784,784', +'784,784,784,,784,784,784,,784,784,,784,784,784,,,,,,,,,,,,,,,,,,,,784', +',,784,,,784,784,,,784,,784,,,,784,,,,,,,,784,,,,,784,784,784,784,784', +'784,,,,784,784,,,,,,,784,,,784,784,784,,,784,784,320,320,320,320,320', +'320,,,,320,320,,,,320,,320,320,320,320,320,320,320,,,,,,320,320,320', +'320,320,320,320,,,320,,,,,,320,320,320,320,320,320,320,320,320,320,320', +'320,,320,320,320,,320,320,,320,320,320,,,,,,,,,,,,,,,,,,,,320,,,320', +',,320,320,,,320,,320,,,,320,,,,,,,,320,,,,,320,320,320,320,320,320,', +',,320,320,,,,,,,320,,,320,320,320,,,320,320,965,965,965,965,965,965', +',,,965,965,,,,965,,965,965,965,965,965,965,965,,,,,,965,965,965,965', +'965,965,965,,,965,,,,,,965,965,965,965,965,965,965,965,965,965,965,965', +',965,965,965,,965,965,,965,965,965,,,,,,,,,,,,,,,,,,,,965,,,965,,,965', +'965,,,965,,965,,,,965,,,,,,,,965,,,,,965,965,965,965,965,965,,,,965', +'965,,,,,,,965,,,965,965,965,,,965,965,315,315,315,315,315,315,,,,315', +'315,,,,315,,315,315,315,315,315,315,315,,,,,,315,315,315,315,315,315', +'315,,,315,,,,,,315,315,315,315,315,315,315,315,315,315,315,315,,315', +'315,315,,315,315,,315,315,315,,,,,,,,,,,,,,,,,,,,315,,,315,,,315,315', +',,315,,315,,,,315,,,,,,,,315,,,,,315,315,315,315,315,315,,,,315,315', +',,,,,,315,,,315,315,315,,,315,315,994,994,994,994,994,994,,,,994,994', +',,,994,,994,994,994,994,994,994,994,,,,,,994,994,994,994,994,994,994', +',,994,,,,,,994,994,994,994,994,994,994,994,994,994,994,994,,994,994', +'994,,994,994,,994,994,994,,,,,,,,,,,,,,,,,,,,994,,,994,,,994,994,,,994', +',994,,,,994,,,,,,,,994,,,,,994,994,994,994,994,994,,,,994,994,,,,,,', +'994,,,994,994,994,,,994,994,790,790,790,790,790,790,,,,790,790,,,,790', +',790,790,790,790,790,790,790,,,,,,790,790,790,790,790,790,790,,,790', +',,,,,790,790,790,790,790,790,790,790,790,790,790,790,,790,790,790,,790', +'790,,790,790,790,,,,,,,,,,,,,,,,,,,,790,,,790,,,790,790,,,790,,790,', +',,790,,,,,,,,790,,,,,790,790,790,790,790,790,,,,790,790,,,,,,,790,,', +'790,790,790,,,790,790,246,246,246,246,246,246,,,,246,246,,,,246,,246', +'246,246,246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,', +'246,246,246,246,246,246,246,246,246,246,246,246,,246,246,246,,246,246', +',246,246,246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,246,,,,246', +',,,,,,,246,,,,,246,246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246', +'246,,,246,246,222,222,222,222,222,222,,,,222,222,,,,222,,222,222,222', +'222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,222,222', +'222,222,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222', +'222,,,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222,,222,,,,222,,,,,,,', +'222,,,,,222,222,222,222,222,222,,,,222,222,,,,,,,222,,,222,222,222,', +',222,222,1015,1015,1015,1015,1015,1015,,,,1015,1015,,,,1015,,1015,1015', +'1015,1015,1015,1015,1015,,,,,,1015,1015,1015,1015,1015,1015,1015,,,1015', +',,,,,1015,1015,1015,1015,1015,1015,1015,1015,1015,1015,1015,1015,,1015', +'1015,1015,,1015,1015,,1015,1015,1015,,,,,,,,,,,,,,,,,,,,1015,,,1015', +',,1015,1015,,,1015,,1015,,,,1015,,,,,,,,1015,,,,,1015,1015,1015,1015', +'1015,1015,,,,1015,1015,,,,,,,1015,,,1015,1015,1015,,,1015,1015,67,67', +'67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67', +',,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67,67,,67,67,,67,67,67,', +',,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67,,,,,,,,67,,,,,67,67,67', +'67,67,67,,,,67,67,,,,,,,67,,,67,67,67,,,67,67,8,8,8,8,8,,,,8,8,,,,8', +',8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,', +'8,8,8,,8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,', +'8,,,,,8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,23,23,23,,23,,,,23,23', +',,,23,,23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23', +',,23,23,23,23,23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,', +',,,,23,,,23,,,23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,', +'23,23,,,,,,,23,,,23,23,23,,,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32', +'32,32,32,32,32,,,,,,32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32', +'32,32,32,32,32,32,32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32', +',,32,32,,,32,,32,,32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,', +',,,,32,,32,32,32,32,,,32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33', +'33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33', +'33,33,33,33,33,33,,33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33', +',,33,,33,,33,,33,,,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,', +'33,33,33,33,,,33,33,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34', +',,,,,34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34', +'34,34,34,,34,34,,34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34', +',34,,34,,,,,,,,34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34', +'34,,,34,34,37,37,37,,37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37', +'37,37,37,37,37,37,,,37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37', +',37,37,,,,37,,,,,,,,,,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,', +',,,,,37,37,37,37,37,37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38', +',38,,,,38,38,,,,38,,38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,', +',38,,,,,,,38,,,38,38,38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,', +',,,,,,,,,,,,,38,,,38,,,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38', +',,,38,38,,,,38,,,38,,,38,38,38,,,38,38,45,45,45,,45,,,,45,45,,,,45,', +'45,45,45,45,45,45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45', +'45,45,45,45,45,45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,', +',45,,,45,45,,,45,,,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,', +',,,,45,,,45,45,45,,,45,45,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46', +'46,46,,,,,,46,46,46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46', +'46,,46,46,46,,46,46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46', +',,,,,46,,,,,,,,46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46', +',,46,46,48,48,48,,48,,,,48,48,,,,48,,48,48,48,48,48,48,48,,,,,,48,48', +'48,48,48,48,48,,,48,,,,,,,48,,,48,48,48,48,48,48,48,48,,48,48,48,,48', +'48,,48,48,48,,,,,,,,,,,,,,,,,,,,48,,,48,,,48,48,,,48,,,,,,48,,,,,,,', +'48,,,,,48,48,48,48,48,48,,,,48,48,,,,,,,48,,,48,48,48,,,48,48,62,62', +'62,62,62,,,,62,62,,,,62,,62,62,62,62,62,62,62,,,,,,62,62,62,62,62,62', +'62,,,62,,,,,,62,62,,62,62,62,62,62,62,62,62,62,,62,62,62,,62,62,,62', +'62,62,,,,,,,,,,,,,,,,,,,,62,,,62,,,62,62,,,62,,62,,,,62,,,,,,,,62,,', +',,62,62,62,62,62,62,,,,62,62,,,,,,,62,,,62,62,62,,,62,62,68,68,68,,68', +',,,68,68,,,,68,,68,68,68,68,68,68,68,,,,,,68,68,68,68,68,68,68,,,68', +',,,,,,68,,,68,68,68,68,68,68,68,68,,68,68,68,,68,68,,68,68,68,,,,,,', +',,,,,,,,,,,,,68,,,68,,,68,68,,,68,,,,,,68,,,,,,,,68,,,,,68,68,68,68', +'68,68,,,,68,68,,,,,,,68,,,68,68,68,,,68,68,71,71,71,,71,,,,71,71,,,', +'71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71,,,,,,,71,,,71', +'71,71,71,71,71,71,71,,71,71,71,,71,71,,71,71,71,,,,,,,,,,,,,,,,,,,,71', +',,71,,,71,71,,,71,,,,,,71,,,,,,,,71,,,,,71,71,71,71,71,71,,,,71,71,71', +',,,,71,71,,,71,71,71,,,71,71,72,72,72,,72,,,,72,72,,,,72,,72,72,72,72', +'72,72,72,,,,,,72,72,72,72,72,72,72,,,72,,,,,,,72,,,72,72,72,72,72,72', +'72,72,,72,72,72,,72,72,,,,72,,,,,,,,,,,,,,,,,,,,72,,,72,,,72,72,,,72', +',72,,,,,,,,,,,,,,,,,72,72,72,72,72,72,,,,72,72,,,,,,,72,,,72,72,72,', +',72,72,1038,1038,1038,,1038,,,,1038,1038,,,,1038,,1038,1038,1038,1038', +'1038,1038,1038,,,,,,1038,1038,1038,1038,1038,1038,1038,,,1038,,,,,,', +'1038,,,1038,1038,1038,1038,1038,1038,1038,1038,1038,1038,1038,1038,', +'1038,1038,,1038,1038,1038,,,,,,,,,,,,,,,,,,,,1038,,,1038,,,1038,1038', +',,1038,,1038,,1038,,1038,,,,,,,,1038,,,,,1038,1038,1038,1038,1038,1038', +',,,1038,1038,,,,,,,1038,,1038,1038,1038,1038,,,1038,1038,126,126,126', +'126,126,,,,126,126,,,,126,,126,126,126,126,126,126,126,,,,,,126,126', +'126,126,126,126,126,,,126,,,,,,126,126,126,126,126,126,126,126,126,126', +'126,126,,126,126,126,,126,126,,126,126,126,,,,,,,,,,,,,,,,,,,,126,,', +'126,,,126,126,,,126,,126,,,,126,,,,,,,,126,,,,,126,126,126,126,126,126', +',,,126,126,,,,,,126,126,,,126,126,126,,,126,126,131,131,131,,131,,,', +'131,131,,,,131,,131,131,131,131,131,131,131,,,,,,131,131,131,131,131', +'131,131,,,131,,,,,,,131,,,131,131,131,131,131,131,131,131,,131,131,131', +',131,131,,131,131,131,,,,,,,,,,,,,,,,,,,,131,,,131,,,131,131,,,131,', +',,,,131,,,,,,,,131,,,,,131,131,131,131,131,131,,,,131,131,,,,,,,131', +',,131,131,131,,,131,131,132,132,132,,132,,,,132,132,,,,132,,132,132', +'132,132,132,132,132,,,,,,132,132,132,132,132,132,132,,,132,,,,,,,132', +',,132,132,132,132,132,132,132,132,,132,132,132,,132,132,,132,132,132', +',,,,,,,,,,,,,,,,,,,132,,,132,,,132,132,,,132,,,,,,132,,,,,,,,132,,,', +',132,132,132,132,132,132,,,,132,132,,,,,,,132,,,132,132,132,,,132,132', +'133,133,133,,133,,,,133,133,,,,133,,133,133,133,133,133,133,133,,,,', +',133,133,133,133,133,133,133,,,133,,,,,,,133,,,133,133,133,133,133,133', +'133,133,,133,133,133,,133,133,,133,133,133,,,,,,,,,,,,,,,,,,,,133,,', +'133,,,133,133,,,133,,,,,,133,,,,,,,,133,,,,,133,133,133,133,133,133', +',,,133,133,,,,,,,133,,,133,133,133,,,133,133,134,134,134,,134,,,,134', +'134,,,,134,,134,134,134,134,134,134,134,,,,,,134,134,134,134,134,134', +'134,,,134,,,,,,,134,,,134,134,134,134,134,134,134,134,,134,134,134,', +'134,134,,134,134,134,,,,,,,,,,,,,,,,,,,,134,,,134,,,134,134,,,134,,', +',,,134,,,,,,,,134,,,,,134,134,134,134,134,134,,,,134,134,,,,,,,134,', +',134,134,134,,,134,134,135,135,135,135,135,,,,135,135,,,,135,,135,135', +'135,135,135,135,135,,,,,,135,135,135,135,135,135,135,,,135,,,,,,135', +'135,,135,135,135,135,135,135,135,135,135,,135,135,135,,135,135,,135', +'135,135,,,,,,,,,,,,,,,,,,,,135,,,135,,,135,135,,,135,,135,,,,135,,,', +',,,,135,,,,,135,135,135,135,135,135,,,,135,135,,,,,,,135,,,135,135,135', +',,135,135,223,223,223,,223,,,,223,223,,,,223,,223,223,223,223,223,223', +'223,,,,,,223,223,223,223,223,223,223,,,223,,,,,,,223,,,223,223,223,223', +'223,223,223,223,,223,223,223,,223,223,,223,223,223,,,,,,,,,,,,,,,,,', +',,223,,,223,,,223,223,,,223,,223,,,,223,,,,,,,,223,,,,,223,223,223,223', +'223,223,,,,223,223,,,,,,,223,,,223,223,223,,,223,223,224,224,224,,224', +',,,224,224,,,,224,,224,224,224,224,224,224,224,,,,,,224,224,224,224', +'224,224,224,,,224,,,,,,,224,,,224,224,224,224,224,224,224,224,,224,224', +'224,,224,224,,224,224,224,,,,,,,,,,,,,,,,,,,,224,,,224,,,224,224,,,224', +',224,,,,224,,,,,,,,224,,,,,224,224,224,224,224,224,,,,224,224,,,,,,', +'224,,,224,224,224,,,224,224,225,225,225,,225,,,,225,225,,,,225,,225', +'225,225,225,225,225,225,,,,,,225,225,225,225,225,225,225,,,225,,,,,', +',225,,,225,225,225,225,225,225,225,225,,225,225,225,,225,225,,225,225', +'225,,,,,,,,,,,,,,,,,,,,225,,,225,,,225,225,,,225,,,,,,225,,,,,,,,225', +',,,,225,225,225,225,225,225,,,,225,225,,,,,,,225,,,225,225,225,,,225', +'225,226,226,226,,226,,,,226,226,,,,226,,226,226,226,226,226,226,226', +',,,,,226,226,226,226,226,226,226,,,226,,,,,,,226,,,226,226,226,226,226', +'226,226,226,,226,226,226,,226,226,,226,226,226,,,,,,,,,,,,,,,,,,,,226', +',,226,,,226,226,,,226,,,,,,226,,,,,,,,226,,,,,226,226,226,226,226,226', +',,,226,226,,,,,,,226,,,226,226,226,,,226,226,227,227,227,,227,,,,227', +'227,,,,227,,227,227,227,227,227,227,227,,,,,,227,227,227,227,227,227', +'227,,,227,,,,,,,227,,,227,227,227,227,227,227,227,227,,227,227,227,', +'227,227,,227,227,227,,,,,,,,,,,,,,,,,,,,227,,,227,,,227,227,,,227,,', +',,,227,,,,,,,,227,,,,,227,227,227,227,227,227,,,,227,227,,,,,,,227,', +',227,227,227,,,227,227,228,228,228,,228,,,,228,228,,,,228,,228,228,228', +'228,228,228,228,,,,,,228,228,228,228,228,228,228,,,228,,,,,,,228,,,228', +'228,228,228,228,228,228,228,228,228,228,228,,228,228,,228,228,228,,', +',,,,,,,,,,,,,,,,,228,,,228,,,228,228,,,228,,228,,228,,228,,,,,,,,228', +',,,,228,228,228,228,228,228,,,,228,228,,,,,,,228,,228,228,228,228,,', +'228,228,232,232,232,,232,,,,232,232,,,,232,,232,232,232,232,232,232', +'232,,,,,,232,232,232,232,232,232,232,,,232,,,,,,,232,,,232,232,232,232', +'232,232,232,232,,232,232,232,,232,232,,232,232,232,,,,,,,,,,,,,,,,,', +',,232,,,232,,,232,232,,,232,,,,,,232,,,,,,,,232,,,,,232,232,232,232', +'232,232,,,,232,232,,,,,,,232,,,232,232,232,,,232,232,233,233,233,,233', +',,,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233,233,233', +'233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233,,233,233', +'233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233', +',,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233,,,,,,,233', +',,233,233,233,,,233,233,234,234,234,,234,,,,234,234,,,,234,,234,234', +'234,234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,,,234', +',,234,234,234,234,234,234,234,234,,234,234,234,,234,234,,234,234,234', +',,,,,,,,,,,,,,,,,,,234,,,234,,,234,234,,,234,,,,,,234,,,,,,,,234,,,', +',234,234,234,234,234,234,,,,234,234,234,,,,,,234,,,234,234,234,,,234', +'234,245,245,245,,245,,,,245,245,,,,245,,245,245,245,245,245,245,245', ',,,,,245,245,245,245,245,245,245,,,245,,,,,,,245,,,245,245,245,245,245', '245,245,245,,245,245,245,,245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245', ',,245,,,245,245,,,245,,,,,,245,,,,,,,,245,,,,,245,245,245,245,245,245', -',,,245,245,,,,,,,245,,,245,245,245,,,245,245,246,246,246,,246,,,,246', -'246,,,,246,,246,246,246,246,246,246,246,,,,,,246,246,246,246,246,246', -'246,,,246,,,,,,,246,,,246,246,246,246,246,246,246,246,,246,246,246,', -'246,246,,246,246,246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,', -',,,246,,,,,,,,246,,,,,246,246,246,246,246,246,,,,246,246,,,,,,,246,', -',246,246,246,,,246,246,247,247,247,,247,,,,247,247,,,,247,,247,247,247', -'247,247,247,247,,,,,,247,247,247,247,247,247,247,,,247,,,,,,,247,,,247', -'247,247,247,247,247,247,247,,247,247,247,,247,247,,247,247,247,,,,,', -',,,,,,,,,,,,,,247,,,247,,,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247', -'247,247,247,247,247,,,,247,247,,,,,,,247,,,247,247,247,,,247,247,248', -'248,248,,248,,,,248,248,,,,248,,248,248,248,248,248,248,248,,,,,,248', -'248,248,248,248,248,248,,,248,,,,,,,248,,,248,248,248,248,248,248,248', -'248,,248,248,248,,248,248,,248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248', -',,248,248,,,248,,,,,,248,,,,,,,,248,,,,,248,248,248,248,248,248,,,,248', -'248,,,,,,,248,,,248,248,248,,,248,248,249,249,249,,249,,,,249,249,,', -',249,,249,249,249,249,249,249,249,,,,,,249,249,249,249,249,249,249,', -',249,,,,,,,249,,,249,249,249,249,249,249,249,249,,249,249,249,,249,249', -',249,249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,,249,,,,,,249,', -',,,,,,249,,,,,249,249,249,249,249,249,,,,249,249,,,,,,,249,,,249,249', -'249,,,249,249,250,250,250,,250,,,,250,250,,,,250,,250,250,250,250,250', -'250,250,,,,,,250,250,250,250,250,250,250,,,250,,,,,,,250,,,250,250,250', -'250,250,250,250,250,,250,250,250,,250,250,,250,250,250,,,,,,,,,,,,,', -',,,,,,250,,,250,,,250,250,,,250,,,,,,250,,,,,,,,250,,,,,250,250,250', -'250,250,250,,,,250,250,,,,,,,250,,,250,250,250,,,250,250,251,251,251', -',251,,,,251,251,,,,251,,251,251,251,251,251,251,251,,,,,,251,251,251', -'251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251,251,251,251,,251', -'251,251,,251,251,,251,251,251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251', -',,251,,,,,,251,,,,,,,,251,,,,,251,251,251,251,251,251,,,,251,251,,,', -',,,251,,,251,251,251,,,251,251,252,252,252,,252,,,,252,252,,,,252,,252', -'252,252,252,252,252,252,,,,,,252,252,252,252,252,252,252,,,252,,,,,', -',252,,,252,252,252,252,252,252,252,252,,252,252,252,,252,252,,252,252', -'252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,,,,,252,,,,,,,,252', -',,,,252,252,252,252,252,252,,,,252,252,,,,,,,252,,,252,252,252,,,252', -'252,253,253,253,,253,,,,253,253,,,,253,,253,253,253,253,253,253,253', -',,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253,253,253,253,253', -'253,253,253,,253,253,253,,253,253,,253,253,253,,,,,,,,,,,,,,,,,,,,253', -',,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,,,253,253,253,253,253,253', -',,,253,253,,,,,,,253,,,253,253,253,,,253,253,254,254,254,,254,,,,254', -'254,,,,254,,254,254,254,254,254,254,254,,,,,,254,254,254,254,254,254', -'254,,,254,,,,,,,254,,,254,254,254,254,254,254,254,254,,254,254,254,', -'254,254,,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,', -',,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254,254,,,,,,,254,', -',254,254,254,,,254,254,255,255,255,,255,,,,255,255,,,,255,,255,255,255', -'255,255,255,255,,,,,,255,255,255,255,255,255,255,,,255,,,,,,,255,,,255', -'255,255,255,255,255,255,255,,255,255,255,,255,255,,255,255,255,,,,,', -',,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255', -'255,255,255,255,255,,,,255,255,,,,,,,255,,,255,255,255,,,255,255,256', -'256,256,,256,,,,256,256,,,,256,,256,256,256,256,256,256,256,,,,,,256', -'256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256,256,256,256,256', -'256,,256,256,256,,256,256,,256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256', -',,256,256,,,256,,,,,,256,,,,,,,,256,,,,,256,256,256,256,256,256,,,,256', -'256,,,,,,,256,,,256,256,256,,,256,256,257,257,257,,257,,,,257,257,,', -',257,,257,257,257,257,257,257,257,,,,,,257,257,257,257,257,257,257,', -',257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257,257,257,,257,257', -',257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257,,,257,,,,,,257,', -',,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,,,,,,,257,,,257,257', -'257,,,257,257,258,258,258,,258,,,,258,258,,,,258,,258,258,258,258,258', -'258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258', -'258,258,258,258,258,,258,258,258,,258,258,,258,258,258,,,,,,,,,,,,,', -',,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258,,,,,258,258,258', -'258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258,258,259,259,259', -',259,,,,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259,259,259', -'259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259', -'259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259', -',,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259,,,,259,259,,,', -',,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260,260,,,,260,,260', -'260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,', -',260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260,,260,260', -'260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,260', -',,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,,,260,260,260,,,260', -'260,267,267,267,,267,,,,267,267,,,,267,,267,267,267,267,267,267,267', -',,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267,267,267,267,267', -'267,267,267,267,267,267,267,,267,267,,267,267,267,,,,,,,,,,,,,,,,,,', -',267,,,267,,,267,267,,,267,,267,,267,,267,,,,,,,,267,,,,,267,267,267', -'267,267,267,,,,267,267,,,,,,,267,,267,267,267,267,,,267,267,458,458', -'458,,458,,,,458,458,,,,458,,458,458,458,458,458,458,458,,,,,,458,458', -'458,458,458,458,458,,,458,,,,,,,458,,,458,458,458,458,458,458,458,458', -',458,458,458,,458,458,,458,458,458,,,,,,,,,,,,,,,,,,,,458,,,458,,,458', -'458,,,458,,,,,,458,,,,,,,,458,,,,,458,458,458,458,458,458,,,,458,458', -',,,,,,458,,,458,458,458,,,458,458,273,273,273,,273,,,,273,273,,,,273', -',273,273,273,273,273,273,273,,,,,,273,273,273,273,273,273,273,,,273', -',,,,,,273,,,273,273,273,273,273,273,273,273,273,273,273,273,,273,273', -',273,273,273,,,,,,,,,,,,,,,,,,,,273,,,273,,,273,273,,,273,,273,,273', -',273,,,,,,,,273,,,,,273,273,273,273,273,273,,,,273,273,,,,,,,273,,273', -'273,273,273,,,273,273,276,276,276,,276,,,,276,276,,,,276,,276,276,276', -'276,276,276,276,,,,,,276,276,276,276,276,276,276,,,276,,,,,,,276,,,276', -'276,276,276,276,276,276,276,276,276,276,276,,276,276,,276,276,276,,', -',,,,,,,,,,,,,,,,,276,,,276,,,276,276,,,276,,276,,276,,276,,,,,,,,276', -',,,,276,276,276,276,276,276,,,,276,276,276,,,,,,276,,276,276,276,276', -',,276,276,457,457,457,,457,,,,457,457,,,,457,,457,457,457,457,457,457', -'457,,,,,,457,457,457,457,457,457,457,,,457,,,,,,,457,,,457,457,457,457', -'457,457,457,457,,457,457,457,,457,457,,457,457,457,,,,,,,,,,,,,,,,,', -',,457,,,457,,,457,457,,,457,,,,,,457,,,,,,,,457,,,,,457,457,457,457', -'457,457,,,,457,457,,,,,,,457,,,457,457,457,,,457,457,752,752,752,,752', -',,,752,752,,,,752,,752,752,752,752,752,752,752,,,,,,752,752,752,752', -'752,752,752,,,752,,,,,,,752,,,752,752,752,752,752,752,752,752,752,752', -'752,752,,752,752,,752,752,752,,,,,,,,,,,,,,,,,,,,752,,,752,,,752,752', -',,752,,752,,752,,752,,,,,,,,752,,,,,752,752,752,752,752,752,,,,752,752', -',,,,,,752,,752,752,752,752,,,752,752,746,746,746,,746,,,,746,746,,,', -'746,,746,746,746,746,746,746,746,,,,,,746,746,746,746,746,746,746,,', -'746,,,,,,,746,,,746,746,746,746,746,746,746,746,,746,746,746,,746,746', -',746,746,746,,,,,,,,,,,,,,,,,,,,746,,,746,,,746,746,,,746,,,,,,746,', -',,,,,,746,,,,,746,746,746,746,746,746,,,,746,746,,,,,,,746,,,746,746', -'746,,,746,746,283,283,283,,283,,,,283,283,,,,283,,283,283,283,283,283', -'283,283,,,,,,283,283,283,283,283,283,283,,,283,,,,,,,283,,,283,283,283', -'283,283,283,283,283,,283,283,283,,283,283,,283,283,283,,,,,,,,,,,,,', -',,,,,,283,,,283,,,283,283,,,283,,,,,,283,,,,,,,,283,,,,,283,283,283', -'283,283,283,,,,283,283,,,,,,,283,,,283,283,283,,,283,283,285,285,285', -',285,,,,285,285,,,,285,,285,285,285,285,285,285,285,,,,,,285,285,285', -'285,285,285,285,,,285,,,,,,,285,,,285,285,285,285,285,285,285,285,,285', -'285,285,,285,285,,285,285,285,,,,,,,,,,,,,,,,,,,,285,,,285,,,285,285', -',,285,,,,,,285,,,,,,,,285,,,,,285,285,285,285,285,285,,,,285,285,,,', -',,,285,,,285,285,285,,,285,285,287,287,287,,287,,,,287,287,,,,287,,287', -'287,287,287,287,287,287,,,,,,287,287,287,287,287,287,287,,,287,,,,,', -',287,,,287,287,287,287,287,287,287,287,,287,287,287,,287,287,,287,287', -'287,,,,,,,,,,,,,,,,,,,,287,,,287,,,287,287,,,287,,,,,,287,,,,,,,,287', -',,,,287,287,287,287,287,287,,,,287,287,,,,,,,287,,,287,287,287,,,287', -'287,290,290,290,,290,,,,290,290,,,,290,,290,290,290,290,290,290,290', -',,,,,290,290,290,290,290,290,290,,,290,,,,,,,290,,,290,290,290,290,290', -'290,290,290,,290,290,290,,290,290,,290,290,290,,,,,,,,,,,,,,,,,,,,290', -',,290,,,290,290,,,290,,,,,,290,,,,,,,,290,,,,,290,290,290,290,290,290', -',,,290,290,,,,,,,290,,,290,290,290,,,290,290,296,296,296,296,296,,,', -'296,296,,,,296,,296,296,296,296,296,296,296,,,,,,296,296,296,296,296', -'296,296,,,296,,,,,,296,296,,296,296,296,296,296,296,296,296,296,,296', -'296,296,,296,296,,296,296,296,,,,,,,,,,,,,,,,,,,,296,,,296,,,296,296', -',,296,,296,,,,296,,,,,,,,296,,,,,296,296,296,296,296,296,,,,296,296', -',,,,,,296,,,296,296,296,,,296,296,740,740,740,,740,,,,740,740,,,,740', -',740,740,740,740,740,740,740,,,,,,740,740,740,740,740,740,740,,,740', -',,,,,,740,,,740,740,740,740,740,740,740,740,,740,740,740,,740,740,,740', -'740,740,,,,,,,,,,,,,,,,,,,,740,,,740,,,740,740,,,740,,740,,,,740,,,', -',,,,740,,,,,740,740,740,740,740,740,,,,740,740,,,,,,,740,,,740,740,740', -',,740,740,456,456,456,,456,,,,456,456,,,,456,,456,456,456,456,456,456', -'456,,,,,,456,456,456,456,456,456,456,,,456,,,,,,,456,,,456,456,456,456', -'456,456,456,456,,456,456,456,,456,456,,456,456,456,,,,,,,,,,,,,,,,,', -',,456,,,456,,,456,456,,,456,,,,,,456,,,,,,,,456,,,,,456,456,456,456', -'456,456,,,,456,456,,,,,,,456,,,456,456,456,,,456,456,720,720,720,,720', -',,,720,720,,,,720,,720,720,720,720,720,720,720,,,,,,720,720,720,720', -'720,720,720,,,720,,,,,,,720,,,720,720,720,720,720,720,720,720,,720,720', -'720,,720,720,,720,720,720,,,,,,,,,,,,,,,,,,,,720,,,720,,,720,720,,,720', -',,,,,720,,,,,,,,720,,,,,720,720,720,720,720,720,,,,720,720,,,,,,,720', -',,720,720,720,,,720,720,302,302,302,,302,,,,302,302,,,,302,,302,302', -'302,302,302,302,302,,,,,,302,302,302,302,302,302,302,,,302,,,,,,,302', -',,302,302,302,302,302,302,302,302,,302,302,302,,302,302,,,,302,,,,,', -',,,,,,,,,,,,,,302,,,302,,,302,302,,,302,,,,,,,,,,,,,,,,,,,302,302,302', -'302,302,302,,,,302,302,,,,302,,,302,,,302,302,302,,,302,302,454,454', -'454,,454,,,,454,454,,,,454,,454,454,454,454,454,454,454,,,,,,454,454', -'454,454,454,454,454,,,454,,,,,,,454,,,454,454,454,454,454,454,454,454', -'454,454,454,454,,454,454,,454,454,454,,,,,,,,,,,,,,,,,,,,454,,,454,', -',454,454,,,454,,454,,454,,454,,,,,,,,454,,,,,454,454,454,454,454,454', -',,,454,454,,,,,,,454,,454,454,454,454,,,454,454,700,700,700,,700,,,', -'700,700,,,,700,,700,700,700,700,700,700,700,,,,,,700,700,700,700,700', -'700,700,,,700,,,,,,,700,,,700,700,700,700,700,700,700,700,,700,700,700', -',700,700,,700,700,700,,,,,,,,,,,,,,,,,,,,700,,,700,,,700,700,,,700,', -'700,,,,700,,,,,,,,700,,,,,700,700,700,700,700,700,,,,700,700,,,,,,,700', -',,700,700,700,,,700,700,695,695,695,,695,,,,695,695,,,,695,,695,695', -'695,695,695,695,695,,,,,,695,695,695,695,695,695,695,,,695,,,,,,,695', -',,695,695,695,695,695,695,695,695,,695,695,695,,695,695,,,,695,,,,,', -',,,,,,,,,,,,,,695,,,695,,,695,695,,,695,,,,,,,,,,,,,,,,,,,695,695,695', -'695,695,695,,,,695,695,,,,,,,695,,,695,695,695,,,695,695,684,684,684', -',684,,,,684,684,,,,684,,684,684,684,684,684,684,684,,,,,,684,684,684', -'684,684,684,684,,,684,,,,,,,684,,,684,684,684,684,684,684,684,684,,684', -'684,684,,684,684,,,,684,,,,,,,,,,,,,,,,,,,,684,,,684,,,684,684,,,684', -',,,,,,,,,,,,,,,,,,684,684,684,684,684,684,,,,684,684,,,,,,,684,,,684', -'684,684,,,684,684,680,680,680,,680,,,,680,680,,,,680,,680,680,680,680', -'680,680,680,,,,,,680,680,680,680,680,680,680,,,680,,,,,,,680,,,680,680', -'680,680,680,680,680,680,,680,680,680,,680,680,,680,680,680,,,,,,,,,', -',,,,,,,,,,680,,,680,,,680,680,,,680,,,,,,680,,,,,,,,680,,,,,680,680', -'680,680,680,680,,,,680,680,,,,,,,680,,,680,680,680,59,,680,680,,,,59', -'59,59,,,59,59,59,949,59,949,949,949,949,949,,,,,59,59,59,,,949,,,,,59', -'59,,59,59,59,59,59,,,,,,,,,,949,949,,,,,,,,949,949,949,949,,59,59,59', -'59,59,59,59,59,59,59,59,59,59,59,,,59,59,59,,,59,,,59,,,59,59,,59,949', -'59,,59,,59,59,59,59,59,59,59,,59,,59,,,,,,,,,,,,,59,59,59,59,437,59', -',59,,,,437,437,437,,,437,437,437,926,437,926,926,926,926,926,,,,437', -'437,437,437,,,926,,,,,437,437,,437,437,437,437,437,,,,,,,,,,926,,,,', -',,,,,,926,926,,437,437,437,437,437,437,437,437,437,437,437,437,437,437', -',,437,437,437,,,437,,,437,,,437,437,,437,926,437,,437,,437,437,437,437', -'437,437,437,,437,437,437,,,,,,,,,,,,,437,437,437,437,438,437,,437,,', -',438,438,438,,,438,438,438,924,438,924,924,924,924,924,,,,438,438,438', -'438,,,924,,,,,438,438,,438,438,438,438,438,,,,,,,,,,924,,,,,,,,,,,924', -'924,,438,438,438,438,438,438,438,438,438,438,438,438,438,438,,,438,438', -'438,,,438,,,438,,,438,438,,438,924,438,,438,,438,438,438,438,438,438', -'438,,438,438,438,,,,,,,,,,,,,438,438,438,438,,438,,438,91,91,91,91,91', -'91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,,,,91,91,91', -'91,91,91,91,91,91,91,,,,,,91,91,91,91,91,91,91,91,91,91,91,91,,91,,', -',,,,91,91,,91,91,91,91,91,91,91,,,91,91,,,,91,91,91,91,,,,,,,,,,,,,', -'91,91,,91,91,91,91,91,91,91,91,91,91,91,,,91,,,,,,,,,,,,,,,,,,,,91,762', -'762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762', -'762,762,762,762,762,762,,,,762,762,762,762,762,762,762,762,762,762,', -',,,,762,762,762,762,762,762,762,762,762,,,762,,,,,,,,,762,762,,762,762', -'762,762,762,762,762,,,762,762,,,,762,762,762,762,,,,,,,,,,,,,,762,762', -',762,762,762,762,762,762,762,762,762,762,762,,,762,,,,,,,,,,,,,,,,,', -',,762,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12', -'12,12,12,,,,12,12,12,12,12,12,12,12,12,12,,,,,,12,12,12,12,12,12,12', -'12,12,,,12,,,,,,,,,12,12,,12,12,12,12,12,12,12,,,12,12,,,,12,12,12,12', -',,,,,,,,,,,,,12,12,,12,12,12,12,12,12,12,12,12,12,12,,,12,12,,,,,,,', -',,12,,,,,,,,,12,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74', -'74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74,74,74,,,,,,74,74,74,74', -'74,74,74,74,74,74,74,74,,74,,,,,,,74,74,,74,74,74,74,74,74,74,,,74,74', -',,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74,74,74,74,74,74,74,74,74', -',,74,,,,,,,,,,,,,,,,,,,,74,407,407,407,407,407,407,407,407,407,407,407', -'407,407,407,407,407,407,407,407,407,407,407,407,407,,,,407,407,407,407', -'407,407,407,407,407,407,,,,,,407,407,407,407,407,407,407,407,407,,,407', -',,,,,,,,407,407,,407,407,407,407,407,407,407,,,407,407,,,,407,407,407', -'407,,,,,,,,,,,,,,407,407,,407,407,407,407,407,407,407,407,407,407,407', -',,407,407,,,,,,,,,,407,,,,,,,,,407,633,633,633,633,633,633,633,633,633', -'633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,,,,633,633', -'633,633,633,633,633,633,633,633,,,,,,633,633,633,633,633,633,633,633', -'633,,,633,,,,,,,,,633,633,,633,633,633,633,633,633,633,,,633,633,,,', -'633,633,633,633,,,,,,,,,,,,,,633,633,,633,633,633,633,633,633,633,633', -'633,633,633,,,633,633,,,,,,,,,,633,,,,,,,,,633,11,11,11,11,11,11,11', -'11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11', -'11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,,11,11', -',11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11', -'11,11,11,11,11,11,11,11,11,11,,,11,11,,,,428,,,,,,11,428,428,428,,,428', -'428,428,11,428,,,,,,,,,428,428,428,,,,,,,,,428,428,,428,428,428,428', -'428,,,,,,,,,,,,,,,,,,,,,,,,428,428,428,428,428,428,428,428,428,428,428', -'428,428,428,,,428,428,428,,,428,,428,428,,,428,428,,428,,428,,428,,428', -'428,428,428,428,428,428,,428,428,428,,,,,,,,,,,,486,428,428,,428,,428', -'486,486,486,,,486,486,486,922,486,922,922,922,922,922,,,,486,486,,,', -',922,,,,,486,486,,486,486,486,486,486,,,897,,897,897,897,897,897,922', -',,,,,,,,897,,922,922,,31,,,,,,,31,31,31,,486,31,31,31,,31,897,486,,', -',,486,486,,31,31,897,897,,922,,,,,31,31,,31,31,31,31,31,,486,486,,,', -',,,,,,,,,486,,,897,,486,,,31,31,31,31,31,31,31,31,31,31,31,31,31,31', -',,31,31,31,,,31,,31,31,,,31,31,,31,,31,,31,,31,31,31,31,31,31,31,,31', -',31,,,,,,,,,,,,30,31,31,,31,,31,30,30,30,,,30,30,30,714,30,714,714,714', -'714,714,,,,30,30,30,,,,714,,,,,30,30,,30,30,30,30,30,,,,,,,,,,714,,', -',,,,,,714,714,714,714,,30,30,30,30,30,30,30,30,30,30,30,30,30,30,,,30', -'30,30,,,30,,30,30,,,30,30,,30,714,30,,30,,30,30,30,30,30,30,30,,30,30', -'30,,,,,,214,214,,,214,,,30,30,,30,,30,214,214,,214,214,214,214,214,214', -'214,,,214,214,,,,214,214,214,214,,,,,,214,,,,,,,,214,214,,214,214,214', -'214,214,214,214,214,214,214,214,,,214,,,,,592,592,,,592,,,,,,,,,592', -'592,214,592,592,592,592,592,592,592,,,592,592,,,,592,592,592,592,,,', -',,592,,,,,,,,592,592,,592,592,592,592,592,592,592,592,592,592,592,,', -'592,,,,,593,593,,,593,,,,,,,,,593,593,592,593,593,593,593,593,593,593', -',,593,593,,,,593,593,593,593,,,,,,593,,,,,,,,593,593,,593,593,593,593', -'593,593,593,593,593,593,593,,920,593,920,920,920,920,920,,,,,,,,,,920', -',,,,593,,,,,,,,,1018,,1018,1018,1018,1018,1018,,920,522,522,,,522,,', -'1018,920,920,920,920,,522,522,,522,522,522,522,522,522,522,,,522,522', -',,1018,522,522,522,522,,,,,,522,1018,1018,,,920,,,522,522,,522,522,522', -'522,522,522,522,522,522,522,522,,,522,,,,,521,521,,,521,,1018,,,,,,', -'521,521,522,521,521,521,521,521,521,521,,,521,521,,,,521,521,521,521', -',,,,,521,,,,,,,,521,521,,521,521,521,521,521,521,521,521,521,521,521', -',,521,,,,,213,213,,,213,,,,,,,,,213,213,521,213,213,213,213,213,213', -'213,,,213,213,,,,213,213,213,213,,,,,,213,,,,,,,,213,213,,213,213,213', -'213,213,213,213,213,213,213,213,,664,213,664,664,664,664,664,,,,,,,', -',,664,,,,,213,,,,,,,,,,,,,,,,,664,453,453,,,453,,,,664,664,664,664,', -'453,453,,453,453,453,453,453,453,453,,,453,453,,,,453,453,453,453,,', -'664,,,453,,,,,664,,,453,453,,453,453,453,453,453,453,453,453,453,453', -'453,,605,453,605,605,605,605,605,895,,895,895,895,895,895,,,605,,,,', -'453,,895,892,,892,892,892,892,892,,,,,,,,605,605,892,,,,,895,,605,605', -'605,605,,,,895,895,895,895,,,,,892,,1005,,1005,1005,1005,1005,1005,892', -'892,892,892,,,,452,452,1005,,452,605,,,,,,,895,452,452,,452,452,452', -'452,452,452,452,,1005,452,452,,,892,452,452,452,452,,1005,1005,,,452', -',,,,,,,452,452,,452,452,452,452,452,452,452,452,452,452,452,,760,452', -'760,760,760,760,760,1005,,,,,,,,,760,,,,,452,,,,,,,,,1003,,1003,1003', -'1003,1003,1003,,760,1016,1016,,,1016,,,1003,760,760,760,760,,1016,1016', -',1016,1016,1016,1016,1016,1016,1016,,,1016,1016,,,1003,1016,1016,1016', -'1016,,,,,,1016,1003,1003,,,760,,,1016,1016,,1016,1016,1016,1016,1016', -'1016,1016,1016,1016,1016,1016,,,1016,,,,,1015,1015,,,1015,,1003,,,,', -',,1015,1015,1016,1015,1015,1015,1015,1015,1015,1015,,,1015,1015,,,,1015', -'1015,1015,1015,,,,,,1015,,,,,,,,1015,1015,,1015,1015,1015,1015,1015', -'1015,1015,1015,1015,1015,1015,,,1015,,,,,263,263,,,263,,,,,,,,,263,263', -'1015,263,263,263,263,263,263,263,,,263,263,,,,263,263,263,263,,,,,,', -',,,,,,,263,263,,263,263,263,263,263,263,263,263,263,263,263,,1001,263', -'1001,1001,1001,1001,1001,999,,999,999,999,999,999,,,1001,,,,,263,,999', -'550,,550,550,550,550,550,1049,,1049,1049,1049,1049,1049,1001,,550,,', -',,999,,1049,,1001,1001,,,,999,999,999,999,,,,,550,,,,,,,1049,,550,550', -'550,550,,,,966,966,1049,1049,966,1001,,,,,,,999,966,966,,966,966,966', -'966,966,966,966,,,966,966,,,550,966,966,966,966,,,1049,,,966,,,,,,,', -'966,966,,966,966,966,966,966,966,966,966,966,966,966,,718,966,718,718', -'718,718,718,,,750,750,,,750,,,718,,,,,966,750,750,,750,750,750,750,750', -'750,750,,,750,750,,,718,750,750,750,750,,,,,,750,718,718,,,,,,750,750', -',750,750,750,750,750,750,750,750,750,750,750,,,750,,,,,751,751,,,751', -',718,,,,,,,751,751,750,751,751,751,751,751,751,751,,,751,751,,,,751', -'751,751,751,,,,,,751,,,,,,,,751,751,,751,751,751,751,751,751,751,751', -'751,751,751,,716,751,716,716,716,716,716,,,,,,,,,,716,,,,,751,,,,,,', -',,,,,,,,,,716,532,532,,,532,,,,716,716,716,716,,532,532,,532,532,532', -'532,532,532,532,,,532,532,,,,532,532,532,532,,,,,,532,,,,,716,,,532', -'532,,532,532,532,532,532,532,532,532,532,532,532,,,532,,,,,531,531,', -',531,,,,,,,,,531,531,532,531,531,531,531,531,531,531,,,531,531,,,,531', -'531,531,531,,,,,,531,,,,,,,,531,531,,531,531,531,531,531,531,531,531', -'531,531,531,,,531,,,,,,,,,,,,,,,,,,,,531' ] - racc_action_check = arr = ::Array.new(26475, nil) +',,,245,245,,,,,,,245,,,245,245,245,,,245,245,248,248,248,,248,,,,248', +'248,,,,248,,248,248,248,248,248,248,248,,,,,,248,248,248,248,248,248', +'248,,,248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248,248,248,', +'248,248,,248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,', +',,,248,,,,,,,,248,,,,,248,248,248,248,248,248,,,,248,248,,,,,,,248,', +',248,248,248,,,248,248,249,249,249,,249,,,,249,249,,,,249,,249,249,249', +'249,249,249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249', +'249,249,249,249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,', +',,,,,,,,,,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249', +'249,249,249,249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250', +'250,250,,250,,,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250', +'250,250,250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250', +'250,,250,250,250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250', +',,250,250,,,250,,,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250', +'250,,,,,,,250,,,250,250,250,,,250,250,251,251,251,,251,,,,251,251,,', +',251,,251,251,251,251,251,251,251,,,,,,251,251,251,251,251,251,251,', +',251,,,,,,,251,,,251,251,251,251,251,251,251,251,,251,251,251,,251,251', +',251,251,251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,', +',,,,,,251,,,,,251,251,251,251,251,251,,,,251,251,,,,,,,251,,,251,251', +'251,,,251,251,252,252,252,,252,,,,252,252,,,,252,,252,252,252,252,252', +'252,252,,,,,,252,252,252,252,252,252,252,,,252,,,,,,,252,,,252,252,252', +'252,252,252,252,252,,252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,', +',,,,,,252,,,252,,,252,252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252', +'252,252,252,,,,252,252,,,,,,,252,,,252,252,252,,,252,252,253,253,253', +',253,,,,253,253,,,,253,,253,253,253,253,253,253,253,,,,,,253,253,253', +'253,253,253,253,,,253,,,,,,,253,,,253,253,253,253,253,253,253,253,,253', +'253,253,,253,253,,253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253,,,253,253', +',,253,,,,,,253,,,,,,,,253,,,,,253,253,253,253,253,253,,,,253,253,,,', +',,,253,,,253,253,253,,,253,253,254,254,254,,254,,,,254,254,,,,254,,254', +'254,254,254,254,254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,', +',254,,,254,254,254,254,254,254,254,254,,254,254,254,,254,254,,254,254', +'254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,,,254', +',,,,254,254,254,254,254,254,,,,254,254,,,,,,,254,,,254,254,254,,,254', +'254,255,255,255,,255,,,,255,255,,,,255,,255,255,255,255,255,255,255', +',,,,,255,255,255,255,255,255,255,,,255,,,,,,,255,,,255,255,255,255,255', +'255,255,255,,255,255,255,,255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255', +',,255,,,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255,255,255,255,255,255', +',,,255,255,,,,,,,255,,,255,255,255,,,255,255,256,256,256,,256,,,,256', +'256,,,,256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256,256', +'256,,,256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256,256,', +'256,256,,256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,,256,,', +',,,256,,,,,,,,256,,,,,256,256,256,256,256,256,,,,256,256,,,,,,,256,', +',256,256,256,,,256,256,257,257,257,,257,,,,257,257,,,,257,,257,257,257', +'257,257,257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257', +'257,257,257,257,257,257,257,,257,257,257,,257,257,,257,257,257,,,,,', +',,,,,,,,,,,,,,257,,,257,,,257,257,,,257,,,,,,257,,,,,,,,257,,,,,257', +'257,257,257,257,257,,,,257,257,,,,,,,257,,,257,257,257,,,257,257,258', +'258,258,,258,,,,258,258,,,,258,,258,258,258,258,258,258,258,,,,,,258', +'258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258,258,258,258,258', +'258,,258,258,258,,258,258,,258,258,258,,,,,,,,,,,,,,,,,,,,258,,,258', +',,258,258,,,258,,,,,,258,,,,,,,,258,,,,,258,258,258,258,258,258,,,,258', +'258,,,,,,,258,,,258,258,258,,,258,258,259,259,259,,259,,,,259,259,,', +',259,,259,259,259,259,259,259,259,,,,,,259,259,259,259,259,259,259,', +',259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259,259,259,,259,259', +',259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259,,,259,,,,,,259,', +',,,,,,259,,,,,259,259,259,259,259,259,,,,259,259,,,,,,,259,,,259,259', +'259,,,259,259,260,260,260,,260,,,,260,260,,,,260,,260,260,260,260,260', +'260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,,,260,,,260,260,260', +'260,260,260,260,260,,260,260,260,,260,260,,260,260,260,,,,,,,,,,,,,', +',,,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,260,,,,,260,260,260', +'260,260,260,,,,260,260,,,,,,,260,,,260,260,260,,,260,260,261,261,261', +',261,,,,261,261,,,,261,,261,261,261,261,261,261,261,,,,,,261,261,261', +'261,261,261,261,,,261,,,,,,,261,,,261,261,261,261,261,261,261,261,,261', +'261,261,,261,261,,261,261,261,,,,,,,,,,,,,,,,,,,,261,,,261,,,261,261', +',,261,,,,,,261,,,,,,,,261,,,,,261,261,261,261,261,261,,,,261,261,,,', +',,,261,,,261,261,261,,,261,261,262,262,262,,262,,,,262,262,,,,262,,262', +'262,262,262,262,262,262,,,,,,262,262,262,262,262,262,262,,,262,,,,,', +',262,,,262,262,262,262,262,262,262,262,,262,262,262,,262,262,,262,262', +'262,,,,,,,,,,,,,,,,,,,,262,,,262,,,262,262,,,262,,,,,,262,,,,,,,,262', +',,,,262,262,262,262,262,262,,,,262,262,,,,,,,262,,,262,262,262,,,262', +'262,263,263,263,,263,,,,263,263,,,,263,,263,263,263,263,263,263,263', +',,,,,263,263,263,263,263,263,263,,,263,,,,,,,263,,,263,263,263,263,263', +'263,263,263,,263,263,263,,263,263,,263,263,263,,,,,,,,,,,,,,,,,,,,263', +',,263,,,263,263,,,263,,,,,,263,,,,,,,,263,,,,,263,263,263,263,263,263', +',,,263,263,,,,,,,263,,,263,263,263,,,263,263,264,264,264,,264,,,,264', +'264,,,,264,,264,264,264,264,264,264,264,,,,,,264,264,264,264,264,264', +'264,,,264,,,,,,,264,,,264,264,264,264,264,264,264,264,,264,264,264,', +'264,264,,264,264,264,,,,,,,,,,,,,,,,,,,,264,,,264,,,264,264,,,264,,', +',,,264,,,,,,,,264,,,,,264,264,264,264,264,264,,,,264,264,,,,,,,264,', +',264,264,264,,,264,264,265,265,265,,265,,,,265,265,,,,265,,265,265,265', +'265,265,265,265,,,,,,265,265,265,265,265,265,265,,,265,,,,,,,265,,,265', +'265,265,265,265,265,265,265,,265,265,265,,265,265,,265,265,265,,,,,', +',,,,,,,,,,,,,,265,,,265,,,265,265,,,265,,,,,,265,,,,,,,,265,,,,,265', +'265,265,265,265,265,,,,265,265,,,,,,,265,,,265,265,265,,,265,265,266', +'266,266,,266,,,,266,266,,,,266,,266,266,266,266,266,266,266,,,,,,266', +'266,266,266,266,266,266,,,266,,,,,,,266,,,266,266,266,266,266,266,266', +'266,,266,266,266,,266,266,,266,266,266,,,,,,,,,,,,,,,,,,,,266,,,266', +',,266,266,,,266,,,,,,266,,,,,,,,266,,,,,266,266,266,266,266,266,,,,266', +'266,,,,,,,266,,,266,266,266,,,266,266,267,267,267,,267,,,,267,267,,', +',267,,267,267,267,267,267,267,267,,,,,,267,267,267,267,267,267,267,', +',267,,,,,,,267,,,267,267,267,267,267,267,267,267,,267,267,267,,267,267', +',267,267,267,,,,,,,,,,,,,,,,,,,,267,,,267,,,267,267,,,267,,,,,,267,', +',,,,,,267,,,,,267,267,267,267,267,267,,,,267,267,,,,,,,267,,,267,267', +'267,,,267,267,268,268,268,,268,,,,268,268,,,,268,,268,268,268,268,268', +'268,268,,,,,,268,268,268,268,268,268,268,,,268,,,,,,,268,,,268,268,268', +'268,268,268,268,268,,268,268,268,,268,268,,268,268,268,,,,,,,,,,,,,', +',,,,,,268,,,268,,,268,268,,,268,,,,,,268,,,,,,,,268,,,,,268,268,268', +'268,268,268,,,,268,268,,,,,,,268,,,268,268,268,,,268,268,269,269,269', +',269,,,,269,269,,,,269,,269,269,269,269,269,269,269,,,,,,269,269,269', +'269,269,269,269,,,269,,,,,,,269,,,269,269,269,269,269,269,269,269,,269', +'269,269,,269,269,,269,269,269,,,,,,,,,,,,,,,,,,,,269,,,269,,,269,269', +',,269,,,,,,269,,,,,,,,269,,,,,269,269,269,269,269,269,,,,269,269,,,', +',,,269,,,269,269,269,,,269,269,274,274,274,,274,,,,274,274,,,,274,,274', +'274,274,274,274,274,274,,,,,,274,274,274,274,274,274,274,,,274,,,,,', +',274,,,274,274,274,274,274,274,274,274,,274,274,274,,274,274,,274,274', +'274,,,,,,,,,,,,,,,,,,,,274,,,274,,,274,274,,,274,,,,,,274,,,,,,,,274', +',,,,274,274,274,274,274,274,,,,274,274,,,,,,,274,,,274,274,274,,,274', +'274,282,282,282,,282,,,,282,282,,,,282,,282,282,282,282,282,282,282', +',,,,,282,282,282,282,282,282,282,,,282,,,,,,,282,,,282,282,282,282,282', +'282,282,282,282,282,282,282,,282,282,,282,282,282,,,,,,,,,,,,,,,,,,', +',282,,,282,,,282,282,,,282,,282,,282,,282,,,,,,,,282,,,,,282,282,282', +'282,282,282,,,,282,282,,,,,,,282,,282,282,282,282,,,282,282,289,289', +'289,,289,,,,289,289,,,,289,,289,289,289,289,289,289,289,,,,,,289,289', +'289,289,289,289,289,,,289,,,,,,,289,,,289,289,289,289,289,289,289,289', +'289,289,289,289,,289,289,,289,289,289,,,,,,,,,,,,,,,,,,,,289,,,289,', +',289,289,,,289,,289,,289,,289,,,,,,,,289,,,,,289,289,289,289,289,289', +',,,289,289,,,,,,,289,,289,289,289,289,,,289,289,292,292,292,,292,,,', +'292,292,,,,292,,292,292,292,292,292,292,292,,,,,,292,292,292,292,292', +'292,292,,,292,,,,,,,292,,,292,292,292,292,292,292,292,292,292,292,292', +'292,,292,292,,292,292,292,,,,,,,,,,,,,,,,,,,,292,,,292,,,292,292,,,292', +',292,,292,,292,,,,,,,,292,,,,,292,292,292,292,292,292,,,,292,292,292', +',,,,,292,,292,292,292,292,,,292,292,989,989,989,,989,,,,989,989,,,,989', +',989,989,989,989,989,989,989,,,,,,989,989,989,989,989,989,989,,,989', +',,,,,,989,,,989,989,989,989,989,989,989,989,,989,989,989,,989,989,,', +',989,,,,,,,,,,,,,,,,,,,,989,,,989,,,989,989,,,989,,,,,,,,,,,,,,,,,,', +'989,989,989,989,989,989,,,,989,989,,,,,,,989,,,989,989,989,,,989,989', +'299,299,299,,299,,,,299,299,,,,299,,299,299,299,299,299,299,299,,,,', +',299,299,299,299,299,299,299,,,299,,,,,,,299,,,299,299,299,299,299,299', +'299,299,,299,299,299,,299,299,,299,299,299,,,,,,,,,,,,,,,,,,,,299,,', +'299,,,299,299,,,299,,,,,,299,,,,,,,,299,,,,,299,299,299,299,299,299', +',,,299,299,,,,,,,299,,,299,299,299,,,299,299,301,301,301,,301,,,,301', +'301,,,,301,,301,301,301,301,301,301,301,,,,,,301,301,301,301,301,301', +'301,,,301,,,,,,,301,,,301,301,301,301,301,301,301,301,,301,301,301,', +'301,301,,301,301,301,,,,,,,,,,,,,,,,,,,,301,,,301,,,301,301,,,301,,', +',,,301,,,,,,,,301,,,,,301,301,301,301,301,301,,,,301,301,,,,,,,301,', +',301,301,301,,,301,301,304,304,304,,304,,,,304,304,,,,304,,304,304,304', +'304,304,304,304,,,,,,304,304,304,304,304,304,304,,,304,,,,,,,304,,,304', +'304,304,304,304,304,304,304,,304,304,304,,304,304,,304,304,304,,,,,', +',,,,,,,,,,,,,,304,,,304,,,304,304,,,304,,,,,,304,,,,,,,,304,,,,,304', +'304,304,304,304,304,,,,304,304,,,,,,,304,,,304,304,304,,,304,304,305', +'305,305,,305,,,,305,305,,,,305,,305,305,305,305,305,305,305,,,,,,305', +'305,305,305,305,305,305,,,305,,,,,,,305,,,305,305,305,305,305,305,305', +'305,,305,305,305,,305,305,,305,305,305,,,,,,,,,,,,,,,,,,,,305,,,305', +',,305,305,,,305,,,,,,305,,,,,,,,305,,,,,305,305,305,305,305,305,,,,305', +'305,,,,,,,305,,,305,305,305,,,305,305,311,311,311,311,311,,,,311,311', +',,,311,,311,311,311,311,311,311,311,,,,,,311,311,311,311,311,311,311', +',,311,,,,,,311,311,,311,311,311,311,311,311,311,311,311,,311,311,311', +',311,311,,311,311,311,,,,,,,,,,,,,,,,,,,,311,,,311,,,311,311,,,311,', +'311,,,,311,,,,,,,,311,,,,,311,311,311,311,311,311,,,,311,311,,,,,,,311', +',,311,311,311,,,311,311,964,964,964,,964,,,,964,964,,,,964,,964,964', +'964,964,964,964,964,,,,,,964,964,964,964,964,964,964,,,964,,,,,,,964', +',,964,964,964,964,964,964,964,964,,964,964,964,,964,964,,964,964,964', +',,,,,,,,,,,,,,,,,,,964,,,964,,,964,964,,,964,,964,,,,964,,,,,,,,964', +',,,,964,964,964,964,964,964,,,,964,964,,,,,,,964,,,964,964,964,,,964', +'964,319,319,319,,319,,,,319,319,,,,319,,319,319,319,319,319,319,319', +',,,,,319,319,319,319,319,319,319,,,319,,,,,,,319,,,319,319,319,319,319', +'319,319,319,,319,319,319,,319,319,,,,319,,,,,,,,,,,,,,,,,,,,319,,,319', +',,319,319,,,319,,,,,,,,,,,,,,,,,,,319,319,319,319,319,319,,,,319,319', +',,,319,,,319,,,319,319,319,,,319,319,336,336,336,,336,,,,336,336,,,', +'336,,336,336,336,336,336,336,336,,,,,,336,336,336,336,336,336,336,,', +'336,,,,,,,336,,,336,336,336,336,336,336,336,336,,336,336,336,,336,336', +',,,336,,,,,,,,,,,,,,,,,,,,336,,,336,,,336,336,,,336,,,,,,,,,,,,,,,,', +',,336,336,336,336,336,336,,,,336,336,,,,,,,336,,,336,336,336,,,336,336', +'938,938,938,,938,,,,938,938,,,,938,,938,938,938,938,938,938,938,,,,', +',938,938,938,938,938,938,938,,,938,,,,,,,938,,,938,938,938,938,938,938', +'938,938,,938,938,938,,938,938,,,,938,,,,,,,,,,,,,,,,,,,,938,,,938,,', +'938,938,,,938,,,,,,,,,,,,,,,,,,,938,938,938,938,938,938,,,,938,938,', +',,,,,938,,,938,938,938,,,938,938,343,343,343,,343,,,,343,343,,,,343', +',343,343,343,343,343,343,343,,,,,,343,343,343,343,343,343,343,,,343', +',,,,,,343,,,343,343,343,343,343,343,343,343,,343,343,343,,343,343,,343', +'343,343,,,,,,,,,,,,,,,,,,,,343,,,343,,,343,343,,,343,,,,,,343,,,,,,', +',343,,,,,343,343,343,343,343,343,,,,343,343,,,,,,,343,,,343,343,343', +',,343,343,345,345,345,,345,,,,345,345,,,,345,,345,345,345,345,345,345', +'345,,,,,,345,345,345,345,345,345,345,,,345,,,,,,,345,,,345,345,345,345', +'345,345,345,345,,345,345,345,,345,345,,345,345,345,,,,,,,,,,,,,,,,,', +',,345,,,345,345,,345,345,,,345,,,,,,345,,,,,,,,345,,,,,345,345,345,345', +'345,345,,,,345,345,,,,,,,345,,,345,345,345,,,345,345,349,349,349,,349', +',,,349,349,,,,349,,349,349,349,349,349,349,349,,,,,,349,349,349,349', +'349,349,349,,,349,,,,,,,349,,,349,349,349,349,349,349,349,349,349,349', +'349,349,,349,349,,349,349,349,,,,,,,,,,,,,,,,,,,,349,,,349,,,349,349', +',,349,,349,,,,349,,,,,,,,349,,,,,349,349,349,349,349,349,,,,349,349', +',,,,,,349,,349,349,349,349,,,349,349,350,350,350,,350,,,,350,350,,,', +'350,,350,350,350,350,350,350,350,,,,,,350,350,350,350,350,350,350,,', +'350,,,,,,,350,,,350,350,350,350,350,350,350,350,350,350,350,350,,350', +'350,,350,350,350,,,,,,,,,,,,,,,,,,,,350,,,350,,,350,350,,,350,,,,,,350', +',,,,,,,350,,,,,350,350,350,350,350,350,,,,350,350,,,,,,,350,,350,350', +'350,350,,,350,350,357,357,357,,357,,,,357,357,,,,357,,357,357,357,357', +'357,357,357,,,,,,357,357,357,357,357,357,357,,,357,,,,,,,357,,,357,357', +'357,357,357,357,357,357,,357,357,357,,357,357,,357,357,357,,,,,,,,,', +',,,,,,,,,,357,,,357,,,357,357,,,357,,,,,,357,,,,,,,,357,,,,,357,357', +'357,357,357,357,,,,357,357,,,,,,,357,,,357,357,357,,,357,357,929,929', +'929,,929,,,,929,929,,,,929,,929,929,929,929,929,929,929,,,,,,929,929', +'929,929,929,929,929,,,929,,,,,,,929,,,929,929,929,929,929,929,929,929', +',929,929,929,,929,929,,,,929,,,,,,,,,,,,,,,,,,,,929,,,929,,,929,929', +',,929,,,,,,,,,,,,,,,,,,,929,929,929,929,929,929,,,,929,929,,,,,,,929', +',,929,929,929,,,929,929,917,917,917,,917,,,,917,917,,,,917,,917,917', +'917,917,917,917,917,,,,,,917,917,917,917,917,917,917,,,917,,,,,,,917', +',,917,917,917,917,917,917,917,917,,917,917,917,,917,917,,917,917,917', +',,,,,,,,,,,,,,,,,,,917,,,917,,,917,917,,,917,,,,,,917,,,,,,,,917,,,', +',917,917,917,917,917,917,,,,917,917,,,,,,,917,,,917,917,917,,,917,917', +'916,916,916,,916,,,,916,916,,,,916,,916,916,916,916,916,916,916,,,,', +',916,916,916,916,916,916,916,,,916,,,,,,,916,,,916,916,916,916,916,916', +'916,916,916,916,916,916,,916,916,,916,916,916,,,,,,,,,,,,,,,,,,,,916', +',,916,,,916,916,,,916,,,,916,,916,,,,,,,,916,,,,,916,916,916,916,916', +'916,,,,916,916,,,,,,,916,,916,916,916,916,,,916,916,371,371,371,,371', +',,,371,371,,,,371,,371,371,371,371,371,371,371,,,,,,371,371,371,371', +'371,371,371,,,371,,,,,,,371,,,371,371,371,371,371,371,371,371,,371,371', +'371,,371,371,,,,371,,,,,,,,,,,,,,,,,,,,371,,,371,,,371,371,,,371,,,', +',,,,,,,,,,,,,,,371,371,371,371,371,371,,,,371,371,,,,,,,371,,,371,371', +'371,,,371,371,373,373,373,,373,,,,373,373,,,,373,,373,373,373,373,373', +'373,373,,,,,,373,373,373,373,373,373,373,,,373,,,,,,,373,,,373,373,373', +'373,373,373,373,373,,373,373,373,,373,373,,,,373,,,,,,,,,,,,,,,,,,,', +'373,,,373,,,373,373,,,373,,,,,,,,,,,,,,,,,,,373,373,373,373,373,373', +',,,373,373,,,,,,,373,,,373,373,373,,,373,373,896,896,896,,896,,,,896', +'896,,,,896,,896,896,896,896,896,896,896,,,,,,896,896,896,896,896,896', +'896,,,896,,,,,,,896,,,896,896,896,896,896,896,896,896,,896,896,896,', +'896,896,,896,896,896,,,,,,,,,,,,,,,,,,,,896,,,896,,,896,896,,,896,,', +',,,896,,,,,,,,896,,,,,896,896,896,896,896,896,,,,896,896,,,,,,,896,', +',896,896,896,,,896,896,882,882,882,,882,,,,882,882,,,,882,,882,882,882', +'882,882,882,882,,,,,,882,882,882,882,882,882,882,,,882,,,,,,,882,,,882', +'882,882,882,882,882,882,882,,882,882,882,,882,882,,882,882,882,,,,,', +',,,,,,,,,,,,,,882,,,882,,,882,882,,,882,,,,,,882,,,,,,,,882,,,,,882', +'882,882,882,882,882,,,,882,882,,,,,,,882,,,882,882,882,,,882,882,431', +'431,431,,431,,,,431,431,,,,431,,431,431,431,431,431,431,431,,,,,,431', +'431,431,431,431,431,431,,,431,,,,,,,431,,,431,431,431,431,431,431,431', +'431,,431,431,431,,431,431,,431,431,431,,,,,,,,,,,,,,,,,,,,431,,,431', +',,431,431,,,431,,,,,,431,,,,,,,,431,,,,,431,431,431,431,431,431,,,,431', +'431,,,,,,,431,,,431,431,431,,,431,431,825,825,825,,825,,,,825,825,,', +',825,,825,825,825,825,825,825,825,,,,,,825,825,825,825,825,825,825,', +',825,,,,,,,825,,,825,825,825,825,825,825,825,825,,825,825,825,,825,825', +',825,825,825,,,,,,,,,,,,,,,,,,,,825,,,825,,,825,825,,,825,,,,,,825,', +',,,,,,825,,,,,825,825,825,825,825,825,,,,825,825,,,,,,,825,,,825,825', +'825,,,825,825,823,823,823,,823,,,,823,823,,,,823,,823,823,823,823,823', +'823,823,,,,,,823,823,823,823,823,823,823,,,823,,,,,,,823,,,823,823,823', +'823,823,823,823,823,,823,823,823,,823,823,,823,823,823,,,,,,,,,,,,,', +',,,,,,823,,,823,,,823,823,,,823,,,,,,823,,,,,,,,823,,,,,823,823,823', +'823,823,823,,,,823,823,,,,,,,823,,,823,823,823,,,823,823,822,822,822', +',822,,,,822,822,,,,822,,822,822,822,822,822,822,822,,,,,,822,822,822', +'822,822,822,822,,,822,,,,,,,822,,,822,822,822,822,822,822,822,822,,822', +'822,822,,822,822,,822,822,822,,,,,,,,,,,,,,,,,,,,822,,,822,,,822,822', +',,822,,,,,,822,,,,,,,,822,,,,,822,822,822,822,822,822,,,,822,822,,,', +',,,822,,,822,822,822,,,822,822,821,821,821,,821,,,,821,821,,,,821,,821', +'821,821,821,821,821,821,,,,,,821,821,821,821,821,821,821,,,821,,,,,', +',821,,,821,821,821,821,821,821,821,821,,821,821,821,,821,821,,821,821', +'821,,,,,,,,,,,,,,,,,,,,821,,,821,,,821,821,,,821,,,,,,821,,,,,,,,821', +',,,,821,821,821,821,821,821,,,,821,821,,,,,,,821,,,821,821,821,,,821', +'821,820,820,820,,820,,,,820,820,,,,820,,820,820,820,820,820,820,820', +',,,,,820,820,820,820,820,820,820,,,820,,,,,,,820,,,820,820,820,820,820', +'820,820,820,,820,820,820,,820,820,,820,820,820,,,,,,,,,,,,,,,,,,,,820', +',,820,,,820,820,,,820,,,,,,820,,,,,,,,820,,,,,820,820,820,820,820,820', +',,,820,820,,,,,,,820,,,820,820,820,,,820,820,475,475,475,,475,,,,475', +'475,,,,475,,475,475,475,475,475,475,475,,,,,,475,475,475,475,475,475', +'475,,,475,,,,,,,475,,,475,475,475,475,475,475,475,475,475,475,475,475', +',475,475,,475,475,475,,,,,,,,,,,,,,,,,,,,475,,,475,,,475,475,,,475,', +'475,,475,,475,,,,,,,,475,,,,,475,475,475,475,475,475,,,,475,475,,,,', +',,475,,475,475,475,475,,,475,475,477,477,477,,477,,,,477,477,,,,477', +',477,477,477,477,477,477,477,,,,,,477,477,477,477,477,477,477,,,477', +',,,,,,477,,,477,477,477,477,477,477,477,477,,477,477,477,,477,477,,477', +'477,477,,,,,,,,,,,,,,,,,,,,477,,,477,,,477,477,,,477,,,,,,477,,,,,,', +',477,,,,,477,477,477,477,477,477,,,,477,477,,,,,,,477,,,477,477,477', +',,477,477,478,478,478,,478,,,,478,478,,,,478,,478,478,478,478,478,478', +'478,,,,,,478,478,478,478,478,478,478,,,478,,,,,,,478,,,478,478,478,478', +'478,478,478,478,,478,478,478,,478,478,,478,478,478,,,,,,,,,,,,,,,,,', +',,478,,,478,,,478,478,,,478,,,,,,478,,,,,,,,478,,,,,478,478,478,478', +'478,478,,,,478,478,,,,,,,478,,,478,478,478,,,478,478,479,479,479,,479', +',,,479,479,,,,479,,479,479,479,479,479,479,479,,,,,,479,479,479,479', +'479,479,479,,,479,,,,,,,479,,,479,479,479,479,479,479,479,479,,479,479', +'479,,479,479,,479,479,479,,,,,,,,,,,,,,,,,,,,479,,,479,,,479,479,,,479', +',,,,,479,,,,,,,,479,,,,,479,479,479,479,479,479,,,,479,479,,,,,,,479', +',,479,479,479,,,479,479,807,807,807,,807,,,,807,807,,,,807,,807,807', +'807,807,807,807,807,,,,,,807,807,807,807,807,807,807,,,807,,,,,,,807', +',,807,807,807,807,807,807,807,807,,807,807,807,,807,807,,807,807,807', +',,,,,,,,,,,,,,,,,,,807,,,807,,,807,807,,,807,,,,,,807,,,,,,,,807,,,', +',807,807,807,807,807,807,,,,807,807,,,,,,,807,,,807,807,807,,,807,807', +'800,800,800,,800,,,,800,800,,,,800,,800,800,800,800,800,800,800,,,,', +',800,800,800,800,800,800,800,,,800,,,,,,,800,,,800,800,800,800,800,800', +'800,800,,800,800,800,,800,800,,800,800,800,,,,,,,,,,,,,,,,,,,,800,,', +'800,,,800,800,,,800,,,,,,800,,,,,,,,800,,,,,800,800,800,800,800,800', +',,,800,800,,,,,,,800,,,800,800,800,,,800,800,518,518,518,,518,,,,518', +'518,,,,518,,518,518,518,518,518,518,518,,,,,,518,518,518,518,518,518', +'518,,,518,,,,,,,518,,,518,518,518,518,518,518,518,518,518,518,518,518', +',518,518,,518,518,518,,,,,,,,,,,,,,,,,,,,518,,,518,,,518,518,,,518,', +'518,,518,,518,,,,,,,,518,,,,,518,518,518,518,518,518,,,,518,518,,,,', +',,518,,518,518,518,518,,,518,518,521,521,521,,521,,,,521,521,,,,521', +',521,521,521,521,521,521,521,,,,,,521,521,521,521,521,521,521,,,521', +',,,,,,521,,,521,521,521,521,521,521,521,521,521,521,521,521,,521,521', +',521,521,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,,,,521,,521', +',,,,,,,521,,,,,521,521,521,521,521,521,,,,521,521,,,,,,,521,,521,521', +'521,521,,,521,521,523,523,523,,523,,,,523,523,,,,523,,523,523,523,523', +'523,523,523,,,,,,523,523,523,523,523,523,523,,,523,,,,,,,523,,,523,523', +'523,523,523,523,523,523,,523,523,523,,523,523,,523,523,523,,,,,,,,,', +',,,,,,,,,,523,,,523,,,523,523,,,523,,,,,,523,,,,,,,,523,,,,,523,523', +'523,523,523,523,,,,523,523,,,,,,,523,,,523,523,523,,,523,523,529,529', +'529,529,529,,,,529,529,,,,529,,529,529,529,529,529,529,529,,,,,,529', +'529,529,529,529,529,529,,,529,,,,,,529,529,529,529,529,529,529,529,529', +'529,529,529,,529,529,529,,529,529,,529,529,529,,,,,,,,,,,,,,,,,,,,529', +',,529,,,529,529,,,529,,529,,,,529,,,,,,,,529,,,,,529,529,529,529,529', +'529,,,,529,529,,,,,,529,529,,,529,529,529,,,529,529,536,536,536,,536', +',,,536,536,,,,536,,536,536,536,536,536,536,536,,,,,,536,536,536,536', +'536,536,536,,,536,,,,,,,536,,,536,536,536,536,536,536,536,536,,536,536', +'536,,536,536,,,,536,,,,,,,,,,,,,,,,,,,,536,,,536,,,536,536,,,536,,,', +',,,,,,,,,,,,,,,536,536,536,536,536,536,,,,536,536,,,,,,,536,,,536,536', +'536,,,536,536,538,538,538,,538,,,,538,538,,,,538,,538,538,538,538,538', +'538,538,,,,,,538,538,538,538,538,538,538,,,538,,,,,,,538,,,538,538,538', +'538,538,538,538,538,538,538,538,538,,538,538,,538,538,538,,,,,,,,,,', +',,,,,,,,,538,,,538,,,538,538,,,538,,538,,538,,538,,,,,,,,538,,,,,538', +'538,538,538,538,538,,,,538,538,,,,,,,538,,538,538,538,538,,,538,538', +'544,544,544,,544,,,,544,544,,,,544,,544,544,544,544,544,544,544,,,,', +',544,544,544,544,544,544,544,,,544,,,,,,,544,,,544,544,544,544,544,544', +'544,544,,544,544,544,,544,544,,,,544,,,,,,,,,,,,,,,,,,,,544,,,544,,', +'544,544,,,544,,,,,,,,,,,,,,,,,,,544,544,544,544,544,544,,,,544,544,', +',,,,,544,,,544,544,544,,,544,544,548,548,548,,548,,,,548,548,,,,548', +',548,548,548,548,548,548,548,,,,,,548,548,548,548,548,548,548,,,548', +',,,,,,548,,,548,548,548,548,548,548,548,548,,548,548,548,,548,548,,548', +'548,548,,,,,,,,,,,,,,,,,,,,548,,,548,,,548,548,,,548,,,,,,548,,,,,,', +',548,,,,,548,548,548,548,548,548,,,,548,548,,,,,,,548,,,548,548,548', +',,548,548,553,553,553,,553,,,,553,553,,,,553,,553,553,553,553,553,553', +'553,,,,,,553,553,553,553,553,553,553,,,553,,,,,,,553,,,553,553,553,553', +'553,553,553,553,,553,553,553,,553,553,,553,553,553,,,,,,,,,,,,,,,,,', +',,553,,,553,,,553,553,,,553,,,,,,553,,,,,,,,553,,,,,553,553,553,553', +'553,553,,,,553,553,,,,,,,553,,,553,553,553,,,553,553,778,778,778,,778', +',,,778,778,,,,778,,778,778,778,778,778,778,778,,,,,,778,778,778,778', +'778,778,778,,,778,,,,,,,778,,,778,778,778,778,778,778,778,778,778,778', +'778,778,,778,778,,778,778,778,,,,,,,,,,,,,,,,,,,,778,,,778,,,778,778', +',,778,,778,,778,,778,,,,,,,,778,,,,,778,778,778,778,778,778,,,,778,778', +',,,,,,778,,778,778,778,778,,,778,778,766,766,766,,766,,,,766,766,,,', +'766,,766,766,766,766,766,766,766,,,,,,766,766,766,766,766,766,766,,', +'766,,,,,,,766,,,766,766,766,766,766,766,766,766,,766,766,766,,766,766', +',766,766,766,,,,,,,,,,,,,,,,,,,,766,,,766,,,766,766,,,766,,766,,,,766', +',,,,,,,766,,,,,766,766,766,766,766,766,,,,766,766,,,,,,,766,,,766,766', +'766,,,766,766,745,745,745,,745,,,,745,745,,,,745,,745,745,745,745,745', +'745,745,,,,,,745,745,745,745,745,745,745,,,745,,,,,,,745,,,745,745,745', +'745,745,745,745,745,,745,745,745,,745,745,,745,745,745,,,,,,,,,,,,,', +',,,,,,745,,,745,,,745,745,,,745,,,,,,745,,,,,,,,745,,,,,745,745,745', +'745,745,745,,,,745,745,,,,,,,745,,,745,745,745,,,745,745,587,587,587', +',587,,,,587,587,,,,587,,587,587,587,587,587,587,587,,,,,,587,587,587', +'587,587,587,587,,,587,,,,,,,587,,,587,587,587,587,587,587,587,587,,587', +'587,587,,587,587,,587,587,587,,,,,,,,,,,,,,,,,,,,587,,,587,,,587,587', +',,587,,,,,,587,,,,,,,,587,,,,,587,587,587,587,587,587,,,,587,587,,,', +',,,587,,,587,587,587,,,587,587,729,729,729,,729,,,,729,729,,,,729,,729', +'729,729,729,729,729,729,,,,,,729,729,729,729,729,729,729,,,729,,,,,', +',729,,,729,729,729,729,729,729,729,729,729,729,729,729,,729,729,,729', +'729,729,,,,,,,,,,,,,,,,,,,,729,,,729,,,729,729,,,729,,,,,,729,,,,,,', +',729,,,,,729,729,729,729,729,729,,,,729,729,,,,,,,729,,729,729,729,729', +',,729,729,726,726,726,,726,,,,726,726,,,,726,,726,726,726,726,726,726', +'726,,,,,,726,726,726,726,726,726,726,,,726,,,,,,,726,,,726,726,726,726', +'726,726,726,726,726,726,726,726,,726,726,,726,726,726,,,,,,,,,,,,,,', +',,,,,726,,,726,,,726,726,,,726,,726,,,,726,,,,,,,,726,,,,,726,726,726', +'726,726,726,,,,726,726,,,,,,,726,,726,726,726,726,,,726,726,721,721', +'721,,721,,,,721,721,,,,721,,721,721,721,721,721,721,721,,,,,,721,721', +'721,721,721,721,721,,,721,,,,,,,721,,,721,721,721,721,721,721,721,721', +',721,721,721,,721,721,,721,721,721,,,,,,,,,,,,,,,,,,,,721,,,721,,,721', +'721,,,721,,721,,,,721,,,,,,,,721,,,,,721,721,721,721,721,721,,,,721', +'721,,,,,,,721,,,721,721,721,,,721,721,716,716,716,,716,,,,716,716,,', +',716,,716,716,716,716,716,716,716,,,,,,716,716,716,716,716,716,716,', +',716,,,,,,,716,,,716,716,716,716,716,716,716,716,,716,716,716,,716,716', +',716,716,716,,,,,,,,,,,,,,,,,,,,716,,,716,,,716,716,,,716,,,,,,716,', +',,,,,,716,,,,,716,716,716,716,716,716,,,,716,716,,,,,,,716,,,716,716', +'716,,,716,716,610,610,610,,610,,,,610,610,,,,610,,610,610,610,610,610', +'610,610,,,,,,610,610,610,610,610,610,610,,,610,,,,,,,610,,,610,610,610', +'610,610,610,610,610,610,610,610,610,,610,610,,610,610,610,,,,,,,,,,', +',,,,,,,,,610,,,610,,,610,610,,,610,,610,,610,,610,,,,,,,,610,,,,,610', +'610,610,610,610,610,,,,610,610,,,,,,,610,,610,610,610,610,,,610,610', +'715,715,715,,715,,,,715,715,,,,715,,715,715,715,715,715,715,715,,,,', +',715,715,715,715,715,715,715,,,715,,,,,,,715,,,715,715,715,715,715,715', +'715,715,,715,715,715,,715,715,,,,715,,,,,,,,,,,,,,,,,,,,715,,,715,,', +'715,715,,,715,,,,,,,,,,,,,,,,,,,715,715,715,715,715,715,,,,715,715,', +',,,,,715,,,715,715,715,,,715,715,622,622,622,,622,,,,622,622,,,,622', +',622,622,622,622,622,622,622,,,,,,622,622,622,622,622,622,622,,,622', +',,,,,,622,,,622,622,622,622,622,622,622,622,,622,622,622,,622,622,,622', +'622,622,,,,,,,,,,,,,,,,,,,,622,,,622,,,622,622,,,622,,,,,,622,,,,,,', +',622,,,,,622,622,622,622,622,622,,,,622,622,,,,,,,622,,,622,622,622', +',,622,622,628,628,628,,628,,,,628,628,,,,628,,628,628,628,628,628,628', +'628,,,,,,628,628,628,628,628,628,628,,,628,,,,,,,628,,,628,628,628,628', +'628,628,628,628,,628,628,628,,628,628,,628,628,628,,,,,,,,,,,,,,,,,', +',,628,,,628,,,628,628,,,628,,,,,,628,,,,,,,,628,,,,,628,628,628,628', +'628,628,,,,628,628,,,,,,,628,,,628,628,628,,,628,628,704,704,704,,704', +',,,704,704,,,,704,,704,704,704,704,704,704,704,,,,,,704,704,704,704', +'704,704,704,,,704,,,,,,,704,,,704,704,704,704,704,704,704,704,,704,704', +'704,,704,704,,,,704,,,,,,,,,,,,,,,,,,,,704,,,704,,,704,704,,,704,,,', +',,,,,,,,,,,,,,,704,704,704,704,704,704,,,,704,704,,,,,,,704,,,704,704', +'704,,,704,704,657,657,657,,657,,,,657,657,,,,657,,657,657,657,657,657', +'657,657,,,,,,657,657,657,657,657,657,657,,,657,,,,,,,657,,,657,657,657', +'657,657,657,657,657,,657,657,657,,657,657,,657,657,657,,,,,,,,,,,,,', +',,,,,,657,,,657,,,657,657,,,657,,657,,,,657,,,,,,,,657,,,,,657,657,657', +'657,657,657,,,,657,657,,,,,,,657,,,657,657,657,,,657,657,658,658,658', +',658,,,,658,658,,,,658,,658,658,658,658,658,658,658,,,,,,658,658,658', +'658,658,658,658,,,658,,,,,,,658,,,658,658,658,658,658,658,658,658,,658', +'658,658,,658,658,,658,658,658,,,,,,,,,,,,,,,,,,,,658,,,658,,,658,658', +',,658,,,,,,658,,,,,,,,658,,,,,658,658,658,658,658,658,,,,658,658,,,', +',,,658,,,658,658,658,,,658,658,659,659,659,,659,,,,659,659,,,,659,,659', +'659,659,659,659,659,659,,,,,,659,659,659,659,659,659,659,,,659,,,,,', +',659,,,659,659,659,659,659,659,659,659,659,659,659,659,,659,659,,659', +'659,659,,,,,,,,,,,,,,,,,,,,659,,,659,,,659,659,,,659,,659,,659,,659', +',,,,,,,659,,,,,659,659,659,659,659,659,,,,659,659,,,,,,,659,,659,659', +'659,659,,,659,659,662,662,662,,662,,,,662,662,,,,662,,662,662,662,662', +'662,662,662,,,,,,662,662,662,662,662,662,662,,,662,,,,,,,662,,,662,662', +'662,662,662,662,662,662,,662,662,662,,662,662,,662,662,662,,,,,,,,,', +',,,,,,,,,,662,,,662,,,662,662,,,662,,,,,,662,,,,,,,,662,,,,,662,662', +'662,662,662,662,,,,662,662,,,,,,,662,,,662,662,662,,,662,662,701,701', +'701,,701,,,,701,701,,,,701,,701,701,701,701,701,701,701,,,,,,701,701', +'701,701,701,701,701,,,701,,,,,,,701,,,701,701,701,701,701,701,701,701', +',701,701,701,,701,701,,701,701,701,,,,,,,,,,,,,,,,,,,,701,,,701,,,701', +'701,,,701,,,,,,701,,,,,,,,701,,,,,701,701,701,701,701,701,,,,701,701', +',,,,,,701,,,701,701,701,,,701,701,665,665,665,,665,,,,665,665,,,,665', +',665,665,665,665,665,665,665,,,,,,665,665,665,665,665,665,665,,,665', +',,,,,,665,,,665,665,665,665,665,665,665,665,665,665,665,665,,665,665', +',665,665,665,,,,,,,,,,,,,,,,,,,,665,,,665,,,665,665,,,665,,665,,665', +',665,,,,,,,,665,,,,,665,665,665,665,665,665,,,,665,665,,,,,,,665,,665', +'665,665,665,,,665,665,666,666,666,,666,,,,666,666,,,,666,,666,666,666', +'666,666,666,666,,,,,,666,666,666,666,666,666,666,,,666,,,,,,,666,,,666', +'666,666,666,666,666,666,666,666,666,666,666,,666,666,,666,666,666,,', +',,,,,,,,,,,,,,,,,666,,,666,,,666,666,,,666,,,,666,,666,,,,,,,,666,,', +',,666,666,666,666,666,666,,,,666,666,,,,,,,666,,666,666,666,666,,,666', +'666,667,667,667,,667,,,,667,667,,,,667,,667,667,667,667,667,667,667', +',,,,,667,667,667,667,667,667,667,,,667,,,,,,,667,,,667,667,667,667,667', +'667,667,667,,667,667,667,,667,667,,667,667,667,,,,,,,,,,,,,,,,,,,,667', +',,667,,,667,667,,,667,,,,,,667,,,,,,,,667,,,,,667,667,667,667,667,667', +',,,667,667,,,,,,,667,,,667,667,667,,,667,667,668,668,668,,668,,,,668', +'668,,,,668,,668,668,668,668,668,668,668,,,,,,668,668,668,668,668,668', +'668,,,668,,,,,,,668,,,668,668,668,668,668,668,668,668,,668,668,668,', +'668,668,,668,668,668,,,,,,,,,,,,,,,,,,,,668,,,668,,,668,668,,,668,,', +',,,668,,,,,,,,668,,,,,668,668,668,668,668,668,,,,668,668,,,,,,,668,', +',668,668,668,,,668,668,698,698,698,,698,,,,698,698,,,,698,,698,698,698', +'698,698,698,698,,,,,,698,698,698,698,698,698,698,,,698,,,,,,,698,,,698', +'698,698,698,698,698,698,698,,698,698,698,,698,698,,698,698,698,,,,,', +',,,,,,,,,,,,,,698,,,698,,,698,698,,,698,,,,,,698,,,,,,,,698,,,,,698', +'698,698,698,698,698,,,,698,698,,,,,,,698,,,698,698,698,,,698,698,673', +'673,673,,673,,,,673,673,,,,673,,673,673,673,673,673,673,673,,,,,,673', +'673,673,673,673,673,673,,,673,,,,,,,673,,,673,673,673,673,673,673,673', +'673,,673,673,673,,673,673,,673,673,673,,,,,,,,,,,,,,,,,,,,673,,,673', +',,673,673,,,673,,,,,,673,,,,,,,,673,,,,,673,673,673,673,673,673,,,,673', +'673,,,,,,,673,,,673,673,673,,,673,673,674,674,674,,674,,,,674,674,,', +',674,,674,674,674,674,674,674,674,,,,,,674,674,674,674,674,674,674,', +',674,,,,,,,674,,,674,674,674,674,674,674,674,674,,674,674,674,,674,674', +',674,674,674,,,,,,,,,,,,,,,,,,,,674,,,674,,,674,674,,,674,,,,,,674,', +',,,,,,674,,,,,674,674,674,674,674,674,,,,674,674,,,,,,,674,,,674,674', +'674,505,,674,674,,,,505,505,505,,,505,505,505,743,505,743,743,743,743', +'743,,,,505,505,,,,,743,,,,,505,505,,505,505,505,505,505,,,,,,,,,,743', +',,,,,,,,,,743,743,,,,,,,,,,,,,505,,456,,,,,505,,456,456,456,505,505', +'456,456,456,,456,,743,,,,,,,456,456,456,,,,,505,505,,,456,456,,456,456', +'456,456,456,,,505,,,,,505,,,,,,,505,,,,,,,,,456,456,456,456,456,456', +'456,456,456,456,456,456,456,456,,,456,456,456,,,456,,456,456,,,456,456', +',456,,456,,456,,456,456,456,456,456,456,456,,456,456,456,,,,,,,,,,,', +',456,456,31,456,,456,,,,31,31,31,456,,31,31,31,983,31,983,983,983,983', +'983,,,,,31,31,,,,983,,,,,31,31,,31,31,31,31,31,,,,,,,,,,983,,,,,,,,', +'983,983,983,983,,31,31,31,31,31,31,31,31,31,31,31,31,31,31,,,31,31,31', +',,31,,31,31,,,31,31,,31,983,31,,31,,31,31,31,31,31,31,31,,31,,31,,,', +',,,,,,,,,31,31,60,31,,31,,,,60,60,60,31,,60,60,60,785,60,785,785,785', +'785,785,,,,,60,60,60,,,785,,,,,60,60,,60,60,60,60,60,,,,,,,,,,785,,', +',,,,,,785,785,785,785,,60,60,60,60,60,60,60,60,60,60,60,60,60,60,,,60', +'60,60,,,60,,,60,,,60,60,,60,785,60,,60,,60,60,60,60,60,60,60,,60,,60', +'1062,,1062,1062,1062,1062,1062,,,,,,60,60,60,60,1062,60,466,60,,,,,60', +'466,466,466,,,466,466,466,,466,,,,1062,,,,,466,466,466,466,,,1062,1062', +',,,466,466,,466,466,466,466,466,,,,,,,,,,,,,,,,,,,,,,1062,,466,466,466', +'466,466,466,466,466,466,466,466,466,466,466,,,466,466,466,,,466,,,466', +',,466,466,,466,,466,,466,,466,466,466,466,466,466,466,,466,466,466,739', +',739,739,739,739,739,,,,,,466,466,466,466,739,466,465,466,,,,,466,465', +'465,465,,,465,465,465,,465,,,,739,,,,,465,465,465,465,739,739,739,739', +',,,465,465,,465,465,465,465,465,,,,,,,,,,,,,,,,,,,,,,739,,465,465,465', +'465,465,465,465,465,465,465,465,465,465,465,,,465,465,465,,,465,,,465', +',,465,465,,465,,465,,465,,465,465,465,465,465,465,465,,465,465,465,1064', +',1064,1064,1064,1064,1064,,,,,,465,465,465,465,1064,465,30,465,,,,,465', +'30,30,30,,,30,30,30,,30,,,,1064,,,,,30,30,30,,,,1064,1064,,,,30,30,', +'30,30,30,30,30,,,,,,,,,,,,,,,,,,,,,,1064,,30,30,30,30,30,30,30,30,30', +'30,30,30,30,30,,,30,30,30,,,30,,30,30,,,30,30,,30,,30,,30,,30,30,30', +'30,30,30,30,,30,30,30,,,,,,,,,,,,,30,30,,30,,30,,,,,,,30,11,11,11,11', +'11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,,,,11,11', +'11,11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11,11,,11,,,,,', +',,,11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11', +'11,,11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,,11,,,,,,,,,11', +',,,,11,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787', +'787,787,787,787,787,787,787,787,,,,787,787,787,787,787,787,787,787,787', +'787,,,,,,787,787,787,787,787,787,787,787,787,,,787,,,,,,,,,787,787,', +'787,787,787,787,787,787,787,,,787,787,,,,787,787,787,787,,,,,,,,,,,', +',,787,787,,787,787,787,787,787,787,787,787,787,787,787,,,787,,,,,,,', +',,,,,,,,,,,,787,,,,,787,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75', +'75,75,75,75,75,75,75,75,75,,,,75,75,75,75,75,75,75,75,75,75,,,,,,75', +'75,75,75,75,75,75,75,75,75,75,75,,75,,,,,,,75,75,,75,75,75,75,75,75', +'75,,,75,75,,,,75,75,75,75,,,,,,75,,,,,,,,75,75,,75,75,75,75,75,75,75', +'75,75,75,75,,,75,,,,,,,,,,,,,,,,,,,,75,,,,,75,654,654,654,654,654,654', +'654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654', +'654,,,,654,654,654,654,654,654,654,654,654,654,,,,,,654,654,654,654', +'654,654,654,654,654,,,654,,,,,,,,,654,654,,654,654,654,654,654,654,654', +',,654,654,,,,654,654,654,654,,,,,,,,,,,,,,654,654,,654,654,654,654,654', +'654,654,654,654,654,654,,,654,654,,,,,,,,,,654,,,,,,,,,654,,,,,654,103', +'103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103', +'103,103,103,103,103,103,,,,103,103,103,103,103,103,103,103,103,103,', +',,,,103,103,103,103,103,103,103,103,103,103,103,103,,103,,,,,,,103,103', +',103,103,103,103,103,103,103,,,103,103,,,,103,103,103,103,,,,,,,,,,', +',,,103,103,,103,103,103,103,103,103,103,103,103,103,103,,,103,,,,,,', +',,,,,,,,,,,,,103,,,,,103,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12', +'12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12,12,12,12,12,,,,,,12', +'12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12,12,12,12,12,12,,,12', +'12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12,12,12,12,12,12,12', +'12,,,12,12,,,,,,,,,,12,,,,,,,,,12,,,,,12,422,422,422,422,422,422,422', +'422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422', +',,,422,422,422,422,422,422,422,422,422,422,,,,,,422,422,422,422,422', +'422,422,422,422,,,422,,,,,,,,,422,422,,422,422,422,422,422,422,422,', +',422,422,,,,422,422,422,422,,,,,,,,,,,,,,422,422,,422,422,422,422,422', +'422,422,422,422,422,422,,,422,422,,,,,,,,,,422,,777,777,,,777,,,422', +',,,,422,777,777,,777,777,777,777,777,777,777,,,777,777,,,,777,777,777', +'777,,,,,,777,,,,,,,,777,777,,777,777,777,777,777,777,777,777,777,777', +'777,,,777,,,,,,,,,,661,661,,,661,,,,,,777,,,661,661,777,661,661,661', +'661,661,661,661,,,661,661,,,,661,661,661,661,,,,,,661,,,,,,,,661,661', +',661,661,661,661,661,661,661,661,661,661,661,,,661,,,,,,,,,,473,473', +',,473,,,,,,661,,,473,473,661,473,473,473,473,473,473,473,,,473,473,', +',,473,473,473,473,,,,,,473,,,,,,,,473,473,,473,473,473,473,473,473,473', +'473,473,473,473,,,473,,,,,,,,,,474,474,,,474,,,,,,473,,,474,474,473', +'474,474,474,474,474,474,474,,,474,474,,,,474,474,474,474,,,,,,474,,', +',,,,,474,474,,474,474,474,474,474,474,474,474,474,474,474,,,474,,,,', +',,,,,660,660,,,660,,,,,,474,,,660,660,474,660,660,660,660,660,660,660', +',,660,660,,,,660,660,660,660,,,,,,660,,,,,,,,660,660,,660,660,660,660', +'660,660,660,660,660,660,660,,,660,,,,,,,,,,611,611,,,611,,,,,,660,,', +'611,611,660,611,611,611,611,611,611,611,,,611,611,,,,611,611,611,611', +',,,,,611,,,,,,,,611,611,,611,611,611,611,611,611,611,611,611,611,611', +',,611,,,,,,,,,,612,612,,,612,,,,,,611,,,612,612,611,612,612,612,612', +'612,612,612,,,612,612,,,,612,612,612,612,,,,,,612,,,,,,,,612,612,,612', +'612,612,612,612,612,612,612,612,612,612,,,612,,,,,,,,,,776,776,,,776', +',,,,,612,,,776,776,612,776,776,776,776,776,776,776,,,776,776,,,,776', +'776,776,776,,,,,,776,,,,,,,,776,776,,776,776,776,776,776,776,776,776', +'776,776,776,,,776,,,,,,,,,,1034,1034,,,1034,,,,,,776,,,1034,1034,776', +'1034,1034,1034,1034,1034,1034,1034,,,1034,1034,,,,1034,1034,1034,1034', +',,,,,1034,,,,,,,,1034,1034,,1034,1034,1034,1034,1034,1034,1034,1034', +'1034,1034,1034,,,1034,,,,,,,,,,1039,1039,,,1039,,,,,,1034,,,1039,1039', +'1034,1039,1039,1039,1039,1039,1039,1039,,,1039,1039,,,,1039,1039,1039', +'1039,,,,,,1039,,,,,,,,1039,1039,,1039,1039,1039,1039,1039,1039,1039', +'1039,1039,1039,1039,,1044,1039,1044,1044,1044,1044,1044,,,,,278,278', +',,278,1044,,,,,1039,,,278,278,1039,278,278,278,278,278,278,278,,,278', +'278,1044,,,278,278,278,278,,,,,1044,1044,,,,,,,,278,278,,278,278,278', +'278,278,278,278,278,278,278,278,,,278,,,,,,,,,1044,550,550,,,550,,,', +',,278,,,550,550,278,550,550,550,550,550,550,550,,,550,550,,,,550,550', +'550,550,,,,,,550,,,,,,,,550,550,,550,550,550,550,550,550,550,550,550', +'550,550,,,550,,,,,,,,,,549,549,,,549,,,,,,550,,,549,549,550,549,549', +'549,549,549,549,549,,,549,549,,,,549,549,549,549,,,,,,549,,,,,,,,549', +'549,,549,549,549,549,549,549,549,549,549,549,549,,,549,,,,,,,,,,1040', +'1040,,,1040,,,,,,549,,,1040,1040,549,1040,1040,1040,1040,1040,1040,1040', +',,1040,1040,,,,1040,1040,1040,1040,,,,,,1040,,,,,,,,1040,1040,,1040', +'1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,,,1040,,,,,,,,,,540', +'540,,,540,,,,,,1040,,,540,540,1040,540,540,540,540,540,540,540,,,540', +'540,,,,540,540,540,540,,,,,,540,,,,,,,,540,540,,540,540,540,540,540', +'540,540,540,540,540,540,,,540,,,,,,,,,,539,539,,,539,,,,,,540,,,539', +'539,540,539,539,539,539,539,539,539,,,539,539,,,,539,539,539,539,,,', +',,539,,,,,,,,539,539,,539,539,539,539,539,539,539,539,539,539,539,,', +'539,,,,,,,,,,229,229,,,229,,,,,,539,,,229,229,539,229,229,229,229,229', +'229,229,,,229,229,,,,229,229,229,229,,,,,,229,,,,,,,,229,229,,229,229', +'229,229,229,229,229,229,229,229,229,,,229,950,,950,950,950,950,950,', +',230,230,,,230,,,950,,,229,,,230,230,229,230,230,230,230,230,230,230', +',,230,230,,,950,230,230,230,230,,,,,,230,950,950,,,,,,230,230,,230,230', +'230,230,230,230,230,230,230,230,230,,828,230,828,828,828,828,828,,,', +',,950,,,,828,,,,,230,,,,,230,952,,952,952,952,952,952,,,,,828,,,,,952', +',,,828,828,828,828,948,,948,948,948,948,948,946,,946,946,946,946,946', +'952,1087,948,1087,1087,1087,1087,1087,,946,828,952,952,,,,,1087,828', +',,,,,948,,,,,,,946,,,,948,948,,,1087,946,946,946,946,,952,,,,,1087,1087', +'1060,,1060,1060,1060,1060,1060,1058,,1058,1058,1058,1058,1058,,,1060', +'948,,,,,,1058,946,741,,741,741,741,741,741,1087,,,,,,1060,,,741,,,,1058', +',,,1060,1060,,,,1058,1058,1058,1058,,,,,786,741,786,786,786,786,786', +',,,741,741,741,741,,,786,,,,,1060,,,,,,,1058,,,,,,,,,,786,,,,,,,,741', +'786,786,786,786,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,786' ] + racc_action_check = arr = ::Array.new(26190, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -1854,313 +1849,333 @@ end racc_action_pointer = [ - nil, 804, 1767, 1060, nil, 553, nil, nil, 12429, 1470, - nil, 24537, 24005, 1229, nil, 1181, 1216, 390, 377, 1157, - 866, nil, -69, 9069, 2895, 1190, nil, 454, nil, 2, - 24973, 24848, 9629, 9769, 9909, nil, 1908, 10189, 10329, nil, - 1086, 96, 376, 1140, 161, 11029, 11169, 15509, 1064, 693, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 23347, - nil, -74, 11449, nil, -14, nil, 11589, 11729, nil, nil, - 11869, 12009, 1069, nil, 24138, nil, nil, nil, nil, nil, - -65, nil, nil, nil, nil, nil, nil, 1019, 1014, 995, - 988, 23739, nil, nil, nil, nil, nil, nil, 646, nil, - nil, 514, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 12569, nil, nil, nil, nil, 12709, - 12849, 12989, 13129, 13269, 958, nil, 519, nil, nil, nil, + nil, 1278, 2202, 1239, nil, 65, nil, nil, 5302, 1482, + nil, 23669, 24359, 1100, nil, 1064, 1063, 650, 1110, 634, + 436, nil, 102, 5442, 1497, 1169, nil, 623, nil, 108, + 23532, 23008, 5582, 5722, 5862, nil, 2484, 6002, 6142, nil, + 1040, 412, 435, 1110, 185, 6282, 6422, 114, 6562, 1038, + 740, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 23136, nil, 6702, nil, nil, 72, nil, 5162, 6842, nil, + nil, 6982, 7122, 1078, nil, 23945, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, -97, nil, nil, nil, nil, nil, nil, 1026, + 1004, 1000, 957, 24221, nil, nil, nil, nil, nil, nil, + 930, nil, nil, 796, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 7402, nil, nil, nil, + nil, 7542, 7682, 7822, 7962, 8102, 974, nil, 524, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 925, nil, 3036, - 13969, 14109, 14249, 25414, 25041, nil, 14669, 14809, 14949, 15089, - 15229, 15369, nil, nil, 1203, 126, 127, 956, 244, 860, - 897, nil, 16489, 3318, 887, 16769, 16909, 17049, 17189, 17329, - 17469, 17609, 17749, 17889, 18029, 18169, 18309, 18449, 18589, 18729, - 18869, 19009, 19149, 19289, 19429, 19569, 19709, 19849, 19989, 20129, - 20269, nil, nil, 25892, nil, nil, 870, 20409, nil, 873, - nil, nil, nil, 20689, nil, nil, 20829, nil, 1344, nil, - 833, 832, nil, 21389, 872, 21529, nil, 21669, nil, 832, - 21809, nil, nil, 469, nil, 1344, 21949, 806, 3882, 808, - 838, 799, 22509, 4305, -59, 1106, 1065, 785, 654, nil, - 729, 682, -19, nil, nil, nil, 648, 159, 607, 5709, - nil, 131, 645, 1062, nil, 638, nil, 6409, 4446, nil, - 6549, 611, nil, 368, 509, 600, 7249, nil, nil, 577, - 877, 22, 26, 7529, 7669, 537, 632, 508, 34, 42, - 957, 571, 25, 590, nil, nil, 8229, nil, 8369, 12, - 393, 485, 474, 414, 551, -56, 446, 488, nil, 103, - nil, nil, nil, nil, nil, 380, nil, 314, nil, 485, - nil, 171, 290, nil, 165, 414, nil, 161, 114, nil, - 104, 112, nil, 243, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 4869, 24271, nil, nil, - nil, nil, 104, nil, nil, 61, 8649, -96, nil, nil, - 921, 1226, nil, nil, 1222, 1213, 305, 431, 24656, nil, - nil, nil, 125, 0, -88, nil, nil, 23477, 23607, nil, - 2472, nil, -93, nil, nil, 780, nil, nil, nil, nil, - 52, nil, 25655, 25515, 22649, -43, 22229, 20969, 20549, 3741, - 4446, 476, 689, 176, 180, 182, 198, 5289, 5149, 3342, - 4164, 3318, 3882, 5009, 3600, 3459, 4023, 4305, 4587, 4728, - 3153, -43, 4869, 3177, 2331, 322, 24781, nil, nil, nil, - nil, nil, nil, 311, 292, 141, 145, nil, nil, 16629, - nil, nil, 14389, nil, 13829, nil, 119, nil, 13689, nil, - nil, 13549, 1485, 186, 213, nil, nil, 243, 13409, 277, - 12149, 25346, 25278, 586, 337, nil, 11309, 315, nil, 10609, - 10469, 26340, 26272, 3036, 10049, 439, 463, 510, nil, nil, - 9489, nil, nil, 8929, nil, 367, nil, 288, 394, 25, - 25978, nil, 367, 369, nil, 400, 404, 433, nil, nil, - nil, nil, nil, nil, nil, nil, 421, 646, nil, nil, - 8789, nil, nil, nil, 525, nil, nil, nil, 545, nil, - nil, 553, 4728, 598, nil, 4587, 60, 29, 600, 615, - nil, 8089, 25109, 25177, 7, nil, 220, 258, 129, nil, - 1098, nil, 9, 7949, nil, 25577, nil, 7809, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 186, - nil, nil, 151, nil, nil, nil, 522, nil, nil, 539, - nil, 568, nil, 24404, nil, 562, 7389, 7109, 168, 603, - 6969, 6829, 6689, 6269, 612, nil, nil, nil, 6129, 5989, - 630, nil, 5849, 5569, nil, 166, 226, 250, 382, 620, - 1062, 640, nil, nil, 25476, nil, nil, 743, -10, -63, - nil, nil, nil, nil, 651, nil, 706, 5429, nil, nil, - 23209, nil, 1329, 46, 23069, 697, nil, 710, 153, 30, - 753, 290, 780, 781, 779, 22929, 1203, 844, 11, 904, - 22789, nil, 793, 432, nil, nil, nil, 4164, 4023, 807, - 304, nil, nil, 792, 24937, nil, 26233, nil, 26094, nil, - 22369, nil, 514, nil, 806, 388, 819, nil, nil, nil, - nil, 193, nil, 933, nil, nil, nil, nil, 939, nil, - 22089, 831, 21, -1, 40, 86, 21249, nil, 1134, nil, - 26103, 26171, 21109, nil, nil, nil, 418, 614, 3741, 3600, - 25717, 154, 23872, 59, 763, 3459, nil, nil, nil, nil, - nil, nil, nil, 852, 16349, 1485, 16209, nil, 879, nil, - 1626, nil, 1767, nil, nil, 1908, nil, 2049, nil, 2190, - 16069, 15929, 15789, 15649, 161, 5009, 883, 887, nil, 892, - 904, 905, nil, 935, 921, 918, 909, 14529, nil, nil, - 3177, nil, nil, nil, 2895, 2754, nil, nil, nil, 926, - 321, nil, nil, 1061, nil, 2613, 945, 987, nil, nil, - nil, nil, 963, 1077, 962, 960, nil, nil, nil, 961, - 969, nil, 970, 972, nil, 973, nil, nil, 977, 707, - 975, 653, nil, 1099, nil, 12289, 1113, 780, 2472, nil, - 16, 41, 56, 422, 571, nil, 1031, 2331, 5289, nil, - 736, 1153, 1165, 1049, nil, nil, nil, nil, nil, nil, - nil, nil, 1072, 1059, nil, 2613, 5149, 10889, 2754, 239, - nil, nil, 25601, nil, nil, 25584, nil, 24776, nil, nil, - 1084, 1189, 10749, 965, 1141, 1192, 2190, 1097, 1202, nil, - 2049, nil, nil, -8, 9349, nil, nil, nil, nil, nil, - 25239, nil, 24745, nil, 23571, nil, 23441, nil, nil, nil, - nil, 375, 639, 1087, nil, 18, nil, 1218, 1220, 9209, - 1626, nil, nil, 1221, 749, nil, nil, nil, nil, 23311, - nil, 1102, nil, nil, 1110, 1116, 1120, 1130, nil, 1134, - nil, 259, nil, nil, nil, 322, 26032, nil, nil, 1153, - nil, nil, nil, 1485, 852, 921, 924, 1229, 993, nil, - 1156, 1161, 1162, 1164, 1165, 3341, 1169, 3253, 1344, nil, - nil, nil, 4, 1203, nil, nil, 1062, 921, nil, 25961, - nil, 25954, nil, 25747, nil, 25641, nil, nil, nil, 712, - 1225, 1226, nil, 1310, 8509, 25824, 25756, 783, 25269, nil, - nil, nil, nil, 3304, 1196, 793, nil, nil, nil, 1317, - 1320, 1322, 1203, 1204, 1205, 1207, nil, nil, 1211, 20, - -7, -9, 816, 508, 647, nil, nil, nil, nil, 25985, - nil, nil, nil, nil, -11, nil, 1024, nil ] + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 953, nil, 4881, 8242, 8382, 8522, 8662, 8802, 8942, 25741, + 25814, nil, 9082, 9222, 9362, nil, nil, 435, 98, -81, + 996, 131, 896, 943, nil, 9502, 4740, 936, 9642, 9782, + 9922, 10062, 10202, 10342, 10482, 10622, 10762, 10902, 11042, 11182, + 11322, 11462, 11602, 11742, 11882, 12022, 12162, 12302, 12442, 12582, + nil, nil, nil, nil, 12722, nil, nil, nil, 25303, nil, + nil, 926, 12862, nil, nil, 932, nil, nil, nil, 13002, + nil, nil, 13142, nil, 1356, nil, 882, 859, nil, 13422, + 887, 13562, nil, nil, 13702, 13842, nil, nil, 50, nil, + nil, 13982, 1356, nil, 824, 4317, 815, 845, 804, 14262, + 4035, 804, 841, 1005, 876, 1074, nil, 831, 794, 39, + nil, nil, nil, 823, 127, 782, 14402, nil, 336, 843, + 1110, nil, 829, 14682, nil, 14822, 3471, 1341, 766, 14962, + 15102, nil, nil, 592, 576, -8, -7, 15242, 3048, 2907, + 500, 838, 718, 41, 5, 1146, 787, -14, 816, nil, + nil, 15802, nil, 15942, 678, 667, 640, 576, 509, 457, + 403, 305, 244, nil, 210, nil, nil, nil, nil, nil, + 130, nil, 258, nil, 394, nil, 606, 329, nil, 604, + nil, 586, -57, nil, 584, -42, nil, 337, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 24497, nil, nil, nil, nil, 584, nil, nil, + 566, 16362, 539, nil, nil, 508, nil, 1077, -32, nil, + nil, nil, 1074, nil, nil, nil, nil, nil, 1215, 515, + nil, nil, 468, 462, 300, 127, 22880, nil, nil, nil, + 0, 132, 488, nil, nil, 23400, 23268, nil, nil, nil, + 56, nil, 445, 24719, 24792, 17202, 210, 17342, 17482, 17622, + 3048, 2907, -43, -50, 444, 428, 424, 422, 961, 3612, + 694, 2484, 2343, 2202, 3471, 3330, 2625, 617, 949, 3189, + 2766, 1920, 880, 447, nil, 22800, nil, nil, nil, nil, + nil, nil, nil, nil, 296, 290, nil, nil, 18042, nil, + nil, 18182, nil, 18322, nil, 189, nil, nil, nil, 18462, + 1030, 258, 253, nil, nil, 236, 18602, 204, 18742, 25668, + 25595, 439, 223, nil, 18882, 180, nil, 216, 19022, 25449, + 25376, 747, 1638, 19162, 292, 260, 99, nil, nil, 524, + 275, 85, -54, nil, 437, -55, nil, 728, nil, -117, + 1283, nil, 1263, 1243, 1241, nil, nil, nil, nil, nil, + nil, nil, nil, 1225, 535, nil, nil, 19722, nil, nil, + nil, 1317, nil, nil, nil, 1314, nil, nil, 1312, 2766, + 1342, nil, 2625, 24, 1344, 1340, 1332, 1335, nil, nil, + 20422, 24938, 25011, 7, nil, 172, 407, -21, nil, 370, + nil, 1230, 20702, nil, 1238, nil, nil, nil, 20842, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 194, nil, nil, 340, nil, nil, nil, 1185, nil, nil, + 1180, nil, 2343, nil, 24083, nil, 1168, 21122, 21262, 21402, + 24865, 24646, 21542, 431, 1180, 21822, 21962, 22102, 22242, 1174, + nil, nil, nil, 22522, 22662, 1155, nil, nil, nil, 213, + 90, 265, 399, 1117, 1113, nil, 104, 1224, 71, nil, + 1141, nil, 1246, nil, nil, 1127, nil, 1169, 22382, nil, + nil, 21682, nil, -118, 20982, 1173, nil, 1180, -9, -1, + 1237, 170, 491, 1248, 1214, 20562, 20282, 1279, 52, 216, + nil, 20142, nil, nil, nil, nil, 20002, nil, nil, 19862, + nil, nil, nil, 34, 1238, 319, nil, nil, 527, 23331, + nil, 26018, nil, 22764, nil, 19582, nil, 566, nil, 1264, + 392, 1290, nil, nil, nil, nil, 652, nil, 1405, nil, + nil, nil, nil, nil, 1425, nil, 19442, -104, 33, 27, + 24, 8, 3612, nil, 666, nil, 25084, 24573, 19302, nil, + nil, nil, 157, 3753, 3894, 23100, 26055, 23807, -16, 1057, + 4599, nil, nil, 225, nil, nil, nil, 275, nil, 273, + 17902, 292, 142, 145, 531, 663, 2061, 17762, nil, 405, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 17062, 16922, 16782, 16642, -49, 16502, nil, nil, 25876, nil, + 1356, nil, nil, 583, nil, -23, nil, nil, nil, nil, + 569, 202, nil, nil, nil, nil, nil, nil, nil, 1497, + nil, 581, 636, nil, nil, 308, nil, 1638, 1779, 622, + 629, 630, nil, nil, nil, 636, 644, nil, 651, 657, + nil, 658, nil, nil, 662, 660, 662, 923, nil, 793, + nil, nil, 16222, nil, 1920, 797, nil, nil, 23, 1, + 802, 273, 1215, nil, 687, 2061, 16082, 525, 806, nil, + 690, 279, nil, nil, nil, nil, nil, nil, nil, 681, + nil, nil, 692, -86, nil, nil, 15662, 15522, 1779, 726, + 728, nil, 730, 731, 732, nil, 768, 760, 744, 15382, + nil, nil, nil, nil, 3189, 3330, nil, 33, 14542, nil, + nil, 793, 899, 939, nil, nil, 25934, nil, 25927, nil, + 25805, nil, 25903, nil, nil, nil, nil, 266, 898, 803, + nil, 16, nil, nil, 14122, 4176, nil, nil, 936, 383, + nil, nil, 939, nil, nil, 875, nil, 227, nil, nil, + 861, nil, nil, 22972, nil, 495, nil, nil, 873, 13282, + 595, 964, nil, 1012, 4458, 589, 339, 1218, 977, 336, + nil, nil, nil, 302, nil, nil, nil, 913, 917, 918, + 920, 921, 2278, 952, 2188, 5022, nil, 86, nil, nil, + 1074, nil, 1215, 959, nil, nil, 969, 971, 972, 973, + nil, 984, nil, 600, 25157, nil, nil, 1130, 7262, 25230, + 25522, 800, nil, 790, 25292, nil, nil, nil, nil, 504, + 1045, 540, nil, nil, nil, 1177, 1178, nil, 26000, nil, + 25993, nil, 23199, nil, 23463, nil, nil, 1110, 1112, nil, + 1079, -10, 34, 32, 1251, nil, 1084, 1093, nil, nil, + nil, 1094, 1098, 1099, 1100, 35, nil, 25942, nil, nil, + nil, nil, 1113, nil ] racc_action_default = [ - -1, -627, -626, -627, -2, -613, -4, -5, -627, -8, - -9, -627, -627, -627, -29, -627, -627, -627, -280, -627, - -40, -43, -615, -627, -48, -50, -51, -52, -57, -257, - -257, -257, -294, -333, -334, -69, -626, -73, -81, -83, - -627, -516, -517, -627, -627, -627, -627, -627, -615, -238, - -271, -272, -273, -274, -275, -276, -277, -278, -279, -602, - -282, -285, -626, -292, -302, -405, -627, -627, -307, -310, - -613, -627, -318, -325, -627, -335, -336, -447, -448, -449, - -450, -451, -452, -626, -455, -626, -626, -626, -626, -626, - -626, -626, -492, -498, -500, -501, -502, -503, -600, -505, - -506, -601, -508, -509, -510, -511, -512, -513, -514, -515, - -520, -521, 1058, -3, -614, -622, -623, -624, -7, -627, - -627, -627, -627, -627, -627, -17, -627, -112, -113, -114, - -115, -116, -117, -118, -119, -120, -124, -125, -126, -127, - -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, - -188, -189, -190, -191, -192, -193, -194, -22, -121, -626, - -627, -627, -626, -627, -627, -612, -627, -627, -627, -627, - -627, -615, -616, -47, -627, -516, -517, -627, -280, -627, - -627, -230, -627, -626, -627, -627, -627, -627, -627, -627, - -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, - -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, - -627, -411, -414, -627, -610, -611, -58, -627, -301, -627, - -428, -431, -64, -626, -425, -65, -615, -66, -239, -252, - -626, -626, -256, -627, -262, -627, -626, -492, -593, -615, - -627, -67, -68, -613, -13, -14, -627, -71, -626, -615, - -627, -74, -77, -626, -89, -90, -627, -627, -97, -294, - -297, -615, -418, -333, -334, -337, -426, -627, -79, -627, - -85, -290, -499, -627, -215, -216, -231, -627, -626, -284, - -627, -627, -240, -619, -619, -627, -626, -303, -304, -548, - -49, -627, -627, -627, -627, -613, -627, -614, -516, -517, - -627, -627, -280, -627, -358, -359, -627, -321, -627, -112, - -113, -154, -155, -156, -172, -177, -184, -187, -328, -627, - -516, -517, -588, -589, -453, -627, -476, -627, -478, -627, - -480, -627, -627, -460, -627, -627, -466, -627, -627, -472, - -627, -627, -474, -627, -491, -493, -494, -495, -496, -6, - -625, -23, -24, -25, -26, -27, -626, -627, -19, -20, - -21, -122, -627, -30, -39, -267, -627, -627, -266, -31, - -197, -615, -247, -248, -626, -626, -603, -604, -257, -423, - -605, -606, -604, -603, -257, -422, -424, -605, -606, -37, - -205, -38, -627, -41, -42, -195, -262, -44, -45, -46, - -615, -300, -627, -627, -626, -290, -627, -627, -627, -206, - -207, -208, -209, -210, -211, -212, -213, -217, -218, -219, - -220, -221, -222, -223, -224, -225, -226, -227, -228, -229, - -232, -233, -234, -235, -615, -626, -257, -603, -604, -54, - -59, -258, -419, -626, -626, -615, -615, -296, -253, -627, - -261, -254, -627, -259, -627, -263, -627, -598, -627, -599, - -12, -614, -16, -615, -70, -288, -86, -75, -627, -615, - -626, -627, -627, -96, -627, -499, -627, -82, -87, -627, - -627, -627, -627, -236, -627, -439, -627, -286, -617, -241, - -621, -620, -243, -621, -291, -627, -591, -619, -627, -627, - -548, -408, -587, -587, -531, -533, -533, -533, -547, -549, - -550, -551, -552, -553, -554, -555, -556, -627, -558, -560, - -562, -567, -569, -570, -572, -577, -579, -580, -582, -583, - -584, -627, -626, -349, -350, -626, -627, -627, -627, -627, - -434, -626, -627, -627, -290, -315, -107, -108, -627, -110, - -627, -280, -627, -627, -326, -548, -330, -627, -454, -477, - -482, -483, -485, -456, -479, -457, -481, -458, -459, -627, - -462, -464, -627, -465, -468, -469, -627, -470, -471, -627, - -497, -627, -18, -627, -28, -270, -627, -627, -427, -627, - -249, -251, -627, -627, -60, -245, -246, -420, -627, -627, - -62, -421, -627, -627, -299, -603, -604, -603, -604, -615, - -195, -627, -394, -395, -615, -397, -412, -53, -415, -626, - -429, -432, -244, -295, -626, -260, -264, -627, -594, -595, - -627, -596, -15, -72, -627, -78, -84, -615, -603, -604, - -626, -93, -95, -627, -80, -627, -204, -214, -615, -626, - -626, -283, -615, -619, -293, -592, -406, -626, -626, -615, - -627, -529, -530, -627, -627, -540, -627, -543, -627, -545, - -627, -360, -627, -362, -364, -371, -615, -561, -571, -581, - -585, -626, -351, -626, -308, -352, -353, -311, -627, -314, - -627, -615, -603, -604, -607, -289, -627, -107, -108, -109, - -627, -627, -626, -319, -522, -523, -627, -322, -626, -626, - -548, -627, -627, -615, -627, -626, -461, -463, -467, -473, - -475, -10, -123, -268, -627, -198, -627, -618, -626, -33, - -200, -34, -201, -61, -35, -203, -36, -202, -63, -196, - -627, -627, -627, -627, -427, -627, -587, -587, -376, -626, - -626, -626, -393, -627, -615, -399, -556, -564, -565, -575, - -626, -417, -416, -55, -626, -626, -255, -265, -597, -76, - -91, -88, -298, -626, -356, -626, -440, -626, -441, -442, - -287, -242, -627, -627, -615, -587, -568, -586, -532, -533, - -533, -559, -533, -533, -578, -533, -556, -573, -615, -627, - -369, -627, -557, -627, -354, -627, -627, -626, -626, -313, - -627, -427, -627, -107, -108, -111, -615, -626, -627, -525, - -627, -627, -627, -615, -527, -331, -590, -484, -487, -488, - -489, -490, -627, -269, -32, -199, -250, -627, -237, -627, - -374, -375, -384, -378, -386, -627, -389, -627, -391, -396, - -627, -627, -627, -563, -627, -627, -626, -627, -627, -11, - -626, -446, -357, -627, -627, -444, -409, -410, -407, -528, - -627, -536, -627, -538, -627, -541, -627, -544, -546, -361, - -363, -367, -627, -372, -305, -627, -306, -627, -627, -627, - -626, -316, -427, -627, -627, -323, -327, -329, -526, -548, - -486, -587, -566, -377, -626, -626, -626, -626, -576, -626, - -398, -615, -401, -403, -404, -574, -627, -290, -413, -627, - -430, -433, -445, -626, -98, -99, -627, -627, -106, -443, - -533, -533, -533, -533, -365, -627, -370, -627, -626, -309, - -312, -264, -626, -626, -320, -524, -626, -626, -373, -627, - -381, -627, -383, -627, -387, -627, -390, -392, -400, -627, - -289, -607, -56, -439, -626, -627, -627, -105, -627, -534, - -537, -539, -542, -627, -368, -626, -435, -436, -437, -627, - -627, -627, -626, -626, -626, -626, -402, -438, -615, -603, - -604, -607, -104, -533, -366, -355, -317, -324, -332, -627, - -379, -382, -385, -388, -427, -535, -626, -380 ] + -1, -650, -649, -650, -2, -636, -4, -5, -650, -8, + -9, -650, -650, -650, -35, -650, -650, -39, -650, -650, + -294, -50, -638, -650, -55, -60, -61, -62, -66, -271, + -271, -271, -309, -343, -344, -78, -649, -82, -90, -92, + -650, -538, -539, -650, -650, -650, -650, -230, -650, -638, + -244, -285, -286, -287, -288, -289, -290, -291, -292, -293, + -623, -296, -298, -305, -307, -317, -423, -650, -650, -57, + -57, -636, -650, -327, -334, -650, -345, -346, -348, -349, + -350, -351, -352, -353, -354, -355, -356, -357, -366, -468, + -469, -470, -471, -472, -473, -649, -476, -649, -649, -649, + -486, -649, -649, -649, -514, -520, -522, -523, -524, -525, + -621, -527, -528, -622, -530, -531, -532, -533, -534, -535, + -536, -537, -542, -543, 1094, -3, -637, -645, -646, -647, + -7, -650, -650, -650, -650, -650, -650, -23, -650, -121, + -122, -123, -124, -125, -126, -127, -128, -129, -133, -134, + -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, + -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, + -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, + -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, + -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, + -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, + -195, -196, -197, -198, -199, -200, -201, -202, -203, -204, + -28, -130, -649, -650, -650, -650, -650, -650, -649, -650, + -650, -633, -650, -650, -638, -639, -54, -650, -538, -539, + -650, -294, -650, -650, -236, -650, -649, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -245, -246, -247, -248, -650, -359, -452, -431, -650, -634, + -635, -67, -650, -316, -358, -650, -445, -447, -73, -649, + -442, -74, -638, -75, -251, -266, -649, -649, -270, -650, + -276, -650, -649, -615, -650, -650, -76, -77, -636, -17, + -18, -650, -21, -22, -80, -649, -638, -650, -83, -86, + -649, -98, -99, -650, -650, -106, -309, -312, -638, -435, + -343, -344, -347, -443, -650, -88, -650, -94, -304, -521, + -650, -224, -225, -650, -237, -650, -649, -300, -638, -649, + -649, -318, -319, -570, -56, -650, -650, -650, -649, -649, + -636, -650, -637, -538, -539, -650, -650, -294, -650, -376, + -377, -650, -330, -650, -121, -122, -164, -165, -166, -182, + -187, -194, -197, -337, -650, -538, -539, -610, -611, -474, + -650, -498, -650, -500, -650, -502, -650, -650, -481, -650, + -649, -650, -650, -494, -650, -650, -496, -650, -513, -515, + -516, -517, -518, -6, -648, -29, -30, -31, -32, -33, + -10, -11, -650, -25, -26, -27, -131, -650, -36, -38, + -281, -650, -650, -280, -37, -650, -40, -650, -294, -48, + -49, -205, -256, -276, -51, -52, -41, -206, -256, -638, + -261, -262, -649, -649, -624, -625, -271, -440, -626, -627, + -625, -624, -271, -439, -441, -626, -627, -47, -214, -53, + -638, -315, -650, -650, -650, -649, -304, -650, -650, -650, + -215, -216, -217, -218, -219, -220, -221, -222, -226, -227, + -228, -229, -231, -232, -233, -234, -235, -238, -239, -240, + -241, -638, -249, -650, -453, -271, -624, -625, -64, -68, + -272, -436, -449, -452, -638, -638, -311, -267, -650, -275, + -268, -650, -273, -650, -277, -650, -618, -620, -16, -637, + -20, -638, -79, -302, -95, -84, -650, -638, -649, -650, + -650, -105, -650, -521, -650, -91, -96, -650, -650, -650, + -650, -250, -242, -650, -460, -650, -638, -299, -252, -642, + -642, -650, -650, -613, -642, -650, -424, -570, -427, -609, + -609, -553, -555, -555, -555, -569, -571, -572, -573, -574, + -575, -576, -577, -578, -650, -580, -582, -584, -589, -591, + -592, -594, -599, -601, -602, -604, -605, -606, -650, -649, + -367, -368, -649, -650, -650, -650, -650, -650, -362, -455, + -649, -650, -650, -304, -57, -116, -117, -650, -119, -650, + -294, -649, -650, -335, -548, -340, -631, -632, -650, -475, + -499, -504, -505, -507, -477, -501, -478, -503, -479, -480, + -650, -483, -485, -650, -488, -490, -491, -650, -492, -493, + -650, -519, -649, -24, -650, -34, -284, -650, -650, -649, + -650, -650, -650, -444, -650, -263, -265, -650, -650, -69, + -259, -260, -437, -650, -650, -71, -438, -314, -640, -624, + -625, -624, -625, -638, -650, -430, -649, -63, -432, -449, + -650, -450, -650, -258, -310, -649, -274, -278, -650, -616, + -617, -650, -19, -81, -650, -87, -93, -638, -624, -625, + -649, -102, -104, -650, -89, -650, -650, -223, -638, -649, + -360, -649, -297, -365, -301, -253, -644, -643, -255, -644, + -306, -308, -614, -650, -638, -650, -551, -552, -650, -650, + -562, -650, -565, -650, -567, -650, -378, -650, -380, -382, + -389, -638, -583, -593, -603, -607, -649, -369, -649, -58, + -370, -371, -322, -323, -650, -325, -650, -638, -624, -625, + -628, -303, -649, -116, -117, -118, -650, -650, -649, -328, + -544, -546, -331, -649, -649, -570, -570, -650, -638, -650, + -649, -482, -484, -650, -487, -495, -497, -650, -132, -282, + -650, -638, -624, -625, -625, -624, -257, -650, -641, -649, + -43, -208, -44, -209, -70, -45, -211, -46, -210, -72, + -650, -650, -650, -650, -444, -650, -412, -413, -638, -415, + -649, -434, -433, -650, -446, -649, -448, -269, -279, -619, + -85, -100, -97, -213, -313, -13, -15, -361, -363, -649, + -467, -461, -649, -462, -463, -642, -425, -649, -649, -417, + -638, -609, -590, -608, -554, -555, -555, -581, -555, -555, + -600, -555, -578, -595, -638, -650, -387, -650, -579, -650, + -364, -372, -650, -374, -649, -650, -59, -324, -650, -444, + -650, -116, -117, -120, -638, -649, -650, -650, -650, -338, + -638, -650, -341, -612, -506, -509, -510, -511, -512, -650, + -489, -12, -283, -444, -42, -207, -264, -650, -243, -609, + -609, -394, -649, -649, -649, -411, -650, -638, -578, -586, + -587, -597, -454, -65, -649, -649, -466, -650, -650, -465, + -254, -650, -650, -650, -426, -550, -650, -558, -650, -560, + -650, -563, -650, -566, -568, -379, -381, -385, -650, -390, + -320, -650, -375, -321, -650, -649, -326, -444, -650, -650, + -332, -336, -650, -547, -549, -548, -508, -650, -392, -393, + -402, -396, -404, -650, -407, -650, -409, -414, -650, -650, + -585, -650, -451, -649, -649, -107, -108, -650, -650, -115, + -464, -428, -429, -638, -419, -421, -422, -555, -555, -555, + -555, -383, -650, -388, -650, -649, -278, -649, -329, -545, + -649, -339, -649, -609, -588, -395, -649, -649, -649, -649, + -598, -649, -416, -596, -650, -304, -14, -460, -649, -650, + -650, -114, -418, -650, -650, -556, -559, -561, -564, -650, + -386, -649, -456, -457, -458, -650, -650, -391, -650, -399, + -650, -401, -650, -405, -650, -408, -410, -303, -628, -459, + -638, -624, -625, -628, -113, -420, -555, -384, -373, -333, + -342, -649, -649, -649, -649, -444, -557, -650, -397, -400, + -403, -406, -649, -398 ] clist = [ -'6,536,213,220,428,434,368,301,315,315,337,262,421,589,135,135,501,130', -'130,566,133,133,444,395,125,208,117,699,551,327,418,279,279,279,558', -'678,759,441,114,341,342,675,315,345,675,263,4,340,340,582,585,340,113', -'800,486,539,542,638,9,375,332,933,853,844,9,274,322,266,272,275,726', -'118,964,495,823,749,678,803,318,962,130,376,958,378,380,383,386,389', -'392,378,930,117,401,402,403,404,666,130,490,993,340,340,340,340,670', -'671,527,299,856,841,281,281,281,734,737,377,356,346,711,712,619,393', -'834,622,280,280,280,602,867,604,603,297,870,614,996,616,358,758,620', -'605,334,620,986,762,223,949,329,633,802,614,906,277,291,292,333,804', -'669,961,549,706,501,339,407,414,485,810,493,814,494,815,9,1026,740,827', -'678,913,374,399,379,405,964,382,675,675,1,385,958,1036,388,391,877,764', -'765,394,868,1024,355,207,839,447,448,449,450,909,124,836,952,607,338', -'452,422,279,2,545,372,353,753,900,668,335,438,369,715,717,719,848,328', -'865,930,17,566,330,702,1044,336,17,343,857,344,709,858,746,,428,434', -'558,,,429,,224,,,,659,738,,,,224,224,224,506,17,306,306,279,844,,705', -'508,422,279,315,,279,,,500,500,813,954,,,376,566,,841,,528,315,521,524', -'224,224,794,,224,350,,558,,417,801,492,685,451,,531,417,,537,690,694', -'117,,586,587,,721,687,841,690,820,340,340,511,315,,315,16,413,419,,546', -'592,16,439,443,525,510,17,517,,806,281,224,224,224,224,17,274,512,840', -'281,842,1045,,,280,,497,890,891,16,,117,1027,280,513,,,,,519,767,,861', -'767,,997,,,690,514,,491,606,,941,300,741,588,297,566,496,566,,297,,841', -'919,639,,6,,,,,816,135,,,130,547,,133,,,678,632,,500,500,,831,645,,675', -',,871,872,,,,17,224,224,224,566,,16,224,224,224,224,224,224,873,631', -'16,422,279,,558,,444,,438,17,,9,646,,661,644,,,651,,819,650,,721,,783', -'850,807,,,,788,662,645,,,429,528,315,,662,662,,224,,528,315,,,224,,942', -'224,,1037,921,923,,925,927,,928,816,,698,,998,422,279,828,646,,17,667', -'17,,798,438,306,17,955,,,956,654,,16,438,,943,,690,,,,306,,,,,,866,', -',17,429,224,,980,,16,,412,,,429,682,940,,224,224,806,837,,806,837,674', -',,672,673,,600,757,600,,300,763,422,279,,,,,,,,683,438,566,721,,721', -'686,,,735,735,,,,,,812,,,,703,,,973,,754,16,,16,429,,566,,16,,17,,,135', -',1032,130,639,,133,988,558,805,772,1019,1020,1021,1022,,300,811,528', -'315,16,300,,1028,,797,,,,821,315,662,639,1030,1031,,500,,1054,,,,,806', -',224,,984,721,,,,645,,805,,,,875,,,824,829,,,,,807,,,807,835,,807,1055', -'807,,,,,,,778,862,,,639,,,646,,340,651,824,,824,,,16,,,721,17,721,,', -',,,306,,224,,,422,279,837,306,,798,438,,798,,798,224,,779,781,,,,130', -'784,786,,,443,,721,500,869,315,,,,874,822,,805,429,830,,,,,417,,,,,893', -'893,893,,,,,,,690,,,17,,852,17,807,1038,807,,807,224,807,,911,,,,915', -',,935,,224,,860,,224,,340,,,16,,944,,,,,,639,876,340,29,,,,,,29,,,,', -',798,807,798,,798,,798,224,224,29,,315,,224,224,,,224,29,29,29,735,29', -'315,951,,,797,,945,797,,797,,,884,,,,,,,,,,,,,16,306,798,16,29,29,,', -'29,918,,,306,,799,,,,,,,,,929,17,17,731,,,733,,,1008,,,,,,,,,,893,893', -'893,893,,893,948,,,1015,29,,,995,,29,29,29,29,29,438,224,,,843,,845', -'224,,,,,,17,17,,,,824,,17,,,,797,,797,,797,,797,224,,,,,,,,,422,279', -',,,,,639,,,438,824,,,,,,,893,893,893,893,903,16,16,17,41,,,17,17,,41', -',797,894,896,898,429,,17,,893,,,29,29,29,29,832,833,,29,29,29,29,29', -'29,,,41,304,304,,,,,,,29,224,,17,17,16,16,,,,,,16,17,224,,,,,,,,,,,', -'348,,,370,,,,,29,,,,882,,29,,,29,,,,,965,,,,17,,,,17,16,,,976,16,16', -'29,,29,,,,41,29,,16,,957,,959,,41,,,,,905,,,17,907,908,,,,,,,29,,29', -'912,981,,982,,983,16,16,,,,,29,29,,,16,,,,,17,,1000,1002,1004,1006,', -'1007,,,,937,938,,,17,,,,,17,,,17,17,,,,,,,42,,,16,,,42,16,,,224,,,,41', -',,,,19,,,,29,,19,,,1033,969,1034,,1035,972,42,305,305,16,41,,,,,,,,', -'1043,,1050,1051,1052,1053,19,,,,,,,,,,992,,,,,415,349,16,29,371,1057', -',446,,,1056,,,,,,,16,,,354,,16,,,16,16,,1013,,,,,41,,41,,,,304,41,,', -'1025,42,,,,1029,,,,,42,,,304,,,,29,,,19,,41,,,,29,,,19,503,,505,,507', -',,509,,,29,,,,,,,,,,370,,370,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,548,,,,,29', -',,29,,,,,42,29,,,41,,,,,,,,,29,,,,29,,19,,,,,42,,,442,,,,,,,,,,,,,,', -',19,,,,,,,,,29,29,,,,,29,29,,,29,,18,,,635,,,18,,,,,,,,,,,,,,,,,42,', -'42,,,,305,42,,,,18,308,308,,,,,,19,,19,41,305,,,19,,,304,29,29,42,,', -',,304,,,,,,,,,352,,,,,19,,,,,,,,,371,,371,676,,,548,,679,29,,,681,,', -'29,,,,,,29,29,,,,,,29,18,,,,41,,,41,,18,29,,,,,676,,,548,,,42,,,,,,', -',,,,,,,,,,,,19,,,,29,727,,,29,29,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,29,,29,29,,,18,,,,,,29,29,,,,304,,,,,773,,,,676,548,304,,18,,', -',,,,42,,,41,41,,,305,,,,,,,29,305,,,29,19,,,,,,,817,,,818,,,,,,,,,,', -',,,,,,,,29,826,,,,,41,41,18,,18,,,41,308,18,,,,,,847,,42,,,42,,,,,308', -',29,,,,,,,18,446,19,,,19,,,29,,,,,29,,370,29,29,41,,,,41,41,,,,,601', -',601,,,41,29,883,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,41,41,,,,,,442,,,41,,', -'18,,,,,,,305,,,,,,,,,,,305,,,,,,,,,,,,42,42,370,,,,41,,,,41,,,,974,', -',,,19,19,,,,,,,,,,,,,,,,,,,548,41,,,,,,,,,,,42,42,,,,,,42,,,,,,,,,,', -',19,19,,41,,18,,19,,,,,308,,,,,,41,,308,,991,41,,,41,41,,,371,,,42,', -',,42,42,,,,,,,,,,42,,,,19,,,,19,19,,,,,231,,,,,19,,,,278,278,278,,,18', -',,18,42,42,,,324,325,326,,,,42,,,,,,,,,19,19,278,,,,,,,,19,,,,,,,,,', -',,,,,,371,,,,42,,,,42,,,,975,,,,,,,,,,,19,,,,19,,,,979,,,,,,,42,,,,', -',,,,,,,,,,308,,,,19,,,,,,,308,,,,,,,42,,,,,18,18,,,,,,,,,42,,,,19,42', -',,42,42,,,,,,,,,,19,,,,,19,,,19,19,,,,,,,,,,278,420,278,18,18,,440,445', -',881,18,,,,,,,,,,,,231,,,459,460,461,462,463,464,465,466,467,468,469', -'470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,,601,,,18', -',278,,18,18,,,278,,,278,,,,18,,,278,,278,,278,,,278,,,,,,,,,,,,,,,,', -',,,,,18,18,,,,,,,,,18,,,,,533,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,601,,', -',18,,,,18,,,,978,,,,,,,,,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,,,,278', -',,,,,,,,,,,18,,,,,,,,,,,,,,,18,,,,,18,,,18,18,,278,,440,660,420,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,,278,,278,,,,278,,,,,,,,,,', -',278,,,,,,,,,696,697,,,,,,,,,,278,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,278', -',,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'278,775,,,278,278,780,782,,,,,785,787,,,660,789,,,,,,,,,,,,,,,,,,,,', -',,,278,,,278,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,', -',,,,,,,,,,278,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,278,,885,,,,,,,,,', -',,,,780,782,787,785,,888,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,885,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278' ] - racc_goto_table = arr = ::Array.new(3060, nil) +'6,4,233,318,277,295,295,295,129,719,229,236,351,383,290,607,520,29,279', +'663,568,137,221,29,449,142,142,599,602,345,456,462,696,332,332,696,145', +'145,29,354,354,409,125,354,358,359,699,29,29,29,509,29,147,147,355,356', +'545,784,360,879,296,296,296,297,297,297,575,126,332,555,9,867,583,446', +'129,339,9,29,467,505,316,846,29,29,885,514,29,433,434,142,503,870,866', +'391,868,393,395,398,390,403,406,393,335,354,354,354,354,640,361,751', +'447,690,281,288,291,468,860,142,415,416,417,418,725,728,775,736,737', +'732,130,923,347,314,293,306,307,1004,830,956,392,1030,635,29,637,624', +'407,641,29,29,29,29,29,972,621,440,623,635,440,1006,787,975,759,440', +'925,422,429,18,370,927,220,702,1003,18,520,566,856,353,733,935,512,696', +'696,924,513,835,686,1052,959,766,852,937,389,699,394,397,9,845,643,444', +'445,18,400,295,402,419,405,469,470,904,789,790,926,428,439,457,1030', +'439,408,896,652,136,439,865,420,862,1024,18,450,628,473,343,2,561,654', +'688,734,1075,387,29,29,29,29,29,29,29,466,562,413,29,29,29,352,432,432', +'824,699,295,705,1006,689,1,764,29,295,368,714,295,779,1013,278,511,886', +'683,874,384,456,462,956,841,625,346,575,1026,348,893,867,934,583,450', +'833,18,556,349,350,371,519,519,870,29,18,1007,391,895,546,622,29,525', +'897,29,542,988,296,129,867,297,539,332,1020,290,373,783,296,1050,,297', +',,29,692,,354,29,549,332,1027,707,29,1028,889,,,710,,,1053,603,528,', +'558,563,,710,,,793,1078,1036,611,,1077,531,468,29,447,129,537,543,,332', +',332,529,913,29,29,29,,,559,,530,560,564,510,535,,18,,18,792,,18,641', +'515,,,18,867,606,644,,,,,,,,767,,1022,18,314,1081,710,,837,314,,945', +'940,,,,,,840,,,,660,664,696,,653,,,,142,317,814,,671,699,,,819,,676', +'145,295,,519,519,900,901,670,801,,457,583,,583,456,462,147,967,,,,,', +',,,450,18,978,979,,18,,,684,,18,,,,861,466,671,29,,1069,,,,,,575,575', +',,546,670,583,583,898,899,,18,546,295,,810,812,,,,,815,817,18,18,457', +',718,,,837,,,,332,457,,,450,,,669,332,792,,,29,675,,928,,695,811,813', +',29,466,,816,818,,,965,,,,466,,,,29,,,,,,894,,,,710,1057,920,942,,295', +',853,,440,687,772,,,,,782,457,440,440,,843,788,,440,440,,,760,,450,994', +',,,,29,,,29,968,781,,,,427,,29,466,,,,,929,295,1015,,832,,29,,,1085', +',,29,457,,439,317,,,6,797,,914,,439,439,450,,,,439,439,664,798,583,831', +'29,142,,546,1054,746,29,29,466,,,,145,,842,29,29,826,,,664,29,29,915', +',18,519,671,147,809,676,,928,332,,928,811,813,818,816,,670,,,332,,,859', +',317,850,,854,9,317,,,,902,,,,1023,,,920,,,920,440,920,,,,,,1055,,1056', +',664,,432,,295,,,883,,883,855,,604,605,457,18,,,18,,,740,742,744,471', +',,,,450,928,,,929,664,,929,,,929,29,929,,466,,,29,888,439,,,29,29,915', +'142,,,,29,,519,859,,920,,920,,920,18,920,,,,,18,29,,,,,,,516,18,18,', +'826,1070,746,18,18,876,920,710,,,,,29,,,,,939,,,532,354,,,,,,,929,,929', +'29,929,,929,354,961,,,29,29,664,,,,,,,,,969,,557,,,,,929,,,,,430,443', +'29,,29,970,,,,974,,722,859,,19,29,29,,,,19,,,,,981,981,981,,,332,,,', +',237,,,,332,18,,,,237,237,237,,19,323,323,18,18,,29,29,,,18,,762,763', +',765,,,,,746,,746,,,,19,18,522,1019,524,237,237,526,527,237,365,29,', +',1042,,332,,,1039,,,850,,18,,,,,,,756,,,758,,,,677,,29,,295,18,,,883', +',,,,18,18,565,457,981,981,981,981,,981,29,,,19,,29,450,29,237,237,237', +'237,19,,,1011,746,18,466,883,664,693,694,29,466,982,984,986,18,,,947', +'949,,951,953,,954,703,,,,,,706,,,,32,981,981,981,981,,32,,,,,,981,,', +'724,,,,18,18,32,746,,746,656,,,,,32,32,32,,32,,,887,,,,863,,,863,,,', +',,18,19,237,437,237,237,437,237,,746,32,437,237,237,,32,32,,,32,,,,', +',19,,,,18,,1059,1061,1063,1065,,1066,,,,,,,,,890,,,,,18,,,,,18,,18,', +',,237,697,909,,565,,700,237,,,237,,,32,1045,1046,1047,1048,32,32,32', +'32,32,921,,1088,1089,1090,1091,19,,,,19,,,1093,323,19,,,960,932,,,,', +'963,,,,,966,,323,,,,,,971,936,,,19,,844,,,941,752,,,,,237,19,19,,,,', +',1086,,,,,,619,,619,41,,,,962,,41,878,,,,,,,,,,32,32,32,32,32,32,32', +',,,32,32,32,,,,,41,321,321,,1018,,,32,1021,,903,,,,799,,,,,,992,993', +'697,565,,,41,,869,,871,,,,,,363,,,385,,,,32,,,863,,,921,32,1017,921', +'32,921,838,,,839,,,,,,,,,237,,,,,32,,,,32,,851,,1037,32,944,697,,,565', +',,,41,1079,1080,,,,955,,,41,,1051,873,,,,,32,16,,,,,,16,922,,,32,32', +'32,19,973,443,,,,921,323,921,237,921,,921,,,323,,,,,,16,,,237,,,,,,', +',,,,921,912,,,,,,,,,,,16,,,,,,,,,,369,,,,,,,,41,,,,,19,,,19,,,,,,,,237', +',,,,,,,41,,,,237,,,,,,237,,,,,,,,,,,,16,1008,,1009,32,1010,,,,16,,,19', +',,,,,437,237,,,,,,,,437,437,,,,,437,437,,,,1029,,1031,565,,41,,,,41', +',,,321,41,,,,,,32,,,,,,323,,,32,321,,,,,,,323,,,41,,,,32,,,,,,42,1016', +'41,41,,,42,,16,,435,1076,,435,,385,,385,435,,,,,,,1082,,1083,,1084,', +',16,,42,322,322,,,,32,,,32,19,,,,,,237,32,,,1092,19,19,,,,42,,19,32', +',,,,,32,364,,,386,,,,,,437,,,,,,,,,,,,,,32,,,,16,,32,32,16,19,,,,16', +',32,32,,,,,32,32,,,,,,19,,,42,,,,,19,19,,16,42,,,,,,,,,,,16,16,,,,,', +',,,237,,19,,,,,,,,,,,19,237,,,,,41,,,,,,,321,,,,,,,,321,,,,,,,,,,,,', +'990,,,,,19,19,,,997,,,32,,,,,,32,42,,,,32,32,,,,,,32,,,,,,19,,,,,,41', +'42,,41,,32,,,,,,,,,,,,,1033,,,,,19,,,,,32,,,,,,,,,,,,,,,,19,,,32,,19', +',19,,41,,32,32,,,,,,,,,,42,237,,,42,,16,,322,42,,,,,32,,32,,,,,,,,,322', +',32,32,,,,,,,42,,,,321,,,,,,,,42,42,,321,,,,,,,,,,386,,386,,,,32,32', +',,,,,,,,16,,,16,,,,,,,,,20,,,,,,20,,,32,,,,,,,,,,41,,,,,,,,,,,41,41', +',,20,325,325,41,32,,,16,,,,,,435,,,,,,,,,435,435,,32,20,,435,435,32', +',32,,,,367,,,,,,,41,,,,,32,,,,,,,,,,,,,,41,,,,,,,,41,41,,,,,,,,,,,,', +',,,,,,20,,,,,,42,41,,20,,,,322,,,,,41,,,322,,,,,,,,,,,,,,,,16,,,,,,', +',,,,16,16,,,385,,,16,,41,41,,,995,,,,,,,,,,,435,,,,42,,,42,,,,,,,,,41', +',,,,,,16,20,,438,,,438,,,,,438,,,,,,385,,16,,,41,,,20,,16,16,,,,,,42', +',,,,,,,,41,,,,,41,,41,,,,16,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,,322,,,', +'20,,,,20,,,322,325,20,,,,,16,16,,,1000,,,,,,,325,,,,,,,,,,20,,,,,,,', +',,16,,20,20,,,,,,,,,,,,620,,620,,42,,,,,,,,,,16,42,42,,,,,,42,,,,,,', +',,,,,,16,,,,,16,,16,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,42,,,244', +',,,,42,42,,,294,294,294,,,,,,,,,,,341,342,,344,,,,,,,42,,,,,,,,,,,42', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,386,,,,325,42,42,,,996,,,325,,,,', +',,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,,,,,,386,,,,,42,,20,,,20,,,', +',,,,,,,,,,,,42,,,,,42,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,294,442,,438', +'448,294,,,,448,,,438,438,,,,,438,438,,,244,,,480,481,482,483,484,485', +'486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,,,325', +',502,,,,,,,,294,325,,,,,,294,,,294,,,,,,,294,,294,,,294,294,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,20,,,551,,552,,,,294,294,20,20,,,,,908,20', +',,,,,,,,,,,,,,,,438,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,,,,,,,20,,', +',,,,,20,20,,,,,294,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,20,,,,,,,,,,,,294', +',448,448,448,,,,,,,,,,,,,,,,,,620,,,,,20,20,,,999,,,,,,,,,,,,294,,,294', +',294,,,,,,,,,,20,,,,,294,,,,,,,,,,717,,,,,,,,,620,,,,,20,,,,,,,,,,,', +',,,,,,,,,20,,,,294,20,,20,,,,,,,,,,,,,,,,,,,,294,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,294,448,294,,,806,,,294,294,448,448,,,,,448', +'448,,,,,,,,,,,,,,,,,,,,,,,,294,,,294,,,,,,,,,,,,,,,448,,,,,294,,,,,294', +',,294,,,,,,,,,,,,,,,,294,,,,,,,,,,,,,,,,,,,,,294,,,,,,,,,,,,294,,,,', +',,,,,,,,,,,,,,,,,294,,,,,,,448,,,,,,,,,,,,,448,448,448,448,,918,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,294,448,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,294,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,294' ] + racc_goto_table = arr = ::Array.new(3501, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2170,87 +2185,98 @@ end clist = [ -'6,10,27,34,40,40,60,53,68,68,89,155,25,95,65,65,76,61,61,189,64,64,20', -'60,17,17,98,13,154,34,30,36,36,36,185,200,99,30,8,19,19,77,68,19,77', -'39,2,32,32,92,92,32,5,144,40,72,72,26,9,171,6,135,93,195,9,74,67,41', -'41,41,134,7,150,25,14,58,200,147,54,149,61,6,196,6,6,6,6,6,6,6,132,98', -'19,19,19,19,43,61,42,110,32,32,32,32,43,43,55,50,14,190,73,73,73,94', -'94,172,111,5,139,139,175,172,147,175,71,71,71,59,112,59,113,49,114,176', -'115,176,116,117,176,118,73,176,135,119,22,120,51,66,136,176,46,48,48', -'48,71,142,45,148,151,152,76,153,33,31,156,157,160,161,162,163,9,164', -'165,166,200,167,170,7,173,9,150,174,77,77,1,177,196,149,178,179,180', -'181,182,183,184,135,21,18,188,32,32,32,32,15,11,192,193,199,91,27,6', -'36,3,88,87,96,97,147,75,70,61,100,187,187,187,134,101,58,132,24,189', -'102,103,135,104,24,105,106,107,154,108,109,,40,40,185,,,74,,24,,,,25', -'95,,,,24,24,24,171,24,24,24,36,195,,72,34,6,36,68,,36,,,6,6,43,144,', -',6,189,,190,,53,68,27,34,24,24,26,,24,24,,185,,71,145,74,55,51,,27,71', -',32,40,55,98,,19,19,,133,25,190,40,26,32,32,8,68,,68,23,22,22,,6,27', -'23,22,22,67,5,24,54,,189,73,24,24,24,24,24,74,9,145,73,145,93,,,71,', -'51,139,139,23,,98,14,71,50,,,,,50,176,,26,176,,99,,,40,51,,48,39,,94', -'12,25,5,49,189,48,189,,49,,190,139,34,,6,,,,,76,65,,,61,73,,64,,,200', -'17,,6,6,,72,6,,77,,,10,10,,,,24,24,24,24,189,,23,24,24,24,24,24,24,154', -'2,23,6,36,,185,,20,,61,24,,9,74,,34,41,,,74,,55,41,,133,,42,133,191', -',,,42,6,6,,,74,53,68,,6,6,,24,,53,68,,,24,,26,24,,13,187,187,,187,187', -',187,76,,32,,139,6,36,30,74,,24,41,24,,140,61,24,24,145,,,145,51,,23', -'61,,10,,40,,,,24,,,,,,25,,,24,74,24,,145,,23,,12,,,74,9,92,,24,24,189', -'140,,189,140,73,,,51,51,,24,32,24,,12,32,6,36,,,,,,,,51,61,189,133,', -'133,51,,,98,98,,,,,,89,,,,73,,,92,,98,23,,23,74,,189,,23,,24,,,65,,145', -'61,34,,64,92,185,34,17,187,187,187,187,,12,155,53,68,23,12,,95,,138', -',,,53,68,6,34,10,10,,6,,26,,,,,189,,24,,133,133,,,,6,,34,,,,60,,,6,6', -',,,,191,,,191,138,,191,187,191,,,,,,,73,19,,,34,,,74,,32,74,6,,6,,,23', -',,133,24,133,,,,,,24,,24,,,6,36,140,24,,140,61,,140,,140,24,,22,22,', -',,61,22,22,,,22,,133,6,98,68,,,,98,51,,34,74,51,,,,,71,,,,,6,6,6,,,', -',,,40,,,24,,51,24,191,25,191,,191,24,191,,6,,,,6,,,19,,24,,71,,24,,32', -',,23,,19,,,,,,34,51,32,44,,,,,,44,,,,,,140,191,140,,140,,140,24,24,44', -',68,,24,24,,,24,44,44,44,98,44,68,138,,,138,,98,138,,138,,,22,,,,,,', -',,,,,,23,24,140,23,44,44,,,44,51,,,24,,143,,,,,,,,,51,24,24,12,,,12', -',,34,,,,,,,,,,6,6,6,6,,6,51,,,27,44,,,98,,44,44,44,44,44,61,24,,,143', -',143,24,,,,,,24,24,,,,6,,24,,,,138,,138,,138,,138,24,,,,,,,,,6,36,,', -',,,34,,,61,6,,,,,,,6,6,6,6,24,23,23,24,56,,,24,24,,56,,138,141,141,141', -'74,,24,,6,,,44,44,44,44,12,12,,44,44,44,44,44,44,,,56,56,56,,,,,,,44', -'24,,24,24,23,23,,,,,,23,24,24,,,,,,,,,,,,56,,,56,,,,,44,,,,12,,44,,', -'44,,,,,24,,,,24,,,,24,23,,,24,23,23,44,,44,,,,56,44,,23,,143,,143,,56', -',,,,12,,,24,12,12,,,,,,,44,,44,12,143,,143,,143,23,23,,,,,44,44,,,23', -',,,,24,,141,141,141,141,,141,,,,12,12,,,24,,,,,24,,,24,24,,,,,,,57,', -',23,,,57,23,,,24,,,,56,,,,,29,,,,44,,29,,,143,12,143,,143,12,57,57,57', -'23,56,,,,,,,,,143,,141,141,141,141,29,,,,,,,,,,12,,,,,69,57,23,44,57', -'141,,69,,,143,,,,,,,23,,,29,,23,,,23,23,,12,,,,,56,,56,,,,56,56,,,12', -'57,,,,12,,,,,57,,,56,,,,44,,,29,,56,,,,44,,,29,69,,69,,69,,,69,,,44', -',,,,,,,,,56,,56,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,69,,,,,44,,,44,,,,,57', -'44,,,56,,,,,,,,,44,,,,44,,29,,,,,57,,,29,,,,,,,,,,,,,,,,29,,,,,,,,,44', -'44,,,,,44,44,,,44,,28,,,69,,,28,,,,,,,,,,,,,,,,,57,,57,,,,57,57,,,,28', -'28,28,,,,,,29,,29,56,57,,,29,,,56,44,44,57,,,,,56,,,,,,,,,28,,,,,29', -',,,,,,,,57,,57,69,,,69,,69,44,,,69,,,44,,,,,,44,44,,,,,,44,28,,,,56', -',,56,,28,44,,,,,69,,,69,,,57,,,,,,,,,,,,,,,,,,,29,,,,44,69,,,44,44,', -',,,,,,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,44,,44,44,,,28,,,,,,44,44,,', -',56,,,,,69,,,,69,69,56,,28,,,,,,,57,,,56,56,,,57,,,,,,,44,57,,,44,29', -',,,,,,69,,,69,,,,,,,,,,,,,,,,,,,44,69,,,,,56,56,28,,28,,,56,28,28,,', -',,,69,,57,,,57,,,,,28,,44,,,,,,,28,69,29,,,29,,,44,,,,,44,,56,44,44', -'56,,,,56,56,,,,,28,,28,,,56,44,69,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,56', -',,,,,29,,,56,,,28,,,,,,,57,,,,,,,,,,,57,,,,,,,,,,,,57,57,56,,,,56,,', -',56,,,,56,,,,,29,29,,,,,,,,,,,,,,,,,,,69,56,,,,,,,,,,,57,57,,,,,,57', -',,,,,,,,,,,29,29,,56,,28,,29,,,,,28,,,,,,56,,28,,69,56,,,56,56,,,57', -',,57,,,,57,57,,,,,,,,,,57,,,,29,,,,29,29,,,,,35,,,,,29,,,,35,35,35,', -',28,,,28,57,57,,,35,35,35,,,,57,,,,,,,,,29,29,35,,,,,,,,29,,,,,,,,,', -',,,,,,57,,,,57,,,,57,,,,57,,,,,,,,,,,29,,,,29,,,,29,,,,,,,57,,,,,,,', -',,,,,,,28,,,,29,,,,,,,28,,,,,,,57,,,,,28,28,,,,,,,,,57,,,,29,57,,,57', -'57,,,,,,,,,,29,,,,,29,,,29,29,,,,,,,,,,35,35,35,28,28,,35,35,,28,28', -',,,,,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', -'35,35,35,35,35,35,35,35,,28,,,28,,35,,28,28,,,35,,,35,,,,28,,,35,,35', -',35,,,35,,,,,,,,,,,,,,,,,,,,,,28,28,,,,,,,,,28,,,,,35,,,,,,,,,35,,,', -',,,,,,,,,,,,,,,,,28,,,,28,,,,28,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,28,,', -',,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,28,,,,,,,,,,,,,,,28,,,,,28,,,28,28,', -'35,,35,35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,,', -'35,,,,,,,,,,,,35,,,,,,,,,35,35,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,', -',,,,,,35,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,35,35,,,35,35,35,35,,,,,35,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,', -',35,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,', -',,,,35,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,35,,35,,,,,,,,,,,,,,35,35', -'35,35,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] - racc_goto_check = arr = ::Array.new(3060, nil) +'6,2,39,62,173,45,45,45,120,15,37,26,104,69,87,115,89,53,37,36,172,21', +'21,53,35,70,70,108,108,39,49,49,90,79,79,90,73,73,53,30,30,69,5,30,41', +'41,221,53,53,53,51,53,74,74,23,23,64,123,23,109,84,84,84,86,86,86,205', +'8,79,12,9,211,210,32,120,77,9,53,32,49,59,17,53,53,111,35,53,28,28,70', +'174,216,161,6,161,6,6,6,190,6,6,6,63,30,30,30,30,194,5,150,76,52,50', +'50,50,76,164,70,23,23,23,23,85,85,67,155,155,85,7,160,9,58,57,57,57', +'166,162,148,191,217,195,53,195,138,191,195,53,53,53,53,53,139,68,24', +'68,195,24,167,140,141,42,24,152,31,29,33,25,158,22,20,165,33,89,168', +'169,170,171,18,177,90,90,161,178,180,182,183,151,184,185,186,189,221', +'192,193,9,16,196,30,30,33,197,45,198,9,199,30,30,200,201,202,164,26', +'26,87,217,26,203,204,13,11,26,209,10,213,214,33,6,220,37,80,3,83,75', +'88,172,166,100,53,53,53,53,53,53,53,70,103,7,53,53,53,106,84,84,36,221', +'45,64,167,54,1,115,53,45,117,64,45,119,151,48,87,44,35,150,124,49,49', +'148,36,125,126,205,160,127,67,211,162,210,6,52,33,128,129,130,131,6', +'6,216,53,33,161,6,132,62,133,53,190,134,53,39,164,84,120,211,86,37,79', +'135,87,136,137,84,151,,86,,,53,174,,30,53,37,79,161,35,53,161,36,,,49', +',,111,23,5,,6,6,,49,,,194,109,17,37,,151,59,76,53,76,120,59,77,,79,', +'79,8,36,53,53,53,,,84,,9,86,86,57,63,,33,,33,195,,33,195,57,,,33,211', +'5,6,,,,,,,,35,,123,33,58,161,49,,89,58,,155,85,,,,,,64,,,,37,39,90,', +'21,,,,70,14,51,,87,221,,,51,,87,73,45,,6,6,172,172,6,35,,87,210,,210', +'49,49,74,36,,,,,,,,,6,33,155,155,,33,,,39,,33,,,,154,70,87,53,,15,,', +',,,205,205,,,62,6,210,210,12,12,,33,62,45,,32,32,,,,,32,32,33,33,87', +',30,,,89,,,,79,87,,,6,,,50,79,195,,,53,50,,210,,86,76,76,,53,70,,76', +'76,,,108,,,,70,,,,53,,,,,,35,,,,49,155,154,12,,45,,28,,24,50,41,,,,', +'30,87,24,24,,76,30,,24,24,,,120,,6,108,,,,,53,,,53,12,6,,,,14,,53,70', +',,,,212,45,108,,104,,53,,,36,,,53,87,,26,14,,,6,2,,32,,26,26,6,,,,26', +'26,39,21,210,173,53,70,,62,115,149,53,53,70,,,,73,,62,53,53,6,,,39,53', +'53,76,,33,6,87,74,86,87,,210,79,,210,76,76,76,76,,6,,,79,,,39,,14,6', +',6,9,14,,,,69,,,,154,,,154,,,154,24,154,,,,,,12,,12,,39,,84,,45,,,6', +',6,86,,14,14,87,33,,,33,,,208,208,208,60,,,,,6,210,,,212,39,,212,,,212', +'53,212,,70,,,53,84,26,,,53,53,76,70,,,,53,,6,39,,154,,154,,154,33,154', +',,,,33,53,,,,,,,60,33,33,,6,35,149,33,33,149,154,49,,,,,53,,,,,6,,,60', +'30,,,,,,,212,,212,53,212,,212,30,23,,,53,53,39,,,,,,,,,23,,60,,,,,212', +',,,,82,82,53,,53,120,,,,120,,102,39,,34,53,53,,,,34,,,,,6,6,6,,,79,', +',,,34,,,,79,33,,,,34,34,34,,34,34,34,33,33,,53,53,,,33,,102,102,,102', +',,,,149,,149,,,,34,33,82,120,82,34,34,82,82,34,34,53,,,39,,79,,,37,', +',6,,33,,,,,,,14,,,14,,,,60,,53,,45,33,,,6,,,,,33,33,82,87,6,6,6,6,,6', +'53,,,34,,53,6,53,34,34,34,34,34,,,149,149,33,70,6,39,60,60,53,70,157', +'157,157,33,,,208,208,,208,208,,208,60,,,,,,60,,,,56,6,6,6,6,,56,,,,', +',6,,,60,,,,33,33,56,149,,149,82,,,,,56,56,56,,56,,,102,,,,156,,,156', +',,,,,33,34,34,34,34,34,34,34,,149,56,34,34,34,,56,56,,,56,,,,,,34,,', +',33,,157,157,157,157,,157,,,,,,,,,14,,,,,33,,,,,33,,33,,,,34,82,14,', +'82,,82,34,,,34,,,56,208,208,208,208,56,56,56,56,56,156,,157,157,157', +'157,34,,,,34,,,157,34,34,,,102,14,,,,,102,,,,,102,,34,,,,,,102,14,,', +'34,,60,,,14,82,,,,,34,34,34,,,,,,208,,,,,,34,,34,65,,,,14,,65,60,,,', +',,,,,,56,56,56,56,56,56,56,,,,56,56,56,,,,,65,65,65,,102,,,56,102,,60', +',,,82,,,,,,14,14,82,82,,,65,,159,,159,,,,,,65,,,65,,,,56,,,156,,,156', +'56,14,156,56,156,82,,,82,,,,,,,,,34,,,,,56,,,,56,,82,,14,56,60,82,,', +'82,,,,65,102,102,,,,60,,,65,,14,82,,,,,56,27,,,,,,27,159,,,56,56,56', +'34,60,82,,,,156,34,156,34,156,,156,,,34,,,,,,27,,,34,,,,,,,,,,,156,82', +',,,,,,,,,,27,,,,,,,,,,27,,,,,,,,65,,,,,34,,,34,,,,,,,,34,,,,,,,,65,', +',,34,,,,,,34,,,,,,,,,,,,27,159,,159,56,159,,,,27,,,34,,,,,,34,34,,,', +',,,,34,34,,,,,34,34,,,,159,,159,82,,65,,,,65,,,,65,65,,,,,,56,,,,,,34', +',,56,65,,,,,,,34,,,65,,,,56,,,,,,66,82,65,65,,,66,,27,,27,159,,27,,65', +',65,27,,,,,,,159,,159,,159,,,27,,66,66,66,,,,56,,,56,34,,,,,,34,56,', +',159,34,34,,,,66,,34,56,,,,,,56,66,,,66,,,,,,34,,,,,,,,,,,,,,56,,,,27', +',56,56,27,34,,,,27,,56,56,,,,,56,56,,,,,,34,,,66,,,,,34,34,,27,66,,', +',,,,,,,,27,27,,,,,,,,,34,,34,,,,,,,,,,,34,34,,,,,65,,,,,,,65,,,,,,,', +'65,,,,,,,,,,,,,34,,,,,34,34,,,34,,,56,,,,,,56,66,,,,56,56,,,,,,56,,', +',,,34,,,,,,65,66,,65,,56,,,,,,,,,,,,,34,,,,,34,,,,,56,,,,,,,,,,,,,,', +',34,,,56,,34,,34,,65,,56,56,,,,,,,,,,66,34,,,66,,27,,66,66,,,,,56,,56', +',,,,,,,,66,,56,56,,,,,,,66,,,,65,,,,,,,,66,66,,65,,,,,,,,,,66,,66,,', +',56,56,,,,,,,,,27,,,27,,,,,,,,,38,,,,,,38,,,56,,,,,,,,,,65,,,,,,,,,', +',65,65,,,38,38,38,65,56,,,27,,,,,,27,,,,,,,,,27,27,,56,38,,27,27,56', +',56,,,,38,,,,,,,65,,,,,56,,,,,,,,,,,,,,65,,,,,,,,65,65,,,,,,,,,,,,,', +',,,,,38,,,,,,66,65,,38,,,,66,,,,,65,,,66,,,,,,,,,,,,,,,,27,,,,,,,,,', +',27,27,,,65,,,27,,65,65,,,65,,,,,,,,,,,27,,,,66,,,66,,,,,,,,,65,,,,', +',,27,38,,38,,,38,,,,,38,,,,,,65,,27,,,65,,,38,,27,27,,,,,,66,,,,,,,', +',65,,,,,65,,65,,,,27,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,,,66,,,,38,,,,38', +',,66,38,38,,,,,27,27,,,27,,,,,,,38,,,,,,,,,,38,,,,,,,,,,27,,38,38,,', +',,,,,,,,,38,,38,,66,,,,,,,,,,27,66,66,,,,,,66,,,,,,,,,,,,,27,,,,,27', +',27,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,,,,,,,,,,,66,,,40,,,,,66,66,,,40,40', +'40,,,,,,,,,,,40,40,,40,,,,,,,66,,,,,,,,,,,66,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,38,,,66,,,,38,66,66,,,66,,,38,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,', +',,,,,,,,,,,,,,,,,,66,,,,,66,,38,,,38,,,,,,,,,,,,,,,,66,,,,,66,,66,,', +',,,,,,,,,,,,,,,,,,,,,,,,38,,,40,40,,38,40,40,,,,40,,,38,38,,,,,38,38', +',,40,,,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40', +'40,,,38,,40,,,,,,,,40,38,,,,,,40,,,40,,,,,,,40,,40,,,40,40,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,38,,,40,,40,,,,40,40,38,38,,,,,38,38,,,,,,', +',,,,,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,38,,,,,,,,,,,,,,,,,,,38,,,,,,,,38', +'38,,,,,40,,,,,,,,,,,,,,,,,,,,,38,,,,,,,,,,,38,,,,,,,,,,,,40,,40,40,40', +',,,,,,,,,,,,,,,,,38,,,,,38,38,,,38,,,,,,,,,,,,40,,,40,,40,,,,,,,,,,38', +',,,,40,,,,,,,,,,40,,,,,,,,,38,,,,,38,,,,,,,,,,,,,,,,,,,,,38,,,,40,38', +',38,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,40,40,40,,,40,,,40,40,40,40,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,40', +',,40,,,,,,,,,,,,,,,40,,,,,40,,,,,40,,,40,,,,,,,,,,,,,,,,40,,,,,,,,,', +',,,,,,,,,,,40,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,40,,,,,,,', +',,,,,40,40,40,40,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,40,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40' ] + racc_goto_check = arr = ::Array.new(3501, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2260,50 +2286,54 @@ end racc_goto_pointer = [ - nil, 184, 44, 212, nil, 47, -2, 63, 33, 56, - -327, 194, 354, -508, -625, -620, nil, 13, 185, -27, - -195, 125, 121, 328, 227, -200, -364, -15, 1500, 1248, - -180, -47, -19, 37, -19, 2045, -1, nil, nil, 18, - -209, 38, -168, -389, 848, -333, -663, nil, 119, 95, - 71, 85, nil, -30, 40, -213, 1036, 1229, -523, -229, - -68, 6, nil, nil, 9, 3, -264, 22, -29, 1089, - 157, 92, -278, 78, 35, -268, -265, -458, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 140, -123, -54, - nil, 143, -292, -669, -473, -333, 144, -386, 21, -569, - 147, 166, 170, -305, 171, 168, -497, 169, -497, -354, - -842, 44, -625, -227, -625, -811, 63, -467, -229, -463, - -730, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -759, -248, -497, -790, -516, nil, -3, -434, - -137, 248, -509, 260, -611, -361, nil, -587, -744, -822, - -829, -181, -390, 96, -311, -14, -97, -501, nil, nil, - -104, -503, -103, -502, -821, -418, -527, -652, nil, nil, - 96, -24, 30, 92, 94, -262, -244, 97, 99, 99, - -574, -420, -420, 102, -561, -305, nil, -333, -516, -320, - -605, -186, -505, -683, nil, -653, -813, nil, nil, -166, - -467 ] + nil, 259, -1, 230, nil, 37, -2, 120, 62, 68, + 86, 209, -277, -203, 401, -545, -524, -638, -668, nil, + -360, 10, 156, -13, -71, 94, -12, 1421, -136, -59, + -28, 26, -154, 163, 907, -204, -430, -9, 2030, -20, + 2462, -25, -443, nil, -489, -27, nil, nil, 241, -199, + 83, -231, -401, 15, -250, nil, 1076, 100, 95, 44, + 537, nil, -34, 64, -280, 1279, 1633, -493, -219, -62, + 14, nil, nil, 25, 41, -194, -117, 31, nil, -4, + 182, nil, 672, -118, 28, -437, 31, -16, -272, -281, + -486, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 161, nil, 351, -105, -53, nil, 184, nil, -328, -697, + nil, -674, nil, nil, nil, -346, nil, 191, nil, -355, + 3, nil, nil, -567, 198, -106, 218, 220, -57, 228, + 228, 220, -478, -69, -476, -654, 244, -304, -240, -748, + -467, -743, nil, nil, nil, nil, nil, nil, -738, 88, + -475, -691, -666, nil, -248, -444, 384, 133, -661, 602, + -699, -647, -550, nil, -618, -773, -808, -786, -180, -559, + 109, -390, -333, -21, -186, nil, nil, -108, -105, nil, + -508, nil, -320, -832, -422, -533, -663, nil, nil, 98, + 3, 41, 94, 94, -290, -252, -204, 100, 101, 102, + -582, -424, -424, 113, -563, -287, nil, nil, 196, -518, + -281, -668, -197, -512, -753, nil, -650, -844, nil, nil, + -161, -475 ] racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 294, 7, 347, 295, - nil, nil, 535, nil, 854, nil, 293, nil, nil, nil, - 14, 15, 21, 230, 323, nil, nil, 751, 228, 229, - nil, nil, 20, nil, 331, 24, 25, 26, 27, nil, - 693, nil, nil, nil, 312, nil, nil, 28, 423, 35, - nil, nil, 37, 40, 39, nil, 225, 226, 599, nil, - 132, 431, 131, 134, 78, 79, nil, 93, 49, 284, - nil, 424, nil, 425, 436, 647, 498, 282, 267, 50, - 51, 52, 53, 54, 55, 56, 57, 58, nil, 268, - 64, nil, nil, nil, nil, nil, nil, nil, 583, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 5, nil, 309, 7, 362, 312, + nil, nil, nil, nil, 554, nil, nil, nil, nil, 308, + 310, nil, nil, nil, 14, 15, 21, 242, nil, nil, + 17, nil, 436, 243, 340, nil, nil, 777, 241, 472, + 24, nil, nil, 357, nil, 25, 26, 27, nil, 713, + nil, nil, nil, 329, nil, 28, 326, 451, 35, nil, + nil, 37, 40, 39, nil, 238, 239, 618, nil, 144, + 459, 143, 146, 90, 91, nil, 441, 105, 47, 50, + 274, 547, 300, nil, 452, nil, 453, 464, 672, 517, + 298, 282, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 61, nil, nil, 283, 65, nil, 67, nil, nil, + 68, 881, 69, 70, 71, nil, 72, nil, 73, nil, + 600, 74, 75, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 723, 565, nil, 724, 953, 796, 553, nil, - 554, nil, nil, 555, nil, 557, 663, nil, nil, nil, - 563, nil, nil, nil, 761, nil, nil, nil, 435, 269, - nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, - 82, nil, nil, nil, nil, nil, 609, nil, nil, nil, - nil, nil, nil, nil, nil, 838, 552, nil, 556, 846, - 568, 570, 571, 808, 574, 575, 809, 578, 581, nil, - 288 ] + nil, nil, 287, 276, 721, 849, 609, 882, 748, 582, + nil, 749, 1025, 919, 570, nil, 571, nil, nil, 572, + nil, 574, nil, 827, nil, nil, nil, 580, nil, nil, + nil, nil, nil, nil, nil, 463, 285, nil, nil, 691, + nil, 504, nil, nil, nil, nil, nil, 89, 92, 94, + nil, nil, nil, nil, nil, 630, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 864, 786, 569, nil, 573, + 872, 585, 587, 588, 930, 591, 592, 931, 595, 598, + nil, 303 ] racc_reduce_table = [ 0, 0, :racc_error, @@ -2314,629 +2344,652 @@ 1, 149, :_reduce_none, 3, 149, :_reduce_6, 2, 149, :_reduce_none, - 1, 152, :_reduce_8, + 1, 152, :_reduce_none, 0, 156, :_reduce_9, - 5, 152, :_reduce_10, - 4, 155, :_reduce_11, - 2, 157, :_reduce_12, - 1, 161, :_reduce_none, - 1, 161, :_reduce_none, - 3, 161, :_reduce_15, - 2, 161, :_reduce_16, - 0, 178, :_reduce_17, - 4, 154, :_reduce_18, - 3, 154, :_reduce_19, - 3, 154, :_reduce_20, - 3, 154, :_reduce_21, - 2, 154, :_reduce_22, - 3, 154, :_reduce_23, - 3, 154, :_reduce_24, + 3, 152, :_reduce_10, + 0, 158, :_reduce_11, + 4, 155, :_reduce_12, + 0, 163, :_reduce_13, + 6, 157, :_reduce_14, + 3, 157, :_reduce_15, + 2, 159, :_reduce_16, + 1, 164, :_reduce_none, + 1, 164, :_reduce_none, + 3, 164, :_reduce_19, + 2, 164, :_reduce_20, + 1, 165, :_reduce_none, + 1, 165, :_reduce_22, + 0, 176, :_reduce_23, + 4, 154, :_reduce_24, 3, 154, :_reduce_25, 3, 154, :_reduce_26, 3, 154, :_reduce_27, - 4, 154, :_reduce_28, - 1, 154, :_reduce_none, + 2, 154, :_reduce_28, + 3, 154, :_reduce_29, 3, 154, :_reduce_30, 3, 154, :_reduce_31, - 6, 154, :_reduce_32, - 5, 154, :_reduce_33, - 5, 154, :_reduce_34, - 5, 154, :_reduce_35, - 5, 154, :_reduce_36, + 3, 154, :_reduce_32, + 3, 154, :_reduce_33, + 4, 154, :_reduce_34, + 1, 154, :_reduce_none, + 3, 154, :_reduce_36, 3, 154, :_reduce_37, 3, 154, :_reduce_38, - 3, 154, :_reduce_39, 1, 154, :_reduce_none, - 3, 165, :_reduce_41, - 3, 165, :_reduce_42, - 1, 177, :_reduce_none, - 3, 177, :_reduce_44, - 3, 177, :_reduce_45, - 3, 177, :_reduce_46, - 2, 177, :_reduce_47, + 3, 169, :_reduce_40, + 3, 169, :_reduce_41, + 6, 169, :_reduce_42, + 5, 169, :_reduce_43, + 5, 169, :_reduce_44, + 5, 169, :_reduce_45, + 5, 169, :_reduce_46, + 3, 169, :_reduce_47, + 1, 177, :_reduce_48, 1, 177, :_reduce_none, - 1, 164, :_reduce_49, - 1, 167, :_reduce_none, - 1, 167, :_reduce_none, - 1, 182, :_reduce_none, - 4, 182, :_reduce_53, - 0, 190, :_reduce_54, - 0, 191, :_reduce_55, - 6, 187, :_reduce_56, - 1, 189, :_reduce_57, - 2, 181, :_reduce_58, - 3, 181, :_reduce_59, - 4, 181, :_reduce_60, - 5, 181, :_reduce_61, - 4, 181, :_reduce_62, - 5, 181, :_reduce_63, - 2, 181, :_reduce_64, - 2, 181, :_reduce_65, - 2, 181, :_reduce_66, - 2, 181, :_reduce_67, - 2, 181, :_reduce_68, + 1, 175, :_reduce_none, + 3, 175, :_reduce_51, + 3, 175, :_reduce_52, + 3, 175, :_reduce_53, + 2, 175, :_reduce_54, + 1, 175, :_reduce_none, + 1, 168, :_reduce_56, + 0, 188, :_reduce_57, + 0, 189, :_reduce_58, + 4, 186, :_reduce_59, + 1, 171, :_reduce_none, + 1, 171, :_reduce_none, + 1, 191, :_reduce_none, + 4, 191, :_reduce_63, + 0, 199, :_reduce_64, + 4, 196, :_reduce_65, + 1, 198, :_reduce_66, + 2, 190, :_reduce_67, + 3, 190, :_reduce_68, + 4, 190, :_reduce_69, + 5, 190, :_reduce_70, + 4, 190, :_reduce_71, + 5, 190, :_reduce_72, + 2, 190, :_reduce_73, + 2, 190, :_reduce_74, + 2, 190, :_reduce_75, + 2, 190, :_reduce_76, + 2, 190, :_reduce_77, + 1, 170, :_reduce_none, + 3, 170, :_reduce_79, + 1, 204, :_reduce_none, + 3, 204, :_reduce_81, + 1, 203, :_reduce_82, + 2, 203, :_reduce_83, + 3, 203, :_reduce_84, + 5, 203, :_reduce_85, + 2, 203, :_reduce_86, + 4, 203, :_reduce_87, + 2, 203, :_reduce_88, + 4, 203, :_reduce_89, + 1, 203, :_reduce_90, + 3, 203, :_reduce_91, + 1, 207, :_reduce_none, + 3, 207, :_reduce_93, + 2, 206, :_reduce_94, + 3, 206, :_reduce_95, + 1, 209, :_reduce_96, + 3, 209, :_reduce_97, + 1, 208, :_reduce_98, + 1, 208, :_reduce_99, + 4, 208, :_reduce_100, + 3, 208, :_reduce_101, + 3, 208, :_reduce_102, + 3, 208, :_reduce_103, + 3, 208, :_reduce_104, + 2, 208, :_reduce_105, + 1, 208, :_reduce_106, + 1, 172, :_reduce_107, + 1, 172, :_reduce_108, + 4, 172, :_reduce_109, + 3, 172, :_reduce_110, + 3, 172, :_reduce_111, + 3, 172, :_reduce_112, + 3, 172, :_reduce_113, + 2, 172, :_reduce_114, + 1, 172, :_reduce_115, + 1, 212, :_reduce_116, + 1, 212, :_reduce_none, + 2, 213, :_reduce_118, + 1, 213, :_reduce_119, + 3, 213, :_reduce_120, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_none, + 1, 214, :_reduce_124, + 1, 214, :_reduce_125, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 166, :_reduce_128, 1, 166, :_reduce_none, - 3, 166, :_reduce_70, - 1, 195, :_reduce_none, - 3, 195, :_reduce_72, - 1, 194, :_reduce_73, - 2, 194, :_reduce_74, - 3, 194, :_reduce_75, - 5, 194, :_reduce_76, - 2, 194, :_reduce_77, - 4, 194, :_reduce_78, - 2, 194, :_reduce_79, - 4, 194, :_reduce_80, - 1, 194, :_reduce_81, - 3, 194, :_reduce_82, - 1, 198, :_reduce_none, - 3, 198, :_reduce_84, - 2, 197, :_reduce_85, - 3, 197, :_reduce_86, - 1, 200, :_reduce_87, - 3, 200, :_reduce_88, - 1, 199, :_reduce_89, - 1, 199, :_reduce_90, - 4, 199, :_reduce_91, - 3, 199, :_reduce_92, - 3, 199, :_reduce_93, - 3, 199, :_reduce_94, - 3, 199, :_reduce_95, - 2, 199, :_reduce_96, - 1, 199, :_reduce_97, - 1, 174, :_reduce_98, - 1, 174, :_reduce_99, - 4, 174, :_reduce_100, - 3, 174, :_reduce_101, - 3, 174, :_reduce_102, - 3, 174, :_reduce_103, - 3, 174, :_reduce_104, - 2, 174, :_reduce_105, - 1, 174, :_reduce_106, - 1, 203, :_reduce_107, - 1, 203, :_reduce_none, - 2, 204, :_reduce_109, - 1, 204, :_reduce_110, - 3, 204, :_reduce_111, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_115, - 1, 205, :_reduce_116, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 162, :_reduce_119, - 1, 162, :_reduce_none, - 1, 163, :_reduce_121, - 0, 211, :_reduce_122, - 4, 163, :_reduce_123, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 3, 180, :_reduce_195, - 5, 180, :_reduce_196, - 3, 180, :_reduce_197, - 5, 180, :_reduce_198, - 6, 180, :_reduce_199, - 5, 180, :_reduce_200, - 5, 180, :_reduce_201, - 5, 180, :_reduce_202, - 5, 180, :_reduce_203, - 4, 180, :_reduce_204, - 3, 180, :_reduce_205, - 3, 180, :_reduce_206, - 3, 180, :_reduce_207, - 3, 180, :_reduce_208, - 3, 180, :_reduce_209, - 3, 180, :_reduce_210, - 3, 180, :_reduce_211, - 3, 180, :_reduce_212, - 3, 180, :_reduce_213, - 4, 180, :_reduce_214, - 2, 180, :_reduce_215, - 2, 180, :_reduce_216, - 3, 180, :_reduce_217, - 3, 180, :_reduce_218, - 3, 180, :_reduce_219, - 3, 180, :_reduce_220, - 3, 180, :_reduce_221, - 3, 180, :_reduce_222, - 3, 180, :_reduce_223, - 3, 180, :_reduce_224, - 3, 180, :_reduce_225, - 3, 180, :_reduce_226, - 3, 180, :_reduce_227, - 3, 180, :_reduce_228, - 3, 180, :_reduce_229, - 2, 180, :_reduce_230, - 2, 180, :_reduce_231, - 3, 180, :_reduce_232, - 3, 180, :_reduce_233, - 3, 180, :_reduce_234, - 3, 180, :_reduce_235, - 3, 180, :_reduce_236, - 6, 180, :_reduce_237, - 1, 180, :_reduce_none, - 1, 214, :_reduce_239, + 1, 167, :_reduce_130, + 0, 220, :_reduce_131, + 4, 167, :_reduce_132, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, 1, 215, :_reduce_none, - 2, 215, :_reduce_241, - 4, 215, :_reduce_242, - 2, 215, :_reduce_243, - 3, 219, :_reduce_244, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 170, :_reduce_247, - 1, 170, :_reduce_248, - 2, 170, :_reduce_249, - 4, 170, :_reduce_250, - 2, 170, :_reduce_251, - 1, 193, :_reduce_252, - 2, 193, :_reduce_253, - 2, 193, :_reduce_254, - 4, 193, :_reduce_255, - 1, 193, :_reduce_256, - 0, 223, :_reduce_257, - 2, 186, :_reduce_258, - 2, 222, :_reduce_259, - 2, 221, :_reduce_260, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 3, 185, :_reduce_205, + 3, 185, :_reduce_206, + 6, 185, :_reduce_207, + 5, 185, :_reduce_208, + 5, 185, :_reduce_209, + 5, 185, :_reduce_210, + 5, 185, :_reduce_211, + 0, 226, :_reduce_212, + 5, 185, :_reduce_213, + 3, 185, :_reduce_214, + 3, 185, :_reduce_215, + 3, 185, :_reduce_216, + 3, 185, :_reduce_217, + 3, 185, :_reduce_218, + 3, 185, :_reduce_219, + 3, 185, :_reduce_220, + 3, 185, :_reduce_221, + 3, 185, :_reduce_222, + 4, 185, :_reduce_223, + 2, 185, :_reduce_224, + 2, 185, :_reduce_225, + 3, 185, :_reduce_226, + 3, 185, :_reduce_227, + 3, 185, :_reduce_228, + 3, 185, :_reduce_229, + 1, 185, :_reduce_none, + 3, 185, :_reduce_231, + 3, 185, :_reduce_232, + 3, 185, :_reduce_233, + 3, 185, :_reduce_234, + 3, 185, :_reduce_235, + 2, 185, :_reduce_236, + 2, 185, :_reduce_237, + 3, 185, :_reduce_238, + 3, 185, :_reduce_239, + 3, 185, :_reduce_240, + 3, 185, :_reduce_241, + 3, 185, :_reduce_242, + 6, 185, :_reduce_243, + 1, 185, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 3, 223, :_reduce_249, + 3, 223, :_reduce_250, + 1, 227, :_reduce_251, + 1, 228, :_reduce_none, + 2, 228, :_reduce_253, + 4, 228, :_reduce_254, + 2, 228, :_reduce_255, 1, 221, :_reduce_none, - 1, 216, :_reduce_262, - 2, 216, :_reduce_263, - 3, 216, :_reduce_264, - 4, 216, :_reduce_265, - 1, 176, :_reduce_266, - 1, 176, :_reduce_267, - 3, 175, :_reduce_268, - 4, 175, :_reduce_269, - 2, 175, :_reduce_270, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_281, - 0, 246, :_reduce_282, - 4, 213, :_reduce_283, - 2, 213, :_reduce_284, - 0, 247, :_reduce_285, - 0, 248, :_reduce_286, - 5, 213, :_reduce_287, - 3, 213, :_reduce_288, - 3, 213, :_reduce_289, - 2, 213, :_reduce_290, - 3, 213, :_reduce_291, - 0, 249, :_reduce_292, - 4, 213, :_reduce_293, - 1, 213, :_reduce_294, - 4, 213, :_reduce_295, - 3, 213, :_reduce_296, - 1, 213, :_reduce_297, - 5, 213, :_reduce_298, - 4, 213, :_reduce_299, - 3, 213, :_reduce_300, - 2, 213, :_reduce_301, - 1, 213, :_reduce_none, - 2, 213, :_reduce_303, - 2, 213, :_reduce_304, - 6, 213, :_reduce_305, - 6, 213, :_reduce_306, - 0, 250, :_reduce_307, - 0, 251, :_reduce_308, - 7, 213, :_reduce_309, - 0, 252, :_reduce_310, - 0, 253, :_reduce_311, - 7, 213, :_reduce_312, - 5, 213, :_reduce_313, - 4, 213, :_reduce_314, - 0, 254, :_reduce_315, - 0, 255, :_reduce_316, - 9, 213, :_reduce_317, - 0, 256, :_reduce_318, - 0, 257, :_reduce_319, - 7, 213, :_reduce_320, - 0, 258, :_reduce_321, - 0, 259, :_reduce_322, - 0, 260, :_reduce_323, - 9, 213, :_reduce_324, - 0, 261, :_reduce_325, - 0, 262, :_reduce_326, - 6, 213, :_reduce_327, - 0, 263, :_reduce_328, - 6, 213, :_reduce_329, - 0, 264, :_reduce_330, - 0, 265, :_reduce_331, - 9, 213, :_reduce_332, - 1, 213, :_reduce_333, - 1, 213, :_reduce_334, - 1, 213, :_reduce_335, - 1, 213, :_reduce_336, - 1, 169, :_reduce_337, + 3, 221, :_reduce_257, + 3, 232, :_reduce_258, + 1, 233, :_reduce_none, + 1, 233, :_reduce_none, + 1, 180, :_reduce_none, + 1, 180, :_reduce_none, + 2, 180, :_reduce_263, + 4, 180, :_reduce_264, + 2, 180, :_reduce_265, + 1, 202, :_reduce_266, + 2, 202, :_reduce_267, + 2, 202, :_reduce_268, + 4, 202, :_reduce_269, + 1, 202, :_reduce_270, + 0, 236, :_reduce_271, + 2, 195, :_reduce_272, + 2, 235, :_reduce_273, + 2, 234, :_reduce_274, + 1, 234, :_reduce_none, + 1, 229, :_reduce_276, + 2, 229, :_reduce_277, + 3, 229, :_reduce_278, + 4, 229, :_reduce_279, + 1, 174, :_reduce_280, + 1, 174, :_reduce_281, + 3, 173, :_reduce_282, + 4, 173, :_reduce_283, + 2, 173, :_reduce_284, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_none, + 1, 224, :_reduce_295, + 0, 271, :_reduce_296, + 4, 224, :_reduce_297, + 0, 272, :_reduce_298, + 3, 224, :_reduce_299, + 0, 273, :_reduce_300, + 4, 224, :_reduce_301, + 3, 224, :_reduce_302, + 3, 224, :_reduce_303, + 2, 224, :_reduce_304, + 0, 274, :_reduce_305, + 4, 224, :_reduce_306, + 0, 275, :_reduce_307, + 4, 224, :_reduce_308, + 1, 224, :_reduce_309, + 4, 224, :_reduce_310, + 3, 224, :_reduce_311, + 1, 224, :_reduce_312, + 5, 224, :_reduce_313, + 4, 224, :_reduce_314, + 3, 224, :_reduce_315, + 2, 224, :_reduce_316, + 1, 224, :_reduce_none, + 2, 224, :_reduce_318, + 2, 224, :_reduce_319, + 6, 224, :_reduce_320, + 6, 224, :_reduce_321, + 4, 224, :_reduce_322, + 4, 224, :_reduce_323, + 5, 224, :_reduce_324, + 4, 224, :_reduce_325, + 6, 224, :_reduce_326, + 0, 276, :_reduce_327, + 0, 277, :_reduce_328, + 7, 224, :_reduce_329, + 0, 278, :_reduce_330, + 0, 279, :_reduce_331, + 0, 280, :_reduce_332, + 9, 224, :_reduce_333, + 0, 281, :_reduce_334, + 0, 282, :_reduce_335, + 6, 224, :_reduce_336, + 0, 283, :_reduce_337, + 0, 284, :_reduce_338, + 7, 224, :_reduce_339, + 0, 285, :_reduce_340, + 0, 286, :_reduce_341, + 9, 224, :_reduce_342, + 1, 224, :_reduce_343, + 1, 224, :_reduce_344, + 1, 224, :_reduce_345, + 1, 224, :_reduce_346, + 1, 179, :_reduce_347, + 1, 246, :_reduce_none, + 1, 252, :_reduce_none, + 1, 255, :_reduce_none, + 1, 257, :_reduce_none, + 1, 258, :_reduce_none, + 1, 259, :_reduce_none, + 1, 261, :_reduce_none, + 1, 263, :_reduce_none, 1, 266, :_reduce_none, 1, 267, :_reduce_none, - 1, 268, :_reduce_none, - 1, 269, :_reduce_none, - 1, 270, :_reduce_none, - 1, 271, :_reduce_none, - 1, 272, :_reduce_none, - 1, 273, :_reduce_none, - 1, 274, :_reduce_none, - 1, 275, :_reduce_none, - 1, 276, :_reduce_none, - 1, 237, :_reduce_none, - 1, 237, :_reduce_none, - 2, 237, :_reduce_none, - 1, 239, :_reduce_none, - 1, 239, :_reduce_none, - 1, 238, :_reduce_none, - 5, 238, :_reduce_355, - 1, 159, :_reduce_none, - 2, 159, :_reduce_357, - 1, 241, :_reduce_none, - 1, 241, :_reduce_359, - 1, 277, :_reduce_none, - 3, 277, :_reduce_361, - 1, 280, :_reduce_362, - 3, 280, :_reduce_363, - 1, 279, :_reduce_364, - 4, 279, :_reduce_365, - 6, 279, :_reduce_366, - 3, 279, :_reduce_367, - 5, 279, :_reduce_368, - 2, 279, :_reduce_369, - 4, 279, :_reduce_370, - 1, 279, :_reduce_371, - 3, 279, :_reduce_372, - 4, 281, :_reduce_373, - 2, 281, :_reduce_374, - 2, 281, :_reduce_375, - 1, 281, :_reduce_376, - 2, 286, :_reduce_377, - 1, 286, :_reduce_none, - 6, 287, :_reduce_379, - 8, 287, :_reduce_380, - 4, 287, :_reduce_381, - 6, 287, :_reduce_382, - 4, 287, :_reduce_383, - 2, 287, :_reduce_384, - 6, 287, :_reduce_385, - 2, 287, :_reduce_386, - 4, 287, :_reduce_387, - 6, 287, :_reduce_388, - 2, 287, :_reduce_389, - 4, 287, :_reduce_390, - 2, 287, :_reduce_391, - 4, 287, :_reduce_392, - 1, 287, :_reduce_393, - 1, 188, :_reduce_394, - 1, 188, :_reduce_none, - 3, 291, :_reduce_396, - 1, 291, :_reduce_397, - 4, 291, :_reduce_398, + 1, 287, :_reduce_none, + 1, 288, :_reduce_none, + 1, 289, :_reduce_none, + 1, 290, :_reduce_none, + 1, 291, :_reduce_none, + 1, 161, :_reduce_none, 1, 292, :_reduce_none, - 4, 292, :_reduce_400, - 1, 293, :_reduce_401, - 3, 293, :_reduce_402, - 1, 294, :_reduce_403, - 1, 294, :_reduce_none, - 0, 298, :_reduce_405, - 3, 236, :_reduce_406, - 4, 296, :_reduce_407, - 1, 296, :_reduce_408, - 3, 297, :_reduce_409, - 3, 297, :_reduce_410, - 0, 301, :_reduce_411, - 0, 302, :_reduce_412, - 6, 300, :_reduce_413, - 2, 183, :_reduce_414, - 4, 183, :_reduce_415, - 5, 183, :_reduce_416, - 5, 183, :_reduce_417, - 0, 304, :_reduce_418, - 3, 235, :_reduce_419, - 4, 235, :_reduce_420, - 4, 235, :_reduce_421, - 3, 235, :_reduce_422, - 3, 235, :_reduce_423, - 3, 235, :_reduce_424, - 2, 235, :_reduce_425, - 1, 235, :_reduce_426, - 4, 235, :_reduce_427, - 0, 305, :_reduce_428, - 0, 306, :_reduce_429, - 6, 234, :_reduce_430, - 0, 307, :_reduce_431, - 0, 308, :_reduce_432, - 6, 234, :_reduce_433, - 0, 310, :_reduce_434, - 6, 240, :_reduce_435, - 1, 309, :_reduce_none, + 1, 247, :_reduce_none, + 1, 201, :_reduce_none, + 1, 253, :_reduce_none, + 1, 253, :_reduce_none, + 2, 253, :_reduce_none, + 1, 187, :_reduce_none, + 1, 187, :_reduce_none, + 1, 254, :_reduce_none, + 5, 254, :_reduce_373, + 1, 256, :_reduce_none, + 2, 256, :_reduce_375, + 1, 262, :_reduce_none, + 1, 262, :_reduce_377, + 1, 293, :_reduce_none, + 3, 293, :_reduce_379, + 1, 296, :_reduce_380, + 3, 296, :_reduce_381, + 1, 295, :_reduce_382, + 4, 295, :_reduce_383, + 6, 295, :_reduce_384, + 3, 295, :_reduce_385, + 5, 295, :_reduce_386, + 2, 295, :_reduce_387, + 4, 295, :_reduce_388, + 1, 295, :_reduce_389, + 3, 295, :_reduce_390, + 4, 297, :_reduce_391, + 2, 297, :_reduce_392, + 2, 297, :_reduce_393, + 1, 297, :_reduce_394, + 2, 302, :_reduce_395, + 1, 302, :_reduce_none, + 6, 303, :_reduce_397, + 8, 303, :_reduce_398, + 4, 303, :_reduce_399, + 6, 303, :_reduce_400, + 4, 303, :_reduce_401, + 2, 303, :_reduce_402, + 6, 303, :_reduce_403, + 2, 303, :_reduce_404, + 4, 303, :_reduce_405, + 6, 303, :_reduce_406, + 2, 303, :_reduce_407, + 4, 303, :_reduce_408, + 2, 303, :_reduce_409, + 4, 303, :_reduce_410, + 1, 303, :_reduce_411, + 1, 307, :_reduce_412, + 1, 307, :_reduce_413, + 3, 308, :_reduce_414, + 1, 308, :_reduce_415, + 4, 308, :_reduce_416, 1, 309, :_reduce_none, - 6, 158, :_reduce_438, - 0, 158, :_reduce_439, - 1, 311, :_reduce_440, + 4, 309, :_reduce_418, + 1, 310, :_reduce_419, + 3, 310, :_reduce_420, + 1, 311, :_reduce_421, 1, 311, :_reduce_none, - 1, 311, :_reduce_none, - 2, 312, :_reduce_443, - 1, 312, :_reduce_none, - 2, 160, :_reduce_445, - 1, 160, :_reduce_none, - 1, 224, :_reduce_447, - 1, 224, :_reduce_448, - 1, 224, :_reduce_none, - 1, 225, :_reduce_450, - 1, 314, :_reduce_451, - 1, 314, :_reduce_none, - 2, 314, :_reduce_453, - 3, 315, :_reduce_454, - 1, 315, :_reduce_455, - 3, 226, :_reduce_456, - 3, 227, :_reduce_457, - 3, 228, :_reduce_458, - 3, 228, :_reduce_459, - 1, 319, :_reduce_460, - 3, 319, :_reduce_461, - 1, 320, :_reduce_none, - 2, 320, :_reduce_463, - 3, 230, :_reduce_464, - 3, 230, :_reduce_465, - 1, 322, :_reduce_466, - 3, 322, :_reduce_467, - 3, 229, :_reduce_468, - 3, 229, :_reduce_469, - 3, 231, :_reduce_470, - 3, 231, :_reduce_471, - 1, 323, :_reduce_472, - 3, 323, :_reduce_473, - 1, 324, :_reduce_474, - 3, 324, :_reduce_475, - 1, 316, :_reduce_476, - 2, 316, :_reduce_477, - 1, 317, :_reduce_478, - 2, 317, :_reduce_479, - 1, 318, :_reduce_480, - 2, 318, :_reduce_481, - 1, 321, :_reduce_482, - 0, 326, :_reduce_483, - 3, 321, :_reduce_484, - 0, 327, :_reduce_485, - 4, 321, :_reduce_486, - 1, 325, :_reduce_487, - 1, 325, :_reduce_488, - 1, 325, :_reduce_489, - 1, 325, :_reduce_none, - 2, 209, :_reduce_491, - 1, 209, :_reduce_492, - 1, 328, :_reduce_none, + 0, 315, :_reduce_423, + 0, 316, :_reduce_424, + 4, 251, :_reduce_425, + 4, 313, :_reduce_426, + 1, 313, :_reduce_427, + 3, 314, :_reduce_428, + 3, 314, :_reduce_429, + 3, 318, :_reduce_430, + 2, 192, :_reduce_431, + 4, 192, :_reduce_432, + 5, 192, :_reduce_433, + 5, 192, :_reduce_434, + 0, 321, :_reduce_435, + 3, 250, :_reduce_436, + 4, 250, :_reduce_437, + 4, 250, :_reduce_438, + 3, 250, :_reduce_439, + 3, 250, :_reduce_440, + 3, 250, :_reduce_441, + 2, 250, :_reduce_442, + 1, 250, :_reduce_443, + 4, 250, :_reduce_444, + 0, 322, :_reduce_445, + 4, 249, :_reduce_446, + 0, 323, :_reduce_447, + 4, 249, :_reduce_448, + 0, 324, :_reduce_449, + 0, 325, :_reduce_450, + 4, 197, :_reduce_451, + 0, 326, :_reduce_452, + 0, 327, :_reduce_453, + 4, 319, :_reduce_454, + 0, 329, :_reduce_455, + 6, 260, :_reduce_456, 1, 328, :_reduce_none, 1, 328, :_reduce_none, - 1, 328, :_reduce_none, - 3, 210, :_reduce_497, - 1, 313, :_reduce_none, - 2, 313, :_reduce_499, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 202, :_reduce_509, - 1, 202, :_reduce_510, - 1, 202, :_reduce_511, - 1, 202, :_reduce_512, - 1, 202, :_reduce_513, - 1, 202, :_reduce_514, - 1, 202, :_reduce_515, - 1, 232, :_reduce_516, - 1, 232, :_reduce_517, - 1, 168, :_reduce_518, - 1, 168, :_reduce_519, - 1, 173, :_reduce_520, - 1, 173, :_reduce_521, - 1, 242, :_reduce_522, - 0, 329, :_reduce_523, - 4, 242, :_reduce_524, - 2, 242, :_reduce_525, - 3, 244, :_reduce_526, - 2, 244, :_reduce_527, - 4, 330, :_reduce_528, - 2, 330, :_reduce_529, - 2, 330, :_reduce_530, + 6, 160, :_reduce_459, + 0, 160, :_reduce_460, + 1, 330, :_reduce_461, 1, 330, :_reduce_none, - 2, 332, :_reduce_532, - 0, 332, :_reduce_533, - 6, 299, :_reduce_534, - 8, 299, :_reduce_535, - 4, 299, :_reduce_536, - 6, 299, :_reduce_537, - 4, 299, :_reduce_538, - 6, 299, :_reduce_539, - 2, 299, :_reduce_540, - 4, 299, :_reduce_541, - 6, 299, :_reduce_542, - 2, 299, :_reduce_543, - 4, 299, :_reduce_544, - 2, 299, :_reduce_545, - 4, 299, :_reduce_546, - 1, 299, :_reduce_547, - 0, 299, :_reduce_548, - 1, 295, :_reduce_549, - 1, 295, :_reduce_550, - 1, 295, :_reduce_551, - 1, 295, :_reduce_552, - 1, 278, :_reduce_none, - 1, 278, :_reduce_554, - 1, 334, :_reduce_none, - 1, 335, :_reduce_none, - 3, 335, :_reduce_557, - 1, 288, :_reduce_558, - 3, 288, :_reduce_559, - 1, 336, :_reduce_none, - 2, 337, :_reduce_561, - 1, 337, :_reduce_562, - 2, 338, :_reduce_563, - 1, 338, :_reduce_564, - 1, 282, :_reduce_none, - 3, 282, :_reduce_566, + 1, 330, :_reduce_none, + 2, 331, :_reduce_464, 1, 331, :_reduce_none, - 3, 331, :_reduce_568, - 1, 339, :_reduce_none, + 2, 162, :_reduce_466, + 1, 162, :_reduce_none, + 1, 237, :_reduce_468, + 1, 237, :_reduce_469, + 1, 237, :_reduce_none, + 1, 238, :_reduce_471, + 1, 333, :_reduce_472, + 1, 333, :_reduce_none, + 2, 333, :_reduce_474, + 3, 334, :_reduce_475, + 1, 334, :_reduce_476, + 3, 239, :_reduce_477, + 3, 240, :_reduce_478, + 3, 241, :_reduce_479, + 3, 241, :_reduce_480, + 1, 338, :_reduce_481, + 3, 338, :_reduce_482, 1, 339, :_reduce_none, - 2, 283, :_reduce_571, - 1, 283, :_reduce_572, - 3, 340, :_reduce_573, - 3, 341, :_reduce_574, - 1, 289, :_reduce_575, - 3, 289, :_reduce_576, - 1, 333, :_reduce_577, - 3, 333, :_reduce_578, - 1, 342, :_reduce_none, - 1, 342, :_reduce_none, - 2, 290, :_reduce_581, - 1, 290, :_reduce_582, - 1, 343, :_reduce_none, - 1, 343, :_reduce_none, - 2, 285, :_reduce_585, - 2, 284, :_reduce_586, - 0, 284, :_reduce_587, - 1, 245, :_reduce_none, - 0, 344, :_reduce_589, - 4, 245, :_reduce_590, - 1, 233, :_reduce_591, - 2, 233, :_reduce_592, - 1, 218, :_reduce_none, - 3, 218, :_reduce_594, - 3, 345, :_reduce_595, - 3, 345, :_reduce_596, - 4, 345, :_reduce_597, - 2, 345, :_reduce_598, - 2, 345, :_reduce_599, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 185, :_reduce_none, - 1, 185, :_reduce_none, - 1, 185, :_reduce_none, - 1, 185, :_reduce_none, - 1, 303, :_reduce_none, - 1, 303, :_reduce_none, - 1, 303, :_reduce_none, - 1, 184, :_reduce_none, - 1, 184, :_reduce_none, - 1, 172, :_reduce_none, + 2, 339, :_reduce_484, + 3, 243, :_reduce_485, + 0, 342, :_reduce_486, + 4, 243, :_reduce_487, + 1, 341, :_reduce_488, + 3, 341, :_reduce_489, + 3, 242, :_reduce_490, + 3, 242, :_reduce_491, + 3, 244, :_reduce_492, + 3, 244, :_reduce_493, + 1, 343, :_reduce_494, + 3, 343, :_reduce_495, + 1, 344, :_reduce_496, + 3, 344, :_reduce_497, + 1, 335, :_reduce_498, + 2, 335, :_reduce_499, + 1, 336, :_reduce_500, + 2, 336, :_reduce_501, + 1, 337, :_reduce_502, + 2, 337, :_reduce_503, + 1, 340, :_reduce_504, + 0, 346, :_reduce_505, + 3, 340, :_reduce_506, + 0, 347, :_reduce_507, + 4, 340, :_reduce_508, + 1, 345, :_reduce_509, + 1, 345, :_reduce_510, + 1, 345, :_reduce_511, + 1, 345, :_reduce_none, + 2, 218, :_reduce_513, + 1, 218, :_reduce_514, + 1, 348, :_reduce_none, + 1, 348, :_reduce_none, + 1, 348, :_reduce_none, + 1, 348, :_reduce_none, + 3, 219, :_reduce_519, + 1, 332, :_reduce_none, + 2, 332, :_reduce_521, + 1, 222, :_reduce_none, + 1, 222, :_reduce_none, + 1, 222, :_reduce_none, + 1, 222, :_reduce_none, + 1, 210, :_reduce_none, + 1, 210, :_reduce_none, + 1, 210, :_reduce_none, + 1, 210, :_reduce_none, + 1, 210, :_reduce_none, + 1, 211, :_reduce_531, + 1, 211, :_reduce_532, + 1, 211, :_reduce_533, + 1, 211, :_reduce_534, + 1, 211, :_reduce_535, + 1, 211, :_reduce_536, + 1, 211, :_reduce_537, + 1, 245, :_reduce_538, + 1, 245, :_reduce_539, + 1, 178, :_reduce_540, + 1, 178, :_reduce_541, + 1, 183, :_reduce_542, + 1, 183, :_reduce_543, + 0, 349, :_reduce_544, + 4, 264, :_reduce_545, + 1, 264, :_reduce_546, + 3, 268, :_reduce_547, + 0, 351, :_reduce_548, + 3, 268, :_reduce_549, + 4, 350, :_reduce_550, + 2, 350, :_reduce_551, + 2, 350, :_reduce_552, + 1, 350, :_reduce_none, + 2, 353, :_reduce_554, + 0, 353, :_reduce_555, + 6, 317, :_reduce_556, + 8, 317, :_reduce_557, + 4, 317, :_reduce_558, + 6, 317, :_reduce_559, + 4, 317, :_reduce_560, + 6, 317, :_reduce_561, + 2, 317, :_reduce_562, + 4, 317, :_reduce_563, + 6, 317, :_reduce_564, + 2, 317, :_reduce_565, + 4, 317, :_reduce_566, + 2, 317, :_reduce_567, + 4, 317, :_reduce_568, + 1, 317, :_reduce_569, + 0, 317, :_reduce_570, + 1, 312, :_reduce_571, + 1, 312, :_reduce_572, + 1, 312, :_reduce_573, + 1, 312, :_reduce_574, + 1, 294, :_reduce_none, + 1, 294, :_reduce_576, + 1, 355, :_reduce_none, + 1, 356, :_reduce_none, + 3, 356, :_reduce_579, + 1, 304, :_reduce_580, + 3, 304, :_reduce_581, + 1, 357, :_reduce_none, + 2, 358, :_reduce_583, + 1, 358, :_reduce_584, + 2, 359, :_reduce_585, + 1, 359, :_reduce_586, + 1, 298, :_reduce_none, + 3, 298, :_reduce_588, + 1, 352, :_reduce_none, + 3, 352, :_reduce_590, + 1, 360, :_reduce_none, + 1, 360, :_reduce_none, + 2, 299, :_reduce_593, + 1, 299, :_reduce_594, + 3, 361, :_reduce_595, + 3, 362, :_reduce_596, + 1, 305, :_reduce_597, + 3, 305, :_reduce_598, + 1, 354, :_reduce_599, + 3, 354, :_reduce_600, + 1, 363, :_reduce_none, + 1, 363, :_reduce_none, + 2, 306, :_reduce_603, + 1, 306, :_reduce_604, + 1, 364, :_reduce_none, + 1, 364, :_reduce_none, + 2, 301, :_reduce_607, + 2, 300, :_reduce_608, + 0, 300, :_reduce_609, + 1, 269, :_reduce_none, + 0, 365, :_reduce_611, + 4, 269, :_reduce_612, + 1, 248, :_reduce_613, + 2, 248, :_reduce_none, + 1, 231, :_reduce_none, + 3, 231, :_reduce_616, + 3, 366, :_reduce_617, + 2, 366, :_reduce_618, + 4, 366, :_reduce_619, + 2, 366, :_reduce_620, + 1, 200, :_reduce_none, + 1, 200, :_reduce_none, + 1, 200, :_reduce_none, + 1, 194, :_reduce_none, + 1, 194, :_reduce_none, + 1, 194, :_reduce_none, + 1, 194, :_reduce_none, + 1, 320, :_reduce_none, + 1, 320, :_reduce_none, + 1, 320, :_reduce_none, + 1, 270, :_reduce_none, + 1, 270, :_reduce_none, + 1, 182, :_reduce_none, + 1, 193, :_reduce_none, + 1, 193, :_reduce_none, 0, 150, :_reduce_none, 1, 150, :_reduce_none, - 0, 179, :_reduce_none, - 1, 179, :_reduce_none, - 2, 196, :_reduce_none, - 2, 171, :_reduce_none, - 0, 217, :_reduce_none, - 1, 217, :_reduce_none, - 1, 217, :_reduce_none, - 1, 243, :_reduce_622, - 1, 243, :_reduce_none, + 0, 184, :_reduce_none, + 1, 184, :_reduce_none, + 2, 205, :_reduce_none, + 2, 181, :_reduce_none, + 0, 230, :_reduce_none, + 1, 230, :_reduce_none, + 1, 230, :_reduce_none, + 1, 265, :_reduce_645, + 1, 265, :_reduce_none, 1, 153, :_reduce_none, - 2, 153, :_reduce_625, - 0, 151, :_reduce_626 ] + 2, 153, :_reduce_648, + 0, 151, :_reduce_649 ] -racc_reduce_n = 627 +racc_reduce_n = 650 -racc_shift_n = 1058 +racc_shift_n = 1094 racc_token_table = { false => 0, @@ -3082,8 +3135,8 @@ :tRATIONAL => 140, :tIMAGINARY => 141, :tLABEL_END => 142, - :tEQL => 143, - :tLOWEST => 144 } + :tLOWEST => 143, + :tEQL => 144 } racc_nt_base = 145 @@ -3249,8 +3302,8 @@ "tRATIONAL", "tIMAGINARY", "tLABEL_END", - "tEQL", "tLOWEST", + "tEQL", "$start", "program", "top_compstmt", @@ -3261,44 +3314,53 @@ "top_stmt", "terms", "stmt", - "bodystmt", + "begin_block", "@2", + "bodystmt", + "@3", "compstmt", "opt_rescue", - "opt_else", + "k_else", "opt_ensure", + "@4", "stmts", + "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", + "lhs", + "mrhs", + "mrhs_arg", + "expr", + "@5", + "command_rhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@3", "opt_nl", "arg", + "expr_value_do", + "do", + "@6", + "@7", "command", "block_command", "block_call", - "dot_or_colon", + "call_op2", "operation2", "command_args", "cmd_brace_block", - "opt_block_param", + "brace_body", "fcall", - "@4", - "@5", + "@8", "operation", + "k_return", "call_args", "mlhs_basic", "mlhs_inner", @@ -3317,9 +3379,13 @@ "fsym", "symbol", "dsym", - "@6", + "@9", + "arg_rhs", "simple_numeric", + "rel_expr", "primary", + "relop", + "@10", "arg_value", "aref_args", "args", @@ -3329,7 +3395,7 @@ "opt_paren_args", "opt_block_arg", "block_arg", - "@7", + "@11", "literal", "strings", "xstring", @@ -3339,23 +3405,31 @@ "symbols", "qsymbols", "var_ref", + "k_begin", + "k_end", "assoc_list", "brace_block", "method_call", "lambda", + "k_if", "then", "if_tail", - "do", + "k_unless", + "opt_else", + "k_while", + "k_until", + "k_case", "case_body", + "k_for", "for_var", + "k_class", "superclass", "term", + "k_module", + "k_def", "f_arglist", "singleton", - "@8", - "@9", - "@10", - "@11", + "dot_or_colon", "@12", "@13", "@14", @@ -3372,17 +3446,12 @@ "@25", "@26", "@27", - "k_begin", - "k_if", - "k_unless", - "k_while", - "k_until", - "k_case", - "k_for", - "k_class", - "k_module", - "k_def", - "k_end", + "k_do", + "k_do_block", + "k_rescue", + "k_ensure", + "k_when", + "k_elsif", "f_marg", "f_norm_arg", "f_margs", @@ -3397,6 +3466,7 @@ "f_arg", "f_block_optarg", "f_rest_arg", + "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", @@ -3405,18 +3475,20 @@ "f_larglist", "lambda_body", "@28", + "@29", "f_args", "do_block", - "@29", - "@30", + "do_body", "operation3", + "@30", "@31", "@32", "@33", "@34", "@35", - "cases", "@36", + "cases", + "@37", "exc_list", "exc_var", "numeric", @@ -3429,14 +3501,16 @@ "word", "string_content", "symbol_list", + "@38", "qword_list", "qsym_list", "string_dvar", - "@37", - "@38", - "sym", "@39", + "@40", + "sym", + "@41", "args_tail", + "@42", "f_kwarg", "opt_args_tail", "f_optarg", @@ -3450,7 +3524,7 @@ "f_block_opt", "restarg_mark", "blkarg_mark", - "@40", + "@43", "assoc" ] Racc_debug_parser = false @@ -3460,20 +3534,21 @@ # reduce 0 omitted def _reduce_1(val, _values, result) - self.lexer.lex_state = :expr_beg - + self.lexer.lex_state = EXPR_BEG + result end def _reduce_2(val, _values, result) result = new_compstmt val - + result end def _reduce_3(val, _values, result) - result = val[0] - + stmt, _ = val + result = stmt + result end @@ -3483,22 +3558,13 @@ def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] - + result end # reduce 7 omitted -def _reduce_8(val, _values, result) - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - - result -end +# reduce 8 omitted def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then @@ -3506,707 +3572,833 @@ yyerror "BEGIN in method" end self.env.extend - + result end def _reduce_10(val, _values, result) - result = new_iter s(:preexe), nil, val[3] - + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + result end def _reduce_11(val, _values, result) - result = new_body val - + result = lexer.lineno result end def _reduce_12(val, _values, result) - result = new_compstmt val - + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt + result end -# reduce 13 omitted - -# reduce 14 omitted +def _reduce_13(val, _values, result) + res = _values[-2] + yyerror "else without rescue is useless" unless res -def _reduce_15(val, _values, result) - result = self.block_append val[0], val[2] - result end -def _reduce_16(val, _values, result) - result = val[1] - debug20 2, val, result - +def _reduce_14(val, _values, result) + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + result end -def _reduce_17(val, _values, result) - lexer.lex_state = :expr_fname - result = self.lexer.lineno - +def _reduce_15(val, _values, result) + body, resc, ens = val + + result = new_body [body, resc, nil, ens] + result end -def _reduce_18(val, _values, result) - result = s(:alias, val[1], val[3]).line(val[2]) - +def _reduce_16(val, _values, result) + result = new_compstmt val + result end +# reduce 17 omitted + +# reduce 18 omitted + def _reduce_19(val, _values, result) - result = s(:valias, val[1].to_sym, val[2].to_sym) - + result = self.block_append val[0], val[2] + result end def _reduce_20(val, _values, result) - result = s(:valias, val[1].to_sym, :"$#{val[2]}") - - result -end + result = val[1] + debug20 2, val, result -def _reduce_21(val, _values, result) - yyerror "can't make alias for the number variables" - result end +# reduce 21 omitted + def _reduce_22(val, _values, result) - result = val[1] - + yyerror "BEGIN is permitted only at toplevel" + result end def _reduce_23(val, _values, result) - result = new_if val[2], val[0], nil - + lexer.lex_state = EXPR_FNAME + result end def _reduce_24(val, _values, result) - result = new_if val[2], nil, val[0] - + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line + result end def _reduce_25(val, _values, result) - result = new_while val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line + result end def _reduce_26(val, _values, result) - result = new_until val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line + result end def _reduce_27(val, _values, result) - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) - + yyerror "can't make alias for the number variables" + result end def _reduce_28(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 3 - yyerror "END in method; use at_exit" - end - result = new_iter s(:postexe), 0, val[2] - + result = val[1] + result end -# reduce 29 omitted +def _reduce_29(val, _values, result) + t, _, c = val + result = new_if c, t, nil + + result +end def _reduce_30(val, _values, result) - result = new_masgn val[0], val[2], :wrap - + f, _, c = val + result = new_if c, nil, f + result end def _reduce_31(val, _values, result) - result = new_op_asgn val - + e, _, c = val + result = new_while e, c, true + result end def _reduce_32(val, _values, result) - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - + e, _, c = val + result = new_until e, c, true + result end def _reduce_33(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn - end - result.line = val[0].line - + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody + result end def _reduce_34(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn + (_, line), _, stmt, _ = val + + if (self.in_def || self.in_single > 0) then + debug20 3 + yyerror "END in method; use at_exit" end - result.line = val[0].line - - result -end -def _reduce_35(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result - + result = new_iter s(:postexe).line(line), 0, stmt + result end +# reduce 35 omitted + def _reduce_36(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result - + result = new_masgn val[0], val[2], :wrap + result end def _reduce_37(val, _values, result) - self.backref_assign_error val[0] - + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + result end def _reduce_38(val, _values, result) - result = new_assign val[0], s(:svalue, val[2]) - + result = new_masgn val[0], val[2] + result end -def _reduce_39(val, _values, result) - result = new_masgn val[0], val[2] - +# reduce 39 omitted + +def _reduce_40(val, _values, result) + result = new_assign val[0], val[2] + result end -# reduce 40 omitted - def _reduce_41(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn val + result end def _reduce_42(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn1 val + result end -# reduce 43 omitted +def _reduce_43(val, _values, result) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + + result +end def _reduce_44(val, _values, result) - result = logical_op :and, val[0], val[2] - + result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + result end def _reduce_45(val, _values, result) - result = logical_op :or, val[0], val[2] - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_46(val, _values, result) - result = s(:call, val[2], :"!") - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_47(val, _values, result) - result = s(:call, val[1], :"!") - + self.backref_assign_error val[0] + result end -# reduce 48 omitted +def _reduce_48(val, _values, result) + expr, = val + result = value_expr expr -def _reduce_49(val, _values, result) - result = value_expr(val[0]) - result end +# reduce 49 omitted + # reduce 50 omitted -# reduce 51 omitted +def _reduce_51(val, _values, result) + lhs, _, rhs = val + result = logical_op :and, lhs, rhs + + result +end -# reduce 52 omitted +def _reduce_52(val, _values, result) + lhs, _, rhs = val + result = logical_op :or, lhs, rhs -def _reduce_53(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - result end -def _reduce_54(val, _values, result) - self.env.extend(:dynamic) - result = self.lexer.lineno - +def _reduce_53(val, _values, result) + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op + result end -def _reduce_55(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_54(val, _values, result) + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y + result end +# reduce 55 omitted + def _reduce_56(val, _values, result) - result = new_iter nil, val[2], val[4] - result.line = val[1] + result = value_expr(val[0]) - self.env.unextend - result end def _reduce_57(val, _values, result) - result = new_call nil, val[0].to_sym - + lexer.cond.push true + result end def _reduce_58(val, _values, result) - result = val[0].concat val[1].sexp_body # REFACTOR pattern - + lexer.cond.pop + result end def _reduce_59(val, _values, result) - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] - - result, operation = val[2], result - result.insert 1, operation - end - - result -end + _, expr, _, _ = val + result = expr -def _reduce_60(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3], val[1] - result end -def _reduce_61(val, _values, result) - recv, _, msg, args, block = val - call = new_call recv, msg.to_sym, args, val[1] - - block_dup_check call, block +# reduce 60 omitted - block.insert 1, call - result = block - - result -end +# reduce 61 omitted -def _reduce_62(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end +# reduce 62 omitted def _reduce_63(val, _values, result) - recv, _, msg, args, block = val - call = new_call recv, msg.to_sym, args + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line - block_dup_check call, block - - block.insert 1, call - result = block - result end def _reduce_64(val, _values, result) - result = new_super val[1] - + # self.env.extend(:dynamic) + result = self.lexer.lineno + result end def _reduce_65(val, _values, result) - result = new_yield val[1] - + _, line, body, _ = val + + result = body + result.line = line + + # self.env.unextend + result end def _reduce_66(val, _values, result) - line = val[0].last - result = s(:return, ret_args(val[1])).line(line) - + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno + result end def _reduce_67(val, _values, result) - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) - + call, args = val + result = call.concat args.sexp_body + result end def _reduce_68(val, _values, result) - line = val[0].last - result = s(:next, ret_args(val[1])).line(line) - + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result + result.insert 1, operation + end + result end -# reduce 69 omitted +def _reduce_69(val, _values, result) + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop + + result +end def _reduce_70(val, _values, result) - result = val[1] - + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args, val[1] + + block_dup_check call, block + + block.insert 1, call + result = block + result end -# reduce 71 omitted +def _reduce_71(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3] + + result +end def _reduce_72(val, _values, result) - result = s(:masgn, s(:array, val[1])) - + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args + + block_dup_check call, block + + block.insert 1, call + result = block + result end def _reduce_73(val, _values, result) - result = s(:masgn, val[0]) - + result = new_super val[1] + result end def _reduce_74(val, _values, result) - result = s(:masgn, val[0] << val[1].compact) - + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield + result end def _reduce_75(val, _values, result) - result = s(:masgn, val[0] << s(:splat, val[2])) - + line = val[0].last + result = s(:return, ret_args(val[1])).line(line) + result end def _reduce_76(val, _values, result) - ary1, _, splat, _, ary2 = val + (_, line), args = val + result = s(:break, ret_args(args)).line line - result = list_append ary1, s(:splat, splat) - result.concat ary2.sexp_body - result = s(:masgn, result) - result end def _reduce_77(val, _values, result) - result = s(:masgn, val[0] << s(:splat)) - - result -end + line = val[0].last + result = s(:next, ret_args(val[1])).line(line) -def _reduce_78(val, _values, result) - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - result end +# reduce 78 omitted + def _reduce_79(val, _values, result) - result = s(:masgn, s(:array, s(:splat, val[1]))) - - result -end + result = val[1] -def _reduce_80(val, _values, result) - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - result end +# reduce 80 omitted + def _reduce_81(val, _values, result) - result = s(:masgn, s(:array, s(:splat))) - + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l + result end def _reduce_82(val, _values, result) - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) - + head, = val + result = s(:masgn, head).line head.line + result end -# reduce 83 omitted +def _reduce_83(val, _values, result) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line + + result +end def _reduce_84(val, _values, result) - result = val[1] - + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line + result end def _reduce_85(val, _values, result) - result = s(:array, val[0]) - + ary1, _, splat, _, ary2 = val + + result = list_append ary1, s(:splat, splat).line(splat.line) + result.concat ary2.sexp_body + result = s(:masgn, result).line result.line + result end def _reduce_86(val, _values, result) - result = val[0] << val[1].compact - + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l + result end def _reduce_87(val, _values, result) - result = s(:array, val[0]) - + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end def _reduce_88(val, _values, result) - result = list_append val[0], val[2] - + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l + result end def _reduce_89(val, _values, result) - result = self.assignable val[0] - + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end def _reduce_90(val, _values, result) - result = self.assignable val[0] - + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l + result end def _reduce_91(val, _values, result) - result = self.aryset val[0], val[2] - - result -end + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l -def _reduce_92(val, _values, result) - result = new_attrasgn val[0], val[2], val[1] - result end +# reduce 92 omitted + def _reduce_93(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - + result = val[1] + result end def _reduce_94(val, _values, result) - result = new_attrasgn val[0], val[2], val[1] - + lhs, _ = val + result = s(:array, lhs).line lhs.line + result end def _reduce_95(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 7 - yyerror "dynamic constant assignment" - end + result = val[0] << val[1].compact - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) - result end def _reduce_96(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 8 - yyerror "dynamic constant assignment" - end + item, = val + result = s(:array, item).line item.line - result = s(:const, nil, s(:colon3, val[1].to_sym)) - result end def _reduce_97(val, _values, result) - self.backref_assign_error val[0] - + result = list_append val[0], val[2] + result end def _reduce_98(val, _values, result) result = self.assignable val[0] - + result end def _reduce_99(val, _values, result) result = self.assignable val[0] - debug20 9, val, result - + result end def _reduce_100(val, _values, result) result = self.aryset val[0], val[2] - + result end def _reduce_101(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end def _reduce_102(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - + recv, _, id = val + result = new_attrasgn recv, id + result end def _reduce_103(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end def _reduce_104(val, _values, result) if (self.in_def || self.in_single > 0) then - debug20 10 + debug20 7 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) - + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l + result end def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then - debug20 11 + debug20 8 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) - + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l + result end def _reduce_106(val, _values, result) self.backref_assign_error val[0] - - result -end -def _reduce_107(val, _values, result) - yyerror "class/module name must be CONSTANT" - result end -# reduce 108 omitted +def _reduce_107(val, _values, result) + line = lexer.lineno + result = self.assignable val[0] + result.line = line + + result +end + +def _reduce_108(val, _values, result) + line = lexer.lineno + result = self.assignable val[0] + result.line = line + debug20 9, val, result + + result +end + +def _reduce_109(val, _values, result) + lhs, _, args, _ = val + result = self.aryset lhs, args -def _reduce_109(val, _values, result) - result = s(:colon3, val[1].to_sym) - result end def _reduce_110(val, _values, result) - result = val[0].to_sym - + lhs, op, id = val + result = new_attrasgn lhs, id, op + result end def _reduce_111(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - + lhs, _, id = val + result = new_attrasgn lhs, id + result end -# reduce 112 omitted +def _reduce_112(val, _values, result) + result = new_attrasgn val[0], val[2], val[1] -# reduce 113 omitted + result +end -# reduce 114 omitted +def _reduce_113(val, _values, result) + expr, _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 10 + yyerror "dynamic constant assignment" + end + + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l + + result +end + +def _reduce_114(val, _values, result) + _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 11 + yyerror "dynamic constant assignment" + end + + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l + + result +end def _reduce_115(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - + self.backref_assign_error val[0] + result end def _reduce_116(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - + yyerror "class/module name must be CONSTANT" + result end # reduce 117 omitted -# reduce 118 omitted +def _reduce_118(val, _values, result) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno -def _reduce_119(val, _values, result) - result = s(:lit, val[0].to_sym) - result end -# reduce 120 omitted +def _reduce_119(val, _values, result) + result = val[0].to_sym -def _reduce_121(val, _values, result) - result = new_undef val[0] - result end -def _reduce_122(val, _values, result) - lexer.lex_state = :expr_fname - +def _reduce_120(val, _values, result) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line + result end -def _reduce_123(val, _values, result) - result = new_undef val[0], val[3] - +# reduce 121 omitted + +# reduce 122 omitted + +# reduce 123 omitted + +def _reduce_124(val, _values, result) + lexer.lex_state = EXPR_END + result = val[0] + result end -# reduce 124 omitted +def _reduce_125(val, _values, result) + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym -# reduce 125 omitted + result +end # reduce 126 omitted # reduce 127 omitted -# reduce 128 omitted +def _reduce_128(val, _values, result) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno + + result +end # reduce 129 omitted -# reduce 130 omitted +def _reduce_130(val, _values, result) + result = new_undef val[0] -# reduce 131 omitted + result +end -# reduce 132 omitted +def _reduce_131(val, _values, result) + lexer.lex_state = EXPR_FNAME + + result +end + +def _reduce_132(val, _values, result) + result = new_undef val[0], val[3] + + result +end # reduce 133 omitted @@ -4332,1280 +4524,1376 @@ # reduce 194 omitted -def _reduce_195(val, _values, result) +# reduce 195 omitted + +# reduce 196 omitted + +# reduce 197 omitted + +# reduce 198 omitted + +# reduce 199 omitted + +# reduce 200 omitted + +# reduce 201 omitted + +# reduce 202 omitted + +# reduce 203 omitted + +# reduce 204 omitted + +def _reduce_205(val, _values, result) result = new_assign val[0], val[2] - - result -end -def _reduce_196(val, _values, result) - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - result end -def _reduce_197(val, _values, result) +def _reduce_206(val, _values, result) result = new_op_asgn val - + result end -def _reduce_198(val, _values, result) - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) - +def _reduce_207(val, _values, result) + result = new_op_asgn1 val + result end -def _reduce_199(val, _values, result) - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - +def _reduce_208(val, _values, result) + result = new_op_asgn2 val + result end -def _reduce_200(val, _values, result) +def _reduce_209(val, _values, result) result = new_op_asgn2 val - + result end -def _reduce_201(val, _values, result) - result = new_op_asgn2 val - +def _reduce_210(val, _values, result) + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line + result end -def _reduce_202(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - +def _reduce_211(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_203(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_212(val, _values, result) + result = self.lexer.lineno + result end -def _reduce_204(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_213(val, _values, result) + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_205(val, _values, result) - self.backref_assign_error val[0] - +def _reduce_214(val, _values, result) + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn + result end -def _reduce_206(val, _values, result) +def _reduce_215(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end - + result end -def _reduce_207(val, _values, result) +def _reduce_216(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end - + result end -def _reduce_208(val, _values, result) +def _reduce_217(val, _values, result) result = new_call val[0], :+, argl(val[2]) - + result end -def _reduce_209(val, _values, result) +def _reduce_218(val, _values, result) result = new_call val[0], :-, argl(val[2]) - + result end -def _reduce_210(val, _values, result) +def _reduce_219(val, _values, result) result = new_call val[0], :*, argl(val[2]) - + result end -def _reduce_211(val, _values, result) +def _reduce_220(val, _values, result) result = new_call val[0], :"/", argl(val[2]) - + result end -def _reduce_212(val, _values, result) +def _reduce_221(val, _values, result) result = new_call val[0], :"%", argl(val[2]) - + result end -def _reduce_213(val, _values, result) +def _reduce_222(val, _values, result) result = new_call val[0], :**, argl(val[2]) - + result end -def _reduce_214(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - +def _reduce_223(val, _values, result) + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + + result end -def _reduce_215(val, _values, result) +def _reduce_224(val, _values, result) result = new_call val[1], :"+@" - + result end -def _reduce_216(val, _values, result) +def _reduce_225(val, _values, result) result = new_call val[1], :"-@" - + result end -def _reduce_217(val, _values, result) +def _reduce_226(val, _values, result) result = new_call val[0], :"|", argl(val[2]) - + result end -def _reduce_218(val, _values, result) +def _reduce_227(val, _values, result) result = new_call val[0], :"^", argl(val[2]) - - result -end -def _reduce_219(val, _values, result) - result = new_call val[0], :"&", argl(val[2]) - result end -def _reduce_220(val, _values, result) - result = new_call val[0], :"<=>", argl(val[2]) - - result -end +def _reduce_228(val, _values, result) + result = new_call val[0], :"&", argl(val[2]) -def _reduce_221(val, _values, result) - result = new_call val[0], :">", argl(val[2]) - result end -def _reduce_222(val, _values, result) - result = new_call val[0], :">=", argl(val[2]) - - result -end +def _reduce_229(val, _values, result) + result = new_call val[0], :"<=>", argl(val[2]) -def _reduce_223(val, _values, result) - result = new_call val[0], :"<", argl(val[2]) - result end -def _reduce_224(val, _values, result) - result = new_call val[0], :"<=", argl(val[2]) - - result -end +# reduce 230 omitted -def _reduce_225(val, _values, result) +def _reduce_231(val, _values, result) result = new_call val[0], :"==", argl(val[2]) - + result end -def _reduce_226(val, _values, result) +def _reduce_232(val, _values, result) result = new_call val[0], :"===", argl(val[2]) - + result end -def _reduce_227(val, _values, result) +def _reduce_233(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) - + result end -def _reduce_228(val, _values, result) - result = new_match val[0], val[2] - +def _reduce_234(val, _values, result) + lhs, _, rhs = val + result = new_match lhs, rhs + result end -def _reduce_229(val, _values, result) - result = s(:not, new_match(val[0], val[2])) - +def _reduce_235(val, _values, result) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line + result end -def _reduce_230(val, _values, result) - result = new_call val[1], :"!" - +def _reduce_236(val, _values, result) + _, arg = val + result = new_call arg, :"!" + result.line arg.line + result end -def _reduce_231(val, _values, result) +def _reduce_237(val, _values, result) result = new_call value_expr(val[1]), :"~" - + result end -def _reduce_232(val, _values, result) +def _reduce_238(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) - + result end -def _reduce_233(val, _values, result) +def _reduce_239(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) - + result end -def _reduce_234(val, _values, result) +def _reduce_240(val, _values, result) result = logical_op :and, val[0], val[2] - + result end -def _reduce_235(val, _values, result) +def _reduce_241(val, _values, result) result = logical_op :or, val[0], val[2] - + result end -def _reduce_236(val, _values, result) - result = s(:defined, val[2]) - +def _reduce_242(val, _values, result) + (_, line), _, arg = val + result = s(:defined, arg).line line + result end -def _reduce_237(val, _values, result) - result = s(:if, val[0], val[2], val[5]) - +def _reduce_243(val, _values, result) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line + result end -# reduce 238 omitted +# reduce 244 omitted -def _reduce_239(val, _values, result) +# reduce 245 omitted + +# reduce 246 omitted + +# reduce 247 omitted + +# reduce 248 omitted + +def _reduce_249(val, _values, result) + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_250(val, _values, result) + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_251(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 240 omitted +# reduce 252 omitted -def _reduce_241(val, _values, result) +def _reduce_253(val, _values, result) result = args [val[0]] - + result end -def _reduce_242(val, _values, result) +def _reduce_254(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_243(val, _values, result) +def _reduce_255(val, _values, result) result = args [array_to_hash(val[0])] - - result -end -def _reduce_244(val, _values, result) - result = val[1] - result end -# reduce 245 omitted +# reduce 256 omitted -# reduce 246 omitted +def _reduce_257(val, _values, result) + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) -def _reduce_247(val, _values, result) - result = val[0] - result end -def _reduce_248(val, _values, result) - result = val[0] - +def _reduce_258(val, _values, result) + _, args, _ = val + result = args + result end -def _reduce_249(val, _values, result) +# reduce 259 omitted + +# reduce 260 omitted + +# reduce 261 omitted + +# reduce 262 omitted + +def _reduce_263(val, _values, result) result = args val - + result end -def _reduce_250(val, _values, result) +def _reduce_264(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_251(val, _values, result) +def _reduce_265(val, _values, result) result = args [array_to_hash(val[0])] - + result end -def _reduce_252(val, _values, result) +def _reduce_266(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val - + result end -def _reduce_253(val, _values, result) +def _reduce_267(val, _values, result) result = call_args val - result = self.arg_blk_pass val[0], val[1] - + result end -def _reduce_254(val, _values, result) - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] - +def _reduce_268(val, _values, result) + result = call_args [array_to_hash(val[0]), val[1]] + result end -def _reduce_255(val, _values, result) - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] - +def _reduce_269(val, _values, result) + result = call_args [val[0], array_to_hash(val[2]), val[3]] + result end -def _reduce_256(val, _values, result) +def _reduce_270(val, _values, result) result = call_args val - + result end -def _reduce_257(val, _values, result) - result = lexer.cmdarg.stack.dup # TODO: smell? +def _reduce_271(val, _values, result) + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true - + lexer.cmdarg.push false if lookahead + result end -def _reduce_258(val, _values, result) - lexer.cmdarg.stack.replace val[0] - result = val[1] - +def _reduce_272(val, _values, result) + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args + result end -def _reduce_259(val, _values, result) - result = s(:block_pass, val[1]) - +def _reduce_273(val, _values, result) + _, arg = val + result = s(:block_pass, arg).line arg.line + result end -def _reduce_260(val, _values, result) +def _reduce_274(val, _values, result) result = val[1] - + result end -# reduce 261 omitted +# reduce 275 omitted + +def _reduce_276(val, _values, result) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno -def _reduce_262(val, _values, result) - result = s(:array, val[0]) - result end -def _reduce_263(val, _values, result) - result = s(:array, s(:splat, val[1])) - +def _reduce_277(val, _values, result) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line + result end -def _reduce_264(val, _values, result) - result = self.list_append val[0], val[2] - +def _reduce_278(val, _values, result) + args, _, id = val + result = self.list_append args, id + result end -def _reduce_265(val, _values, result) - result = self.list_append val[0], s(:splat, val[3]) - +def _reduce_279(val, _values, result) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) + result end -def _reduce_266(val, _values, result) +def _reduce_280(val, _values, result) result = new_masgn_arg val[0] - + result end -def _reduce_267(val, _values, result) +def _reduce_281(val, _values, result) result = new_masgn_arg val[0], :wrap - + result end -def _reduce_268(val, _values, result) +def _reduce_282(val, _values, result) result = val[0] << val[2] - + result end -def _reduce_269(val, _values, result) - result = self.arg_concat val[0], val[3] - +def _reduce_283(val, _values, result) + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat + result end -def _reduce_270(val, _values, result) - result = s(:splat, val[1]) - +def _reduce_284(val, _values, result) + _, arg = val + result = s(:splat, arg).line arg.line + result end -# reduce 271 omitted +# reduce 285 omitted -# reduce 272 omitted +# reduce 286 omitted -# reduce 273 omitted +# reduce 287 omitted -# reduce 274 omitted +# reduce 288 omitted -# reduce 275 omitted +# reduce 289 omitted -# reduce 276 omitted +# reduce 290 omitted -# reduce 277 omitted +# reduce 291 omitted -# reduce 278 omitted +# reduce 292 omitted -# reduce 279 omitted +# reduce 293 omitted -# reduce 280 omitted +# reduce 294 omitted + +def _reduce_295(val, _values, result) + msg, = val + result = new_call nil, msg.to_sym -def _reduce_281(val, _values, result) - result = new_call nil, val[0].to_sym - result end -def _reduce_282(val, _values, result) +def _reduce_296(val, _values, result) + lexer.cmdarg.push false result = self.lexer.lineno - + result end -def _reduce_283(val, _values, result) - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end +def _reduce_297(val, _values, result) + lexer.cmdarg.pop + result = new_begin val - result.line = val[1] - result end -def _reduce_284(val, _values, result) - debug20 13, val, result - +def _reduce_298(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno + result end -def _reduce_285(val, _values, result) - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these - +def _reduce_299(val, _values, result) + _, line, _ = val + result = s(:begin).line line + result end -def _reduce_286(val, _values, result) - lexer.lex_state = :expr_endarg - +def _reduce_300(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result end -def _reduce_287(val, _values, result) - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] - +def _reduce_301(val, _values, result) + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt + result end -def _reduce_288(val, _values, result) - result = val[1] || s(:nil) +def _reduce_302(val, _values, result) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true - + result end -def _reduce_289(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - +def _reduce_303(val, _values, result) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line + result end -def _reduce_290(val, _values, result) - result = s(:colon3, val[1].to_sym) - +def _reduce_304(val, _values, result) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno + + result +end + +def _reduce_305(val, _values, result) + result = lexer.lineno result end -def _reduce_291(val, _values, result) - result = val[1] || s(:array) +def _reduce_306(val, _values, result) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args - + result.line line + result end -def _reduce_292(val, _values, result) +def _reduce_307(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_293(val, _values, result) +def _reduce_308(val, _values, result) result = new_hash val - + result end -def _reduce_294(val, _values, result) - result = s(:return) - +def _reduce_309(val, _values, result) + (_, line), = val + result = s(:return).line line + result end -def _reduce_295(val, _values, result) +def _reduce_310(val, _values, result) result = new_yield val[2] - + result end -def _reduce_296(val, _values, result) +def _reduce_311(val, _values, result) result = new_yield - + result end -def _reduce_297(val, _values, result) +def _reduce_312(val, _values, result) result = new_yield - + result end -def _reduce_298(val, _values, result) - result = s(:defined, val[3]) - +def _reduce_313(val, _values, result) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line + result end -def _reduce_299(val, _values, result) - result = s(:call, val[2], :"!") - +def _reduce_314(val, _values, result) + _, _, lhs, _ = val + result = new_call lhs, :"!" + result end -def _reduce_300(val, _values, result) +def _reduce_315(val, _values, result) debug20 14, val, result - + result end -def _reduce_301(val, _values, result) - oper, iter = val[0], val[1] - call = oper # FIX +def _reduce_316(val, _values, result) + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line - + # FIX: probably not: call.line = iter.line + result end -# reduce 302 omitted +# reduce 317 omitted -def _reduce_303(val, _values, result) +def _reduce_318(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter - + result end -def _reduce_304(val, _values, result) +def _reduce_319(val, _values, result) result = val[1] # TODO: fix lineno - - result -end -def _reduce_305(val, _values, result) - result = new_if val[1], val[3], val[4] - result end -def _reduce_306(val, _values, result) - result = new_if val[1], val[4], val[3] - - result -end +def _reduce_320(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, t, f -def _reduce_307(val, _values, result) - lexer.cond.push true - result end -def _reduce_308(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_321(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, f, t -def _reduce_309(val, _values, result) - result = new_while val[5], val[2], true - result end -def _reduce_310(val, _values, result) - lexer.cond.push true - - result -end +def _reduce_322(val, _values, result) + _, cond, body, _ = val + result = new_while body, cond, true -def _reduce_311(val, _values, result) - lexer.cond.pop - result end -def _reduce_312(val, _values, result) - result = new_until val[5], val[2], true - +def _reduce_323(val, _values, result) + _, cond, body, _ = val + result = new_until body, cond, true + result end -def _reduce_313(val, _values, result) +def _reduce_324(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line - + result end -def _reduce_314(val, _values, result) +def _reduce_325(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line - - result -end -def _reduce_315(val, _values, result) - lexer.cond.push true - result end -def _reduce_316(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_326(val, _values, result) + _, var, _, iter, body, _ = val + result = new_for iter, var, body -def _reduce_317(val, _values, result) - result = new_for val[4], val[1], val[7] - result end -def _reduce_318(val, _values, result) +def _reduce_327(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_319(val, _values, result) +def _reduce_328(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend - + result end -def _reduce_320(val, _values, result) +def _reduce_329(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_321(val, _values, result) +def _reduce_330(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_322(val, _values, result) +def _reduce_331(val, _values, result) result = self.in_def self.in_def = false - + result end -def _reduce_323(val, _values, result) +def _reduce_332(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend - + result end -def _reduce_324(val, _values, result) +def _reduce_333(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_325(val, _values, result) +def _reduce_334(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_326(val, _values, result) +def _reduce_335(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend - + result end -def _reduce_327(val, _values, result) +def _reduce_336(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_328(val, _values, result) - result = [self.in_def, self.lexer.cmdarg.stack.dup] +def _reduce_337(val, _values, result) + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments + result end -def _reduce_329(val, _values, result) - in_def, cmdarg = val[2] +def _reduce_338(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_339(val, _values, result) + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_330(val, _values, result) - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname - +def _reduce_340(val, _values, result) + lexer.lex_state = EXPR_FNAME + result end -def _reduce_331(val, _values, result) - self.in_single += 1 +def _reduce_341(val, _values, result) + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments + result end -def _reduce_332(val, _values, result) - line, cmdarg = val[5] - result = new_defs val - result[3].line line +def _reduce_342(val, _values, result) + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_333(val, _values, result) - result = s(:break) - +def _reduce_343(val, _values, result) + (_, line), = val + result = s(:break).line line + result end -def _reduce_334(val, _values, result) - result = s(:next) - +def _reduce_344(val, _values, result) + (_, line), = val + result = s(:next).line line + result end -def _reduce_335(val, _values, result) - result = s(:redo) - +def _reduce_345(val, _values, result) + (_, line), = val + result = s(:redo).line line + result end -def _reduce_336(val, _values, result) - result = s(:retry) - +def _reduce_346(val, _values, result) + (_, line), = val + result = s(:retry).line line + result end -def _reduce_337(val, _values, result) +def _reduce_347(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 338 omitted +# reduce 348 omitted + +# reduce 349 omitted + +# reduce 350 omitted -# reduce 339 omitted +# reduce 351 omitted -# reduce 340 omitted +# reduce 352 omitted -# reduce 341 omitted +# reduce 353 omitted -# reduce 342 omitted +# reduce 354 omitted -# reduce 343 omitted +# reduce 355 omitted -# reduce 344 omitted +# reduce 356 omitted -# reduce 345 omitted +# reduce 357 omitted -# reduce 346 omitted +# reduce 358 omitted -# reduce 347 omitted +# reduce 359 omitted -# reduce 348 omitted +# reduce 360 omitted -# reduce 349 omitted +# reduce 361 omitted -# reduce 350 omitted +# reduce 362 omitted -# reduce 351 omitted +# reduce 363 omitted -# reduce 352 omitted +# reduce 364 omitted -# reduce 353 omitted +# reduce 365 omitted -# reduce 354 omitted +# reduce 366 omitted + +# reduce 367 omitted + +# reduce 368 omitted + +# reduce 369 omitted + +# reduce 370 omitted + +# reduce 371 omitted + +# reduce 372 omitted + +def _reduce_373(val, _values, result) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line -def _reduce_355(val, _values, result) - result = s(:if, val[1], val[3], val[4]) - result end -# reduce 356 omitted +# reduce 374 omitted -def _reduce_357(val, _values, result) +def _reduce_375(val, _values, result) result = val[1] - + result end -# reduce 358 omitted +# reduce 376 omitted -def _reduce_359(val, _values, result) +def _reduce_377(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK - + result end -# reduce 360 omitted +# reduce 378 omitted -def _reduce_361(val, _values, result) +def _reduce_379(val, _values, result) result = val[1] - + result end -def _reduce_362(val, _values, result) - result = s(:array, val[0]) - +def _reduce_380(val, _values, result) + sym, = val + + result = s(:array, sym).line lexer.lineno + result end -def _reduce_363(val, _values, result) +def _reduce_381(val, _values, result) result = list_append val[0], val[2] - + result end -def _reduce_364(val, _values, result) +def _reduce_382(val, _values, result) args, = val result = block_var args - + result end -def _reduce_365(val, _values, result) +def _reduce_383(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym - + result end -def _reduce_366(val, _values, result) +def _reduce_384(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 - + result end -def _reduce_367(val, _values, result) +def _reduce_385(val, _values, result) args, _, _ = val result = block_var args, :* - + result end -def _reduce_368(val, _values, result) +def _reduce_386(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 - + result end -def _reduce_369(val, _values, result) +def _reduce_387(val, _values, result) _, splat = val result = block_var :"*#{splat}" - + result end -def _reduce_370(val, _values, result) +def _reduce_388(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args - + result end -def _reduce_371(val, _values, result) +def _reduce_389(val, _values, result) result = block_var :* - + result end -def _reduce_372(val, _values, result) +def _reduce_390(val, _values, result) _, _, args = val result = block_var :*, args - + result end -def _reduce_373(val, _values, result) +def _reduce_391(val, _values, result) result = call_args val - + result end -def _reduce_374(val, _values, result) +def _reduce_392(val, _values, result) result = call_args val - + result end -def _reduce_375(val, _values, result) +def _reduce_393(val, _values, result) result = call_args val - + result end -def _reduce_376(val, _values, result) - result = call_args val - +def _reduce_394(val, _values, result) + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line + result end -def _reduce_377(val, _values, result) +def _reduce_395(val, _values, result) result = args val - + result end -# reduce 378 omitted +# reduce 396 omitted -def _reduce_379(val, _values, result) +def _reduce_397(val, _values, result) result = args val - + result end -def _reduce_380(val, _values, result) +def _reduce_398(val, _values, result) result = args val - + result end -def _reduce_381(val, _values, result) +def _reduce_399(val, _values, result) result = args val - + result end -def _reduce_382(val, _values, result) +def _reduce_400(val, _values, result) result = args val - + result end -def _reduce_383(val, _values, result) +def _reduce_401(val, _values, result) result = args val - + result end -def _reduce_384(val, _values, result) +def _reduce_402(val, _values, result) + result = args(val) << nil + + result +end + +def _reduce_403(val, _values, result) result = args val - + result end -def _reduce_385(val, _values, result) +def _reduce_404(val, _values, result) result = args val - + result end -def _reduce_386(val, _values, result) +def _reduce_405(val, _values, result) result = args val - + result end -def _reduce_387(val, _values, result) +def _reduce_406(val, _values, result) result = args val - + result end -def _reduce_388(val, _values, result) +def _reduce_407(val, _values, result) result = args val - + result end -def _reduce_389(val, _values, result) +def _reduce_408(val, _values, result) result = args val - + result end -def _reduce_390(val, _values, result) +def _reduce_409(val, _values, result) result = args val - + result end -def _reduce_391(val, _values, result) +def _reduce_410(val, _values, result) result = args val - + result end -def _reduce_392(val, _values, result) +def _reduce_411(val, _values, result) result = args val - + result end -def _reduce_393(val, _values, result) - result = args val - +def _reduce_412(val, _values, result) + result = 0 result end -def _reduce_394(val, _values, result) - result = 0 +def _reduce_413(val, _values, result) + self.lexer.command_start = true + result end -# reduce 395 omitted - -def _reduce_396(val, _values, result) +def _reduce_414(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -def _reduce_397(val, _values, result) - self.lexer.command_start = true - result = s(:args) - +def _reduce_415(val, _values, result) + result = s(:args).line lexer.lineno + result end -def _reduce_398(val, _values, result) +def _reduce_416(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -# reduce 399 omitted +# reduce 417 omitted -def _reduce_400(val, _values, result) +def _reduce_418(val, _values, result) result = args val - + result end -def _reduce_401(val, _values, result) +def _reduce_419(val, _values, result) result = args val - + result end -def _reduce_402(val, _values, result) +def _reduce_420(val, _values, result) result = args val - + result end -def _reduce_403(val, _values, result) - result = s(:shadow, val[0].to_sym) - +def _reduce_421(val, _values, result) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line + result end -# reduce 404 omitted +# reduce 422 omitted -def _reduce_405(val, _values, result) +def _reduce_423(val, _values, result) self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest - + result end -def _reduce_406(val, _values, result) - lpar, args, body = val +def _reduce_424(val, _values, result) + lexer.cmdarg.push false + + result +end + +def _reduce_425(val, _values, result) + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend - + result.line = line + self.env.unextend # TODO: dynapush & dynapop + result end -def _reduce_407(val, _values, result) +def _reduce_426(val, _values, result) result = args val - + result end -def _reduce_408(val, _values, result) +def _reduce_427(val, _values, result) result = val[0] result = 0 if result == s(:args) - - result -end -def _reduce_409(val, _values, result) - result = val[1] - result end -def _reduce_410(val, _values, result) +def _reduce_428(val, _values, result) result = val[1] - - result -end -def _reduce_411(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - result end -def _reduce_412(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_429(val, _values, result) + result = val[1] + result end -def _reduce_413(val, _values, result) - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] +def _reduce_430(val, _values, result) + (_, line), iter, _ = val + result = iter.line line - self.env.unextend - result end -def _reduce_414(val, _values, result) +def _reduce_431(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); @@ -5615,465 +5903,523 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] - + cmd, blk = val + + result = blk + result.insert 1, cmd + result end -def _reduce_415(val, _values, result) +def _reduce_432(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_416(val, _values, result) +def _reduce_433(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_417(val, _values, result) +def _reduce_434(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_418(val, _values, result) +def _reduce_435(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_419(val, _values, result) - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body - +def _reduce_436(val, _values, result) + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno + result end -def _reduce_420(val, _values, result) +def _reduce_437(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] - + result end -def _reduce_421(val, _values, result) +def _reduce_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_422(val, _values, result) +def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym - + result end -def _reduce_423(val, _values, result) +def _reduce_440(val, _values, result) result = new_call val[0], :call, val[2], val[1] - + result end -def _reduce_424(val, _values, result) +def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2] - + result end -def _reduce_425(val, _values, result) +def _reduce_442(val, _values, result) result = new_super val[1] - + result end -def _reduce_426(val, _values, result) - result = s(:zsuper) - +def _reduce_443(val, _values, result) + result = s(:zsuper).line lexer.lineno + result end -def _reduce_427(val, _values, result) +def _reduce_444(val, _values, result) result = new_aref val - + result end -def _reduce_428(val, _values, result) +def _reduce_445(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - - result -end -def _reduce_429(val, _values, result) - result = nil # self.env.dynamic.keys - result end -def _reduce_430(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_446(val, _values, result) + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend - + result end -def _reduce_431(val, _values, result) +def _reduce_447(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - + result end -def _reduce_432(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_448(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + result end -def _reduce_433(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_449(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end - result = new_iter nil, args, body - result.line = line +def _reduce_450(val, _values, result) + result = lexer.cmdarg.store(false) + result +end + +def _reduce_451(val, _values, result) + line, cmdarg, param, cmpstmt = val + result = new_brace_body param, cmpstmt, line self.env.unextend - + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + result end -def _reduce_434(val, _values, result) +def _reduce_452(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end + +def _reduce_453(val, _values, result) + lexer.cmdarg.push false + result +end + +def _reduce_454(val, _values, result) + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop + self.env.unextend + + result +end + +def _reduce_455(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_435(val, _values, result) +def _reduce_456(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] - + result end -# reduce 436 omitted +# reduce 457 omitted -# reduce 437 omitted +# reduce 458 omitted -def _reduce_438(val, _values, result) +def _reduce_459(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above - + result end -def _reduce_439(val, _values, result) +def _reduce_460(val, _values, result) result = nil - + result end -def _reduce_440(val, _values, result) - result = s(:array, val[0]) - +def _reduce_461(val, _values, result) + arg, = val + result = s(:array, arg).line arg.line + result end -# reduce 441 omitted +# reduce 462 omitted -# reduce 442 omitted +# reduce 463 omitted -def _reduce_443(val, _values, result) +def _reduce_464(val, _values, result) result = val[1] - + result end -# reduce 444 omitted +# reduce 465 omitted -def _reduce_445(val, _values, result) - _, body = val +def _reduce_466(val, _values, result) + (_, line), body = val + + result = body || s(:nil).line(line) - result = body || s(:nil) - result end -# reduce 446 omitted +# reduce 467 omitted -def _reduce_447(val, _values, result) +def _reduce_468(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -def _reduce_448(val, _values, result) +def _reduce_469(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -# reduce 449 omitted +# reduce 470 omitted + +def _reduce_471(val, _values, result) + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str -def _reduce_450(val, _values, result) - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] - result end -def _reduce_451(val, _values, result) +def _reduce_472(val, _values, result) debug20 23, val, result - + result end -# reduce 452 omitted +# reduce 473 omitted -def _reduce_453(val, _values, result) +def _reduce_474(val, _values, result) result = self.literal_concat val[0], val[1] - + result end -def _reduce_454(val, _values, result) - result = val[1] - +def _reduce_475(val, _values, result) + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str + result end -def _reduce_455(val, _values, result) +def _reduce_476(val, _values, result) result = new_string val - + result end -def _reduce_456(val, _values, result) - result = new_xstring val[1] - +def _reduce_477(val, _values, result) + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? + result end -def _reduce_457(val, _values, result) +def _reduce_478(val, _values, result) result = new_regexp val - + result end -def _reduce_458(val, _values, result) - result = s(:array) - +def _reduce_479(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_459(val, _values, result) +def _reduce_480(val, _values, result) result = val[1] - + result end -def _reduce_460(val, _values, result) +def _reduce_481(val, _values, result) result = new_word_list - + result end -def _reduce_461(val, _values, result) +def _reduce_482(val, _values, result) result = val[0].dup << new_word_list_entry(val) - + result end -# reduce 462 omitted +# reduce 483 omitted -def _reduce_463(val, _values, result) +def _reduce_484(val, _values, result) result = self.literal_concat val[0], val[1] - + result end -def _reduce_464(val, _values, result) - result = s(:array) - +def _reduce_485(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_465(val, _values, result) - result = val[1] - +def _reduce_486(val, _values, result) + result = lexer.lineno result end -def _reduce_466(val, _values, result) - result = new_symbol_list - +def _reduce_487(val, _values, result) + _, line, list, _, = val + list.line = line + result = list + result end -def _reduce_467(val, _values, result) - result = val[0].dup << new_symbol_list_entry(val) - +def _reduce_488(val, _values, result) + result = new_symbol_list.line lexer.lineno + result end -def _reduce_468(val, _values, result) - result = s(:array) - +def _reduce_489(val, _values, result) + list, * = val + result = list.dup << new_symbol_list_entry(val) + result end -def _reduce_469(val, _values, result) +def _reduce_490(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +def _reduce_491(val, _values, result) result = val[1] - + result end -def _reduce_470(val, _values, result) - result = s(:array) - +def _reduce_492(val, _values, result) + result = s(:array).line lexer.lineno # FIX + result end -def _reduce_471(val, _values, result) +def _reduce_493(val, _values, result) result = val[1] - + result end -def _reduce_472(val, _values, result) +def _reduce_494(val, _values, result) result = new_qword_list - + result end -def _reduce_473(val, _values, result) +def _reduce_495(val, _values, result) result = val[0].dup << new_qword_list_entry(val) - + result end -def _reduce_474(val, _values, result) +def _reduce_496(val, _values, result) result = new_qsym_list - + result end -def _reduce_475(val, _values, result) +def _reduce_497(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) - + result end -def _reduce_476(val, _values, result) - result = s(:str, "") - +def _reduce_498(val, _values, result) + result = s(:str, "").line lexer.lineno + result end -def _reduce_477(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_499(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_478(val, _values, result) +def _reduce_500(val, _values, result) result = nil - + result end -def _reduce_479(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_501(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_480(val, _values, result) +def _reduce_502(val, _values, result) result = nil - + result end -def _reduce_481(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_503(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_482(val, _values, result) +def _reduce_504(val, _values, result) result = new_string val - + result end -def _reduce_483(val, _values, result) +def _reduce_505(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? - + lexer.lex_state = EXPR_BEG + result end -def _reduce_484(val, _values, result) - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) - +def _reduce_506(val, _values, result) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line + result end -def _reduce_485(val, _values, result) +def _reduce_507(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value - + lexer.lex_state = EXPR_BEG + result end -def _reduce_486(val, _values, result) - # TODO: tRCURLY -> tSTRING_END +def _reduce_508(val, _values, result) _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -6083,716 +6429,727 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end - + result end -def _reduce_487(val, _values, result) - result = s(:gvar, val[0].to_sym) +def _reduce_509(val, _values, result) + result = s(:gvar, val[0].to_sym).line lexer.lineno result end -def _reduce_488(val, _values, result) - result = s(:ivar, val[0].to_sym) +def _reduce_510(val, _values, result) + result = s(:ivar, val[0].to_sym).line lexer.lineno result end -def _reduce_489(val, _values, result) - result = s(:cvar, val[0].to_sym) +def _reduce_511(val, _values, result) + result = s(:cvar, val[0].to_sym).line lexer.lineno result end -# reduce 490 omitted +# reduce 512 omitted -def _reduce_491(val, _values, result) - lexer.lex_state = :expr_end +def _reduce_513(val, _values, result) + lexer.lex_state = EXPR_END result = val[1].to_sym - + result end -def _reduce_492(val, _values, result) +def _reduce_514(val, _values, result) result = val[0].to_sym - + result end -# reduce 493 omitted +# reduce 515 omitted -# reduce 494 omitted +# reduce 516 omitted -# reduce 495 omitted +# reduce 517 omitted -# reduce 496 omitted +# reduce 518 omitted -def _reduce_497(val, _values, result) - lexer.lex_state = :expr_end - result = val[1] +def _reduce_519(val, _values, result) + _, result, _ = val - result ||= s(:str, "") + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end - + result end -# reduce 498 omitted +# reduce 520 omitted -def _reduce_499(val, _values, result) +def _reduce_521(val, _values, result) result = -val[1] # TODO: pt_testcase - + result end -# reduce 500 omitted +# reduce 522 omitted -# reduce 501 omitted +# reduce 523 omitted -# reduce 502 omitted +# reduce 524 omitted -# reduce 503 omitted +# reduce 525 omitted -# reduce 504 omitted +# reduce 526 omitted -# reduce 505 omitted +# reduce 527 omitted -# reduce 506 omitted +# reduce 528 omitted -# reduce 507 omitted +# reduce 529 omitted -# reduce 508 omitted +# reduce 530 omitted -def _reduce_509(val, _values, result) - result = s(:nil) +def _reduce_531(val, _values, result) + result = s(:nil).line lexer.lineno result end -def _reduce_510(val, _values, result) - result = s(:self) +def _reduce_532(val, _values, result) + result = s(:self).line lexer.lineno result end -def _reduce_511(val, _values, result) - result = s(:true) +def _reduce_533(val, _values, result) + result = s(:true).line lexer.lineno result end -def _reduce_512(val, _values, result) - result = s(:false) +def _reduce_534(val, _values, result) + result = s(:false).line lexer.lineno result end -def _reduce_513(val, _values, result) - result = s(:str, self.file) +def _reduce_535(val, _values, result) + result = s(:str, self.file).line lexer.lineno result end -def _reduce_514(val, _values, result) - result = s(:lit, lexer.lineno) +def _reduce_536(val, _values, result) + result = s(:lit, lexer.lineno).line lexer.lineno result end -def _reduce_515(val, _values, result) +def _reduce_537(val, _values, result) + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end - + result end -def _reduce_516(val, _values, result) +def _reduce_538(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_517(val, _values, result) +def _reduce_539(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_518(val, _values, result) +def _reduce_540(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_519(val, _values, result) +def _reduce_541(val, _values, result) result = self.assignable val[0] debug20 29, val, result - - result -end -def _reduce_520(val, _values, result) - result = s(:nth_ref, val[0]) result end -def _reduce_521(val, _values, result) - result = s(:back_ref, val[0]) +def _reduce_542(val, _values, result) + result = s(:nth_ref, val[0]).line lexer.lineno result end -def _reduce_522(val, _values, result) - result = nil - +def _reduce_543(val, _values, result) + result = s(:back_ref, val[0]).line lexer.lineno result end -def _reduce_523(val, _values, result) - lexer.lex_state = :expr_beg - +def _reduce_544(val, _values, result) + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_524(val, _values, result) +def _reduce_545(val, _values, result) result = val[2] - + result end -def _reduce_525(val, _values, result) - yyerrok +def _reduce_546(val, _values, result) result = nil - debug20 30, val, result - + result end -def _reduce_526(val, _values, result) +def _reduce_547(val, _values, result) result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; - + result end -def _reduce_527(val, _values, result) - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true - +def _reduce_548(val, _values, result) + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + result end -def _reduce_528(val, _values, result) +def _reduce_549(val, _values, result) + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true + + result +end + +def _reduce_550(val, _values, result) result = args val - + result end -def _reduce_529(val, _values, result) +def _reduce_551(val, _values, result) result = args val - + result end -def _reduce_530(val, _values, result) +def _reduce_552(val, _values, result) result = args val - + result end -# reduce 531 omitted +# reduce 553 omitted -def _reduce_532(val, _values, result) +def _reduce_554(val, _values, result) result = val[1] - + result end -def _reduce_533(val, _values, result) +def _reduce_555(val, _values, result) result = nil - + result end -def _reduce_534(val, _values, result) +def _reduce_556(val, _values, result) result = args val - + result end -def _reduce_535(val, _values, result) +def _reduce_557(val, _values, result) result = args val - + result end -def _reduce_536(val, _values, result) +def _reduce_558(val, _values, result) result = args val - + result end -def _reduce_537(val, _values, result) +def _reduce_559(val, _values, result) result = args val - + result end -def _reduce_538(val, _values, result) +def _reduce_560(val, _values, result) result = args val - + result end -def _reduce_539(val, _values, result) +def _reduce_561(val, _values, result) result = args val - + result end -def _reduce_540(val, _values, result) +def _reduce_562(val, _values, result) result = args val - + result end -def _reduce_541(val, _values, result) +def _reduce_563(val, _values, result) result = args val - + result end -def _reduce_542(val, _values, result) +def _reduce_564(val, _values, result) result = args val - + result end -def _reduce_543(val, _values, result) +def _reduce_565(val, _values, result) result = args val - + result end -def _reduce_544(val, _values, result) +def _reduce_566(val, _values, result) result = args val - + result end -def _reduce_545(val, _values, result) +def _reduce_567(val, _values, result) result = args val - + result end -def _reduce_546(val, _values, result) +def _reduce_568(val, _values, result) result = args val - + result end -def _reduce_547(val, _values, result) +def _reduce_569(val, _values, result) result = args val - + result end -def _reduce_548(val, _values, result) +def _reduce_570(val, _values, result) result = args val - + result end -def _reduce_549(val, _values, result) +def _reduce_571(val, _values, result) yyerror "formal argument cannot be a constant" - + result end -def _reduce_550(val, _values, result) +def _reduce_572(val, _values, result) yyerror "formal argument cannot be an instance variable" - + result end -def _reduce_551(val, _values, result) +def _reduce_573(val, _values, result) yyerror "formal argument cannot be a global variable" - + result end -def _reduce_552(val, _values, result) +def _reduce_574(val, _values, result) yyerror "formal argument cannot be a class variable" - + result end -# reduce 553 omitted +# reduce 575 omitted -def _reduce_554(val, _values, result) +def _reduce_576(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier - + result end -# reduce 555 omitted +# reduce 577 omitted -# reduce 556 omitted +# reduce 578 omitted -def _reduce_557(val, _values, result) +def _reduce_579(val, _values, result) result = val[1] - + result end -def _reduce_558(val, _values, result) - case val[0] +def _reduce_580(val, _values, result) + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end - + result end -def _reduce_559(val, _values, result) +def _reduce_581(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item - + result end -# reduce 560 omitted +# reduce 582 omitted + +def _reduce_583(val, _values, result) + # TODO: new_kw_arg + (label, line), arg = val -def _reduce_561(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) - + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line + result end -def _reduce_562(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_584(val, _values, result) + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line - result = s(:array, s(:kwarg, identifier)) - result end -def _reduce_563(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_585(val, _values, result) + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id, expr).line(line)).line line - result = s(:array, s(:kwarg, identifier, val[1])) - result end -def _reduce_564(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_586(val, _values, result) + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line - result = s(:array, s(:kwarg, identifier)) - result end -# reduce 565 omitted +# reduce 587 omitted -def _reduce_566(val, _values, result) +def _reduce_588(val, _values, result) list, _, item = val result = list << item.last - + result end -# reduce 567 omitted +# reduce 589 omitted -def _reduce_568(val, _values, result) +def _reduce_590(val, _values, result) result = args val - + result end -# reduce 569 omitted +# reduce 591 omitted -# reduce 570 omitted +# reduce 592 omitted + +def _reduce_593(val, _values, result) + name = val[1].to_sym + self.assignable name + result = :"**#{name}" -def _reduce_571(val, _values, result) - result = :"**#{val[1]}" - result end -def _reduce_572(val, _values, result) +def _reduce_594(val, _values, result) result = :"**" - + result end -def _reduce_573(val, _values, result) +def _reduce_595(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names - + result end -def _reduce_574(val, _values, result) +def _reduce_596(val, _values, result) result = self.assignable val[0], val[2] - + result end -def _reduce_575(val, _values, result) - result = s(:block, val[0]) - +def _reduce_597(val, _values, result) + optblk, = val + result = s(:block, optblk).line optblk.line + result end -def _reduce_576(val, _values, result) - result = val[0] - result << val[2] - +def _reduce_598(val, _values, result) + optarg, _, optblk = val + result = optarg + result << optblk + result end -def _reduce_577(val, _values, result) - result = s(:block, val[0]) - +def _reduce_599(val, _values, result) + opt, = val + result = s(:block, opt).line opt.line + result end -def _reduce_578(val, _values, result) +def _reduce_600(val, _values, result) result = self.block_append val[0], val[2] - + result end -# reduce 579 omitted +# reduce 601 omitted -# reduce 580 omitted +# reduce 602 omitted -def _reduce_581(val, _values, result) +def _reduce_603(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" - + result end -def _reduce_582(val, _values, result) +def _reduce_604(val, _values, result) name = :"*" self.env[name] = :lvar result = name - + result end -# reduce 583 omitted +# reduce 605 omitted -# reduce 584 omitted +# reduce 606 omitted -def _reduce_585(val, _values, result) +def _reduce_607(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym - + result end -def _reduce_586(val, _values, result) +def _reduce_608(val, _values, result) result = val[1] - + result end -def _reduce_587(val, _values, result) +def _reduce_609(val, _values, result) result = nil - + result end -# reduce 588 omitted +# reduce 610 omitted + +def _reduce_611(val, _values, result) + lexer.lex_state = EXPR_BEG -def _reduce_589(val, _values, result) - lexer.lex_state = :expr_beg - result end -def _reduce_590(val, _values, result) +def _reduce_612(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit - - result -end -def _reduce_591(val, _values, result) - result = s(:array) - result end -def _reduce_592(val, _values, result) - result = val[0] - +def _reduce_613(val, _values, result) + result = s(:array).line lexer.lineno + result end -# reduce 593 omitted +# reduce 614 omitted -def _reduce_594(val, _values, result) +# reduce 615 omitted + +def _reduce_616(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash - + result end -def _reduce_595(val, _values, result) - result = s(:array, val[0], val[2]) - +def _reduce_617(val, _values, result) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line + result end -def _reduce_596(val, _values, result) - result = s(:array, s(:lit, val[0][0].to_sym), val.last) - +def _reduce_618(val, _values, result) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line + result end -def _reduce_597(val, _values, result) +def _reduce_619(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym - result = s(:array, sym, value) - - result -end + result = s(:array, sym, value).line sym.line -def _reduce_598(val, _values, result) - raise "not yet: #{val.inspect}" - # result = s(:array, s(:lit, val[1].to_sym), val[1]) - result end -def _reduce_599(val, _values, result) - result = s(:array, s(:kwsplat, val[1])) - +def _reduce_620(val, _values, result) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line + result end -# reduce 600 omitted +# reduce 621 omitted -# reduce 601 omitted +# reduce 622 omitted -# reduce 602 omitted +# reduce 623 omitted -# reduce 603 omitted +# reduce 624 omitted -# reduce 604 omitted +# reduce 625 omitted -# reduce 605 omitted +# reduce 626 omitted -# reduce 606 omitted +# reduce 627 omitted -# reduce 607 omitted +# reduce 628 omitted -# reduce 608 omitted +# reduce 629 omitted -# reduce 609 omitted +# reduce 630 omitted -# reduce 610 omitted +# reduce 631 omitted -# reduce 611 omitted +# reduce 632 omitted -# reduce 612 omitted +# reduce 633 omitted -# reduce 613 omitted +# reduce 634 omitted -# reduce 614 omitted +# reduce 635 omitted -# reduce 615 omitted +# reduce 636 omitted -# reduce 616 omitted +# reduce 637 omitted -# reduce 617 omitted +# reduce 638 omitted -# reduce 618 omitted +# reduce 639 omitted -# reduce 619 omitted +# reduce 640 omitted -# reduce 620 omitted +# reduce 641 omitted -# reduce 621 omitted +# reduce 642 omitted -def _reduce_622(val, _values, result) - yyerrok +# reduce 643 omitted + +# reduce 644 omitted + +def _reduce_645(val, _values, result) + yyerrok result end -# reduce 623 omitted +# reduce 646 omitted -# reduce 624 omitted +# reduce 647 omitted -def _reduce_625(val, _values, result) - yyerrok +def _reduce_648(val, _values, result) + yyerrok result end -def _reduce_626(val, _values, result) - result = nil; +def _reduce_649(val, _values, result) + result = nil; result end diff -Nru ruby-ruby-parser-3.11.0/lib/ruby22_parser.y ruby-ruby-parser-3.15.1/lib/ruby22_parser.y --- ruby-ruby-parser-3.11.0/lib/ruby22_parser.y 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby22_parser.y 2021-01-18 16:48:25.000000000 +0000 @@ -22,35 +22,35 @@ tRATIONAL tIMAGINARY tLABEL_END -prechigh - right tBANG tTILDE tUPLUS - right tPOW - right tUMINUS_NUM tUMINUS - left tSTAR2 tDIVIDE tPERCENT - left tPLUS tMINUS - left tLSHFT tRSHFT - left tAMPER2 - left tPIPE tCARET - left tGT tGEQ tLT tLEQ - nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH - left tANDOP - left tOROP - nonassoc tDOT2 tDOT3 - right tEH tCOLON - left kRESCUE_MOD - right tEQL tOP_ASGN - nonassoc kDEFINED - right kNOT - left kOR kAND - nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD - nonassoc tLBRACE_ARG - nonassoc tLOWEST preclow + nonassoc tLOWEST + nonassoc tLBRACE_ARG + nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD + left kOR kAND + right kNOT + nonassoc kDEFINED + right tEQL tOP_ASGN + left kRESCUE_MOD + right tEH tCOLON + nonassoc tDOT2 tDOT3 + left tOROP + left tANDOP + nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH + left tGT tGEQ tLT tLEQ + left tPIPE tCARET + left tAMPER2 + left tLSHFT tRSHFT + left tPLUS tMINUS + left tSTAR2 tDIVIDE tPERCENT # TODO: tSTAR2 -> tMULT + right tUMINUS_NUM tUMINUS + right tPOW + right tBANG tTILDE tUPLUS +prechigh rule program: { - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG } top_compstmt { @@ -59,7 +59,8 @@ top_compstmt: top_stmts opt_terms { - result = val[0] + stmt, _ = val + result = stmt } top_stmts: none @@ -71,14 +72,6 @@ | error top_stmt top_stmt: stmt - { - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - } | klBEGIN { if (self.in_def || self.in_single > 0) then @@ -87,14 +80,40 @@ end self.env.extend } - tLCURLY top_compstmt tRCURLY + begin_block + { + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + } + + begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY { - result = new_iter s(:preexe), nil, val[3] + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt } - bodystmt: compstmt opt_rescue opt_else opt_ensure + bodystmt: compstmt opt_rescue k_else { - result = new_body val + res = _values[-2] + yyerror "else without rescue is useless" unless res + } + compstmt + opt_ensure + { + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + } + | compstmt opt_rescue opt_ensure + { + body, resc, ens = val + + result = new_body [body, resc, nil, ens] } compstmt: stmts opt_terms @@ -103,8 +122,8 @@ } stmts: none - | stmt - | stmts terms stmt + | stmt_or_begin # TODO: newline_node ? + | stmts terms stmt_or_begin { result = self.block_append val[0], val[2] } @@ -114,22 +133,30 @@ debug20 2, val, result } + stmt_or_begin: stmt + | klBEGIN + { + yyerror "BEGIN is permitted only at toplevel" + } + stmt: kALIAS fitem { - lexer.lex_state = :expr_fname - result = self.lexer.lineno + lexer.lex_state = EXPR_FNAME } fitem { - result = s(:alias, val[1], val[3]).line(val[2]) + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line } | kALIAS tGVAR tGVAR { - result = s(:valias, val[1].to_sym, val[2].to_sym) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line } | kALIAS tGVAR tBACK_REF { - result = s(:valias, val[1].to_sym, :"$#{val[2]}") + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line } | kALIAS tGVAR tNTH_REF { @@ -141,54 +168,84 @@ } | stmt kIF_MOD expr_value { - result = new_if val[2], val[0], nil + t, _, c = val + result = new_if c, t, nil } | stmt kUNLESS_MOD expr_value { - result = new_if val[2], nil, val[0] + f, _, c = val + result = new_if c, nil, f } | stmt kWHILE_MOD expr_value { - result = new_while val[0], val[2], true + e, _, c = val + result = new_while e, c, true } | stmt kUNTIL_MOD expr_value { - result = new_until val[0], val[2], true + e, _, c = val + result = new_until e, c, true } | stmt kRESCUE_MOD stmt { - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody } | klEND tLCURLY compstmt tRCURLY { + (_, line), _, stmt, _ = val + if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end - result = new_iter s(:postexe), 0, val[2] + + result = new_iter s(:postexe).line(line), 0, stmt } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } - | var_lhs tOP_ASGN command_call + | lhs tEQL mrhs + { + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + } + | mlhs tEQL mrhs_arg + { + result = new_masgn val[0], val[2] + } + | expr + + command_asgn: lhs tEQL command_rhs + { + result = new_assign val[0], val[2] + } + # | lhs tEQL command_asgn + # { + # result = new_assign val[0], val[2] + # } + | var_lhs tOP_ASGN command_rhs { result = new_op_asgn val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn1 val } - | primary_value call_op tIDENTIFIER tOP_ASGN command_call + | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } - | primary_value call_op tCONSTANT tOP_ASGN command_call + | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' @@ -196,55 +253,53 @@ end result.line = val[0].line } - | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call + | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | backref tOP_ASGN command_call + | backref tOP_ASGN command_rhs { self.backref_assign_error val[0] } - | lhs tEQL mrhs - { - result = new_assign val[0], s(:svalue, val[2]) - } - | mlhs tEQL mrhs_arg - { - result = new_masgn val[0], val[2] - } - | expr - command_asgn: lhs tEQL command_call - { - result = new_assign val[0], val[2] - } - | lhs tEQL command_asgn + command_rhs: command_call =tOP_ASGN { - result = new_assign val[0], val[2] + expr, = val + result = value_expr expr } + | command_asgn expr: command_call | expr kAND expr { - result = logical_op :and, val[0], val[2] + lhs, _, rhs = val + result = logical_op :and, lhs, rhs } | expr kOR expr { - result = logical_op :or, val[0], val[2] + lhs, _, rhs = val + result = logical_op :or, lhs, rhs } | kNOT opt_nl expr { - result = s(:call, val[2], :"!") + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op } | tBANG command_call { - result = s(:call, val[1], :"!") + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y } | arg @@ -253,54 +308,71 @@ result = value_expr(val[0]) } + expr_value_do: { + lexer.cond.push true + } + expr_value do + { + lexer.cond.pop + } + { + _, expr, _, _ = val + result = expr + } + command_call: command | block_command block_command: block_call - | block_call dot_or_colon operation2 command_args + | block_call call_op2 operation2 command_args { - result = new_call val[0], val[2].to_sym, val[3] + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line } cmd_brace_block: tLBRACE_ARG { - self.env.extend(:dynamic) + # self.env.extend(:dynamic) result = self.lexer.lineno } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY + brace_body tRCURLY { - result = new_iter nil, val[2], val[4] - result.line = val[1] + _, line, body, _ = val - self.env.unextend + result = body + result.line = line + + # self.env.unextend } fcall: operation { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno } command: fcall command_args =tLOWEST { - result = val[0].concat val[1].sexp_body # REFACTOR pattern + call, args = val + result = call.concat args.sexp_body } | fcall command_args cmd_brace_block { - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block - result, operation = val[2], result + result, operation = block, result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { - result = new_call val[0], val[2].to_sym, val[3], val[1] + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop } | primary_value call_op operation2 command_args cmd_brace_block { @@ -332,17 +404,19 @@ } | kYIELD command_args { - result = new_yield val[1] + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield } - | kRETURN call_args + | k_return call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) + (_, line), args = val + result = s(:break, ret_args(args)).line line } | kNEXT call_args { @@ -359,56 +433,79 @@ mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { - result = s(:masgn, s(:array, val[1])) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l } mlhs_basic: mlhs_head { - result = s(:masgn, val[0]) + head, = val + result = s(:masgn, head).line head.line } | mlhs_head mlhs_item { - result = s(:masgn, val[0] << val[1].compact) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line } | mlhs_head tSTAR mlhs_node { - result = s(:masgn, val[0] << s(:splat, val[2])) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val - result = list_append ary1, s(:splat, splat) + result = list_append ary1, s(:splat, splat).line(splat.line) result.concat ary2.sexp_body - result = s(:masgn, result) + result = s(:masgn, result).line result.line } | mlhs_head tSTAR { - result = s(:masgn, val[0] << s(:splat)) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l } | mlhs_head tSTAR tCOMMA mlhs_post { - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR mlhs_node { - result = s(:masgn, s(:array, s(:splat, val[1]))) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l } | tSTAR mlhs_node tCOMMA mlhs_post { - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR { - result = s(:masgn, s(:array, s(:splat))) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l } | tSTAR tCOMMA mlhs_post { - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l } mlhs_item: mlhs_node @@ -419,7 +516,8 @@ mlhs_head: mlhs_item tCOMMA { - result = s(:array, val[0]) + lhs, _ = val + result = s(:array, lhs).line lhs.line } | mlhs_head mlhs_item tCOMMA { @@ -428,7 +526,8 @@ mlhs_post: mlhs_item { - result = s(:array, val[0]) + item, = val + result = s(:array, item).line item.line } | mlhs_post tCOMMA mlhs_item { @@ -453,7 +552,8 @@ } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + recv, _, id = val + result = new_attrasgn recv, id } | primary_value call_op tCONSTANT { @@ -466,7 +566,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l } | tCOLON3 tCONSTANT { @@ -475,7 +578,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, nil, s(:colon3, val[1].to_sym)) + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -484,24 +590,31 @@ lhs: user_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line } | keyword_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { - result = self.aryset val[0], val[2] + lhs, _, args, _ = val + result = self.aryset lhs, args } | primary_value call_op tIDENTIFIER # REFACTOR { - result = new_attrasgn val[0], val[2], val[1] + lhs, op, id = val + result = new_attrasgn lhs, id, op } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + lhs, _, id = val + result = new_attrasgn lhs, id } | primary_value call_op tCONSTANT # REFACTOR? { @@ -509,21 +622,27 @@ } | primary_value tCOLON2 tCONSTANT { + expr, _, id = val + if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l } | tCOLON3 tCONSTANT { + _, id = val + if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -538,7 +657,8 @@ cpath: tCOLON3 cname { - result = s(:colon3, val[1].to_sym) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno } | cname { @@ -546,27 +666,32 @@ } | primary_value tCOLON2 cname { - result = s(:colon2, val[0], val[2].to_sym) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line } fname: tIDENTIFIER | tCONSTANT | tFID | op { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[0] } | reswords { - lexer.lex_state = :expr_end - result = val[0] + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym } fsym: fname | symbol fitem: fsym { - result = s(:lit, val[0].to_sym) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno } | dsym @@ -577,7 +702,7 @@ | undef_list tCOMMA { - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fitem { @@ -589,6 +714,8 @@ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 + # TODO: tUBANG dead? + | tUBANG reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE @@ -600,68 +727,72 @@ | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL - arg: lhs tEQL arg + arg: lhs tEQL arg_rhs { result = new_assign val[0], val[2] } - | lhs tEQL arg kRESCUE_MOD arg - { - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - } - | var_lhs tOP_ASGN arg + | var_lhs tOP_ASGN arg_rhs { result = new_op_asgn val } - | var_lhs tOP_ASGN arg kRESCUE_MOD arg + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) + result = new_op_asgn1 val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg + | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn2 val } - | primary_value call_op tIDENTIFIER tOP_ASGN arg + | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = new_op_asgn2 val } - | primary_value call_op tCONSTANT tOP_ASGN arg + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { - result = new_op_asgn2 val + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg + | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] } - | primary_value tCOLON2 tCONSTANT tOP_ASGN arg + | tCOLON3 tCONSTANT { - yyerror "constant re-assignment" + result = self.lexer.lineno } - | tCOLON3 tCONSTANT tOP_ASGN arg + tOP_ASGN arg_rhs { - yyerror "constant re-assignment" + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] } - | backref tOP_ASGN arg + | backref tOP_ASGN arg_rhs { - self.backref_assign_error val[0] + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end } | arg tPLUS arg @@ -690,7 +821,9 @@ } | tUMINUS_NUM simple_numeric tPOW arg { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + } | tUPLUS arg { @@ -716,22 +849,7 @@ { result = new_call val[0], :"<=>", argl(val[2]) } - | arg tGT arg - { - result = new_call val[0], :">", argl(val[2]) - } - | arg tGEQ arg - { - result = new_call val[0], :">=", argl(val[2]) - } - | arg tLT arg - { - result = new_call val[0], :"<", argl(val[2]) - } - | arg tLEQ arg - { - result = new_call val[0], :"<=", argl(val[2]) - } + | rel_expr =tCMP | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) @@ -746,15 +864,19 @@ } | arg tMATCH arg { - result = new_match val[0], val[2] + lhs, _, rhs = val + result = new_match lhs, rhs } | arg tNMATCH arg { - result = s(:not, new_match(val[0], val[2])) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line } | tBANG arg { - result = new_call val[1], :"!" + _, arg = val + result = new_call arg, :"!" + result.line arg.line } | tTILDE arg { @@ -782,14 +904,33 @@ } | kDEFINED opt_nl arg { - result = s(:defined, val[2]) + (_, line), _, arg = val + result = s(:defined, arg).line line } | arg tEH arg opt_nl tCOLON arg { - result = s(:if, val[0], val[2], val[5]) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line } | primary + relop: tGT + | tLT + | tGEQ + | tLEQ + + rel_expr: arg relop arg =tGT + { + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + } + | rel_expr relop arg =tGT + { + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + } + arg_value: arg { result = value_expr(val[0]) @@ -809,22 +950,28 @@ result = args [array_to_hash(val[0])] } + arg_rhs: arg =tOP_ASGN + | arg kRESCUE_MOD arg + { + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + } + paren_args: tLPAREN2 opt_call_args rparen { - result = val[1] + _, args, _ = val + result = args } opt_paren_args: none | paren_args opt_call_args: none - { - result = val[0] - } | call_args - { - result = val[0] - } | args tCOMMA { result = args val @@ -846,17 +993,14 @@ | args opt_block_arg { result = call_args val - result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] + result = call_args [array_to_hash(val[0]), val[1]] } | args tCOMMA assocs opt_block_arg { - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] + result = call_args [val[0], array_to_hash(val[2]), val[3]] } | block_arg { @@ -864,18 +1008,45 @@ } command_args: { - result = lexer.cmdarg.stack.dup # TODO: smell? + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead } call_args { - lexer.cmdarg.stack.replace val[0] - result = val[1] + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args } block_arg: tAMPER arg_value { - result = s(:block_pass, val[1]) + _, arg = val + result = s(:block_pass, arg).line arg.line } opt_block_arg: tCOMMA block_arg @@ -886,19 +1057,27 @@ args: arg_value { - result = s(:array, val[0]) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno } | tSTAR arg_value { - result = s(:array, s(:splat, val[1])) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line } | args tCOMMA arg_value { - result = self.list_append val[0], val[2] + args, _, id = val + result = self.list_append args, id } | args tCOMMA tSTAR arg_value { - result = self.list_append val[0], s(:splat, val[3]) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) } mrhs_arg: mrhs @@ -916,11 +1095,14 @@ } | args tCOMMA tSTAR arg_value { - result = self.arg_concat val[0], val[3] + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat } | tSTAR arg_value { - result = s(:splat, val[1]) + _, arg = val + result = s(:splat, arg).line arg.line } primary: literal @@ -935,58 +1117,65 @@ | backref | tFID { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call nil, msg.to_sym } - | kBEGIN + | k_begin { + lexer.cmdarg.push false result = self.lexer.lineno } - bodystmt kEND + bodystmt k_end { - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] + lexer.cmdarg.pop + result = new_begin val } - | tLPAREN_ARG rparen + | tLPAREN_ARG { - debug20 13, val, result + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno } - | tLPAREN_ARG + rparen { - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these + _, line, _ = val + result = s(:begin).line line } - expr + | tLPAREN_ARG + stmt { - lexer.lex_state = :expr_endarg + lexer.lex_state = EXPR_ENDARG } rparen { - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt } | tLPAREN compstmt tRPAREN { - result = val[1] || s(:nil) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true } | primary_value tCOLON2 tCONSTANT { - result = s(:colon2, val[0], val[2].to_sym) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line } | tCOLON3 tCONSTANT { - result = s(:colon3, val[1].to_sym) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno } - | tLBRACK aref_args tRBRACK + | tLBRACK { result = lexer.lineno } aref_args tRBRACK { - result = val[1] || s(:array) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args + result.line line } | tLBRACE { @@ -996,9 +1185,10 @@ { result = new_hash val } - | kRETURN + | k_return { - result = s(:return) + (_, line), = val + result = s(:return).line line } | kYIELD tLPAREN2 call_args rparen { @@ -1014,11 +1204,14 @@ } | kDEFINED opt_nl tLPAREN2 expr rparen { - result = s(:defined, val[3]) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line } | kNOT tLPAREN2 expr rparen { - result = s(:call, val[2], :"!") + _, _, lhs, _ = val + result = new_call lhs, :"!" } | kNOT tLPAREN2 rparen { @@ -1026,11 +1219,11 @@ } | fcall brace_block { - oper, iter = val[0], val[1] - call = oper # FIX + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line + # FIX: probably not: call.line = iter.line } | method_call | method_call brace_block @@ -1044,61 +1237,42 @@ { result = val[1] # TODO: fix lineno } - | kIF expr_value then compstmt if_tail kEND - { - result = new_if val[1], val[3], val[4] - } - | kUNLESS expr_value then compstmt opt_else kEND - { - result = new_if val[1], val[4], val[3] - } - | kWHILE - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_if expr_value then compstmt if_tail k_end { - result = new_while val[5], val[2], true + _, c, _, t, f, _ = val + result = new_if c, t, f } - | kUNTIL + | k_unless expr_value then compstmt opt_else k_end { - lexer.cond.push true + _, c, _, t, f, _ = val + result = new_if c, f, t } - expr_value do + | k_while expr_value_do compstmt k_end { - lexer.cond.pop + _, cond, body, _ = val + result = new_while body, cond, true } - compstmt kEND + | k_until expr_value_do compstmt k_end { - result = new_until val[5], val[2], true + _, cond, body, _ = val + result = new_until body, cond, true } - | kCASE expr_value opt_terms case_body kEND + | k_case expr_value opt_terms case_body k_end { (_, line), expr, _, body, _ = val result = new_case expr, body, line } - | kCASE opt_terms case_body kEND + | k_case opt_terms case_body k_end { (_, line), _, body, _ = val result = new_case nil, body, line } - | kFOR for_var kIN - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_for for_var kIN expr_value_do compstmt k_end { - result = new_for val[4], val[1], val[7] + _, var, _, iter, body, _ = val + result = new_for iter, var, body } - | kCLASS + | k_class { result = self.lexer.lineno } @@ -1110,13 +1284,13 @@ end self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kCLASS tLSHFT + | k_class tLSHFT { result = self.lexer.lineno } @@ -1131,13 +1305,13 @@ self.in_single = 0 self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kMODULE + | k_module { result = self.lexer.lineno } @@ -1149,74 +1323,90 @@ self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kDEF fname + | k_def fname { - result = [self.in_def, self.lexer.cmdarg.stack.dup] + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt { result = lexer.lineno } k_end { - in_def, cmdarg = val[2] + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body } - | kDEF singleton dot_or_colon + | k_def singleton dot_or_colon { - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fname { - self.in_single += 1 + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt k_end { - line, cmdarg = val[5] - result = new_defs val - result[3].line line + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body } | kBREAK { - result = s(:break) + (_, line), = val + result = s(:break).line line } | kNEXT { - result = s(:next) + (_, line), = val + result = s(:next).line line } | kREDO { - result = s(:redo) + (_, line), = val + result = s(:redo).line line } | kRETRY { - result = s(:retry) + (_, line), = val + result = s(:retry).line line } primary_value: primary @@ -1235,7 +1425,15 @@ k_class: kCLASS k_module: kMODULE k_def: kDEF + k_do: kDO + k_do_block: kDO_BLOCK + k_rescue: kRESCUE + k_ensure: kENSURE + k_when: kWHEN + k_else: kELSE + k_elsif: kELSIF k_end: kEND + k_return: kRETURN then: term | kTHEN @@ -1245,9 +1443,11 @@ | kDO_COND if_tail: opt_else - | kELSIF expr_value then compstmt if_tail + | k_elsif expr_value then compstmt if_tail { - result = s(:if, val[1], val[3], val[4]) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line } opt_else: none @@ -1270,7 +1470,9 @@ f_marg_list: f_marg { - result = s(:array, val[0]) + sym, = val + + result = s(:array, sym).line lexer.lineno } | f_marg_list tCOMMA f_marg { @@ -1344,7 +1546,9 @@ } | f_block_arg { - result = call_args val + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line } opt_block_args_tail: tCOMMA block_args_tail @@ -1375,7 +1579,7 @@ } | f_arg tCOMMA { - result = args val + result = args(val) << nil } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { @@ -1416,18 +1620,22 @@ opt_block_param: none { result = 0 } | block_param_def + { + self.lexer.command_start = true + } block_param_def: tPIPE opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } | tOROP { - self.lexer.command_start = true - result = s(:args) + result = s(:args).line lexer.lineno } | tPIPE block_param opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } @@ -1448,26 +1656,33 @@ bvar: tIDENTIFIER { - result = s(:shadow, val[0].to_sym) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line } | f_bad_arg lambda: { self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } - f_larglist lambda_body + f_larglist + { + lexer.cmdarg.push false + } + lambda_body { - lpar, args, body = val + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend + result.line = line + self.env.unextend # TODO: dynapush & dynapop } f_larglist: tLPAREN2 f_args opt_bv_decl rparen @@ -1484,28 +1699,15 @@ { result = val[1] } - | kDO_LAMBDA compstmt kEND + | kDO_LAMBDA bodystmt kEND { result = val[1] } - do_block: kDO_BLOCK - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt kEND + do_block: k_do_block do_body kEND { - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] - - self.env.unextend + (_, line), iter, _ = val + result = iter.line line } block_call: command do_block @@ -1519,14 +1721,16 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] + cmd, blk = val + + result = blk + result.insert 1, cmd } - | block_call dot_or_colon operation2 opt_paren_args + | block_call call_op2 operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } - | block_call dot_or_colon operation2 opt_paren_args brace_block + | block_call call_op2 operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val @@ -1535,7 +1739,7 @@ result = iter2 } - | block_call dot_or_colon operation2 command_args do_block + | block_call call_op2 operation2 command_args do_block { iter1, _, name, args, iter2 = val @@ -1551,8 +1755,10 @@ } paren_args { - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno } | primary_value call_op operation2 opt_paren_args { @@ -1580,7 +1786,7 @@ } | kSUPER { - result = s(:zsuper) + result = s(:zsuper).line lexer.lineno } | primary_value tLBRACK2 opt_call_args rbracket { @@ -1592,39 +1798,55 @@ self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + brace_body tRCURLY { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - _, line, args, _, body, _ = val + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend } - | kDO + | k_do { self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + do_body kEND { - result = nil # self.env.dynamic.keys + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend } - compstmt kEND + + brace_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { result = lexer.cmdarg.store(false) } + opt_block_param compstmt { - _, line, args, _, body, _ = val + line, cmdarg, param, cmpstmt = val - result = new_iter nil, args, body - result.line = line + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + } + do_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { lexer.cmdarg.push false } + opt_block_param + compstmt + { + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop self.env.unextend } - case_body: kWHEN + case_body: k_when { result = self.lexer.lineno } @@ -1637,12 +1859,12 @@ cases: opt_else | case_body - opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue + opt_rescue: k_rescue exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) @@ -1655,7 +1877,8 @@ exc_list: arg_value { - result = s(:array, val[0]) + arg, = val + result = s(:array, arg).line arg.line } | mrhs | none @@ -1666,28 +1889,33 @@ } | none - opt_ensure: kENSURE compstmt + opt_ensure: k_ensure compstmt { - _, body = val + (_, line), body = val - result = body || s(:nil) + result = body || s(:nil).line(line) } | none literal: numeric { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | symbol { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | dsym strings: string { - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str } string: tCHAR @@ -1702,7 +1930,11 @@ string1: tSTRING_BEG string_contents tSTRING_END { - result = val[1] + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str } | tSTRING { @@ -1711,7 +1943,8 @@ xstring: tXSTRING_BEG xstring_contents tSTRING_END { - result = new_xstring val[1] + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? } regexp: tREGEXP_BEG regexp_contents tREGEXP_END @@ -1721,7 +1954,7 @@ words: tWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tWORDS_BEG word_list tSTRING_END { @@ -1745,25 +1978,28 @@ symbols: tSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } - | tSYMBOLS_BEG symbol_list tSTRING_END + | tSYMBOLS_BEG { result = lexer.lineno } symbol_list tSTRING_END { - result = val[1] + _, line, list, _, = val + list.line = line + result = list } symbol_list: none { - result = new_symbol_list + result = new_symbol_list.line lexer.lineno } | symbol_list word tSPACE { - result = val[0].dup << new_symbol_list_entry(val) + list, * = val + result = list.dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tQWORDS_BEG qword_list tSTRING_END { @@ -1772,7 +2008,7 @@ qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno # FIX } | tQSYMBOLS_BEG qsym_list tSTRING_END { @@ -1799,11 +2035,12 @@ string_contents: none { - result = s(:str, "") + result = s(:str, "").line lexer.lineno } | string_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } xstring_contents: none @@ -1812,7 +2049,8 @@ } | xstring_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } regexp_contents: none @@ -1821,7 +2059,8 @@ } | regexp_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } string_content: tSTRING_CONTENT @@ -1833,42 +2072,46 @@ result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? + lexer.lex_state = EXPR_BEG } string_dvar { - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value + lexer.lex_state = EXPR_BEG } - compstmt tRCURLY + compstmt + tSTRING_DEND { - # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -1878,24 +2121,24 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end } - string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } - | tIVAR { result = s(:ivar, val[0].to_sym) } - | tCVAR { result = s(:cvar, val[0].to_sym) } + string_dvar: tGVAR { result = s(:gvar, val[0].to_sym).line lexer.lineno } + | tIVAR { result = s(:ivar, val[0].to_sym).line lexer.lineno } + | tCVAR { result = s(:cvar, val[0].to_sym).line lexer.lineno } | backref symbol: tSYMBEG sym { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[1].to_sym } | tSYMBOL @@ -1907,18 +2150,19 @@ dsym: tSYMBEG xstring_contents tSTRING_END { - lexer.lex_state = :expr_end - result = val[1] + _, result, _ = val - result ||= s(:str, "") + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end @@ -1941,19 +2185,20 @@ | tCONSTANT | tCVAR -keyword_variable: kNIL { result = s(:nil) } - | kSELF { result = s(:self) } - | kTRUE { result = s(:true) } - | kFALSE { result = s(:false) } - | k__FILE__ { result = s(:str, self.file) } - | k__LINE__ { result = s(:lit, lexer.lineno) } +keyword_variable: kNIL { result = s(:nil).line lexer.lineno } + | kSELF { result = s(:self).line lexer.lineno } + | kTRUE { result = s(:true).line lexer.lineno } + | kFALSE { result = s(:false).line lexer.lineno } + | k__FILE__ { result = s(:str, self.file).line lexer.lineno } + | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno } | k__ENCODING__ { + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end } @@ -1978,43 +2223,42 @@ debug20 29, val, result } - backref: tNTH_REF { result = s(:nth_ref, val[0]) } - | tBACK_REF { result = s(:back_ref, val[0]) } + backref: tNTH_REF { result = s(:nth_ref, val[0]).line lexer.lineno } + | tBACK_REF { result = s(:back_ref, val[0]).line lexer.lineno } - superclass: term - { - result = nil - } - | tLT + superclass: tLT { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG + lexer.command_start = true } expr_value term { result = val[2] } - | error term + | none { - yyerrok result = nil - debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; } - | f_args term - { - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true + | { + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + } + f_args term + { + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg @@ -2137,12 +2381,13 @@ f_arg: f_arg_item { - case val[0] + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" @@ -2155,7 +2400,7 @@ if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item @@ -2165,38 +2410,42 @@ f_kw: f_label arg_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? + # TODO: new_kw_arg + (label, line), arg = val + identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line } | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } f_block_kw: f_label primary_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + result = s(:array, s(:kwarg, id, expr).line(line)).line line } | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } f_block_kwarg: f_block_kw @@ -2217,7 +2466,9 @@ f_kwrest: kwrest_mark tIDENTIFIER { - result = :"**#{val[1]}" + name = val[1].to_sym + self.assignable name + result = :"**#{name}" } | kwrest_mark { @@ -2237,17 +2488,20 @@ f_block_optarg: f_block_opt { - result = s(:block, val[0]) + optblk, = val + result = s(:block, optblk).line optblk.line } | f_block_optarg tCOMMA f_block_opt { - result = val[0] - result << val[2] + optarg, _, optblk = val + result = optarg + result << optblk } f_optarg: f_opt { - result = s(:block, val[0]) + opt, = val + result = s(:block, opt).line opt.line } | f_optarg tCOMMA f_opt { @@ -2292,7 +2546,7 @@ singleton: var_ref | tLPAREN2 { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG } expr rparen { @@ -2301,14 +2555,11 @@ result.sexp_type == :lit } - assoc_list: none # [!nil] + assoc_list: none { - result = s(:array) - } - | assocs trailer # [!nil] - { - result = val[0] + result = s(:array).line lexer.lineno } + | assocs trailer assocs: assoc | assocs tCOMMA assoc @@ -2322,26 +2573,27 @@ assoc: arg_value tASSOC arg_value { - result = s(:array, val[0], val[2]) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line } - | tLABEL opt_nl arg_value + | tLABEL arg_value { - result = s(:array, s(:lit, val[0][0].to_sym), val.last) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line } | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym - result = s(:array, sym, value) - } - | tSYMBOL arg_value - { - raise "not yet: #{val.inspect}" - # result = s(:array, s(:lit, val[1].to_sym), val[1]) + result = s(:array, sym, value).line sym.line } | tDSTAR arg_value { - result = s(:array, s(:kwsplat, val[1])) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line } operation: tIDENTIFIER | tCONSTANT | tFID @@ -2349,6 +2601,10 @@ operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT + + call_op2: call_op + | tCOLON2 + opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN @@ -2368,6 +2624,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: diff -Nru ruby-ruby-parser-3.11.0/lib/ruby23_parser.rb ruby-ruby-parser-3.15.1/lib/ruby23_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby23_parser.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby23_parser.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,7 +1,7 @@ # # DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.4.14 -# from Racc grammer file "". +# This file is automatically generated by Racc 1.5.0 +# from Racc grammar file "". # require 'racc/parser.rb' @@ -10,6 +10,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: @@ -19,888 +20,892 @@ ##### State transition tables begin ### clist = [ -'-607,272,530,-101,-104,-98,272,-607,-607,-607,757,272,222,-607,-607', -'-616,-607,94,95,-105,-84,83,223,-104,-507,-607,666,630,585,84,748,-507', -'627,116,749,-70,-607,-607,115,-607,-607,-607,-607,-607,-96,-100,116', -'826,223,591,223,115,-91,-92,-94,-103,-100,457,-99,-105,665,856,826,585', -'-103,585,-98,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607', -'-607,-607,-607,737,-604,-607,-607,-607,709,650,271,-604,629,-607,-99', -'271,-607,626,96,97,271,-607,505,-607,-264,-607,-607,-607,-607,-607,-607', -'-607,-89,-607,-607,-607,-106,503,756,-101,-104,-91,-92,-94,-101,-104', -'-96,-504,-607,-607,-95,-93,-106,-607,-504,-504,-504,116,-102,-504,-504', -'-504,115,-504,116,-607,-102,940,-105,115,585,-504,-91,-504,-504,-504', -'-91,-92,-94,-91,-92,-94,-94,-504,-504,-90,-504,-504,-504,-504,-504,585', -'-100,-263,-91,-92,-94,-100,-93,116,-103,116,-98,116,115,-103,115,-98', -'115,-101,-106,500,-519,708,-504,-504,-504,-504,-504,-504,-504,-504,-504', -'-504,-504,-504,-504,-504,-99,737,-504,-504,-504,-99,-504,-504,-603,737', -'-504,887,-102,-504,-504,272,-504,791,-504,792,-504,772,-504,-504,-504', -'-504,-504,-504,-504,771,-504,770,-504,219,220,888,-603,-93,-106,94,95', -'-99,274,-106,-102,-504,-504,-504,-504,-102,-504,-601,-504,265,-105,-518', -'116,-507,530,-105,266,115,-504,-504,-507,-507,-507,219,220,-507,-507', -'-507,-93,-507,-101,-93,-103,116,-603,666,-418,-507,115,-507,-507,-507', -'-92,-97,219,220,-93,490,-100,-507,-507,222,-507,-507,-507,-507,-507', -'116,271,116,-507,890,115,714,115,116,611,-507,-98,665,115,-105,-601', -'-93,96,97,-507,666,893,223,-507,-507,-507,-507,-507,-507,-507,-507,-507', -'-507,-507,-507,-507,-507,-601,-518,-507,-507,-507,666,-507,-507,542', -'223,-507,544,1010,-507,-507,611,-507,665,-507,223,-507,-600,-507,-507', -'-507,-507,-507,-507,-507,265,-507,-507,-507,613,612,609,266,215,-519', -'665,223,856,826,-89,1017,-507,-507,-507,-507,611,-507,116,-507,1015', -'681,243,115,-607,-98,896,-510,898,-507,-507,-607,-607,-607,-510,570', -'-607,-607,-607,542,-607,-504,541,613,612,631,573,-90,-504,-607,-607', -'-607,-607,-600,240,219,220,-504,242,241,-607,-607,-99,-607,-607,-607', -'-607,-607,565,216,562,561,560,542,563,-600,544,613,612,581,580,565,777', -'562,561,560,767,563,900,-607,223,-607,-607,-607,-607,-607,-607,-607', -'-607,-607,-607,-607,-607,-607,-607,217,-504,-607,-607,-607,215,793,-607', -'574,902,-607,903,454,-607,-607,611,-607,459,-607,-91,-607,455,-607,-607', -'-607,-607,-607,-607,-607,570,-607,-607,-607,542,-100,458,544,-607,611', -'456,573,986,-97,611,-607,-607,-607,-607,-607,-603,-607,-289,-607,-607', -'852,696,116,-106,-289,-289,-289,115,-607,-102,-289,-289,911,-289,-337', -'-262,216,-607,915,581,580,-337,613,612,243,-290,219,220,215,917,-337', -'769,-290,-289,-289,967,-289,-289,-289,-289,-289,-290,-289,918,753,613', -'612,624,-607,-289,613,612,619,574,-604,644,240,643,-289,611,242,241', -'616,223,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', -'-289,-289,215,-337,-289,-289,-289,714,649,594,921,116,-289,923,-290', -'-289,115,216,592,925,-289,-94,-289,-92,-289,-289,-289,-289,-289,-289', -'-289,-289,-289,215,-289,-290,-103,927,-101,927,523,223,-290,611,613', -'612,-289,-289,-289,521,-95,-290,-289,-289,-289,-289,219,220,-289,-289', -'-289,-514,-289,-517,-289,-104,933,216,-514,-509,-517,-513,-289,-289', -'-289,409,-509,-516,-513,-517,411,410,-289,-289,-516,-289,-289,-289,-289', -'-289,-504,740,-512,-516,-511,215,215,-504,216,-512,-290,-511,967,214', -'613,612,614,581,580,219,220,753,212,-289,-289,-289,-289,-289,-289,-289', -'-289,-289,-289,-289,-289,-289,-289,935,-517,-289,-289,-289,-515,794', -'-289,591,937,-289,733,-515,-289,-289,-516,-289,611,-289,412,-289,407', -'-289,-289,-289,-289,-289,-289,-289,391,-289,116,-289,216,216,731,115', -'565,223,562,561,560,570,563,-289,-289,-289,-289,-289,388,-289,-289,-289', -'573,385,947,-604,-281,948,223,-289,951,-289,-104,-281,-281,-281,-265', -'730,-281,-281,-281,382,-281,215,568,729,618,613,612,609,533,721,-281', -'-281,-281,581,580,215,719,455,717,961,-281,-281,751,-281,-281,-281,-281', -'-281,358,715,968,753,969,714,-280,971,-289,972,711,223,964,-280,562', -'561,560,505,563,574,705,622,-280,-281,-281,-281,-281,-281,-281,-281', -'-281,-281,-281,-281,-281,-281,-281,702,216,-281,-281,-281,701,988,-281', -'322,990,-281,991,625,-281,-281,216,-281,628,-281,995,-281,696,-281,-281', -'-281,-281,-281,-281,-281,714,-281,1000,-281,565,-280,562,561,560,570', -'563,119,120,121,122,123,-281,-281,-281,-281,573,-281,-426,-281,119,120', -'121,122,123,-426,-426,-426,1002,-281,-426,-426,-426,565,-426,562,561', -'560,568,563,1004,1006,1006,-426,-426,-426,535,879,880,581,580,881,110', -'111,-426,-426,223,-426,-426,-426,-426,-426,565,1013,562,561,560,321', -'563,262,635,723,1018,565,685,562,561,560,1019,563,726,927,927,574,927', -'-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426', -'1024,723,-426,-426,-426,-84,988,-426,223,274,-426,218,723,-426,-426', -'-262,-426,637,-426,223,-426,726,-426,-426,-426,-426,-426,-426,-426,243', -'-426,-426,-426,641,223,565,-604,562,561,560,-603,563,701,223,-609,-426', -'-426,642,-426,243,-426,-609,-609,-609,211,243,-609,-609,-609,243,-609', -'240,-426,243,988,242,241,238,239,-609,-609,-609,-609,723,1047,257,258', -'1048,1049,1050,-609,-609,932,-609,-609,-609,-609,-609,1006,1006,1006', -'240,223,246,210,242,241,238,239,209,927,244,565,245,562,561,560,988', -'563,243,112,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609', -'-609,-609,505,274,-609,-609,-609,539,243,-609,503,696,-609,223,531,-609', -'-609,723,-609,653,-609,274,-609,527,-609,-609,-609,-609,-609,-609,-609', -'1006,-609,-609,-609,565,274,562,561,560,570,563,119,120,121,122,123', -'-609,-609,-609,-609,573,-609,-297,-609,119,120,121,122,123,-297,-297', -'-297,696,-609,-297,-297,-297,262,-297,243,796,565,568,562,561,560,243', -'563,-297,-297,274,826,3,581,580,257,258,223,-297,-297,223,-297,-297', -'-297,-297,-297,964,277,562,561,560,240,563,246,223,242,241,238,239,723', -'223,244,565,245,562,561,560,574,563,-297,-297,-297,-297,-297,-297,-297', -'-297,-297,-297,-297,-297,-297,-297,545,243,-297,-297,-297,490,850,-297', -'223,277,-297,826,860,-297,-297,524,-297,723,-297,223,-297,490,-297,-297', -'-297,-297,-297,-297,-297,591,-297,401,-297,240,517,516,595,242,241,238', -'239,778,596,223,-608,-297,-297,-69,-297,,-297,-608,-608,-608,,,-608', -'-608,-608,243,-608,565,-297,562,561,560,,563,,-608,-608,-608,-608,,', -'257,258,,,,-608,-608,,-608,-608,-608,-608,-608,,,,240,,246,,242,241', -'238,239,723,,244,,245,,,,,,,,-608,-608,-608,-608,-608,-608,-608,-608', -'-608,-608,-608,-608,-608,-608,,,-608,-608,-608,,,-608,,,-608,,,-608', -'-608,,-608,,-608,,-608,,-608,-608,-608,-608,-608,-608,-608,,-608,-608', -'-608,565,,562,561,560,570,563,,,,,,-608,-608,-608,-608,573,-608,-627', -'-608,,,,,,-627,-627,-627,,-608,-627,-627,-627,,-627,243,,,568,,,,,-627', -'-627,-627,,,,581,580,257,258,,-627,-627,,-627,-627,-627,-627,-627,,', -',,,240,,246,,242,241,238,239,,,244,,245,,,,574,,-627,-627,-627,-627', -'-627,-627,-627,-627,-627,-627,-627,-627,-627,-627,,,-627,-627,-627,', -',-627,,274,-627,,,-627,-627,,-627,,-627,,-627,,-627,-627,-627,-627,-627', -'-627,-627,,-627,-627,-627,,,,,,,,,,,,,-627,-627,,-627,,-627,297,72,73', -'74,12,60,,,,66,67,-627,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,654,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,-239,,,65', -',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,654,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', -'251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', -',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', -'92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,638,11', -'48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', -'247,252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36', -',,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91', -'83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74', -'12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94', -'95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,', -'257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248', -'244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96', -'97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255', -'256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', -'238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65', -',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', -'251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', -',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', -'92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', -',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247', -'252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61', -'62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83', -'85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', -'258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', -'297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', -'88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', -'259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', -'47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', -',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', -'253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', -',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', -'86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60', -',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', -',22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', -'258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', -'297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', -'88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', -'259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', -'47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', -',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', -'253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', -',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', -'86,87,89,,,,84,92,223,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', -'258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', -'297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', -'88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', -',,255,256,,,,,,257,258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241', -'238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', -'251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62,,,63,,38,240', -',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', -'253,254,249,251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62', -',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', -',,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,', -',36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,8,72,73,74', -'12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257', -'258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', -'72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,', -',,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250', -'248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628', -'-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', -',,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259', -',255,256,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', -'238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628', -'249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', -'47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,8,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628', -'-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38', -'240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11', -'48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', -',,,,,,,,,,,,,,,257,258,,43,,,299,,243,61,62,,,63,,38,240,,246,47,242', -'241,238,239,257,258,,23,,,,,91,83,85,86,87,89,,,240,84,92,,242,241,238', -'239,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69', -'71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,,,,,,,,,', -',,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239', -',,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', -'72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,', -'47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', -'102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', -'63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', -',291,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', -',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', -'89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', -',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', -'48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', -',,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,', -',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94', -'95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47', -',,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,', -',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', -'102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', -'63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', -',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,', -',304,,,61,62,,,63,,303,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,', -',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308', -',,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,320', -',,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,678,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,', -',,,978,,,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,', -',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,116,,,,,115,65,,,81,88,90,,', -'96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,352,,,36,,,61,62,,,63,', -'38,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,', -'96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -'290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62', -',,63,,,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', -',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', -'36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,401,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', -',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', -'89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', -',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', -'48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', -',,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,', -',,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', -',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,223,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', -',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,', -'235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', -',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417', -',,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,535,,61,62', -',,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', -'310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', -'62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,', -',84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,', -'68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,', -',,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,', -',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284', -',47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88', -'90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', -'310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', -'62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', -'100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', -',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', -'100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', -',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,775,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,', -',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', -'65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288', -',,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287', -'85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', -',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,,,47,,,,,', -',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', -'47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', -',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61', -'62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,', -'32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62', -',,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,401,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,,,,,91,287', -'85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', -',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284,,47,,', -',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234', -',,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', -',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', -'47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', -',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', -'47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91', -'287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', -',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', -',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,223,,,,,,65,,291', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,', -',,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,', -'22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', -'45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', -',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,234,,,61,62,,,63,,,,', -',,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,519,,,65,,,81,88,90,,,96', -'97,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205,206', -'185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190', -',,,,,171,178,169,170,166,167,168,127,129,398,397,128,,399,,,,,,,161', -'162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,', -',,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,', -',,,,,,,,,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', -'180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', -'199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', -',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', -'150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', -'204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', -'197,367,366,368,365,172,191,190,,,,,,171,178,169,170,362,363,364,360', -'129,100,99,361,,102,,,,,,,161,162,,157,139,140,141,148,145,147,,,142', -'143,,,,163,164,149,150,,,,,,374,,,,,,,,154,153,,138,160,156,155,151', -'152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200', -'173,193,183,182,203,204,198,181,180,175,201,205,206,185,174,188,192', -'194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178', -'169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148', -'145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187', -'177,200,173,193,183,182,203,204,198,181,180,175,201,205,206,185,174', -'188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,', -'171,178,169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138', -'160,156,155,151,152,146,144,136,159,137,,,165,91,,,,,,,,,,92,,,,,,,', -',158,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205', -'206,185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191', -'190,,,,,,171,178,169,170,166,167,168,127,129,126,,128,,,,,,,,,161,162', -',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,', -',,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,91,,,', -',,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', -'180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', -'199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', -',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', -'150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,91,,,,-627,,,,,,92,-627,-627,-627,,,-627,-627,-627,158,-627,,', -',,,,,,-627,-627,,,,,,,,,,-627,-627,,-627,-627,-627,-627,-627,,,,,,,', -'488,431,,,489,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143', -'-627,,,163,164,149,150,-627,,,,,274,-627,,,,,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,-627,-627,165,,,,,1042,438,,,1043,,', -'-627,,,,,-627,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,,,,,656,431,,,657,,,,,,,,,161,162,158,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', -',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,1040,431,,,1041', -',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', -'149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', -'159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139,140,141', -'148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153,,138', -'160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570,563', -'565,,562,561,560,570,563,,,573,,,,,158,,573,,,,,,,,,,,,,,,568,,,,,,', -'568,,1012,438,581,580,1011,,,578,577,581,580,,,161,162,,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,574,,,274,,,,574,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,689,431,', -',690,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,,,,,692,438,,,693,,,,,,,,,161,162,158,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', -',138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570', -'563,,,,,,,,,,573,,,,,158,,,,,,,,,,,,,,,,,568,761,656,431,,,657,,,578', -'577,581,580,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,574,,,,154,153,,138,160,156,155,151,152,146', -'144,136,159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139', -'140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', -'570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', -'570,563,565,,562,561,560,570,563,568,,573,,,,,568,,573,,581,580,,,,', -',581,580,,,,565,568,562,561,560,570,563,,568,,,,581,580,,,573,578,577', -'581,580,565,574,562,561,560,570,563,565,574,562,561,560,570,563,,,573', -'568,,,,,,573,,574,578,577,581,580,,565,574,562,561,560,570,563,568,', -',,,,,568,,573,,581,580,,,,578,577,581,580,,,,,574,,,,,,,568,,,,,,,,', -'578,577,581,580,,574,,427,431,,,428,574,,,,,,,,161,162,,157,139,140', -'141,148,145,147,,,142,143,,,574,163,164,149,150,,,,,,274,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,434,438,', -',433,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,,,,,743,431,,,744,,,,,,,,,161,162,158,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', -',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,745,438,,,746', -',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', -'149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', -'159,137,,565,165,562,561,560,570,563,565,,562,561,560,570,563,,,573', -',,,,158,,573,,,,,565,,562,561,560,570,563,,,,568,761,,,,,573,568,,578', -'577,581,580,,,,578,577,581,580,,,,,,,,,568,,,,,,,,,488,431,581,580,489', -',,,574,,,,,161,162,574,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,574,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146', -'144,136,159,137,,,165,,,,,864,438,,,865,,,,,,,,,161,162,158,157,139', -'140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', -'570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', -'570,563,,,,,,,,568,551,573,,,,,568,,578,577,581,580,,,,578,577,581,580', -',,,565,568,562,561,560,570,563,,,,578,577,581,580,,,573,,,,,,574,,,', -',,,574,,,,,,,,,568,,,,,,,,574,578,577,581,580,,,,,,,,,,,,,,,,,,,,,,', -',,223,,,,,,,,574' ] - racc_action_table = arr = ::Array.new(26642, nil) +'-529,312,85,86,87,12,78,-529,-529,-529,79,80,-529,-529,-529,83,-529', +'81,82,84,33,34,76,77,-529,285,-529,-529,-529,88,31,30,116,115,117,118', +'-529,-529,22,-529,-529,-529,-529,-529,11,49,314,13,120,119,121,110,60', +'112,111,113,-101,114,122,123,739,106,107,-100,45,46,44,-529,-529,-529', +'-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,236,-108,-529', +'-529,-529,43,-529,-529,36,-107,-529,62,63,-529,-529,64,-529,38,-529', +'-103,-529,48,-529,-529,-529,-529,-529,-529,-529,23,-529,287,-529,-529', +'103,95,97,98,99,101,-529,-109,-101,96,104,-529,-529,-529,-529,-100,-529', +'66,-529,-102,93,100,102,-529,-303,108,109,-109,-529,-112,-529,-303,-303', +'-303,762,-113,128,-303,-303,-115,-303,127,-110,-101,602,235,-101,648', +'225,226,-100,-114,-103,-100,774,830,602,-114,775,602,-303,-303,-101', +'-303,-303,-303,-303,-303,-115,-100,285,-107,-99,651,-112,859,-111,285', +'128,-113,-98,236,602,127,-110,-624,-102,-103,602,829,-103,-303,-303', +'-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,736,-103', +'-303,-303,-303,647,674,-100,-625,-540,-303,225,226,-303,-111,885,-102', +'609,-303,-102,-303,-108,-303,-303,-303,-303,-303,-303,-303,128,-303', +'650,-303,236,127,-102,-109,-624,-112,-106,-625,-109,-101,-112,-113,-303', +'-303,-628,-303,-113,-303,-105,287,128,-628,-628,-628,-303,127,287,-628', +'-628,-303,-628,-113,128,-114,-107,128,524,127,-114,-628,127,-103,858', +'-102,-115,732,-104,-107,632,-115,-628,-628,-107,-628,-628,-628,-628', +'-628,128,-624,-110,965,830,127,128,-110,285,95,236,127,225,226,632,-536', +'728,96,632,730,731,-622,-536,-628,-628,-628,-628,-628,-628,-628,-628', +'-628,-628,-628,-628,-628,-628,-111,829,-628,-628,-628,-111,675,-108', +'632,669,-628,848,-108,-628,634,633,630,849,-628,808,-628,236,-628,-628', +'-628,-628,-628,-628,-628,724,-628,-628,-628,106,107,702,-435,-529,634', +'633,630,-621,634,633,-529,-628,-628,-303,-102,-622,-628,792,-93,-529', +'-303,-303,-303,-628,287,-303,-303,-303,-628,-303,-111,236,721,-112,-79', +'634,633,-622,231,-303,-303,-303,717,-109,911,281,-628,-212,716,-303', +'-303,918,-303,-303,-303,-303,-303,-533,231,554,-526,236,-532,705,-533', +'613,632,-526,-529,-532,106,107,-621,233,611,-93,-526,236,108,109,-303', +'-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-621', +'822,-303,-303,-303,-628,824,-303,912,232,-303,-114,-628,-303,-303,-109', +'-303,-624,-303,-278,-303,-628,-303,-303,-303,-303,-303,-303,-303,232', +'-303,-526,-303,634,633,635,236,-115,582,-628,579,578,577,587,580,-303', +'-303,-303,-303,233,-303,669,-303,821,590,108,109,-303,-303,-112,236', +'632,-303,128,-113,-303,-303,-303,127,587,-628,-303,-303,587,-303,582', +'585,579,578,577,590,580,478,236,590,595,594,598,597,627,-541,-106,668', +'-103,-303,-303,628,-303,-303,-303,-303,-303,582,-303,579,578,577,-115', +'580,-112,-303,-110,668,598,597,-625,686,598,597,-303,256,591,634,633', +'795,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303', +'-303,231,-115,-303,-303,-303,632,674,662,591,-108,-303,-110,591,-303', +'878,-101,660,256,-303,632,-303,256,-303,-303,-303,-303,-303,-303,-303', +'-303,-303,-110,-303,231,128,231,231,231,917,127,230,1013,475,1041,777', +'-303,-303,-526,-104,228,-303,476,1039,779,-526,-526,-526,-303,256,-526', +'-526,-526,-303,-526,-113,232,634,633,640,-531,-534,-526,-537,-526,-526', +'-526,-531,-534,-304,-537,634,633,652,-526,-526,-304,-526,-526,-526,-526', +'-526,-212,-303,679,-304,290,231,667,232,-303,232,232,232,1035,-625,-540', +'666,582,-303,579,578,577,779,580,-526,-526,-526,-526,-526,-526,-526', +'-526,-526,-526,-526,-526,-526,-526,236,-526,-526,-526,-526,-105,-526', +'-526,-526,728,-526,659,730,-526,-526,-304,-526,748,-526,-98,-526,-114', +'-526,-526,-526,-526,-526,-526,-526,-303,-526,632,-526,232,637,-107,728', +'658,582,727,579,578,577,587,580,-526,-526,-526,-526,-535,-526,934,-526', +'231,590,-276,-535,-526,-628,716,1035,656,-526,128,-526,-628,-628,-628', +'127,779,-628,-628,-628,649,-628,-304,585,273,274,225,226,-276,-304,-628', +'-628,-628,-628,598,597,-538,939,-304,634,633,-628,-628,-538,-628,-628', +'-628,-628,-628,646,-539,128,-538,643,231,-294,127,-539,944,272,271,541', +'-294,-541,236,232,-539,1044,591,236,539,-294,-628,-628,-628,-628,-628', +'-628,-628,-628,-628,-628,-628,-628,-628,-628,739,-304,-628,-628,-628', +'231,823,-628,728,947,-628,730,551,-628,-628,-538,-628,949,-628,-99,-628', +'476,-628,-628,-628,-628,-628,-628,-628,-539,-628,-628,-628,232,-294', +'-108,951,582,808,579,578,577,587,580,-347,-628,-628,-628,-628,424,-628', +'-347,-628,590,426,425,256,-628,-628,953,-347,953,-628,236,-111,-628', +'-628,-628,881,885,232,-628,-628,639,-628,585,598,597,225,226,-100,881', +'885,-628,595,594,598,597,253,225,226,959,255,254,-628,-628,-109,-628', +'-628,-628,-628,-628,131,132,133,134,135,724,582,-347,579,578,577,582', +'580,579,578,577,724,580,591,724,236,724,236,-628,-628,-628,-628,-628', +'-628,-628,-628,-628,-628,-628,-628,-628,-628,977,-279,-628,-628,-628', +'615,675,748,614,415,-628,978,748,-628,739,981,751,984,-628,986,-628', +'958,-628,-628,-628,-628,-628,-628,-628,988,-628,-628,-628,1006,236,579', +'578,577,582,580,579,578,577,256,580,-628,-628,-650,-628,990,-628,609', +'236,1002,-650,-650,-650,-628,1003,-650,-650,-650,-628,-650,-111,582', +'256,579,578,577,587,580,-650,-650,549,253,748,545,290,255,254,590,236', +'-650,-650,751,-650,-650,-650,-650,-650,293,1015,582,542,579,578,577', +'1006,580,579,578,577,585,580,535,582,534,579,578,577,587,580,256,598', +'597,131,132,133,134,135,724,590,724,786,-650,236,-312,-78,266,267,748', +'-650,1033,-312,-312,-312,290,-650,-312,-312,-312,524,-312,585,253,522', +'259,591,255,254,251,252,-312,-312,598,597,1036,848,-650,-650,519,290', +'-312,-312,509,-312,-312,-312,-312,-312,906,907,-650,235,908,122,123', +'-650,131,132,133,134,135,1042,-650,480,1045,953,591,-650,953,953,1050', +'-312,-312,-312,-312,-312,-312,-312,-312,-312,-312,-312,-312,-312,-312', +'479,256,-312,-312,-312,1015,477,-312,427,293,-312,422,739,-312,-312', +'1059,-312,1061,-312,1063,-312,1065,-312,-312,-312,-312,-312,-312,-312', +'1065,-312,405,-312,253,402,721,400,255,254,251,252,397,373,236,339,-312', +'-312,-630,-312,1015,-312,724,724,338,-630,-630,-630,-312,276,-630,-630', +'-630,-312,-630,256,131,132,133,134,135,227,-625,-630,-630,-630,-630', +'-624,236,224,223,266,267,222,-630,-630,953,-630,-630,-630,-630,-630', +'582,1015,579,578,577,253,580,259,1088,255,254,251,252,1065,1065,257', +'582,258,579,578,577,1065,580,-630,-630,-630,-630,-630,-630,-630,-630', +'-630,-630,-630,-630,-630,-630,124,748,-630,-630,-630,826,1065,-630,276', +'236,-630,835,837,-630,-630,522,-630,748,-630,524,-630,509,-630,-630', +'-630,-630,-630,-630,-630,509,-630,-630,-630,582,3,579,578,577,587,580', +'809,716,236,-277,797,-630,-630,-630,-630,590,-630,-629,-630,290,796', +'786,290,-630,-629,-629,-629,716,-630,-629,-629,-629,781,-629,256,256', +'724,585,609,724,724,758,-629,-629,-629,-629,595,594,598,597,266,267', +'236,-629,-629,756,-629,-629,-629,-629,-629,582,755,579,578,577,253,580', +'259,754,255,254,251,252,746,744,257,742,258,876,740,236,591,885,-629', +'-629,-629,-629,-629,-629,-629,-629,-629,-629,-629,-629,-629,-629,724', +'748,-629,-629,-629,,,-629,,,-629,,,-629,-629,,-629,,-629,,-629,,-629', +'-629,-629,-629,-629,-629,-629,,-629,-629,-629,582,,579,578,577,587,580', +',,,,,-629,-629,-629,-629,590,-629,-295,-629,,,,,-629,-295,-295,-295', +',-629,-295,-295,-295,256,-295,,,,585,,,,,,-295,-295,-295,595,594,598', +'597,,,,-295,-295,,-295,-295,-295,-295,-295,,,,253,,,,255,254,251,252', +',,,,,,,,,,591,,-295,-295,-295,-295,-295,-295,-295,-295,-295,-295,-295', +'-295,-295,-295,,,-295,-295,-295,,,-295,,,-295,,,-295,-295,,-295,,-295', +',-295,,-295,-295,-295,-295,-295,-295,-295,,-295,,-295,582,,579,578,577', +'587,580,,,,,,-295,-295,-295,-295,590,-295,-650,-295,,,,,-295,-650,-650', +'-650,,-295,-650,-650,-650,,-650,256,,,585,,,,,-650,-650,-650,,,,598', +'597,266,267,,-650,-650,,-650,-650,-650,-650,-650,,,,,,253,,259,,255', +'254,251,252,,,,,,,,,591,,-650,-650,-650,-650,-650,-650,-650,-650,-650', +'-650,-650,-650,-650,-650,,,-650,-650,-650,,,-650,,290,-650,,,-650,-650', +',-650,,-650,,-650,,-650,-650,-650,-650,-650,-650,-650,,-650,-650,-650', +',,,,,,,,,,,,-650,-650,-443,-650,,-650,,,,-443,-443,-443,-650,,-443,-443', +'-443,-650,-443,256,,,,,,,,-443,-443,-443,,,,,,266,267,,-443,-443,,-443', +'-443,-443,-443,-443,,,,,,253,,,,255,254,251,252,,,,,,,,,,,-443,-443', +'-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,,,-443,-443', +'-443,,,-443,,290,-443,,,-443,-443,,-443,,-443,,-443,,-443,-443,-443', +'-443,-443,-443,-443,,-443,-443,-443,,,,,,,,,,,,,-443,-443,,-443,,-443', +'312,85,86,87,12,78,-443,,,79,80,-443,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,663,11,49,314,13,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,270,,-251,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,', +',79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,663,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,', +',266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271', +'257,23,258,,,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266', +'267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257', +'23,258,,,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102,,,108', +'109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273,274', +'268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259', +'48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104', +',270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +'256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102,,,108,109', +'312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,256,260,261,262,263,273,274,268,269', +'264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255', +'254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,270', +',,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256', +'260,261,262,263,273,274,268,269,264,265,,249,250,,,266,267,,43,,,36', +',,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258,,,,103', +'95,97,98,99,101,,,,96,104,236,270,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,256,260,261,262,263,273,274,268,269,264,265', +',-651,-651,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251', +'252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263', +'273,274,268,,264,265,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259', +'48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256', +'260,261,262,263,273,274,,,264,265,,,,,,266,267,,43,,,36,,,62,63,,,64', +',38,253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,256,-651,-651,-651,-651,273,274,,,-651,-651,,,,,,266,267,', +'43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23', +'258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109', +'312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,256,-651,-651,-651,-651,273,274,,,-651', +'-651,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251', +'252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256,-651,-651,-651', +'-651,273,274,,,-651,-651,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,256,-651,-651,-651,-651,273,274,,,-651,-651,,,,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,256,-651,-651,-651,-651,273,274,,,-651,-651', +',,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272', +'271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,-651,-651,,,266,267,,43,,,316,,,62,63,,,64,,38', +'253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,256,-651,-651,-651,-651,273,274,,,-651,-651,,,,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,316,,,62,63,,,64', +',38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,', +'38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43', +',,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,8,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,', +',62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,8,85,86,87,12,78,,,,79,80,,,,83,,81,82', +'84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,316,,,62,63,,,64,,38,,,,48,,,', +',,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +'305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,', +'66,,306,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,', +',,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300', +',48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96', +'104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,', +'120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,', +',103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,320,', +',,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,247,,,62,63', +',,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,337,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77', +',,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,128,,,,,127,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,', +'335,,,,,,,,,,,,,,,,,,,,367,,,36,,,62,63,,,64,,38,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48', +',,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102', +',,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62', +'63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,415', +'66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,432,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,432,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302', +',300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,236,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,', +',,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66', +',306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99', +'101,,,,96,104,236,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,992,,,247,,,62,63,,,64,,,,,,', +',,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,11,49,,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,699,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325', +',,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,537,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,', +',,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,554,,62,63,,,64,,,,,,48,', +',,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,999,,,247,,,62,63', +',,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,', +'247,,,62,63,,,64,,302,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96', +'104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49', +',,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,992,,,247,,,62,63,,', +'64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,', +',,,,,,,,,241,,,247,,,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,329,,,120,119,121,616,60,112,111,617,,114,122,123,,106,107', +',,,335,,,,,,,,,,,,,,,,,,,,618,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,329,,,120,119,121,616,60,112,111,617,,114,122,123,,106', +'107,,,,335,,,,,,,,,,,,,,,,,,,,618,,,247,,,62,63,,,64,,,,,,,,,,,,,,,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,', +',,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,699,,300', +',48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,', +'247,,,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96', +'104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,', +',,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,415,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325', +',,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',,,335,,,,,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96', +'104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,', +',,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,,,48,,,,,,,,246,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',241,,,247,,,62,63,,,64,,699,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,', +',,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,432,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302', +',300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76', +'77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,', +',,,,,,,,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +',49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,801', +',,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,', +',,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,', +',,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334', +'116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305', +'114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,699,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,', +',,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,', +',,,,,,,,,241,,,247,,,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,189,200,190', +'213,186,206,196,195,216,217,211,194,193,188,214,218,219,198,187,201', +'205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203,,,,,,184', +'191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172', +'168,167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,,104,,,,,,,,,170', +',,,,178,189,200,190,213,186,206,196,195,216,217,211,194,193,188,214', +'218,219,198,187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185', +'204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174', +',169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,', +',,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,103,,', +',,,,,,,104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217', +'211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210', +'209,202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141', +'412,411,140,,413,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158', +'156,148,171,149,,,177,,,,,,,,,,,,,,,,,,,,170,,,,,178,189,200,190,213', +'186,206,196,195,216,217,211,194,193,188,214,218,219,198,187,201,205', +'207,199,192,,,,208,215,210,209,202,212,197,185,204,203,,,,,,184,191', +'182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169,151,152,153,160', +'157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,,104,,,,,,,,,170,', +',,,178,189,200,190,213,186,206,196,195,216,217,211,194,193,188,214,218', +'219,198,187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185,204', +'203,,,,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,', +'169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,', +',,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,', +',,,,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211', +'194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209', +'202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141,138', +',140,,,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176', +'161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171', +'149,,,177,103,,,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190,213,186,206', +'196,195,216,217,211,194,193,188,214,218,219,198,187,201,205,207,199', +'192,,,,208,215,210,382,381,383,380,185,204,203,,,,,,184,191,182,183', +'377,378,379,375,141,112,111,376,,114,,,,,,,173,174,,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,389,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,680,459,,,681', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,892,466,,,893,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,', +',507,459,,,508,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,', +'154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,682,466,,,683,,,,,,170,,', +'173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,455,459,,,456,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,803,459,,,804', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,1069,466,,,1068,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,', +',806,466,,,805,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,', +'154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,709,459,,,710,,,,,,170,,', +'173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,712,466,,,713,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,1074,466,,,1075', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,680,459,,,681,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,', +',682,466,,,683,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,', +'154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,1072,459,,,1073,,,,,,170', +',,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,462,466,,,461,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,582,177,579,578,577,587,580', +',,,,507,459,,,508,590,,,,,170,,,173,174,178,169,151,152,153,160,157', +'159,,,154,155,585,,,175,176,161,162,,,595,594,598,597,,,,,,,,166,165', +',150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,591,769,459', +',,770,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,', +',,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158', +'156,148,171,149,,,177,582,,579,578,577,587,580,,,771,466,,,772,,,590', +',,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,585,175', +'176,161,162,,,,,,290,598,597,,,,,,166,165,,150,172,168,167,163,164,158', +'156,148,171,149,,582,177,579,578,577,587,580,,,,,,591,,,,590,,,,,170', +',,,582,178,579,578,577,587,580,,,,,,,585,,582,590,579,578,577,587,580', +'595,594,598,597,,,,,582,590,579,578,577,587,580,,585,568,,,,,,,590,595', +'594,598,597,,,585,,,,582,591,579,578,577,587,580,598,597,,,585,,,,,590', +',,,595,594,598,597,,,591,582,,579,578,577,587,580,,,,,585,,,591,582', +'590,579,578,577,587,580,598,597,,,,,,591,582,590,579,578,577,587,580', +',585,,,,,,,,590,,,598,597,,,585,,582,591,579,578,577,587,580,595,594', +'598,597,,,585,,582,590,579,578,577,587,580,595,594,598,597,,,591,,,590', +',,,236,,,585,,,,,591,,,,595,594,598,597,,,585,,,,582,591,579,578,577', +'587,580,598,597,,,,,,,,590,,,,,,,,,,591,,,,,,,,,,,,585,,,591,,,,,,,', +'598,597,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,591' ] + racc_action_table = arr = ::Array.new(26078, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -910,950 +915,931 @@ end clist = [ -'434,313,322,1040,1043,349,64,434,434,434,603,669,22,434,434,61,434,318', -'318,595,684,80,290,746,361,434,670,392,861,80,599,361,389,757,599,684', -'434,434,757,434,434,434,434,434,322,862,871,993,22,993,61,871,821,689', -'690,744,1055,229,350,322,670,732,732,914,1041,936,975,434,434,434,434', -'434,434,434,434,434,434,434,434,434,434,587,1043,434,434,434,550,434', -'313,746,392,434,976,64,434,389,318,318,669,434,285,434,774,434,434,434', -'434,434,434,434,349,434,434,434,229,282,603,1040,1043,821,689,690,1040', -'1043,595,98,434,434,746,434,979,434,98,98,98,603,1042,98,98,98,603,98', -'861,434,434,861,1018,861,342,98,862,98,98,98,821,689,690,821,689,690', -'744,98,98,350,98,98,98,98,98,343,1055,636,821,689,690,1055,692,914,1041', -'936,975,587,914,1041,936,975,587,743,353,281,227,550,98,98,98,98,98', -'98,98,98,98,98,98,98,98,98,976,588,98,98,98,976,98,98,1042,863,98,779', -'745,98,98,29,98,656,98,657,98,632,98,98,98,98,98,98,98,630,98,627,98', -'764,764,795,692,692,979,44,44,227,270,979,1042,98,98,98,98,1042,98,598', -'98,370,1018,226,342,101,456,1018,370,342,98,98,101,101,101,451,451,101', -'101,101,692,101,656,692,657,343,745,486,29,101,343,101,101,101,743,353', -'699,699,692,267,795,101,101,235,101,101,101,101,101,588,29,945,598,797', -'588,798,945,863,507,598,226,486,863,456,598,745,44,44,598,494,800,764', -'101,101,101,101,101,101,101,101,101,101,101,101,101,101,598,41,101,101', -'101,495,101,101,704,962,101,704,962,101,101,394,101,494,101,451,101', -'597,101,101,101,101,101,101,101,27,101,598,101,507,507,507,27,977,42', -'495,699,1026,1026,41,977,101,101,101,101,620,101,762,101,977,507,462', -'762,658,41,801,367,802,101,101,658,658,658,367,711,658,658,658,334,658', -'597,334,394,394,394,711,42,597,658,658,658,658,597,462,341,341,597,462', -'462,658,658,42,658,658,658,658,658,932,977,932,932,932,335,932,597,335', -'620,620,711,711,726,639,726,726,726,620,726,804,864,805,658,658,658', -'658,658,658,658,658,658,658,658,658,658,658,18,597,658,658,658,225,658', -'658,711,806,658,807,225,658,658,623,658,231,658,639,658,225,658,658', -'658,658,658,658,658,890,658,658,658,548,639,230,548,864,386,228,890', -'932,18,383,864,658,658,658,658,864,658,433,658,864,726,820,294,18,433', -'433,433,294,658,658,433,433,824,433,49,827,225,864,828,890,890,49,623', -'623,463,524,538,538,966,833,49,623,524,433,433,966,433,433,433,433,433', -'524,865,834,966,386,386,386,864,865,383,383,383,890,865,428,463,427', -'865,380,463,463,380,835,433,433,433,433,433,433,433,433,433,433,433', -'433,433,433,351,49,433,433,433,836,433,351,840,346,433,841,524,433,346', -'966,351,843,433,428,433,427,433,433,433,433,433,433,433,865,433,307', -'433,749,428,844,427,846,307,849,749,378,380,380,659,433,433,307,433', -'749,433,659,659,659,758,758,659,659,659,362,659,306,433,433,851,351', -'362,366,306,363,659,659,659,126,366,305,363,306,126,126,659,659,305', -'659,659,659,659,659,360,590,365,305,368,904,17,360,307,365,749,368,904', -'17,378,378,378,714,714,20,20,904,17,659,659,659,659,659,659,659,659', -'659,659,659,659,659,659,854,306,659,659,659,364,659,659,589,857,659', -'584,364,659,659,305,659,376,659,207,659,124,659,659,659,659,659,659', -'659,90,659,5,659,904,17,582,5,1050,867,1050,1050,1050,1050,1050,693', -'659,659,659,659,89,659,693,659,1050,88,872,693,59,873,874,693,883,659', -'659,59,59,59,884,579,59,59,59,87,59,324,1050,575,382,376,376,376,324', -'567,59,59,59,1050,1050,601,558,324,557,901,59,59,601,59,59,59,59,59', -'72,556,905,601,906,554,309,908,693,909,553,48,1010,309,1010,1010,1010', -'549,1010,1050,546,385,309,59,59,59,59,59,59,59,59,59,59,59,59,59,59', -'537,324,59,59,59,536,934,59,43,938,59,939,388,59,59,601,59,391,59,944', -'59,528,59,59,59,59,59,59,59,952,59,955,59,1019,309,1019,1019,1019,1019', -'1019,9,9,9,9,9,59,59,59,59,1019,59,30,59,296,296,296,296,296,30,30,30', -'956,59,30,30,30,568,30,568,568,568,1019,568,957,958,960,30,30,30,525', -'765,765,1019,1019,765,765,765,30,30,520,30,30,30,30,30,1024,970,1024', -'1024,1024,40,1024,25,413,568,978,723,518,723,723,723,981,723,568,982', -'983,1019,984,30,30,30,30,30,30,30,30,30,30,30,30,30,30,985,1024,30,30', -'30,515,987,30,514,30,30,19,723,30,30,416,30,418,30,422,30,723,30,30', -'30,30,30,30,30,481,30,30,30,425,497,850,1011,850,850,850,1012,850,1014', -'496,439,30,30,426,30,467,30,439,439,439,16,466,439,439,439,472,439,481', -'30,465,1025,481,481,481,481,439,439,439,439,850,1030,472,472,1031,1032', -'1033,439,439,850,439,439,439,439,439,1034,1035,1036,472,1039,472,15', -'472,472,472,472,13,1044,472,988,472,988,988,988,1045,988,464,3,439,439', -'439,439,439,439,439,439,439,439,439,439,439,439,677,435,439,439,439', -'332,326,439,675,686,439,688,323,439,439,988,439,443,439,691,439,319', -'439,439,439,439,439,439,439,1057,439,439,439,1006,694,1006,1006,1006', -'1006,1006,683,683,683,683,683,439,439,439,439,1006,439,31,439,513,513', -'513,513,513,31,31,31,695,439,31,31,31,668,31,473,662,986,1006,986,986', -'986,698,986,31,31,317,700,1,1006,1006,473,473,703,31,31,312,31,31,31', -'31,31,902,311,902,902,902,473,902,473,710,473,473,473,473,986,660,473', -'852,473,852,852,852,1006,852,31,31,31,31,31,31,31,31,31,31,31,31,31', -'31,336,482,31,31,31,651,725,31,727,31,31,734,739,31,31,308,31,852,31', -'742,31,645,31,31,31,31,31,31,31,347,31,348,31,482,302,301,352,482,482', -'482,482,640,354,300,438,31,31,298,31,,31,438,438,438,,,438,438,438,474', -'438,933,31,933,933,933,,933,,438,438,438,438,,,474,474,,,,438,438,,438', -'438,438,438,438,,,,474,,474,,474,474,474,474,933,,474,,474,,,,,,,,438', -'438,438,438,438,438,438,438,438,438,438,438,438,438,,,438,438,438,,', -'438,,,438,,,438,438,,438,,438,,438,,438,438,438,438,438,438,438,,438', -'438,438,1004,,1004,1004,1004,1004,1004,,,,,,438,438,438,438,1004,438', -'429,438,,,,,,429,429,429,,438,429,429,429,,429,475,,,1004,,,,,429,429', -'429,,,,1004,1004,475,475,,429,429,,429,429,429,429,429,,,,,,475,,475', -',475,475,475,475,,,475,,475,,,,1004,,429,429,429,429,429,429,429,429', -'429,429,429,429,429,429,,,429,429,429,,,429,,429,429,,,429,429,,429', -',429,,429,,429,429,429,429,429,429,429,,429,429,429,,,,,,,,,,,,,429', -'429,,429,,429,974,974,974,974,974,974,,,,974,974,429,,,974,,974,974', -'974,974,974,974,974,,,,,,974,974,974,974,974,974,974,,,974,,,,,446,974', -'974,,974,974,974,974,974,974,974,974,974,,974,974,974,,974,974,,974', -'974,974,446,446,446,446,446,446,446,446,446,446,446,,446,446,,,446,446', -',974,,,974,,,974,974,,,974,,974,446,,446,974,446,446,446,446,446,446', -'446,974,446,,,,974,974,974,974,974,974,,,,974,974,,446,,446,,,974,,', -'974,974,974,,,974,974,234,234,234,234,234,234,,,,234,234,,,,234,,234', -'234,234,234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,661', -'234,234,,234,234,234,234,234,234,234,234,234,,234,234,234,,234,234,', -'234,234,234,661,661,661,661,661,661,661,661,661,661,661,,661,661,,,661', -'661,,234,,,234,,,234,234,,,234,,234,661,,661,234,661,661,661,661,661', -'661,661,234,661,,,,234,234,234,234,234,234,,,,234,234,,661,,,,,234,', -',234,234,234,,,234,234,811,811,811,811,811,811,,,,811,811,,,,811,,811', -'811,811,811,811,811,811,,,,,,811,811,811,811,811,811,811,,,811,,,,,421', -'811,811,,811,811,811,811,811,811,811,811,811,,811,811,811,,811,811,', -'811,811,811,421,421,421,421,421,421,421,421,421,421,421,,421,421,,,421', -'421,,811,,,811,,,811,811,,,811,,811,421,,421,811,421,421,421,421,421', -'421,421,811,421,,,,811,811,811,811,811,811,,,,811,811,,421,,,,,811,', -',811,811,811,,,811,811,209,209,209,209,209,209,,,,209,209,,,,209,,209', -'209,209,209,209,209,209,,,,,,209,209,209,209,209,209,209,,,209,,,,,', -'209,209,,209,209,209,209,209,209,209,209,209,,209,209,209,,209,209,', -'209,209,209,776,776,776,776,776,776,776,776,776,776,776,,776,776,,,776', -'776,,209,,,209,,,209,209,,,209,,209,776,,776,209,776,776,776,776,776', -'776,776,209,776,,,,209,209,209,209,209,209,,,,209,209,,776,,,,,209,', -',209,209,209,,,209,209,941,941,941,941,941,941,,,,941,941,,,,941,,941', -'941,941,941,941,941,941,,,,,,941,941,941,941,941,941,941,,,941,,,,,', -'941,941,,941,941,941,941,941,941,941,941,941,,941,941,941,,941,941,', -'941,941,941,788,788,788,788,788,788,788,788,788,788,788,,788,788,,,788', -'788,,941,,,941,,,941,941,,,941,,941,788,,788,941,788,788,788,788,788', -'788,788,941,788,,,,941,941,941,941,941,941,,,,941,941,,788,,,,,941,', -',941,941,941,,,941,941,709,709,709,709,709,709,,,,709,709,,,,709,,709', -'709,709,709,709,709,709,,,,,,709,709,709,709,709,709,709,,,709,,,,,', -'709,709,,709,709,709,709,709,709,709,709,709,,709,709,709,,709,709,', -'709,709,709,781,781,781,781,781,781,781,781,781,781,781,,781,781,,,781', -'781,,709,,,709,,,709,709,,,709,,709,781,,781,709,781,781,781,781,781', -'781,781,709,781,,,,709,709,709,709,709,709,,,,709,709,,781,,,,,709,', -',709,709,709,,,709,709,859,859,859,859,859,859,,,,859,859,,,,859,,859', -'859,859,859,859,859,859,,,,,,859,859,859,859,859,859,859,,,859,,,,,', -'859,859,,859,859,859,859,859,859,859,859,859,,859,859,859,,859,859,', -'859,859,859,889,889,889,889,889,889,889,889,889,889,889,,889,889,,,889', -'889,,859,,,859,,,859,859,,,859,,859,889,,889,859,889,889,889,889,889', -'889,889,859,889,,,,859,859,859,859,859,859,,,,859,859,,889,,,,,859,', -',859,859,859,,,859,859,858,858,858,858,858,858,,,,858,858,,,,858,,858', -'858,858,858,858,858,858,,,,,,858,858,858,858,858,858,858,,,858,,,,,', -'858,858,,858,858,858,858,858,858,858,858,858,,858,858,858,,858,858,', -'858,858,858,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,858,,,858', -',,858,858,,,858,,858,24,,24,858,24,24,24,24,24,24,24,858,24,,,,858,858', -'858,858,858,858,,,,858,858,,24,,,,,858,,,858,858,858,,,858,858,998,998', -'998,998,998,998,,,,998,998,,,,998,,998,998,998,998,998,998,998,,,,,', -'998,998,998,998,998,998,998,,,998,,,,,,998,998,,998,998,998,998,998', -'998,998,998,998,,998,998,998,,998,998,,998,998,998,697,697,697,697,697', -'697,697,697,697,697,697,,697,697,,,697,697,,998,,,998,,,998,998,,,998', -',998,697,,697,998,697,697,697,697,697,697,697,998,697,,,,998,998,998', -'998,998,998,,,,998,998,,697,,,,,998,,,998,998,998,,,998,998,997,997', -'997,997,997,997,,,,997,997,,,,997,,997,997,997,997,997,997,997,,,,,', -'997,997,997,997,997,997,997,,,997,,,,,,997,997,,997,997,997,997,997', -'997,997,997,997,,997,997,997,,997,997,,997,997,997,886,886,886,886,886', -'886,886,886,886,886,886,,886,886,,,886,886,,997,,,997,,,997,997,,,997', -',997,886,,886,997,886,886,886,886,886,886,886,997,886,,,,997,997,997', -'997,997,997,,,,997,997,,886,,,,,997,,,997,997,997,,,997,997,994,994', -'994,994,994,994,,,,994,994,,,,994,,994,994,994,994,994,994,994,,,,,', -'994,994,994,994,994,994,994,,,994,,,,,,994,994,,994,994,994,994,994', -'994,994,994,994,,994,994,994,,994,994,,994,994,994,783,783,783,783,783', -'783,783,783,783,783,783,,783,783,,,783,783,,994,,,994,,,994,994,,,994', -',994,783,,783,994,783,783,783,783,783,783,783,994,783,,,,994,994,994', -'994,994,994,,,,994,994,,783,,,,,994,,,994,994,994,,,994,994,304,304', -'304,304,304,304,,,,304,304,,,,304,,304,304,304,304,304,304,304,,,,,', -'304,304,304,304,304,304,304,,,304,,,,,,304,304,,304,304,304,304,304', -'304,304,304,304,,304,304,304,,304,304,,304,304,304,441,441,441,441,441', -'441,441,441,441,441,441,,441,441,,,441,441,,304,,,304,,,304,304,,,304', -',304,441,,441,304,441,441,441,441,441,441,441,304,441,,,,304,304,304', -'304,304,304,,,,304,304,,441,,,,,304,,,304,304,304,,,304,304,911,911', -'911,911,911,911,,,,911,911,,,,911,,911,911,911,911,911,911,911,,,,,', -'911,911,911,911,911,911,911,,,911,,,,,,911,911,,911,911,911,911,911', -'911,911,911,911,,911,911,911,,911,911,,911,911,911,786,786,786,786,786', -'786,786,786,786,786,786,,786,786,,,786,786,,911,,,911,,,911,911,,,911', -',911,786,,786,911,786,786,786,786,786,786,786,911,786,,,,911,911,911', -'911,911,911,,,,911,911,,786,,,,,911,,,911,911,911,,,911,911,826,826', -'826,826,826,826,,,,826,826,,,,826,,826,826,826,826,826,826,826,,,,,', -'826,826,826,826,826,826,826,,,826,,,,,,826,826,,826,826,826,826,826', -'826,826,826,826,,826,826,826,,826,826,,826,826,826,279,279,279,279,279', -'279,279,279,279,279,279,,279,279,,,279,279,,826,,,826,,,826,826,,,826', -',826,279,,279,826,279,279,279,279,279,279,279,826,279,,,,826,826,826', -'826,826,826,,,,826,826,,279,,,,,826,,,826,826,826,,,826,826,815,815', -'815,815,815,815,,,,815,815,,,,815,,815,815,815,815,815,815,815,,,,,', -'815,815,815,815,815,815,815,,,815,,,,,,815,815,,815,815,815,815,815', -'815,815,815,815,,815,815,815,,815,815,,815,815,815,485,485,485,485,485', -'485,485,485,485,485,485,,485,485,,,485,485,,815,,,815,,,815,815,,,815', -',815,485,,485,815,485,485,485,485,485,485,485,815,485,,,,815,815,815', -'815,815,815,,,,815,815,485,485,,,,,815,,,815,815,815,,,815,815,816,816', -'816,816,816,816,,,,816,816,,,,816,,816,816,816,816,816,816,816,,,,,', -'816,816,816,816,816,816,816,,,816,,,,,,816,816,,816,816,816,816,816', -'816,816,816,816,,816,816,816,,816,816,,816,816,816,790,790,790,790,790', -'790,790,790,790,790,790,,790,790,,,790,790,,816,,,816,,,816,816,,,816', -',816,790,,790,816,790,790,790,790,790,790,790,816,790,,,,816,816,816', -'816,816,816,,,,816,816,,790,,,,,816,,,816,816,816,,,816,816,907,907', -'907,907,907,907,,,,907,907,,,,907,,907,907,907,907,907,907,907,,,,,', -'907,907,907,907,907,907,907,,,907,,,,,,907,907,,907,907,907,907,907', -'907,907,907,907,,907,907,907,,907,907,,907,907,907,534,534,534,534,534', -'534,534,534,534,534,534,,534,534,,,534,534,,907,,,907,,,907,907,,,907', -',907,534,,534,907,534,534,534,534,534,534,534,907,534,,,,907,907,907', -'907,907,907,,,,907,907,,534,,,,,907,,,907,907,907,,,907,907,299,299', -'299,299,299,299,,,,299,299,,,,299,,299,299,299,299,299,299,299,,,,,', -'299,299,299,299,299,299,299,,,299,,,,,,299,299,,299,299,299,299,299', -'299,299,299,299,,299,299,299,,299,299,,299,299,299,483,483,483,483,483', -'483,483,,,483,483,,,,,,483,483,,299,,,299,,,299,299,,,299,,299,483,', -'483,299,483,483,483,483,483,483,483,299,483,,,,299,299,299,299,299,299', -',,,299,299,,,,,,,299,,,299,299,299,,,299,299,989,989,989,989,989,989', -',,,989,989,,,,989,,989,989,989,989,989,989,989,,,,,,989,989,989,989', -'989,989,989,,,989,,,,,,989,989,,989,989,989,989,989,989,989,989,989', -',989,989,989,,989,989,,989,989,989,460,460,460,460,460,460,460,460,460', -'460,460,,460,460,,,460,460,,989,,,989,,,989,989,,,989,,989,460,,460', -'989,460,460,460,460,460,460,460,989,460,,,,989,989,989,989,989,989,', -',,989,989,,,,,,,989,,,989,989,989,,,989,989,329,329,329,329,329,329', -',,,329,329,,,,329,,329,329,329,329,329,329,329,,,,,,329,329,329,329', -'329,329,329,,,329,,,,,,329,329,,329,329,329,329,329,329,329,329,329', -',329,329,329,,329,329,,329,329,329,461,461,461,461,461,461,461,461,461', -'461,461,,461,461,,,461,461,,329,,,329,,,329,329,,,329,,329,461,,461', -'329,461,461,461,461,461,461,461,329,461,,,,329,329,329,329,329,329,', -',,329,329,,,,,,,329,,,329,329,329,,,329,329,708,708,708,708,708,708', -',,,708,708,,,,708,,708,708,708,708,708,708,708,,,,,,708,708,708,708', -'708,708,708,,,708,,,,,,708,708,,708,708,708,708,708,708,708,708,708', -',708,708,708,,708,708,,708,708,708,477,477,477,477,477,477,477,,,477', -'477,,,,,,477,477,,708,,,708,,,708,708,,,708,,708,477,,477,708,477,477', -'477,477,477,477,477,708,477,,,,708,708,708,708,708,708,,,,708,708,,', -',,,,708,,,708,708,708,,,708,708,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2', -'2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,,2', -'2,2,478,478,478,478,478,478,478,,,478,478,,,,,,478,478,,2,,,2,,,2,2', -',,2,,2,478,,478,2,478,478,478,478,478,478,478,2,478,,,,2,2,2,2,2,2,', -',,2,2,,,,,,,2,,,2,2,2,,,2,2,759,759,759,759,759,759,,,,759,759,,,,759', -',759,759,759,759,759,759,759,,,,,,759,759,759,759,759,759,759,,,759', -',,,,,759,759,,759,759,759,759,759,759,759,759,759,,759,759,759,,759', -'759,,759,759,759,479,479,479,479,479,479,479,,,479,479,,,,,,479,479', -',759,,,759,,,759,759,,,759,,759,479,,479,759,479,479,479,479,479,479', -'479,759,479,,,,759,759,759,759,759,759,,,,759,759,,,,,,,759,,,759,759', -'759,,,759,759,868,868,868,868,868,868,,,,868,868,,,,868,,868,868,868', -'868,868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,868,868', -',868,868,868,868,868,868,868,868,868,,868,868,868,,868,868,,868,868', -'868,480,480,480,480,480,480,480,,,480,480,,,,,,480,480,,868,,,868,,', -'868,868,,,868,,868,480,,480,868,480,480,480,480,480,480,480,868,480', -',,,868,868,868,868,868,868,,,,868,868,,,,,,,868,,,868,868,868,,,868', -'868,760,760,760,760,760,760,,,,760,760,,,,760,,760,760,760,760,760,760', -'760,,,,,,760,760,760,760,760,760,760,,,760,,,,,,760,760,,760,760,760', -'760,760,760,760,760,760,,760,760,760,,760,760,,760,760,760,484,484,484', -'484,484,484,484,484,,484,484,,,,,,484,484,,760,,,760,,,760,760,,,760', -',760,484,,484,760,484,484,484,484,484,484,484,760,484,,,,760,760,760', -'760,760,760,,,,760,760,,,,,,,760,,,760,760,760,,,760,760,766,766,766', -'766,766,766,,,,766,766,,,,766,,766,766,766,766,766,766,766,,,,,,766', -'766,766,766,766,766,766,,,766,,,,,,766,766,,766,766,766,766,766,766', -'766,766,766,,766,766,766,,766,766,,766,766,766,471,471,471,471,471,471', -'471,,,471,471,,,,,,471,471,,766,,,766,,,766,766,,,766,,766,471,,471', -'766,471,471,471,471,471,471,471,766,471,,,,766,766,766,766,766,766,', -',,766,766,,,,,,,766,,,766,766,766,,,766,766,407,407,407,407,407,407', -',,,407,407,,,,407,,407,407,407,407,407,407,407,,,,,,407,407,407,407', -'407,407,407,,,407,,,,,,407,407,407,407,407,407,407,407,407,407,407,407', -',407,407,407,,407,407,,407,407,407,476,476,476,476,476,476,476,,,476', -'476,,,,,,476,476,,407,,,407,,,407,407,,,407,,407,476,,476,407,476,476', -'476,476,476,476,476,407,476,,,,407,407,407,407,407,407,,,,407,407,,', -',,,,407,,,407,407,407,,,407,407,36,36,36,36,36,36,,,,36,36,,,,36,,36', -'36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36,,36,36,36', -'36,36,36,36,36,36,,36,36,36,,36,36,,36,36,36,468,,,,,,,,,,,,,,,,468', -'468,,36,,,36,,470,36,36,,,36,,36,468,,468,36,468,468,468,468,470,470', -',36,,,,,36,36,36,36,36,36,,,470,36,36,,470,470,470,470,,36,,,36,36,36', -',,36,36,583,583,583,583,583,583,,,,583,583,,,,583,,583,583,583,583,583', -'583,583,,,,,,583,583,583,583,583,583,583,,,583,,,,,,583,583,,583,583', -'583,583,583,583,583,583,583,,583,583,583,,583,583,,583,583,583,469,', -',,,,,,,,,,,,,,469,469,,583,,,583,,,583,583,,,583,,583,469,,469,583,469', -'469,469,469,,,,583,,,,,583,583,583,583,583,583,,,,583,583,,,,,,,583', -',,583,583,583,,,583,583,586,586,586,586,586,586,,,,586,586,,,,586,,586', -'586,586,586,586,586,586,,,,,,586,586,586,586,586,586,586,,,586,,,,,', -'586,586,,586,586,586,586,586,586,586,586,586,,586,586,586,,586,586,', -'586,586,586,,,,,,,,,,,,,,,,,,,,586,,,586,,,586,586,,,586,,586,,,,586', -',,,,,,,586,,,,,586,586,586,586,586,586,,,,586,586,,,,,,,586,,,586,586', -'586,,,586,586,257,257,257,,257,,,,257,257,,,,257,,257,257,257,257,257', -'257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257,257', -'257,257,257,257,257,,257,257,257,,257,257,,257,257,257,,,,,,,,,,,,,', -',,,,,,257,,,257,,,257,257,,,257,,,,,,257,,,,,,,,257,,,,,257,257,257', -'257,257,257,,,,257,257,,,,,,,257,,,257,257,257,,,257,257,455,455,455', -',455,,,,455,455,,,,455,,455,455,455,455,455,455,455,,,,,,455,455,455', -'455,455,455,455,,,455,,,,,,,455,,,455,455,455,455,455,455,455,455,455', -'455,455,455,,455,455,,455,455,455,,,,,,,,,,,,,,,,,,,,455,,,455,,,455', -'455,,,455,,455,,455,,455,,,,,,,,455,,,,,455,455,455,455,455,455,,,,455', -'455,,,,,,,455,,455,455,455,455,,,455,455,8,8,8,8,8,,,,8,8,,,,8,,8,8', -'8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8', -',8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,', -'8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,1015,1015,1015,,1015,,,,1015', -'1015,,,,1015,,1015,1015,1015,1015,1015,1015,1015,,,,,,1015,1015,1015', -'1015,1015,1015,1015,,,1015,,,,,,,1015,,,1015,1015,1015,1015,1015,1015', -'1015,1015,1015,1015,1015,1015,,1015,1015,,1015,1015,1015,,,,,,,,,,,', -',,,,,,,,1015,,,1015,,,1015,1015,,,1015,,1015,,1015,,1015,,,,,,,,1015', -',,,,1015,1015,1015,1015,1015,1015,,,,1015,1015,,,,,,,1015,,1015,1015', -'1015,1015,,,1015,1015,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23,23,23', -'23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23,23,23', -',23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23,,,23,', -',,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,,,23,23,23', -',,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32', -'32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,', -'32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32', -',,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32,,,32', -'32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33', -'33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,,33,33', -',33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33,,,,,,', -',33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33,33,34', -'34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34', -'34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,,34,34', -'34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,,,34,,,', -',34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37,37,37,', -'37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,', -'37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,', -',,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37', -'37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,,38', -',38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38', -'38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38', -',,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,,,38', -',,38,38,38,,,38,38,940,940,940,,940,,,,940,940,,,,940,,940,940,940,940', -'940,940,940,,,,,,940,940,940,940,940,940,940,,,940,,,,,,,940,,,940,940', -'940,940,940,940,940,940,,940,940,940,,940,940,,940,940,940,,,,,,,,,', -',,,,,,,,,,940,,,940,,,940,940,,,940,,940,,,,940,,,,,,,,940,,,,,940,940', -'940,940,940,940,,,,940,940,,,,,,,940,,,940,940,940,,,940,940,915,915', -'915,,915,,,,915,915,,,,915,,915,915,915,915,915,915,915,,,,,,915,915', -'915,915,915,915,915,,,915,,,,,,,915,,,915,915,915,915,915,915,915,915', -',915,915,915,,915,915,,,,915,,,,,,,,,,,,,,,,,,,,915,,,915,,,915,915', -',,915,,,,,,,,,,,,,,,,,,,915,915,915,915,915,915,,,,915,915,,,,,,,915', -',,915,915,915,,,915,915,45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45', -'45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45', -'45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45', -',,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45', +'113,603,603,603,603,603,603,113,113,113,603,603,113,113,113,603,113', +'603,603,603,603,603,603,603,113,65,113,113,113,603,603,603,603,603,603', +'603,113,113,603,113,113,113,113,113,603,603,603,603,603,603,603,603', +'603,603,603,603,709,603,603,603,571,603,603,842,603,603,603,113,113', +'113,113,113,113,113,113,113,113,113,113,113,113,768,365,113,113,113', +'603,113,113,603,364,113,603,603,113,113,603,113,603,113,710,113,603', +'113,113,113,113,113,113,113,603,113,65,113,376,603,603,603,603,603,603', +'376,890,709,603,603,113,113,113,113,842,113,603,113,712,603,603,603', +'113,805,603,603,1086,113,1073,113,805,805,805,604,1075,902,805,805,368', +'805,902,769,709,357,22,709,403,471,471,842,614,710,842,618,687,356,1042', +'618,938,805,805,709,805,805,805,805,805,1000,842,330,996,365,406,770', +'734,771,689,361,772,364,22,889,361,1072,712,712,710,962,687,710,805', +'805,805,805,805,805,805,805,805,805,805,805,805,805,570,710,805,805', +'805,403,805,890,1075,239,805,719,719,805,1074,1018,712,1018,805,712', +'805,997,805,805,805,805,805,805,805,604,805,406,805,471,604,712,1086', +'771,1073,368,772,1086,769,1073,1075,805,805,462,805,1075,805,614,330', +'357,462,462,462,805,357,689,462,462,805,462,805,356,1042,239,938,566', +'356,1042,462,938,770,734,771,1000,563,772,996,526,1000,462,462,996,462', +'462,462,462,462,889,1074,1072,889,836,889,962,1072,29,92,719,962,789', +'789,391,377,561,92,641,561,562,617,377,462,462,462,462,462,462,462,462', +'462,462,462,462,462,462,1074,836,462,462,462,1074,462,997,794,804,462', +'720,997,462,526,526,526,720,462,914,462,557,462,462,462,462,462,462', +'462,556,462,462,462,335,335,526,29,617,391,391,391,616,641,641,617,462', +'462,683,462,617,462,641,704,617,683,683,683,462,29,683,683,683,462,683', +'462,789,555,804,704,794,794,617,27,683,683,683,548,914,794,27,892,477', +'546,683,683,825,683,683,683,683,683,383,366,543,616,538,382,536,383', +'366,393,616,617,382,44,44,616,439,366,533,616,532,335,335,683,683,683', +'683,683,683,683,683,683,683,683,683,683,683,616,681,683,683,683,892', +'683,683,798,27,683,477,892,683,683,825,683,892,683,800,683,892,683,683', +'683,683,683,683,683,366,683,616,683,393,393,393,802,439,787,892,787', +'787,787,787,787,683,683,683,683,20,683,456,683,680,787,44,44,683,461', +'681,516,644,683,970,683,461,461,461,970,736,892,461,461,978,461,751', +'787,751,751,751,736,751,242,515,978,787,787,787,787,385,240,20,803,456', +'461,461,385,461,461,461,461,461,958,893,958,958,958,20,958,456,893,680', +'455,736,736,893,504,978,978,893,488,787,644,644,644,461,461,461,461', +'461,461,461,461,461,461,461,461,461,461,438,242,461,461,461,398,461', +'438,736,240,461,803,978,461,751,455,438,487,461,408,461,486,461,461', +'461,461,461,461,461,893,461,455,461,19,898,238,998,620,810,898,19,958', +'238,998,620,461,461,110,461,19,461,238,998,620,110,110,110,461,485,110', +'110,110,461,110,461,438,398,398,398,381,380,110,379,110,110,110,381', +'380,542,379,408,408,408,110,110,542,110,110,110,110,110,339,713,473', +'542,463,1034,454,19,713,238,998,620,1034,713,41,453,878,713,878,878', +'878,1034,878,110,110,110,110,110,110,110,110,110,110,110,110,110,110', +'450,375,110,110,110,339,110,110,375,565,110,436,565,110,110,542,110', +'878,110,41,110,339,110,110,110,110,110,110,110,713,110,395,110,1034', +'395,41,560,433,951,560,951,951,951,951,951,110,110,110,110,378,110,834', +'110,991,951,431,378,110,682,841,991,428,110,309,110,682,682,682,309', +'991,682,682,682,405,682,775,951,47,47,17,17,852,775,682,682,682,682', +'951,951,322,853,775,395,395,682,682,322,682,682,682,682,682,402,323', +'5,322,400,324,326,5,323,860,47,47,324,326,42,1004,991,323,1004,951,861', +'324,326,682,682,682,682,682,682,682,682,682,682,682,682,682,682,862', +'775,682,682,682,341,682,682,856,866,682,856,341,682,682,322,682,867', +'682,42,682,341,682,682,682,682,682,682,682,323,682,682,682,324,326,42', +'869,740,664,740,740,740,740,740,50,682,682,682,682,138,682,50,682,740', +'138,138,484,682,806,870,50,872,682,875,682,806,806,806,757,757,341,806', +'806,397,806,740,739,739,355,355,664,1052,1052,806,740,740,740,740,484', +'783,783,877,484,484,806,806,664,806,806,806,806,806,348,348,348,348', +'348,880,748,50,748,748,748,876,748,876,876,876,886,876,740,891,895,899', +'901,806,806,806,806,806,806,806,806,806,806,806,806,806,806,910,913', +'806,806,806,369,806,748,367,363,806,920,876,806,921,923,748,924,806', +'925,806,876,806,806,806,806,806,806,806,927,806,806,806,1044,928,1044', +'1044,1044,585,1044,585,585,585,483,585,806,806,506,806,929,806,362,349', +'942,506,506,506,806,943,506,506,506,806,506,806,1061,343,1061,1061,1061', +'1061,1061,506,506,340,483,585,336,334,483,483,1061,329,506,506,585,506', +'506,506,506,506,328,960,959,325,959,959,959,944,959,944,944,944,1061', +'944,319,953,318,953,953,953,953,953,490,1061,1061,313,313,313,313,313', +'969,953,973,976,506,317,31,315,490,490,959,506,989,31,31,31,506,506', +'31,31,31,301,31,953,490,298,490,1061,490,490,490,490,31,31,953,953,992', +'994,506,506,297,286,31,31,282,31,31,31,31,31,790,790,506,248,790,790', +'790,506,531,531,531,531,531,999,506,244,1008,1009,953,506,1010,1011', +'1012,31,31,31,31,31,31,31,31,31,31,31,31,31,31,243,498,31,31,31,1014', +'241,31,220,31,31,136,1024,31,31,1027,31,1028,31,1029,31,1030,31,31,31', +'31,31,31,31,1032,31,102,31,498,101,1038,100,498,498,498,498,99,73,49', +'43,31,31,467,31,1051,31,1056,1057,40,467,467,467,31,25,467,467,467,31', +'467,503,9,9,9,9,9,18,1068,467,467,467,467,1069,1071,16,15,503,503,13', +'467,467,1077,467,467,467,467,467,1013,1078,1013,1013,1013,503,1013,503', +'1082,503,503,503,503,1083,1084,503,1050,503,1050,1050,1050,1085,1050', +'467,467,467,467,467,467,467,467,467,467,467,467,467,467,3,1013,467,467', +'467,685,1093,467,688,684,467,691,693,467,467,696,467,1050,467,698,467', +'676,467,467,467,467,467,467,467,670,467,467,467,1059,1,1059,1059,1059', +'1059,1059,665,706,708,657,651,467,467,467,467,1059,467,466,467,711,648', +'625,714,467,466,466,466,715,467,466,466,466,622,466,552,718,608,1059', +'607,606,605,601,466,466,466,466,1059,1059,1059,1059,552,552,735,466', +'466,599,466,466,466,466,466,1015,596,1015,1015,1015,552,1015,552,592', +'552,552,552,552,584,575,552,574,552,750,573,752,1059,759,466,466,466', +'466,466,466,466,466,466,466,466,466,466,466,765,1015,466,466,466,,,466', +',,466,,,466,466,,466,,466,,466,,466,466,466,466,466,466,466,,466,466', +'466,568,,568,568,568,568,568,,,,,,466,466,466,466,568,466,60,466,,,', +',466,60,60,60,,466,60,60,60,499,60,,,,568,,,,,,60,60,60,568,568,568', +'568,,,,60,60,,60,60,60,60,60,,,,499,,,,499,499,499,499,,,,,,,,,,,568', +',60,60,60,60,60,60,60,60,60,60,60,60,60,60,,,60,60,60,,,60,,,60,,,60', +'60,,60,,60,,60,,60,60,60,60,60,60,60,,60,,60,744,,744,744,744,744,744', +',,,,,60,60,60,60,744,60,457,60,,,,,60,457,457,457,,60,457,457,457,,457', +'489,,,744,,,,,457,457,457,,,,744,744,489,489,,457,457,,457,457,457,457', +'457,,,,,,489,,489,,489,489,489,489,,,,,,,,,744,,457,457,457,457,457', +'457,457,457,457,457,457,457,457,457,,,457,457,457,,,457,,457,457,,,457', +'457,,457,,457,,457,,457,457,457,457,457,457,457,,457,457,457,,,,,,,', +',,,,,457,457,30,457,,457,,,,30,30,30,457,,30,30,30,457,30,491,,,,,,', +',30,30,30,,,,,,491,491,,30,30,,30,30,30,30,30,,,,,,491,,,,491,491,491', +'491,,,,,,,,,,,30,30,30,30,30,30,30,30,30,30,30,30,30,30,,,30,30,30,', +',30,,30,30,,,30,30,,30,,30,,30,,30,30,30,30,30,30,30,,30,30,30,,,,,', +',,,,,,,30,30,,30,,30,600,600,600,600,600,600,30,,,600,600,30,,,600,', +'600,600,600,600,600,600,600,,,,,,600,600,600,600,600,600,600,,,600,', +',,,443,600,600,600,600,600,600,600,600,600,600,600,600,,600,600,600', +',600,600,,600,600,600,443,443,443,443,443,443,443,443,443,443,443,,443', +'443,,,443,443,,600,,,600,,,600,600,,,600,,600,443,,443,600,443,443,443', +'443,443,443,443,600,443,,,,600,600,600,600,600,600,,,,600,600,,443,', +'443,,,600,,,600,600,600,,,600,600,831,831,831,831,831,831,,,,831,831', +',,,831,,831,831,831,831,831,831,831,,,,,,831,831,831,831,831,831,831', +',,831,,,,,449,831,831,831,831,831,831,831,831,831,831,831,831,,831,831', +'831,,831,831,,831,831,831,449,449,449,449,449,449,449,449,449,449,449', +',449,449,,,449,449,,831,,,831,,,831,831,,,831,,831,449,,449,831,449', +'449,449,449,449,449,449,831,449,,,,831,831,831,831,831,831,,,,831,831', +',449,,,,,831,,,831,831,831,,,831,831,850,850,850,850,850,850,,,,850', +'850,,,,850,,850,850,850,850,850,850,850,,,,,,850,850,850,850,850,850', +'850,,,850,,,,,,850,850,850,850,850,850,850,850,850,850,850,850,,850', +'850,850,,850,850,,850,850,850,919,919,919,919,919,919,919,919,919,919', +'919,,919,919,,,919,919,,850,,,850,,,850,850,,,850,,850,919,,919,850', +'919,919,919,919,919,919,919,850,919,,,,850,850,850,850,850,850,,,,850', +'850,,919,,,,,850,,,850,850,850,,,850,850,858,858,858,858,858,858,,,', +'858,858,,,,858,,858,858,858,858,858,858,858,,,,,,858,858,858,858,858', +'858,858,,,858,,,,,,858,858,858,858,858,858,858,858,858,858,858,858,', +'858,858,858,,858,858,,858,858,858,807,807,807,807,807,807,807,807,807', +'807,807,,807,807,,,807,807,,858,,,858,,,858,858,,,858,,858,807,,807', +'858,807,807,807,807,807,807,807,858,807,,,,858,858,858,858,858,858,', +',,858,858,,807,,,,,858,,,858,858,858,,,858,858,859,859,859,859,859,859', +',,,859,859,,,,859,,859,859,859,859,859,859,859,,,,,,859,859,859,859', +'859,859,859,,,859,,,,,,859,859,859,859,859,859,859,859,859,859,859,859', +',859,859,859,,859,859,,859,859,859,24,24,24,24,24,24,24,24,24,24,24', +',24,24,,,24,24,,859,,,859,,,859,859,,,859,,859,24,,24,859,24,24,24,24', +'24,24,24,859,24,,,,859,859,859,859,859,859,,,,859,859,,24,,,,,859,,', +'859,859,859,,,859,859,885,885,885,885,885,885,,,,885,885,,,,885,,885', +'885,885,885,885,885,885,,,,,,885,885,885,885,885,885,885,,,885,,,,,', +'885,885,885,885,885,885,885,885,885,885,885,885,,885,885,885,,885,885', +',885,885,885,553,553,553,553,553,553,553,553,553,553,553,,553,553,,', +'553,553,,885,,,885,,,885,885,,,885,,885,553,,553,885,553,553,553,553', +'553,553,553,885,553,,,,885,885,885,885,885,885,,,,885,885,,553,,,,,885', +',,885,885,885,,,885,885,773,773,773,773,773,773,,,,773,773,,,,773,,773', +'773,773,773,773,773,773,,,,,,773,773,773,773,773,773,773,,,773,,,,,', +'773,773,773,773,773,773,773,773,773,773,773,773,,773,773,773,,773,773', +',773,773,773,295,295,295,295,295,295,295,295,295,295,295,,295,295,,', +'295,295,,773,,,773,,,773,773,,,773,,773,295,,295,773,295,295,295,295', +'295,295,295,773,295,,,,773,773,773,773,773,773,,,,773,773,,295,,,,,773', +',,773,773,773,,,773,773,784,784,784,784,784,784,,,,784,784,,,,784,,784', +'784,784,784,784,784,784,,,,,,784,784,784,784,784,784,784,,,784,,,,,', +'784,784,784,784,784,784,784,784,784,784,784,784,,784,784,784,,784,784', +',784,784,784,502,502,502,502,502,502,502,502,502,502,502,,502,502,,', +'502,502,,784,,,784,,,784,784,,,784,,784,502,,502,784,502,502,502,502', +'502,502,502,784,502,,,,784,784,784,784,784,784,,,,784,784,502,502,,', +',,784,,,784,784,784,,,784,784,896,896,896,896,896,896,,,,896,896,,,', +'896,,896,896,896,896,896,896,896,,,,,,896,896,896,896,896,896,896,,', +'896,,,,,,896,896,896,896,896,896,896,896,896,896,896,896,,896,896,896', +',896,896,,896,896,896,481,481,481,481,481,481,481,481,481,481,481,,481', +'481,,,481,481,,896,,,896,,,896,896,,,896,,896,481,,481,896,481,481,481', +'481,481,481,481,896,481,,,,896,896,896,896,896,896,,,,896,896,,,,,,', +'896,,,896,896,896,,,896,896,785,785,785,785,785,785,,,,785,785,,,,785', +',785,785,785,785,785,785,785,,,,,,785,785,785,785,785,785,785,,,785', +',,,,,785,785,785,785,785,785,785,785,785,785,785,785,,785,785,785,,785', +'785,,785,785,785,501,501,501,501,501,501,501,501,,501,501,,,,,,501,501', +',785,,,785,,,785,785,,,785,,785,501,,501,785,501,501,501,501,501,501', +'501,785,501,,,,785,785,785,785,785,785,,,,785,785,,,,,,,785,,,785,785', +'785,,,785,785,360,360,360,360,360,360,,,,360,360,,,,360,,360,360,360', +'360,360,360,360,,,,,,360,360,360,360,360,360,360,,,360,,,,,,360,360', +'360,360,360,360,360,360,360,360,360,360,,360,360,360,,360,360,,360,360', +'360,500,500,500,500,500,500,500,,,500,500,,,,,,500,500,,360,,,360,,', +'360,360,,,360,,360,500,,500,360,500,500,500,500,500,500,500,360,500', +',,,360,360,360,360,360,360,,,,360,360,,,,,,,360,,,360,360,360,,,360', +'360,791,791,791,791,791,791,,,,791,791,,,,791,,791,791,791,791,791,791', +'791,,,,,,791,791,791,791,791,791,791,,,791,,,,,,791,791,791,791,791', +'791,791,791,791,791,791,791,,791,791,791,,791,791,,791,791,791,495,495', +'495,495,495,495,495,,,495,495,,,,,,495,495,,791,,,791,,,791,791,,,791', +',791,495,,495,791,495,495,495,495,495,495,495,791,495,,,,791,791,791', +'791,791,791,,,,791,791,,,,,,,791,,,791,791,791,,,791,791,359,359,359', +'359,359,359,,,,359,359,,,,359,,359,359,359,359,359,359,359,,,,,,359', +'359,359,359,359,359,359,,,359,,,,,,359,359,359,359,359,359,359,359,359', +'359,359,359,,359,359,359,,359,359,,359,359,359,494,494,494,494,494,494', +'494,,,494,494,,,,,,494,494,,359,,,359,,,359,359,,,359,,359,494,,494', +'359,494,494,494,494,494,494,494,359,494,,,,359,359,359,359,359,359,', +',,359,359,,,,,,,359,,,359,359,359,,,359,359,935,935,935,935,935,935', +',,,935,935,,,,935,,935,935,935,935,935,935,935,,,,,,935,935,935,935', +'935,935,935,,,935,,,,,,935,935,935,935,935,935,935,935,935,935,935,935', +',935,935,935,,935,935,,935,935,935,493,493,493,493,493,493,493,,,493', +'493,,,,,,493,493,,935,,,935,,,935,935,,,935,,935,493,,493,935,493,493', +'493,493,493,493,493,935,493,,,,935,935,935,935,935,935,,,,935,935,,', +',,,,935,,,935,935,935,,,935,935,936,936,936,936,936,936,,,,936,936,', +',,936,,936,936,936,936,936,936,936,,,,,,936,936,936,936,936,936,936', +',,936,,,,,,936,936,936,936,936,936,936,936,936,936,936,936,,936,936', +'936,,936,936,,936,936,936,492,492,492,492,492,492,492,,,492,492,,,,', +',492,492,,936,,,936,,,936,936,,,936,,936,492,,492,936,492,492,492,492', +'492,492,492,936,492,,,,936,936,936,936,936,936,,,,936,936,,,,,,,936', +',,936,936,936,,,936,936,347,347,347,347,347,347,,,,347,347,,,,347,,347', +'347,347,347,347,347,347,,,,,,347,347,347,347,347,347,347,,,347,,,,,', +'347,347,347,347,347,347,347,347,347,347,347,347,,347,347,347,,347,347', +',347,347,347,496,496,496,496,496,496,496,,,496,496,,,,,,496,496,,347', +',,347,,,347,347,,,347,,347,496,,496,347,496,496,496,496,496,496,496', +'347,496,,,,347,347,347,347,347,347,,,,347,347,,,,,,,347,,,347,347,347', +',,347,347,321,321,321,321,321,321,,,,321,321,,,,321,,321,321,321,321', +'321,321,321,,,,,,321,321,321,321,321,321,321,,,321,,,,,,321,321,321', +'321,321,321,321,321,321,321,321,321,,321,321,321,,321,321,,321,321,321', +'482,482,482,482,482,482,482,482,482,482,482,,482,482,,,482,482,,321', +',,321,,,321,321,,,321,,321,482,,482,321,482,482,482,482,482,482,482', +'321,482,,,,321,321,321,321,321,321,,,,321,321,,,,,,,321,,,321,321,321', +',,321,321,966,966,966,966,966,966,,,,966,966,,,,966,,966,966,966,966', +'966,966,966,,,,,,966,966,966,966,966,966,966,,,966,,,,,,966,966,966', +'966,966,966,966,966,966,966,966,966,,966,966,966,,966,966,,966,966,966', +'497,497,497,497,497,497,497,,,497,497,,,,,,497,497,,966,,,966,,,966', +'966,,,966,,966,497,,497,966,497,497,497,497,497,497,497,966,497,,,,966', +'966,966,966,966,966,,,,966,966,,,,,,,966,,,966,966,966,,,966,966,316', +'316,316,316,316,316,,,,316,316,,,,316,,316,316,316,316,316,316,316,', +',,,,316,316,316,316,316,316,316,,,316,,,,,,316,316,316,316,316,316,316', +'316,316,316,316,316,,316,316,316,,316,316,,316,316,316,,,,,,,,,,,,,', +',,,,,,316,,,316,,,316,316,,,316,,316,,,,316,,,,,,,,316,,,,,316,316,316', +'316,316,316,,,,316,316,,,,,,,316,,,316,316,316,,,316,316,995,995,995', +'995,995,995,,,,995,995,,,,995,,995,995,995,995,995,995,995,,,,,,995', +'995,995,995,995,995,995,,,995,,,,,,995,995,995,995,995,995,995,995,995', +'995,995,995,,995,995,995,,995,995,,995,995,995,,,,,,,,,,,,,,,,,,,,995', +',,995,,,995,995,,,995,,995,,,,995,,,,,,,,995,,,,,995,995,995,995,995', +'995,,,,995,995,,,,,,,995,,,995,995,995,,,995,995,247,247,247,247,247', +'247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,,247,247,247', +'247,247,247,247,,,247,,,,,,247,247,247,247,247,247,247,247,247,247,247', +'247,,247,247,247,,247,247,,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247', +',,247,247,,,247,,247,,,,247,,,,,,,,247,,,,,247,247,247,247,247,247,', +',,247,247,,,,,,,247,,,247,247,247,,,247,247,1023,1023,1023,1023,1023', +'1023,,,,1023,1023,,,,1023,,1023,1023,1023,1023,1023,1023,1023,,,,,,1023', +'1023,1023,1023,1023,1023,1023,,,1023,,,,,,1023,1023,1023,1023,1023,1023', +'1023,1023,1023,1023,1023,1023,,1023,1023,1023,,1023,1023,,1023,1023', +'1023,,,,,,,,,,,,,,,,,,,,1023,,,1023,,,1023,1023,,,1023,,1023,,,,1023', +',,,,,,,1023,,,,,1023,1023,1023,1023,1023,1023,,,,1023,1023,,,,,,,1023', +',,1023,1023,1023,,,1023,1023,1021,1021,1021,1021,1021,1021,,,,1021,1021', +',,,1021,,1021,1021,1021,1021,1021,1021,1021,,,,,,1021,1021,1021,1021', +'1021,1021,1021,,,1021,,,,,,1021,1021,1021,1021,1021,1021,1021,1021,1021', +'1021,1021,1021,,1021,1021,1021,,1021,1021,,1021,1021,1021,,,,,,,,,,', +',,,,,,,,,1021,,,1021,,,1021,1021,,,1021,,1021,,,,1021,,,,,,,,1021,,', +',,1021,1021,1021,1021,1021,1021,,,,1021,1021,,,,,,,1021,,,1021,1021', +'1021,,,1021,1021,1016,1016,1016,1016,1016,1016,,,,1016,1016,,,,1016', +',1016,1016,1016,1016,1016,1016,1016,,,,,,1016,1016,1016,1016,1016,1016', +'1016,,,1016,,,,,,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016', +'1016,,1016,1016,1016,,1016,1016,,1016,1016,1016,,,,,,,,,,,,,,,,,,,,1016', +',,1016,,,1016,1016,,,1016,,1016,,,,1016,,,,,,,,1016,,,,,1016,1016,1016', +'1016,1016,1016,,,,1016,1016,,,,,,,1016,,,1016,1016,1016,,,1016,1016', +'222,222,222,222,222,222,,,,222,222,,,,222,,222,222,222,222,222,222,222', +',,,,,222,222,222,222,222,222,222,,,222,,,,,,222,222,222,222,222,222', +'222,222,222,222,222,222,,222,222,222,,222,222,,222,222,222,,,,,,,,,', +',,,,,,,,,,222,,,222,,,222,222,,,222,,222,,,,222,,,,,,,,222,,,,,222,222', +'222,222,222,222,,,,222,222,,,,,,,222,,,222,222,222,,,222,222,2,2,2,2', +'2,2,,,,2,2,,,,2,,2,2,2,2,2,2,2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2', +'2,2,2,2,2,2,2,,2,2,2,,2,2,,2,2,2,,,,,,,,,,,,,,,,,,,,2,,,2,,,2,2,,,2', +',2,,,,2,,,,,,,,2,,,,,2,2,2,2,2,2,,,,2,2,,,,,,,2,,,2,2,2,,,2,2,653,653', +'653,653,653,653,,,,653,653,,,,653,,653,653,653,653,653,653,653,,,,,', +'653,653,653,653,653,653,653,,,653,,,,,,653,653,653,653,653,653,653,653', +'653,653,653,653,,653,653,653,,653,653,,653,653,653,,,,,,,,,,,,,,,,,', +',,653,,,653,,,653,653,,,653,,653,,,,653,,,,,,,,653,,,,,653,653,653,653', +'653,653,,,,653,653,,,,,,,653,,,653,653,653,,,653,653,36,36,36,36,36', +'36,,,,36,36,,,,36,,36,36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,', +'36,,,,,,36,36,36,36,36,36,36,36,36,36,36,36,,36,36,36,,36,36,,36,36', +'36,,,,,,,,,,,,,,,,,,,,36,,,36,,,36,36,,,36,,36,,,,36,,,,,,,,36,,,,,36', +'36,36,36,36,36,,,,36,36,,,,,,,36,,,36,36,36,,,36,36,730,730,730,,730', +',,,730,730,,,,730,,730,730,730,730,730,730,730,,,,,,730,730,730,730', +'730,730,730,,,730,,,,,,,730,,,730,730,730,730,730,730,730,730,730,730', +'730,730,,730,730,,730,730,730,,,,,,,,,,,,,,,,,,,,730,,,730,,,730,730', +',,730,,,,,,730,,,,,,,,730,,,,,730,730,730,730,730,730,,,,730,730,,,', +',,,730,,730,730,730,730,,,730,730,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8,8', +'8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8,,8,8,,8', +'8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8,8', +'8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,23,23,23,,23,,,,23,23,,,,23,,23,23', +'23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23', +'23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,', +'23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23', +',,23,23,23,,,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32', +',,,,,32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32', +'32,32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32', +',32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32', +'32,,,32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33', +'33,33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33', +',33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33', +',,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33', +'33,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34', +'34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34', +',34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,', +',34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37', +'37,37,,37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37', +'37,,,37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,', +',,,,,,,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37', +'37,37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,', +'38,,38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38', +'38,38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,', +'38,,,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,', +',38,,,38,38,38,,,38,38,45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45,45', +'45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45,45', +',45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45,', +',,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45', ',,45,45,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46', '46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46', '46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,', -'46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,47,47', -'47,,47,,,,47,47,,,,47,,47,47,47,47,47,47,47,,,,,,47,47,47,47,47,47,47', -',,47,,,,,,,47,,,47,47,47,47,47,47,47,47,,47,47,47,,47,47,,47,47,47,', -',,,,,,,,,,,,,,,,,,47,,,47,,,47,47,,,47,,,,,,47,,,,,,,,47,,,,,47,47,47', -'47,47,47,,,,47,47,,,,,,,47,,,47,47,47,,,47,47,62,62,62,,62,,,,62,62', -',,,62,,62,62,62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62', -',,62,62,62,62,62,62,62,62,62,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,', +'46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,48,48', +'48,,48,,,,48,48,,,,48,,48,48,48,48,48,48,48,,,,,,48,48,48,48,48,48,48', +',,48,,,,,,,48,,,48,48,48,48,48,48,48,48,,48,48,48,,48,48,,48,48,48,', +',,,,,,,,,,,,,,,,,,48,,,48,,,48,48,,,48,,,,,,48,,,,,,,,48,,,,,48,48,48', +'48,48,48,,,,48,48,,,,,,,48,,,48,48,48,,,48,48,62,62,62,62,62,,,,62,62', +',,,62,,62,62,62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,62,62', +',62,62,62,62,62,62,62,62,62,,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,', ',,,,,,62,,,62,,,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62', -',,,62,62,,,,,,,62,,62,62,62,62,,,62,62,66,66,66,,66,,,,66,66,,,,66,', -'66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66', -'66,66,66,66,66,66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,,,,,,66,', -',66,,,66,66,,,66,,,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,,66,66,,', -',,,,66,,,66,66,66,,,66,66,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67', -'67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67', -'67,,67,67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67', -',,,,,67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67', -',,67,67,70,70,70,,70,,,,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70', -'70,70,70,70,70,,,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70', -'70,,70,70,70,,,,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,70,,,,,,,', -'70,,,,,70,70,70,70,70,70,,,,70,70,70,,,,,70,70,,,70,70,70,,,70,70,71', -'71,71,,71,,,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71', -'71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,,,71,,', -',,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,71,,,,,,,,,,,,,,,,,71,71,71,71', -'71,71,,,,71,71,,,,,,,71,,,71,71,71,,,71,71,903,903,903,,903,,,,903,903', -',,,903,,903,903,903,903,903,903,903,,,,,,903,903,903,903,903,903,903', -',,903,,,,,,,903,,,903,903,903,903,903,903,903,903,,903,903,903,,903', -'903,,,,903,,,,,,,,,,,,,,,,,,,,903,,,903,,,903,903,,,903,,,,,,,,,,,,', -',,,,,,903,903,903,903,903,903,,,,903,903,,,,,,,903,,,903,903,903,,,903', -'903,888,888,888,,888,,,,888,888,,,,888,,888,888,888,888,888,888,888', -',,,,,888,888,888,888,888,888,888,,,888,,,,,,,888,,,888,888,888,888,888', -'888,888,888,,888,888,888,,888,888,,888,888,888,,,,,,,,,,,,,,,,,,,,888', -',,888,,,888,888,,,888,,,,,,888,,,,,,,,888,,,,,888,888,888,888,888,888', -',,,888,888,,,,,,,888,,,888,888,888,,,888,888,887,887,887,,887,,,,887', -'887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887,887,887,887,887', -'887,,,887,,,,,,,887,,,887,887,887,887,887,887,887,887,887,887,887,887', -',887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887,,,887,887,,,887,', -',,887,,887,,,,,,,,887,,,,,887,887,887,887,887,887,,,,887,887,,,,,,,887', -',887,887,887,887,,,887,887,869,869,869,,869,,,,869,869,,,,869,,869,869', -'869,869,869,869,869,,,,,,869,869,869,869,869,869,869,,,869,,,,,,,869', -',,869,869,869,869,869,869,869,869,,869,869,869,,869,869,,869,869,869', -',,,,,,,,,,,,,,,,,,,869,,,869,,,869,869,,,869,,,,,,869,,,,,,,,869,,,', -',869,869,869,869,869,869,,,,869,869,,,,,,,869,,,869,869,869,,,869,869', -'114,114,114,114,114,,,,114,114,,,,114,,114,114,114,114,114,114,114,', -',,,,114,114,114,114,114,114,114,,,114,,,,,,114,114,114,114,114,114,114', -'114,114,114,114,114,,114,114,114,,114,114,,114,114,114,,,,,,,,,,,,,', -',,,,,,114,,,114,,,114,114,,,114,,114,,,,114,,,,,,,,114,,,,,114,114,114', -'114,114,114,,,,114,114,,,,,,114,114,,,114,114,114,,,114,114,119,119', -'119,,119,,,,119,119,,,,119,,119,119,119,119,119,119,119,,,,,,119,119', -'119,119,119,119,119,,,119,,,,,,,119,,,119,119,119,119,119,119,119,119', -',119,119,119,,119,119,,119,119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119', -'119,,,119,,,,,,119,,,,,,,,119,,,,,119,119,119,119,119,119,,,,119,119', -',,,,,,119,,,119,119,119,,,119,119,120,120,120,,120,,,,120,120,,,,120', -',120,120,120,120,120,120,120,,,,,,120,120,120,120,120,120,120,,,120', -',,,,,,120,,,120,120,120,120,120,120,120,120,,120,120,120,,120,120,,120', -'120,120,,,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120,,,,,,', -',120,,,,,120,120,120,120,120,120,,,,120,120,,,,,,,120,,,120,120,120', -',,120,120,121,121,121,,121,,,,121,121,,,,121,,121,121,121,121,121,121', -'121,,,,,,121,121,121,121,121,121,121,,,121,,,,,,,121,,,121,121,121,121', -'121,121,121,121,,121,121,121,,121,121,,121,121,121,,,,,,,,,,,,,,,,,', -',,121,,,121,,,121,121,,,121,,,,,,121,,,,,,,,121,,,,,121,121,121,121', -'121,121,,,,121,121,,,,,,,121,,,121,121,121,,,121,121,122,122,122,,122', -',,,122,122,,,,122,,122,122,122,122,122,122,122,,,,,,122,122,122,122', -'122,122,122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122,,122,122', -'122,,122,122,,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122', -',,,,,122,,,,,,,,122,,,,,122,122,122,122,122,122,,,,122,122,,,,,,,122', -',,122,122,122,,,122,122,123,123,123,123,123,,,,123,123,,,,123,,123,123', -'123,123,123,123,123,,,,,,123,123,123,123,123,123,123,,,123,,,,,,123', -'123,,123,123,123,123,123,123,123,123,123,,123,123,123,,123,123,,123', -'123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123,,,123,,123,,,,123,,,', -',,,,123,,,,,123,123,123,123,123,123,,,,123,123,,,,,,,123,,,123,123,123', -',,123,123,210,210,210,,210,,,,210,210,,,,210,,210,210,210,210,210,210', -'210,,,,,,210,210,210,210,210,210,210,,,210,,,,,,,210,,,210,210,210,210', -'210,210,210,210,,210,210,210,,210,210,,210,210,210,,,,,,,,,,,,,,,,,', -',,210,,,210,,,210,210,,,210,,210,,,,210,,,,,,,,210,,,,,210,210,210,210', -'210,210,,,,210,210,,,,,,,210,,,210,210,210,,,210,210,211,211,211,,211', -',,,211,211,,,,211,,211,211,211,211,211,211,211,,,,,,211,211,211,211', -'211,211,211,,,211,,,,,,,211,,,211,211,211,211,211,211,211,211,,211,211', -'211,,211,211,,211,211,211,,,,,,,,,,,,,,,,,,,,211,,,211,,,211,211,,,211', -',,,,,211,,,,,,,,211,,,,,211,211,211,211,211,211,,,,211,211,,,,,,,211', -',,211,211,211,,,211,211,212,212,212,,212,,,,212,212,,,,212,,212,212', -'212,212,212,212,212,,,,,,212,212,212,212,212,212,212,,,212,,,,,,,212', -',,212,212,212,212,212,212,212,212,212,212,212,212,,212,212,,212,212', -'212,,,,,,,,,,,,,,,,,,,,212,,,212,,,212,212,,,212,,212,,212,,212,,,,', -',,,212,,,,,212,212,212,212,212,212,,,,212,212,,,,,,,212,,212,212,212', -'212,,,212,212,217,217,217,,217,,,,217,217,,,,217,,217,217,217,217,217', -'217,217,,,,,,217,217,217,217,217,217,217,,,217,,,,,,,217,,,217,217,217', -'217,217,217,217,217,,217,217,217,,217,217,,217,217,217,,,,,,,,,,,,,', -',,,,,,217,,,217,,,217,217,,,217,,,,,,217,,,,,,,,217,,,,,217,217,217', -'217,217,217,,,,217,217,,,,,,,217,,,217,217,217,,,217,217,218,218,218', -',218,,,,218,218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218,218', -'218,218,218,218,,,218,,,,,,,218,,,218,218,218,218,218,218,218,218,,218', -'218,218,,218,218,,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,,,218,218', -',,218,,218,,,,218,,,,,,,,218,,,,,218,218,218,218,218,218,,,,218,218', -',,,,,,218,,,218,218,218,,,218,218,219,219,219,,219,,,,219,219,,,,219', -',219,219,219,219,219,219,219,,,,,,219,219,219,219,219,219,219,,,219', -',,,,,,219,,,219,219,219,219,219,219,219,219,,219,219,219,,219,219,,219', -'219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219,,,,,,219,,,,,,', -',219,,,,,219,219,219,219,219,219,,,,219,219,,,,,,,219,,,219,219,219', -',,219,219,220,220,220,,220,,,,220,220,,,,220,,220,220,220,220,220,220', -'220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220,220', -'220,220,220,220,,220,220,220,,220,220,,220,220,220,,,,,,,,,,,,,,,,,', -',,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,220,,,,,220,220,220,220', -'220,220,,,,220,220,,,,,,,220,,,220,220,220,,,220,220,221,221,221,,221', -',,,221,221,,,,221,,221,221,221,221,221,221,221,,,,,,221,221,221,221', -'221,221,221,,,221,,,,,,,221,,,221,221,221,221,221,221,221,221,,221,221', -'221,,221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221', -',,,,,221,,,,,,,,221,,,,,221,221,221,221,221,221,,,,221,221,,,,,,,221', -',,221,221,221,,,221,221,222,222,222,,222,,,,222,222,,,,222,,222,222', -'222,222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,,222', -',,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222,222', -',,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222,,,,,,222,,,,,,,,222,,,', -',222,222,222,222,222,222,,,,222,222,222,,,,,,222,,,222,222,222,,,222', -'222,856,856,856,,856,,,,856,856,,,,856,,856,856,856,856,856,856,856', -',,,,,856,856,856,856,856,856,856,,,856,,,,,,,856,,,856,856,856,856,856', -'856,856,856,,856,856,856,,856,856,,856,856,856,,,,,,,,,,,,,,,,,,,,856', -',,856,,,856,856,,,856,,,,,,856,,,,,,,,856,,,,,856,856,856,856,856,856', -',,,856,856,,,,,,,856,,,856,856,856,,,856,856,741,741,741,,741,,,,741', -'741,,,,741,,741,741,741,741,741,741,741,,,,,,741,741,741,741,741,741', -'741,,,741,,,,,,,741,,,741,741,741,741,741,741,741,741,,741,741,741,', -'741,741,,741,741,741,,,,,,,,,,,,,,,,,,,,741,,,741,,,741,741,,,741,,741', -',,,741,,,,,,,,741,,,,,741,741,741,741,741,741,,,,741,741,,,,,,,741,', -',741,741,741,,,741,741,721,721,721,,721,,,,721,721,,,,721,,721,721,721', -'721,721,721,721,,,,,,721,721,721,721,721,721,721,,,721,,,,,,,721,,,721', -'721,721,721,721,721,721,721,,721,721,721,,721,721,,721,721,721,,,,,', -',,,,,,,,,,,,,,721,,,721,,,721,721,,,721,,,,,,721,,,,,,,,721,,,,,721', -'721,721,721,721,721,,,,721,721,,,,,,,721,,,721,721,721,,,721,721,701', -'701,701,,701,,,,701,701,,,,701,,701,701,701,701,701,701,701,,,,,,701', -'701,701,701,701,701,701,,,701,,,,,,,701,,,701,701,701,701,701,701,701', -'701,,701,701,701,,701,701,,701,701,701,,,,,,,,,,,,,,,,,,,,701,,,701', -',,701,701,,,701,,701,,,,701,,,,,,,,701,,,,,701,701,701,701,701,701,', -',,701,701,,,,,,,701,,,701,701,701,,,701,701,696,696,696,,696,,,,696', -'696,,,,696,,696,696,696,696,696,696,696,,,,,,696,696,696,696,696,696', -'696,,,696,,,,,,,696,,,696,696,696,696,696,696,696,696,,696,696,696,', -'696,696,,,,696,,,,,,,,,,,,,,,,,,,,696,,,696,,,696,696,,,696,,,,,,,,', -',,,,,,,,,,696,696,696,696,696,696,,,,696,696,,,,,,,696,,,696,696,696', -',,696,696,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320', -'320,,,,,,320,320,320,320,320,320,320,,,320,,,,,,,320,,,320,320,320,320', -'320,320,320,320,,320,320,320,,320,320,,,,320,,,,,,,,,,,,,,,,,,,,320', -',,320,,,320,320,,,320,,,,,,,,,,,,,,,,,,,320,320,320,320,320,320,,,,320', -'320,,,,,,,320,,,320,320,320,,,320,320,685,685,685,,685,,,,685,685,,', -',685,,685,685,685,685,685,685,685,,,,,,685,685,685,685,685,685,685,', -',685,,,,,,,685,,,685,685,685,685,685,685,685,685,,685,685,685,,685,685', -',,,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685,685,,,685,,,,,,,,,,,,,,,,', -',,685,685,685,685,685,685,,,,685,685,,,,,,,685,,,685,685,685,,,685,685', -'681,681,681,,681,,,,681,681,,,,681,,681,681,681,681,681,681,681,,,,', -',681,681,681,681,681,681,681,,,681,,,,,,,681,,,681,681,681,681,681,681', -'681,681,,681,681,681,,681,681,,681,681,681,,,,,,,,,,,,,,,,,,,,681,,', -'681,,,681,681,,,681,,,,,,681,,,,,,,,681,,,,,681,681,681,681,681,681', -',,,681,681,,,,,,,681,,,681,681,681,,,681,681,328,328,328,,328,,,,328', -'328,,,,328,,328,328,328,328,328,328,328,,,,,,328,328,328,328,328,328', -'328,,,328,,,,,,,328,,,328,328,328,328,328,328,328,328,,328,328,328,', -'328,328,,328,328,328,,,,,,,,,,,,,,,,,,,,328,,,328,328,,328,328,,,328', -',,,,,328,,,,,,,,328,,,,,328,328,328,328,328,328,,,,328,328,,,,,,,328', -',,328,328,328,,,328,328,331,331,331,,331,,,,331,331,,,,331,,331,331', -'331,331,331,331,331,,,,,,331,331,331,331,331,331,331,,,331,,,,,,,331', -',,331,331,331,331,331,331,331,331,,331,331,331,,331,331,,331,331,331', -',,,,,,,,,,,,,,,,,,,331,,,331,,,331,331,,,331,,,,,,331,,,,,,,,331,,,', -',331,331,331,331,331,331,,,,331,331,,,,,,,331,,,331,331,331,,,331,331', -'678,678,678,,678,,,,678,678,,,,678,,678,678,678,678,678,678,678,,,,', -',678,678,678,678,678,678,678,,,678,,,,,,,678,,,678,678,678,678,678,678', -'678,678,,678,678,678,,678,678,,678,678,678,,,,,,,,,,,,,,,,,,,,678,,', -'678,,,678,678,,,678,,,,,,678,,,,,,,,678,,,,,678,678,678,678,678,678', -',,,678,678,,,,,,,678,,,678,678,678,,,678,678,654,654,654,,654,,,,654', -'654,,,,654,,654,654,654,654,654,654,654,,,,,,654,654,654,654,654,654', -'654,,,654,,,,,,,654,,,654,654,654,654,654,654,654,654,,654,654,654,', -'654,654,,654,654,654,,,,,,,,,,,,,,,,,,,,654,,,654,,,654,654,,,654,,', -',,,654,,,,,,,,654,,,,,654,654,654,654,654,654,,,,654,654,,,,,,,654,', -',654,654,654,,,654,654,337,337,337,,337,,,,337,337,,,,337,,337,337,337', -'337,337,337,337,,,,,,337,337,337,337,337,337,337,,,337,,,,,,,337,,,337', -'337,337,337,337,337,337,337,337,337,337,337,,337,337,,337,337,337,,', -',,,,,,,,,,,,,,,,,337,,,337,,,337,337,,,337,,,,,,337,,,,,,,,337,,,,,337', -'337,337,337,337,337,,,,337,337,,,,,,,337,,337,337,337,337,,,337,337', -'653,653,653,,653,,,,653,653,,,,653,,653,653,653,653,653,653,653,,,,', -',653,653,653,653,653,653,653,,,653,,,,,,,653,,,653,653,653,653,653,653', -'653,653,,653,653,653,,653,653,,653,653,653,,,,,,,,,,,,,,,,,,,,653,,', -'653,,,653,653,,,653,,,,,,653,,,,,,,,653,,,,,653,653,653,653,653,653', -',,,653,653,,,,,,,653,,,653,653,653,,,653,653,650,650,650,,650,,,,650', -'650,,,,650,,650,650,650,650,650,650,650,,,,,,650,650,650,650,650,650', -'650,,,650,,,,,,,650,,,650,650,650,650,650,650,650,650,,650,650,650,', -'650,650,,650,650,650,,,,,,,,,,,,,,,,,,,,650,,,650,,,650,650,,,650,,', -',,,650,,,,,,,,650,,,,,650,650,650,650,650,650,,,,650,650,,,,,,,650,', -',650,650,650,,,650,650,344,344,344,,344,,,,344,344,,,,344,,344,344,344', -'344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344,,,344', -'344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344,,,,,', -',,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344,,,,,344', -'344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344,344,345', -'345,345,,345,,,,345,345,,,,345,,345,345,345,345,345,345,345,,,,,,345', -'345,345,345,345,345,345,,,345,,,,,,,345,,,345,345,345,345,345,345,345', -'345,,345,345,345,,345,345,,345,345,345,,,,,,,,,,,,,,,,,,,,345,,,345', -',,345,345,,,345,,,,,,345,,,,,,,,345,,,,,345,345,345,345,345,345,,,,345', -'345,,,,,,,345,,,345,345,345,,,345,345,649,649,649,,649,,,,649,649,,', -',649,,649,649,649,649,649,649,649,,,,,,649,649,649,649,649,649,649,', -',649,,,,,,,649,,,649,649,649,649,649,649,649,649,,649,649,649,,649,649', -',649,649,649,,,,,,,,,,,,,,,,,,,,649,,,649,,,649,649,,,649,,,,,,649,', -',,,,,,649,,,,,649,649,649,649,649,649,,,,649,649,,,,,,,649,,,649,649', -'649,,,649,649,644,644,644,,644,,,,644,644,,,,644,,644,644,644,644,644', -'644,644,,,,,,644,644,644,644,644,644,644,,,644,,,,,,,644,,,644,644,644', -'644,644,644,644,644,,644,644,644,,644,644,,644,644,644,,,,,,,,,,,,,', -',,,,,,644,,,644,,,644,644,,,644,,,,,,644,,,,,,,,644,,,,,644,644,644', -'644,644,644,,,,644,644,,,,,,,644,,,644,644,644,,,644,644,643,643,643', -',643,,,,643,643,,,,643,,643,643,643,643,643,643,643,,,,,,643,643,643', -'643,643,643,643,,,643,,,,,,,643,,,643,643,643,643,643,643,643,643,,643', -'643,643,,643,643,,643,643,643,,,,,,,,,,,,,,,,,,,,643,,,643,,,643,643', -',,643,,,,,,643,,,,,,,,643,,,,,643,643,643,643,643,643,,,,643,643,,,', -',,,643,,,643,643,643,,,643,643,642,642,642,,642,,,,642,642,,,,642,,642', -'642,642,642,642,642,642,,,,,,642,642,642,642,642,642,642,,,642,,,,,', -',642,,,642,642,642,642,642,642,642,642,642,642,642,642,,642,642,,642', -'642,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642,,,642,,,,642,,642,,,', -',,,,642,,,,,642,642,642,642,642,642,,,,642,642,,,,,,,642,,642,642,642', -'642,,,642,642,641,641,641,,641,,,,641,641,,,,641,,641,641,641,641,641', -'641,641,,,,,,641,641,641,641,641,641,641,,,641,,,,,,,641,,,641,641,641', -'641,641,641,641,641,641,641,641,641,,641,641,,641,641,641,,,,,,,,,,', -',,,,,,,,,641,,,641,,,641,641,,,641,,641,,641,,641,,,,,,,,641,,,,,641', -'641,641,641,641,641,,,,641,641,,,,,,,641,,641,641,641,641,,,641,641', -'638,638,638,,638,,,,638,638,,,,638,,638,638,638,638,638,638,638,,,,', -',638,638,638,638,638,638,638,,,638,,,,,,,638,,,638,638,638,638,638,638', -'638,638,,638,638,638,,638,638,,638,638,638,,,,,,,,,,,,,,,,,,,,638,,', -'638,,,638,638,,,638,,,,,,638,,,,,,,,638,,,,,638,638,638,638,638,638', -',,,638,638,,,,,,,638,,,638,638,638,,,638,638,357,357,357,,357,,,,357', -'357,,,,357,,357,357,357,357,357,357,357,,,,,,357,357,357,357,357,357', -'357,,,357,,,,,,,357,,,357,357,357,357,357,357,357,357,,357,357,357,', -'357,357,,,,357,,,,,,,,,,,,,,,,,,,,357,,,357,,,357,357,,,357,,,,,,,,', -',,,,,,,,,,357,357,357,357,357,357,,,,357,357,,,,,,,357,,,357,357,357', -',,357,357,359,359,359,,359,,,,359,359,,,,359,,359,359,359,359,359,359', -'359,,,,,,359,359,359,359,359,359,359,,,359,,,,,,,359,,,359,359,359,359', -'359,359,359,359,,359,359,359,,359,359,,,,359,,,,,,,,,,,,,,,,,,,,359', -',,359,,,359,359,,,359,,,,,,,,,,,,,,,,,,,359,359,359,359,359,359,,,,359', -'359,,,,,,,359,,,359,359,359,,,359,359,637,637,637,,637,,,,637,637,,', -',637,,637,637,637,637,637,637,637,,,,,,637,637,637,637,637,637,637,', -',637,,,,,,,637,,,637,637,637,637,637,637,637,637,,637,637,637,,637,637', -',637,637,637,,,,,,,,,,,,,,,,,,,,637,,,637,,,637,637,,,637,,637,,,,637', -',,,,,,,637,,,,,637,637,637,637,637,637,,,,637,637,,,,,,,637,,,637,637', -'637,,,637,637,608,608,608,,608,,,,608,608,,,,608,,608,608,608,608,608', -'608,608,,,,,,608,608,608,608,608,608,608,,,608,,,,,,,608,,,608,608,608', -'608,608,608,608,608,,608,608,608,,608,608,,608,608,608,,,,,,,,,,,,,', -',,,,,,608,,,608,,,608,608,,,608,,,,,,608,,,,,,,,608,,,,,608,608,608', -'608,608,608,,,,608,608,,,,,,,608,,,608,608,608,,,608,608,604,604,604', -',604,,,,604,604,,,,604,,604,604,604,604,604,604,604,,,,,,604,604,604', -'604,604,604,604,,,604,,,,,,,604,,,604,604,604,604,604,604,604,604,,604', -'604,604,,604,604,,604,604,604,,,,,,,,,,,,,,,,,,,,604,,,604,,,604,604', -',,604,,,,,,604,,,,,,,,604,,,,,604,604,604,604,604,604,,,,604,604,,,', -',,,604,,,604,604,604,,,604,604,592,592,592,,592,,,,592,592,,,,592,,592', -'592,592,592,592,592,592,,,,,,592,592,592,592,592,592,592,,,592,,,,,', -',592,,,592,592,592,592,592,592,592,592,592,592,592,592,,592,592,,592', -'592,592,,,,,,,,,,,,,,,,,,,,592,,,592,,,592,592,,,592,,592,,592,,592', -',,,,,,,592,,,,,592,592,592,592,592,592,,,,592,592,,,,,,,592,,592,592', -'592,592,,,592,592,571,571,571,,571,,,,571,571,,,,571,,571,571,571,571', -'571,571,571,,,,,,571,571,571,571,571,571,571,,,571,,,,,,,571,,,571,571', -'571,571,571,571,571,571,,571,571,571,,571,571,,571,571,571,,,,,,,,,', -',,,,,,,,,,571,,,571,,,571,571,,,571,,,,,,571,,,,,,,,571,,,,,571,571', -'571,571,571,571,,,,571,571,,,,,,,571,,,571,571,571,,,571,571,544,544', -'544,,544,,,,544,544,,,,544,,544,544,544,544,544,544,544,,,,,,544,544', -'544,544,544,544,544,,,544,,,,,,,544,,,544,544,544,544,544,544,544,544', -'544,544,544,544,,544,544,,544,544,544,,,,,,,,,,,,,,,,,,,,544,,,544,', -',544,544,,,544,,,,,,544,,,,,,,,544,,,,,544,544,544,544,544,544,,,,544', -'544,,,,,,,544,,544,544,544,544,,,544,544,541,541,541,,541,,,,541,541', -',,,541,,541,541,541,541,541,541,541,,,,,,541,541,541,541,541,541,541', -',,541,,,,,,,541,,,541,541,541,541,541,541,541,541,541,541,541,541,,541', -'541,,541,541,541,,,,,,,,,,,,,,,,,,,,541,,,541,,,541,541,,,541,,541,', -',,541,,,,,,,,541,,,,,541,541,541,541,541,541,,,,541,541,,,,,,,541,,541', -'541,541,541,,,541,541,535,535,535,,535,,,,535,535,,,,535,,535,535,535', -'535,535,535,535,,,,,,535,535,535,535,535,535,535,,,535,,,,,,,535,,,535', -'535,535,535,535,535,535,535,,535,535,535,,535,535,,535,535,535,,,,,', -',,,,,,,,,,,,,,535,,,535,,,535,535,,,535,,,,,,535,,,,,,,,535,,,,,535', -'535,535,535,535,535,,,,535,535,,,,,,,535,,,535,535,535,,,535,535,531', -'531,531,,531,,,,531,531,,,,531,,531,531,531,531,531,531,531,,,,,,531', -'531,531,531,531,531,531,,,531,,,,,,,531,,,531,531,531,531,531,531,531', -'531,,531,531,531,,531,531,,531,531,531,,,,,,,,,,,,,,,,,,,,531,,,531', -',,531,531,,,531,,,,,,531,,,,,,,,531,,,,,531,531,531,531,531,531,,,,531', -'531,,,,,,,531,,,531,531,531,,,531,531,530,530,530,,530,,,,530,530,,', -',530,,530,530,530,530,530,530,530,,,,,,530,530,530,530,530,530,530,', -',530,,,,,,,530,,,530,530,530,530,530,530,530,530,,530,530,530,,530,530', -',530,530,530,,,,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,,,,,530,', -',,,,,,530,,,,,530,530,530,530,530,530,,,,530,530,,,,,,,530,,,530,530', -'530,,,530,530,527,527,527,,527,,,,527,527,,,,527,,527,527,527,527,527', -'527,527,,,,,,527,527,527,527,527,527,527,,,527,,,,,,,527,,,527,527,527', -'527,527,527,527,527,,527,527,527,,527,527,,,,527,,,,,,,,,,,,,,,,,,,', -'527,,,527,,,527,527,,,527,,,,,,,,,,,,,,,,,,,527,527,527,527,527,527', -',,,527,527,,,,,,,527,,,527,527,527,,,527,527,521,521,521,,521,,,,521', -'521,,,,521,,521,521,521,521,521,521,521,,,,,,521,521,521,521,521,521', -'521,,,521,,,,,,,521,,,521,521,521,521,521,521,521,521,521,521,521,521', -',521,521,,521,521,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,', -'521,,521,,521,,,,,,,,521,,,,,521,521,521,521,521,521,,,,521,521,,,,', -',,521,,521,521,521,521,,,521,521,519,519,519,,519,,,,519,519,,,,519', -',519,519,519,519,519,519,519,,,,,,519,519,519,519,519,519,519,,,519', -',,,,,,519,,,519,519,519,519,519,519,519,519,,519,519,519,,519,519,,', -',519,,,,,,,,,,,,,,,,,,,,519,,,519,,,519,519,,,519,,,,,,,,,,,,,,,,,,', -'519,519,519,519,519,519,,,,519,519,,,,,,,519,,,519,519,519,,,519,519', -'512,512,512,512,512,,,,512,512,,,,512,,512,512,512,512,512,512,512,', -',,,,512,512,512,512,512,512,512,,,512,,,,,,512,512,,512,512,512,512', -'512,512,512,512,512,,512,512,512,,512,512,,512,512,512,,,,,,,,,,,,,', -',,,,,,512,,,512,,,512,512,,,512,,512,,,,512,,,,,,,,512,,,,,512,512,512', -'512,512,512,,,,512,512,,,,,,512,512,,,512,512,512,,,512,512,417,417', -'417,,417,,,,417,417,,,,417,,417,417,417,417,417,417,417,,,,,,417,417', -'417,417,417,417,417,,,417,,,,,,,417,,,417,417,417,417,417,417,417,417', -',417,417,417,,417,417,,417,417,417,,,,,,,,,,,,,,,,,,,,417,,,417,,,417', -'417,,,417,,,,,,417,,,,,,,,417,,,,,417,417,417,417,417,417,,,,417,417', -',,,,,,417,,,417,417,417,,,417,417,509,509,509,,509,,,,509,509,,,,509', -',509,509,509,509,509,509,509,,,,,,509,509,509,509,509,509,509,,,509', -',,,,,,509,,,509,509,509,509,509,509,509,509,,509,509,509,,509,509,,509', -'509,509,,,,,,,,,,,,,,,,,,,,509,,,509,,,509,509,,,509,,,,,,509,,,,,,', -',509,,,,,509,509,509,509,509,509,,,,509,509,,,,,,,509,,,509,509,509', -',,509,509,505,505,505,,505,,,,505,505,,,,505,,505,505,505,505,505,505', -'505,,,,,,505,505,505,505,505,505,505,,,505,,,,,,,505,,,505,505,505,505', -'505,505,505,505,,505,505,505,,505,505,,505,505,505,,,,,,,,,,,,,,,,,', -',,505,,,505,,,505,505,,,505,,,,,,505,,,,,,,,505,,,,,505,505,505,505', -'505,505,,,,505,505,,,,,,,505,,,505,505,505,,,505,505,503,503,503,,503', -',,,503,503,,,,503,,503,503,503,503,503,503,503,,,,,,503,503,503,503', -'503,503,503,,,503,,,,,,,503,,,503,503,503,503,503,503,503,503,503,503', -'503,503,,503,503,,503,503,503,,,,,,,,,,,,,,,,,,,,503,,,503,,,503,503', -',,503,,,,503,,503,,,,,,,,503,,,,,503,503,503,503,503,503,,,,503,503', -',,,,,,503,,503,503,503,503,,,503,503,500,500,500,,500,,,,500,500,,,', -'500,,500,500,500,500,500,500,500,,,,,,500,500,500,500,500,500,500,,', -'500,,,,,,,500,,,500,500,500,500,500,500,500,500,500,500,500,500,,500', -'500,,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500,,,500,500,,,500,,500,', -'500,,500,,,,,,,,500,,,,,500,500,500,500,500,500,,,,500,500,,,,,,,500', -',500,500,500,500,,,500,500,459,459,459,,459,,,,459,459,,,,459,,459,459', -'459,459,459,459,459,,,,,,459,459,459,459,459,459,459,,,459,,,,,,,459', -',,459,459,459,459,459,459,459,459,,459,459,459,,459,459,,459,459,459', -',,,,,,,,,,,,,,,,,,,459,,,459,,,459,459,,,459,,,,,,459,,,,,,,,459,,,', -',459,459,459,459,459,459,,,,459,459,,,,,,,459,,,459,459,459,,,459,459', -'458,458,458,,458,,,,458,458,,,,458,,458,458,458,458,458,458,458,,,,', -',458,458,458,458,458,458,458,,,458,,,,,,,458,,,458,458,458,458,458,458', -'458,458,,458,458,458,,458,458,,458,458,458,,,,,,,,,,,,,,,,,,,,458,,', -'458,,,458,458,,,458,,,,,,458,,,,,,,,458,,,,,458,458,458,458,458,458', -',,,458,458,,,,,,,458,,,458,458,458,,,458,458,457,457,457,,457,,,,457', -'457,,,,457,,457,457,457,457,457,457,457,,,,,,457,457,457,457,457,457', -'457,,,457,,,,,,,457,,,457,457,457,457,457,457,457,457,,457,457,457,', -'457,457,,457,457,457,,,,,,,,,,,,,,,,,,,,457,,,457,,,457,457,,,457,,', -',,,457,,,,,,,,457,,,,,457,457,457,457,457,457,,,,457,457,,,,,,,457,', -',457,457,457,,,457,457,808,808,808,,808,,,,808,808,,,,808,,808,808,808', -'808,808,808,808,,,,,,808,808,808,808,808,808,808,,,808,,,,,,,808,,,808', -'808,808,808,808,808,808,808,,808,808,808,,808,808,,,,808,,,,,,,,,,,', -',,,,,,,,808,,,808,,,808,808,,,808,,,,,,,,,,,,,,,,,,,808,808,808,808', -'808,808,,,,808,808,,,,,,,808,,,808,808,808,,,808,808,233,233,233,,233', -',,,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233,233,233', -'233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233,,233,233', -'233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233', -',,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233,,,,,,,233', -',,233,233,233,,,233,233,796,796,796,,796,,,,796,796,,,,796,,796,796', -'796,796,796,796,796,,,,,,796,796,796,796,796,796,796,,,796,,,,,,,796', -',,796,796,796,796,796,796,796,796,,796,796,796,,796,796,,796,796,796', -',,,,,,,,,,,,,,,,,,,796,,,796,,,796,796,,,796,,,,,,796,,,,,,,,796,,,', -',796,796,796,796,796,796,,,,796,796,,,,,,,796,,,796,796,796,,,796,796', -'236,236,236,,236,,,,236,236,,,,236,,236,236,236,236,236,236,236,,,,', -',236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236,236,236,236', -'236,236,,236,236,236,,236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236,,', -'236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236,236,236,236', -',,,236,236,,,,,,,236,,,236,236,236,,,236,236,237,237,237,,237,,,,237', -'237,,,,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237,237', -'237,,,237,,,,,,,237,,,237,237,237,237,237,237,237,237,,237,237,237,', -'237,237,,237,237,237,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,237,,,237,,', -',,,237,,,,,,,,237,,,,,237,237,237,237,237,237,,,,237,237,,,,,,,237,', -',237,237,237,,,237,237,238,238,238,,238,,,,238,238,,,,238,,238,238,238', -'238,238,238,238,,,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238', -'238,238,238,238,238,238,238,,238,238,238,,238,238,,238,238,238,,,,,', -',,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,,,,,238,,,,,,,,238,,,,,238', -'238,238,238,238,238,,,,238,238,,,,,,,238,,,238,238,238,,,238,238,239', -'239,239,,239,,,,239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239', -'239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239', -'239,,239,239,239,,239,239,,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239', -',,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239,239,239,239,239,239,,,,239', -'239,,,,,,,239,,,239,239,239,,,239,239,240,240,240,,240,,,,240,240,,', -',240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240,240,240,', -',240,,,,,,,240,,,240,240,240,240,240,240,240,240,,240,240,240,,240,240', -',240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,240,,,240,,,,,,240,', -',,,,,,240,,,,,240,240,240,240,240,240,,,,240,240,,,,,,,240,,,240,240', -'240,,,240,240,241,241,241,,241,,,,241,241,,,,241,,241,241,241,241,241', -'241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241', -'241,241,241,241,241,,241,241,241,,241,241,,241,241,241,,,,,,,,,,,,,', -',,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,,,241,241,241', -'241,241,241,,,,241,241,,,,,,,241,,,241,241,241,,,241,241,242,242,242', -',242,,,,242,242,,,,242,,242,242,242,242,242,242,242,,,,,,242,242,242', -'242,242,242,242,,,242,,,,,,,242,,,242,242,242,242,242,242,242,242,,242', -'242,242,,242,242,,242,242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242', -',,242,,,,,,242,,,,,,,,242,,,,,242,242,242,242,242,242,,,,242,242,,,', -',,,242,,,242,242,242,,,242,242,243,243,243,,243,,,,243,243,,,,243,,243', -'243,243,243,243,243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,', -',243,,,243,243,243,243,243,243,243,243,,243,243,243,,243,243,,243,243', -'243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243,,,243,,,,,,243,,,,,,,,243', -',,,,243,243,243,243,243,243,,,,243,243,,,,,,,243,,,243,243,243,,,243', -'243,244,244,244,,244,,,,244,244,,,,244,,244,244,244,244,244,244,244', -',,,,,244,244,244,244,244,244,244,,,244,,,,,,,244,,,244,244,244,244,244', -'244,244,244,,244,244,244,,244,244,,244,244,244,,,,,,,,,,,,,,,,,,,,244', -',,244,,,244,244,,,244,,,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244', -',,,244,244,,,,,,,244,,,244,244,244,,,244,244,245,245,245,,245,,,,245', -'245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245,245,245,245,245', -'245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245,,245,245,245,', -'245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245,245,,,245,,', -',,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245,245,,,,,,,245,', -',245,245,245,,,245,245,246,246,246,,246,,,,246,246,,,,246,,246,246,246', -'246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246', -'246,246,246,246,246,246,246,,246,246,246,,246,246,,246,246,246,,,,,', -',,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246', -'246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246,,,246,246,247', -'247,247,,247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,,247', -'247,247,247,247,247,247,,,247,,,,,,,247,,,247,247,247,247,247,247,247', -'247,,247,247,247,,247,247,,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247', -',,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247,247,247,247,247,247,,,,247', -'247,,,,,,,247,,,247,247,247,,,247,247,248,248,248,,248,,,,248,248,,', -',248,,248,248,248,248,248,248,248,,,,,,248,248,248,248,248,248,248,', -',248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248,248,248,,248,248', -',248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,,,,,248,', -',,,,,,248,,,,,248,248,248,248,248,248,,,,248,248,,,,,,,248,,,248,248', -'248,,,248,248,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249', -'249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249', -'249,249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,', -',,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249', -'249,249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250', -',250,,,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250', -'250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250', -'250,250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250', -',,250,,,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,', -',,,250,,,250,250,250,,,250,250,251,251,251,,251,,,,251,251,,,,251,,251', -'251,251,251,251,251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,', -',251,,,251,251,251,251,251,251,251,251,,251,251,251,,251,251,,251,251', -'251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,251', -',,,,251,251,251,251,251,251,,,,251,251,,,,,,,251,,,251,251,251,,,251', -'251,252,252,252,,252,,,,252,252,,,,252,,252,252,252,252,252,252,252', -',,,,,252,252,252,252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252', -'252,252,252,,252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252', -',,252,,,252,252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252', -',,,252,252,,,,,,,252,,,252,252,252,,,252,252,253,253,253,,253,,,,253', -'253,,,,253,,253,253,253,253,253,253,253,,,,,,253,253,253,253,253,253', -'253,,,253,,,,,,,253,,,253,253,253,253,253,253,253,253,,253,253,253,', -'253,253,,253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,', -',,,253,,,,,,,,253,,,,,253,253,253,253,253,253,,,,253,253,,,,,,,253,', -',253,253,253,,,253,253,254,254,254,,254,,,,254,254,,,,254,,254,254,254', -'254,254,254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,,,254,,,254', -'254,254,254,254,254,254,254,,254,254,254,,254,254,,254,254,254,,,,,', -',,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254', -'254,254,254,254,254,,,,254,254,,,,,,,254,,,254,254,254,,,254,254,255', -'255,255,,255,,,,255,255,,,,255,,255,255,255,255,255,255,255,,,,,,255', -'255,255,255,255,255,255,,,255,,,,,,,255,,,255,255,255,255,255,255,255', -'255,,255,255,255,,255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255', -',,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255', -'255,,,,,,,255,,,255,255,255,,,255,255,256,256,256,,256,,,,256,256,,', -',256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256,256,256,', -',256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256,256,,256,256', -',256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,,256,,,,,,256,', -',,,,,,256,,,,,256,256,256,256,256,256,,,,256,256,,,,,,,256,,,256,256', -'256,,,256,256,258,258,258,,258,,,,258,258,,,,258,,258,258,258,258,258', -'258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258', -'258,258,258,258,258,,258,258,258,,258,258,,258,258,258,,,,,,,,,,,,,', -',,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258,,,,,258,258,258', -'258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258,258,259,259,259', -',259,,,,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259,259,259', -'259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259', -'259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259', -',,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259,,,,259,259,,,', -',,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260,260,,,,260,,260', -'260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,', -',260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260,,260,260', -'260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,260', -',,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,,,260,260,260,,,260', -'260,261,261,261,,261,,,,261,261,,,,261,,261,261,261,261,261,261,261', -',,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261,261,261,261,261', -'261,261,261,,261,261,261,,261,261,,261,261,261,,,,,,,,,,,,,,,,,,,,261', -',,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261,261,261,261,261,261', -',,,261,261,,,,,,,261,,,261,261,261,,,261,261,794,794,794,,794,,,,794', -'794,,,,794,,794,794,794,794,794,794,794,,,,,,794,794,794,794,794,794', -'794,,,794,,,,,,,794,,,794,794,794,794,794,794,794,794,,794,794,794,', -'794,794,,794,794,794,,,,,,,,,,,,,,,,,,,,794,,,794,,,794,794,,,794,,', -',,,794,,,,,,,,794,,,,,794,794,794,794,794,794,,,,794,794,,,,,,,794,', -',794,794,794,,,794,794,793,793,793,,793,,,,793,793,,,,793,,793,793,793', -'793,793,793,793,,,,,,793,793,793,793,793,793,793,,,793,,,,,,,793,,,793', -'793,793,793,793,793,793,793,,793,793,793,,793,793,,793,793,793,,,,,', -',,,,,,,,,,,,,,793,,,793,,,793,793,,,793,,,,,,793,,,,,,,,793,,,,,793', -'793,793,793,793,793,,,,793,793,,,,,,,793,,,793,793,793,,,793,793,268', +',,,62,62,,,,,,,62,,,62,62,62,,,62,62,67,67,67,,67,,,,67,67,,,,67,,67', +'67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67', +'67,67,67,67,67,,67,67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67', +',,67,67,,,67,,,,,,67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,', +'67,,,67,67,67,,,67,67,68,68,68,,68,,,,68,68,,,,68,,68,68,68,68,68,68', +'68,,,,,,68,68,68,68,68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68,68,68', +',68,68,68,,68,68,,68,68,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68,', +',,,,68,,,,,,,,68,,,,,68,68,68,68,68,68,,,,68,68,,,,,,,68,,,68,68,68', +',,68,68,71,71,71,,71,,,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71', +'71,71,71,71,71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71', +'71,,71,71,71,,,,,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,,,,,71,,,,,,,', +'71,,,,,71,71,71,71,71,71,,,,71,71,71,,,,,71,71,,,71,71,71,,,71,71,72', +'72,72,,72,,,,72,72,,,,72,,72,72,72,72,72,72,72,,,,,,72,72,72,72,72,72', +'72,,,72,,,,,,,72,,,72,72,72,72,72,72,72,72,,72,72,72,,72,72,,,,72,,', +',,,,,,,,,,,,,,,,,72,,,72,,,72,72,,,72,,72,,,,,,,,,,,,,,,,,72,72,72,72', +'72,72,,,,72,72,,,,,,,72,,,72,72,72,,,72,72,1039,1039,1039,,1039,,,,1039', +'1039,,,,1039,,1039,1039,1039,1039,1039,1039,1039,,,,,,1039,1039,1039', +'1039,1039,1039,1039,,,1039,,,,,,,1039,,,1039,1039,1039,1039,1039,1039', +'1039,1039,1039,1039,1039,1039,,1039,1039,,1039,1039,1039,,,,,,,,,,,', +',,,,,,,,1039,,,1039,,,1039,1039,,,1039,,1039,,1039,,1039,,,,,,,,1039', +',,,,1039,1039,1039,1039,1039,1039,,,,1039,1039,,,,,,,1039,,1039,1039', +'1039,1039,,,1039,1039,126,126,126,126,126,,,,126,126,,,,126,,126,126', +'126,126,126,126,126,,,,,,126,126,126,126,126,126,126,,,126,,,,,,126', +'126,126,126,126,126,126,126,126,126,126,126,,126,126,126,,126,126,,126', +'126,126,,,,,,,,,,,,,,,,,,,,126,,,126,,,126,126,,,126,,126,,,,126,,,', +',,,,126,,,,,126,126,126,126,126,126,,,,126,126,,,,,,126,126,,,126,126', +'126,,,126,126,131,131,131,,131,,,,131,131,,,,131,,131,131,131,131,131', +'131,131,,,,,,131,131,131,131,131,131,131,,,131,,,,,,,131,,,131,131,131', +'131,131,131,131,131,,131,131,131,,131,131,,131,131,131,,,,,,,,,,,,,', +',,,,,,131,,,131,,,131,131,,,131,,,,,,131,,,,,,,,131,,,,,131,131,131', +'131,131,131,,,,131,131,,,,,,,131,,,131,131,131,,,131,131,132,132,132', +',132,,,,132,132,,,,132,,132,132,132,132,132,132,132,,,,,,132,132,132', +'132,132,132,132,,,132,,,,,,,132,,,132,132,132,132,132,132,132,132,,132', +'132,132,,132,132,,132,132,132,,,,,,,,,,,,,,,,,,,,132,,,132,,,132,132', +',,132,,,,,,132,,,,,,,,132,,,,,132,132,132,132,132,132,,,,132,132,,,', +',,,132,,,132,132,132,,,132,132,133,133,133,,133,,,,133,133,,,,133,,133', +'133,133,133,133,133,133,,,,,,133,133,133,133,133,133,133,,,133,,,,,', +',133,,,133,133,133,133,133,133,133,133,,133,133,133,,133,133,,133,133', +'133,,,,,,,,,,,,,,,,,,,,133,,,133,,,133,133,,,133,,,,,,133,,,,,,,,133', +',,,,133,133,133,133,133,133,,,,133,133,,,,,,,133,,,133,133,133,,,133', +'133,134,134,134,,134,,,,134,134,,,,134,,134,134,134,134,134,134,134', +',,,,,134,134,134,134,134,134,134,,,134,,,,,,,134,,,134,134,134,134,134', +'134,134,134,,134,134,134,,134,134,,134,134,134,,,,,,,,,,,,,,,,,,,,134', +',,134,,,134,134,,,134,,,,,,134,,,,,,,,134,,,,,134,134,134,134,134,134', +',,,134,134,,,,,,,134,,,134,134,134,,,134,134,135,135,135,135,135,,,', +'135,135,,,,135,,135,135,135,135,135,135,135,,,,,,135,135,135,135,135', +'135,135,,,135,,,,,,135,135,,135,135,135,135,135,135,135,135,135,,135', +'135,135,,135,135,,135,135,135,,,,,,,,,,,,,,,,,,,,135,,,135,,,135,135', +',,135,,135,,,,135,,,,,,,,135,,,,,135,135,135,135,135,135,,,,135,135', +',,,,,,135,,,135,135,135,,,135,135,223,223,223,,223,,,,223,223,,,,223', +',223,223,223,223,223,223,223,,,,,,223,223,223,223,223,223,223,,,223', +',,,,,,223,,,223,223,223,223,223,223,223,223,,223,223,223,,223,223,,223', +'223,223,,,,,,,,,,,,,,,,,,,,223,,,223,,,223,223,,,223,,223,,,,223,,,', +',,,,223,,,,,223,223,223,223,223,223,,,,223,223,,,,,,,223,,,223,223,223', +',,223,223,224,224,224,,224,,,,224,224,,,,224,,224,224,224,224,224,224', +'224,,,,,,224,224,224,224,224,224,224,,,224,,,,,,,224,,,224,224,224,224', +'224,224,224,224,,224,224,224,,224,224,,224,224,224,,,,,,,,,,,,,,,,,', +',,224,,,224,,,224,224,,,224,,224,,,,224,,,,,,,,224,,,,,224,224,224,224', +'224,224,,,,224,224,,,,,,,224,,,224,224,224,,,224,224,225,225,225,,225', +',,,225,225,,,,225,,225,225,225,225,225,225,225,,,,,,225,225,225,225', +'225,225,225,,,225,,,,,,,225,,,225,225,225,225,225,225,225,225,,225,225', +'225,,225,225,,225,225,225,,,,,,,,,,,,,,,,,,,,225,,,225,,,225,225,,,225', +',,,,,225,,,,,,,,225,,,,,225,225,225,225,225,225,,,,225,225,,,,,,,225', +',,225,225,225,,,225,225,226,226,226,,226,,,,226,226,,,,226,,226,226', +'226,226,226,226,226,,,,,,226,226,226,226,226,226,226,,,226,,,,,,,226', +',,226,226,226,226,226,226,226,226,,226,226,226,,226,226,,226,226,226', +',,,,,,,,,,,,,,,,,,,226,,,226,,,226,226,,,226,,,,,,226,,,,,,,,226,,,', +',226,226,226,226,226,226,,,,226,226,,,,,,,226,,,226,226,226,,,226,226', +'227,227,227,,227,,,,227,227,,,,227,,227,227,227,227,227,227,227,,,,', +',227,227,227,227,227,227,227,,,227,,,,,,,227,,,227,227,227,227,227,227', +'227,227,,227,227,227,,227,227,,227,227,227,,,,,,,,,,,,,,,,,,,,227,,', +'227,,,227,227,,,227,,,,,,227,,,,,,,,227,,,,,227,227,227,227,227,227', +',,,227,227,,,,,,,227,,,227,227,227,,,227,227,228,228,228,,228,,,,228', +'228,,,,228,,228,228,228,228,228,228,228,,,,,,228,228,228,228,228,228', +'228,,,228,,,,,,,228,,,228,228,228,228,228,228,228,228,228,228,228,228', +',228,228,,228,228,228,,,,,,,,,,,,,,,,,,,,228,,,228,,,228,228,,,228,', +'228,,228,,228,,,,,,,,228,,,,,228,228,228,228,228,228,,,,228,228,,,,', +',,228,,228,228,228,228,,,228,228,233,233,233,,233,,,,233,233,,,,233', +',233,233,233,233,233,233,233,,,,,,233,233,233,233,233,233,233,,,233', +',,,,,,233,,,233,233,233,233,233,233,233,233,,233,233,233,,233,233,,233', +'233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233,,,,,,233,,,,,,', +',233,,,,,233,233,233,233,233,233,,,,233,233,,,,,,,233,,,233,233,233', +',,233,233,234,234,234,,234,,,,234,234,,,,234,,234,234,234,234,234,234', +'234,,,,,,234,234,234,234,234,234,234,,,234,,,,,,,234,,,234,234,234,234', +'234,234,234,234,,234,234,234,,234,234,,234,234,234,,,,,,,,,,,,,,,,,', +',,234,,,234,,,234,234,,,234,,,,,,234,,,,,,,,234,,,,,234,234,234,234', +'234,234,,,,234,234,,,,,,,234,,,234,234,234,,,234,234,235,235,235,,235', +',,,235,235,,,,235,,235,235,235,235,235,235,235,,,,,,235,235,235,235', +'235,235,235,,,235,,,,,,,235,,,235,235,235,235,235,235,235,235,,235,235', +'235,,235,235,,235,235,235,,,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235', +',,,,,235,,,,,,,,235,,,,,235,235,235,235,235,235,,,,235,235,235,,,,,', +'235,,,235,235,235,,,235,235,246,246,246,,246,,,,246,246,,,,246,,246', +'246,246,246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,', +',246,,,246,246,246,246,246,246,246,246,,246,246,246,,246,246,,246,246', +'246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,246', +',,,,246,246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246,,,246', +'246,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249,249,249', +',,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249,249,249', +'249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,,,,,,,,249', +',,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249,249,249,249', +',,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250,,250,,,,250', +'250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250,250,250,250', +'250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250,250,250,', +'250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250,,', +',,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,,,,,250,', +',250,250,250,,,250,250,251,251,251,,251,,,,251,251,,,,251,,251,251,251', +'251,251,251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,,,251,,,251', +'251,251,251,251,251,251,251,,251,251,251,,251,251,,251,251,251,,,,,', +',,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,251,,,,,251', +'251,251,251,251,251,,,,251,251,,,,,,,251,,,251,251,251,,,251,251,252', +'252,252,,252,,,,252,252,,,,252,,252,252,252,252,252,252,252,,,,,,252', +'252,252,252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252,252,252', +'252,,252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252', +',,252,252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252', +'252,,,,,,,252,,,252,252,252,,,252,252,253,253,253,,253,,,,253,253,,', +',253,,253,253,253,253,253,253,253,,,,,,253,253,253,253,253,253,253,', +',253,,,,,,,253,,,253,253,253,253,253,253,253,253,,253,253,253,,253,253', +',253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,,,,,253,', +',,,,,,253,,,,,253,253,253,253,253,253,,,,253,253,,,,,,,253,,,253,253', +'253,,,253,253,254,254,254,,254,,,,254,254,,,,254,,254,254,254,254,254', +'254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,,,254,,,254,254,254', +'254,254,254,254,254,,254,254,254,,254,254,,254,254,254,,,,,,,,,,,,,', +',,,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254,254,254', +'254,254,254,,,,254,254,,,,,,,254,,,254,254,254,,,254,254,255,255,255', +',255,,,,255,255,,,,255,,255,255,255,255,255,255,255,,,,,,255,255,255', +'255,255,255,255,,,255,,,,,,,255,,,255,255,255,255,255,255,255,255,,255', +'255,255,,255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255,,,255,255', +',,255,,,,,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255,255,,,', +',,,255,,,255,255,255,,,255,255,256,256,256,,256,,,,256,256,,,,256,,256', +'256,256,256,256,256,256,,,,,,256,256,256,256,256,256,256,,,256,,,,,', +',256,,,256,256,256,256,256,256,256,256,,256,256,256,,256,256,,256,256', +'256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,,256,,,,,,256,,,,,,,,256', +',,,,256,256,256,256,256,256,,,,256,256,,,,,,,256,,,256,256,256,,,256', +'256,257,257,257,,257,,,,257,257,,,,257,,257,257,257,257,257,257,257', +',,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257,257,257,257', +'257,257,257,,257,257,257,,257,257,,257,257,257,,,,,,,,,,,,,,,,,,,,257', +',,257,,,257,257,,,257,,,,,,257,,,,,,,,257,,,,,257,257,257,257,257,257', +',,,257,257,,,,,,,257,,,257,257,257,,,257,257,258,258,258,,258,,,,258', +'258,,,,258,,258,258,258,258,258,258,258,,,,,,258,258,258,258,258,258', +'258,,,258,,,,,,,258,,,258,258,258,258,258,258,258,258,,258,258,258,', +'258,258,,258,258,258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,', +',,,258,,,,,,,,258,,,,,258,258,258,258,258,258,,,,258,258,,,,,,,258,', +',258,258,258,,,258,258,259,259,259,,259,,,,259,259,,,,259,,259,259,259', +'259,259,259,259,,,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259', +'259,259,259,259,259,259,259,,259,259,259,,259,259,,259,259,259,,,,,', +',,,,,,,,,,,,,,259,,,259,,,259,259,,,259,,,,,,259,,,,,,,,259,,,,,259', +'259,259,259,259,259,,,,259,259,,,,,,,259,,,259,259,259,,,259,259,260', +'260,260,,260,,,,260,260,,,,260,,260,260,260,260,260,260,260,,,,,,260', +'260,260,260,260,260,260,,,260,,,,,,,260,,,260,260,260,260,260,260,260', +'260,,260,260,260,,260,260,,260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260', +',,260,260,,,260,,,,,,260,,,,,,,,260,,,,,260,260,260,260,260,260,,,,260', +'260,,,,,,,260,,,260,260,260,,,260,260,261,261,261,,261,,,,261,261,,', +',261,,261,261,261,261,261,261,261,,,,,,261,261,261,261,261,261,261,', +',261,,,,,,,261,,,261,261,261,261,261,261,261,261,,261,261,261,,261,261', +',261,261,261,,,,,,,,,,,,,,,,,,,,261,,,261,,,261,261,,,261,,,,,,261,', +',,,,,,261,,,,,261,261,261,261,261,261,,,,261,261,,,,,,,261,,,261,261', +'261,,,261,261,262,262,262,,262,,,,262,262,,,,262,,262,262,262,262,262', +'262,262,,,,,,262,262,262,262,262,262,262,,,262,,,,,,,262,,,262,262,262', +'262,262,262,262,262,,262,262,262,,262,262,,262,262,262,,,,,,,,,,,,,', +',,,,,,262,,,262,,,262,262,,,262,,,,,,262,,,,,,,,262,,,,,262,262,262', +'262,262,262,,,,262,262,,,,,,,262,,,262,262,262,,,262,262,263,263,263', +',263,,,,263,263,,,,263,,263,263,263,263,263,263,263,,,,,,263,263,263', +'263,263,263,263,,,263,,,,,,,263,,,263,263,263,263,263,263,263,263,,263', +'263,263,,263,263,,263,263,263,,,,,,,,,,,,,,,,,,,,263,,,263,,,263,263', +',,263,,,,,,263,,,,,,,,263,,,,,263,263,263,263,263,263,,,,263,263,,,', +',,,263,,,263,263,263,,,263,263,264,264,264,,264,,,,264,264,,,,264,,264', +'264,264,264,264,264,264,,,,,,264,264,264,264,264,264,264,,,264,,,,,', +',264,,,264,264,264,264,264,264,264,264,,264,264,264,,264,264,,264,264', +'264,,,,,,,,,,,,,,,,,,,,264,,,264,,,264,264,,,264,,,,,,264,,,,,,,,264', +',,,,264,264,264,264,264,264,,,,264,264,,,,,,,264,,,264,264,264,,,264', +'264,265,265,265,,265,,,,265,265,,,,265,,265,265,265,265,265,265,265', +',,,,,265,265,265,265,265,265,265,,,265,,,,,,,265,,,265,265,265,265,265', +'265,265,265,,265,265,265,,265,265,,265,265,265,,,,,,,,,,,,,,,,,,,,265', +',,265,,,265,265,,,265,,,,,,265,,,,,,,,265,,,,,265,265,265,265,265,265', +',,,265,265,,,,,,,265,,,265,265,265,,,265,265,266,266,266,,266,,,,266', +'266,,,,266,,266,266,266,266,266,266,266,,,,,,266,266,266,266,266,266', +'266,,,266,,,,,,,266,,,266,266,266,266,266,266,266,266,,266,266,266,', +'266,266,,266,266,266,,,,,,,,,,,,,,,,,,,,266,,,266,,,266,266,,,266,,', +',,,266,,,,,,,,266,,,,,266,266,266,266,266,266,,,,266,266,,,,,,,266,', +',266,266,266,,,266,266,267,267,267,,267,,,,267,267,,,,267,,267,267,267', +'267,267,267,267,,,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267', +'267,267,267,267,267,267,267,,267,267,267,,267,267,,267,267,267,,,,,', +',,,,,,,,,,,,,,267,,,267,,,267,267,,,267,,,,,,267,,,,,,,,267,,,,,267', +'267,267,267,267,267,,,,267,267,,,,,,,267,,,267,267,267,,,267,267,268', '268,268,,268,,,,268,268,,,,268,,268,268,268,268,268,268,268,,,,,,268', '268,268,268,268,268,268,,,268,,,,,,,268,,,268,268,268,268,268,268,268', -'268,268,268,268,268,,268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268', -',,268,268,,,268,,268,,268,,268,,,,,,,,268,,,,,268,268,268,268,268,268', -',,,268,268,,,,,,,268,,268,268,268,268,,,268,268,792,792,792,,792,,,', -'792,792,,,,792,,792,792,792,792,792,792,792,,,,,,792,792,792,792,792', -'792,792,,,792,,,,,,,792,,,792,792,792,792,792,792,792,792,,792,792,792', -',792,792,,792,792,792,,,,,,,,,,,,,,,,,,,,792,,,792,,,792,792,,,792,', -',,,,792,,,,,,,,792,,,,,792,792,792,792,792,792,,,,792,792,,,,,,,792', -',,792,792,792,,,792,792,274,274,274,,274,,,,274,274,,,,274,,274,274', -'274,274,274,274,274,,,,,,274,274,274,274,274,274,274,,,274,,,,,,,274', -',,274,274,274,274,274,274,274,274,274,274,274,274,,274,274,,274,274', -'274,,,,,,,,,,,,,,,,,,,,274,,,274,,,274,274,,,274,,274,,274,,274,,,,', -',,,274,,,,,274,274,274,274,274,274,,,,274,274,,,,,,,274,,274,274,274', -'274,,,274,274,277,277,277,,277,,,,277,277,,,,277,,277,277,277,277,277', -'277,277,,,,,,277,277,277,277,277,277,277,,,277,,,,,,,277,,,277,277,277', -'277,277,277,277,277,277,277,277,277,,277,277,,277,277,277,,,,,,,,,,', -',,,,,,,,,277,,,277,,,277,277,,,277,,277,,277,,277,,,,,,,,277,,,,,277', -'277,277,277,277,277,,,,277,277,277,,,,,,277,,277,277,277,277,,,277,277', -'791,791,791,,791,,,,791,791,,,,791,,791,791,791,791,791,791,791,,,,', -',791,791,791,791,791,791,791,,,791,,,,,,,791,,,791,791,791,791,791,791', -'791,791,,791,791,791,,791,791,,791,791,791,,,,,,,,,,,,,,,,,,,,791,,', -'791,,,791,791,,,791,,,,,,791,,,,,,,,791,,,,,791,791,791,791,791,791', -',,,791,791,,,,,,,791,,,791,791,791,,,791,791,777,777,777,,777,,,,777', -'777,,,,777,,777,777,777,777,777,777,777,,,,,,777,777,777,777,777,777', -'777,,,777,,,,,,,777,,,777,777,777,777,777,777,777,777,,777,777,777,', -'777,777,,777,777,777,,,,,,,,,,,,,,,,,,,,777,,,777,,,777,777,,,777,,', -',,,777,,,,,,,,777,,,,,777,777,777,777,777,777,,,,777,777,,,,,,,777,', -',777,777,777,,,777,777,775,775,775,,775,,,,775,775,,,,775,,775,775,775', -'775,775,775,775,,,,,,775,775,775,775,775,775,775,,,775,,,,,,,775,,,775', -'775,775,775,775,775,775,775,,775,775,775,,775,775,,775,775,775,,,,,', -',,,,,,,,,,,,,,775,,,775,,,775,775,,,775,,,,,,775,,,,,,,,775,,,,,775', -'775,775,775,775,775,,,,775,775,,,,,,,775,,,775,775,775,,,775,775,284', -'284,284,,284,,,,284,284,,,,284,,284,284,284,284,284,284,284,,,,,,284', -'284,284,284,284,284,284,,,284,,,,,,,284,,,284,284,284,284,284,284,284', -'284,,284,284,284,,284,284,,284,284,284,,,,,,,,,,,,,,,,,,,,284,,,284', -',,284,284,,,284,,,,,,284,,,,,,,,284,,,,,284,284,284,284,284,284,,,,284', -'284,,,,,,,284,,,284,284,284,,,284,284,286,286,286,,286,,,,286,286,,', -',286,,286,286,286,286,286,286,286,,,,,,286,286,286,286,286,286,286,', -',286,,,,,,,286,,,286,286,286,286,286,286,286,286,,286,286,286,,286,286', -',286,286,286,,,,,,,,,,,,,,,,,,,,286,,,286,,,286,286,,,286,,,,,,286,', -',,,,,,286,,,,,286,286,286,286,286,286,,,,286,286,,,,,,,286,,,286,286', -'286,,,286,286,288,288,288,,288,,,,288,288,,,,288,,288,288,288,288,288', -'288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,,,288,,,288,288,288', -'288,288,288,288,288,,288,288,288,,288,288,,288,288,288,,,,,,,,,,,,,', -',,,,,,288,,,288,,,288,288,,,288,,,,,,288,,,,,,,,288,,,,,288,288,288', -'288,288,288,,,,288,288,,,,,,,288,,,288,288,288,,,288,288,291,291,291', -',291,,,,291,291,,,,291,,291,291,291,291,291,291,291,,,,,,291,291,291', -'291,291,291,291,,,291,,,,,,,291,,,291,291,291,291,291,291,291,291,,291', -'291,291,,291,291,,291,291,291,,,,,,,,,,,,,,,,,,,,291,,,291,,,291,291', -',,291,,,,,,291,,,,,,,,291,,,,,291,291,291,291,291,291,,,,291,291,,,', -',,,291,,,291,291,291,,,291,291,297,297,297,297,297,,,,297,297,,,,297', -',297,297,297,297,297,297,297,,,,,,297,297,297,297,297,297,297,,,297', -',,,,,297,297,,297,297,297,297,297,297,297,297,297,,297,297,297,,297', -'297,,297,297,297,,,,,,,,,,,,,,,,,,,,297,,,297,,,297,297,,,297,,297,', -',,297,,,,,,,,297,,,,,297,297,297,297,297,297,,,,297,297,,,,,,,297,,', -'297,297,297,,,297,297,753,753,753,,753,,,,753,753,,,,753,,753,753,753', -'753,753,753,753,,,,,,753,753,753,753,753,753,753,,,753,,,,,,,753,,,753', -'753,753,753,753,753,753,753,753,753,753,753,,753,753,,753,753,753,,', -',,,,,,,,,,,,,,,,,753,,,753,,,753,753,,,753,,753,,753,,753,,,,,,,,753', -',,,,753,753,753,753,753,753,,,,753,753,,,,,,,753,,753,753,753,753,,', -'753,753,747,747,747,,747,,,,747,747,,,,747,,747,747,747,747,747,747', -'747,,,,,,747,747,747,747,747,747,747,,,747,,,,,,,747,,,747,747,747,747', -'747,747,747,747,,747,747,747,,747,747,,747,747,747,,,,,,,,,,,,,,,,,', -',,747,,,747,,,747,747,,,747,,,,,,747,,,,,,,,747,,,,,747,747,747,747', -'747,747,,,,747,747,,,,,,,747,,,747,747,747,,,747,747,303,303,303,,303', -',,,303,303,,,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303', -'303,303,303,,,303,,,,,,,303,,,303,303,303,303,303,303,303,303,,303,303', -'303,,303,303,,,,303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303,,,303,,,', -',,,,,,,,,,,,,,,303,303,303,303,303,303,,,,303,303,,,,303,,,303,,,303', -'303,303,,,303,303,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91', -'91,91,91,91,91,91,91,,,,91,91,91,91,91,91,91,91,91,91,,,,,,91,91,91', -'91,91,91,91,91,91,91,91,91,,91,,,,,,,91,91,,91,91,91,91,91,91,91,,,91', -'91,,,,91,91,91,91,,,,,,,,,,,,,,91,91,,91,91,91,91,91,91,91,91,91,91', -'91,,,91,,,,,,,,,,,,,,,,,,,,91,12,12,12,12,12,12,12,12,12,12,12,12,12', -'12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12,12,12,12,12,,', -',,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12,12,12,12,12', -'12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12,12,12,12,12', -'12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,74,74,74,74,74,74,74,74,74,74', -'74,74,74,74,74,74,74,74,74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74', -'74,74,,,,,,74,74,74,74,74,74,74,74,74,74,74,74,,74,,,,,,,74,74,,74,74', -'74,74,74,74,74,,,74,74,,,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74', -'74,74,74,74,74,74,74,74,,,74,,,,,,,,,,,,,,,,,,,,74,763,763,763,763,763', -'763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763', -'763,763,,,,763,763,763,763,763,763,763,763,763,763,,,,,,763,763,763', -'763,763,763,763,763,763,,,763,,,,,,,,,763,763,,763,763,763,763,763,763', -'763,,,763,763,,,,763,763,763,763,,,,,,,,,,,,,,763,763,,763,763,763,763', -'763,763,763,763,763,763,763,,,763,,,,,,,,,,,,,,,,,,,,763,634,634,634', -'634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634', -'634,634,634,634,,,,634,634,634,634,634,634,634,634,634,634,,,,,,634', -'634,634,634,634,634,634,634,634,,,634,,,,,,,,,634,634,,634,634,634,634', -'634,634,634,,,634,634,,,,634,634,634,634,,,,,,,,,,,,,,634,634,,634,634', -'634,634,634,634,634,634,634,634,634,,,634,634,,,,,,,,,,634,,,,,,,,,634', -'11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11', -'11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11', -'11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,', -',,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,', -'11,,,,,,,,,11,408,408,408,408,408,408,408,408,408,408,408,408,408,408', -'408,408,408,408,408,408,408,408,408,408,,,,408,408,408,408,408,408,408', -'408,408,408,,,,,,408,408,408,408,408,408,408,408,408,,,408,,,,,,,,,408', -'408,,408,408,408,408,408,408,408,,,408,408,,,,408,408,408,408,,,,,,', -',,,,,,,408,408,,408,408,408,408,408,408,408,408,408,408,408,,,408,408', -',,,487,,,,,,408,487,487,487,,,487,487,487,408,487,,,,,,,,,487,487,,', -',,,,,,,487,487,,487,487,487,487,487,,,,,,,,264,264,,,264,,,,,,,,,264', -'264,,264,264,264,264,264,264,264,,,264,264,487,,,264,264,264,264,487', -',,,,487,487,,,,,,,264,264,,264,264,264,264,264,264,264,264,264,264,264', -'487,487,264,,,,,1017,1017,,,1017,,,487,,,,,487,1017,1017,264,1017,1017', -'1017,1017,1017,1017,1017,,,1017,1017,,,,1017,1017,1017,1017,,,,,,1017', -',,,,,,,1017,1017,,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017', -'1017,,,1017,,,,,453,453,,,453,,,,,,,,,453,453,1017,453,453,453,453,453', -'453,453,,,453,453,,,,453,453,453,453,,,,,,453,,,,,,,,453,453,,453,453', -'453,453,453,453,453,453,453,453,453,,,453,,,,,1016,1016,,,1016,,,,,', -',,,1016,1016,453,1016,1016,1016,1016,1016,1016,1016,,,1016,1016,,,,1016', -'1016,1016,1016,,,,,,1016,,,,,,,,1016,1016,,1016,1016,1016,1016,1016', -'1016,1016,1016,1016,1016,1016,,,1016,,,,,454,454,,,454,,,,,,,,,454,454', -'1016,454,454,454,454,454,454,454,,,454,454,,,,454,454,454,454,,,,,,454', -',,,,,,,454,454,,454,454,454,454,454,454,454,454,454,454,454,,1002,454', -'1002,1002,1002,1002,1002,1000,,1000,1000,1000,1000,1000,,,1002,,,,,454', -',1000,,,,,,,,,,,,,,,1002,,,,,,,1000,,967,967,1002,1002,967,,,1000,1000', -'1000,1000,,,967,967,,967,967,967,967,967,967,967,,,967,967,,,,967,967', -'967,967,,,1002,,,967,,,,1000,,,,967,967,,967,967,967,967,967,967,967', -'967,967,967,967,,,967,,,,,522,522,,,522,,,,,,,,,522,522,967,522,522', -'522,522,522,522,522,,,522,522,,,,522,522,522,522,,,,,,522,,,,,,,,522', -'522,,522,522,522,522,522,522,522,522,522,522,522,,,522,,,,,523,523,', -',523,,,,,,,,,523,523,522,523,523,523,523,523,523,523,,,523,523,,,,523', -'523,523,523,,,,,,523,,,,,,,,523,523,,523,523,523,523,523,523,523,523', -'523,523,523,,950,523,950,950,950,950,950,,,,,,,,,,950,,,,,523,,,,,,', -',,,,,,,,,,950,950,532,532,,,532,,,950,950,950,950,,,532,532,,532,532', -'532,532,532,532,532,,,532,532,,,,532,532,532,532,,,,,,532,,,,950,,,', -'532,532,,532,532,532,532,532,532,532,532,532,532,532,,,532,,,,,533,533', -',,533,,,,,,,,,533,533,532,533,533,533,533,533,533,533,,,533,533,,,,533', -'533,533,533,,,,,,533,,,,,,,,533,533,,533,533,533,533,533,533,533,533', -'533,533,533,,927,533,927,927,927,927,927,925,,925,925,925,925,925,,', -'927,,,,,533,,925,923,,923,923,923,923,923,921,,921,921,921,921,921,927', -',923,,,,,925,,921,,927,927,,,,,,925,925,,,,551,923,551,551,551,551,551', -',921,,,,923,923,,,551,921,921,921,921,898,927,898,898,898,898,898,896', -'925,896,896,896,896,896,,,898,551,,,,,,896,,923,551,551,551,551,,893', -'921,893,893,893,893,893,898,,,,,,,896,,893,,898,898,,,,896,896,896,896', -',,,,551,,,,,,,893,,,,,,,,,893,893,893,893,,898,,213,213,,,213,896,,', -',,,,,213,213,,213,213,213,213,213,213,213,,,213,213,,,893,213,213,213', -'213,,,,,,213,,,,,,,,213,213,,213,213,213,213,213,213,213,213,213,213', -'213,,,213,,,,,214,214,,,214,,,,,,,,,214,214,213,214,214,214,214,214', -'214,214,,,214,214,,,,214,214,214,214,,,,,,214,,,,,,,,214,214,,214,214', -'214,214,214,214,214,214,214,214,214,,,214,,,,,593,593,,,593,,,,,,,,', -'593,593,214,593,593,593,593,593,593,593,,,593,593,,,,593,593,593,593', -',,,,,593,,,,,,,,593,593,,593,593,593,593,593,593,593,593,593,593,593', -',,593,,,,,594,594,,,594,,,,,,,,,594,594,593,594,594,594,594,594,594', -'594,,,594,594,,,,594,594,594,594,,,,,,594,,,,,,,,594,594,,594,594,594', -'594,594,594,594,594,594,594,594,,606,594,606,606,606,606,606,761,,761', -'761,761,761,761,,,606,,,,,594,,761,,,,,719,,719,719,719,719,719,,,,606', -'606,,,,,719,761,,606,606,606,606,,,,761,761,761,761,,,,,,,,,719,,,,', -',,,,752,752,719,719,752,,,,606,,,,,752,752,761,752,752,752,752,752,752', -'752,,,752,752,,,,752,752,752,752,,,719,,,752,,,,,,,,752,752,,752,752', -'752,752,752,752,752,752,752,752,752,,,752,,,,,751,751,,,751,,,,,,,,', -'751,751,752,751,751,751,751,751,751,751,,,751,751,,,,751,751,751,751', -',,,,,751,,,,,,,,751,751,,751,751,751,751,751,751,751,751,751,751,751', -',340,751,340,340,340,340,340,717,,717,717,717,717,717,,,340,,,,,751', -',717,715,,715,715,715,715,715,,,,,,,,340,340,715,,,,,717,,340,340,340', -'340,,,,717,717,717,717,,,,665,715,665,665,665,665,665,,,,715,715,715', -'715,,,665,,,,,,340,,,,,,,717,,,,,,,,,665,,,,,,,,715,665,665,665,665', -',,,,,,,,,,,,,,,,,,,,,,,,665,,,,,,,,665' ] - racc_action_check = arr = ::Array.new(26642, nil) +'268,,268,268,268,,268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268', +',,268,268,,,268,,,,,,268,,,,,,,,268,,,,,268,268,268,268,268,268,,,,268', +'268,,,,,,,268,,,268,268,268,,,268,268,269,269,269,,269,,,,269,269,,', +',269,,269,269,269,269,269,269,269,,,,,,269,269,269,269,269,269,269,', +',269,,,,,,,269,,,269,269,269,269,269,269,269,269,,269,269,269,,269,269', +',269,269,269,,,,,,,,,,,,,,,,,,,,269,,,269,,,269,269,,,269,,,,,,269,', +',,,,,,269,,,,,269,269,269,269,269,269,,,,269,269,,,,,,,269,,,269,269', +'269,,,269,269,270,270,270,,270,,,,270,270,,,,270,,270,270,270,270,270', +'270,270,,,,,,270,270,270,270,270,270,270,,,270,,,,,,,270,,,270,270,270', +'270,270,270,270,270,,270,270,270,,270,270,,270,270,270,,,,,,,,,,,,,', +',,,,,,270,,,270,,,270,270,,,270,,,,,,270,,,,,,,,270,,,,,270,270,270', +'270,270,270,,,,270,270,,,,,,,270,,,270,270,270,,,270,270,275,275,275', +',275,,,,275,275,,,,275,,275,275,275,275,275,275,275,,,,,,275,275,275', +'275,275,275,275,,,275,,,,,,,275,,,275,275,275,275,275,275,275,275,,275', +'275,275,,275,275,,275,275,275,,,,,,,,,,,,,,,,,,,,275,,,275,,,275,275', +',,275,,,,,,275,,,,,,,,275,,,,,275,275,275,275,275,275,,,,275,275,,,', +',,,275,,,275,275,275,,,275,275,283,283,283,,283,,,,283,283,,,,283,,283', +'283,283,283,283,283,283,,,,,,283,283,283,283,283,283,283,,,283,,,,,', +',283,,,283,283,283,283,283,283,283,283,283,283,283,283,,283,283,,283', +'283,283,,,,,,,,,,,,,,,,,,,,283,,,283,,,283,283,,,283,,283,,283,,283', +',,,,,,,283,,,,,283,283,283,283,283,283,,,,283,283,,,,,,,283,,283,283', +'283,283,,,283,283,290,290,290,,290,,,,290,290,,,,290,,290,290,290,290', +'290,290,290,,,,,,290,290,290,290,290,290,290,,,290,,,,,,,290,,,290,290', +'290,290,290,290,290,290,290,290,290,290,,290,290,,290,290,290,,,,,,', +',,,,,,,,,,,,,290,,,290,,,290,290,,,290,,290,,290,,290,,,,,,,,290,,,', +',290,290,290,290,290,290,,,,290,290,,,,,,,290,,290,290,290,290,,,290', +'290,293,293,293,,293,,,,293,293,,,,293,,293,293,293,293,293,293,293', +',,,,,293,293,293,293,293,293,293,,,293,,,,,,,293,,,293,293,293,293,293', +'293,293,293,293,293,293,293,,293,293,,293,293,293,,,,,,,,,,,,,,,,,,', +',293,,,293,,,293,293,,,293,,293,,293,,293,,,,,,,,293,,,,,293,293,293', +'293,293,293,,,,293,293,293,,,,,,293,,293,293,293,293,,,293,293,300,300', +'300,,300,,,,300,300,,,,300,,300,300,300,300,300,300,300,,,,,,300,300', +'300,300,300,300,300,,,300,,,,,,,300,,,300,300,300,300,300,300,300,300', +',300,300,300,,300,300,,300,300,300,,,,,,,,,,,,,,,,,,,,300,,,300,,,300', +'300,,,300,,,,,,300,,,,,,,,300,,,,,300,300,300,300,300,300,,,,300,300', +',,,,,,300,,,300,300,300,,,300,300,990,990,990,,990,,,,990,990,,,,990', +',990,990,990,990,990,990,990,,,,,,990,990,990,990,990,990,990,,,990', +',,,,,,990,,,990,990,990,990,990,990,990,990,,990,990,990,,990,990,,', +',990,,,,,,,,,,,,,,,,,,,,990,,,990,,,990,990,,,990,,,,,,,,,,,,,,,,,,', +'990,990,990,990,990,990,,,,990,990,,,,,,,990,,,990,990,990,,,990,990', +'302,302,302,,302,,,,302,302,,,,302,,302,302,302,302,302,302,302,,,,', +',302,302,302,302,302,302,302,,,302,,,,,,,302,,,302,302,302,302,302,302', +'302,302,,302,302,302,,302,302,,302,302,302,,,,,,,,,,,,,,,,,,,,302,,', +'302,,,302,302,,,302,,,,,,302,,,,,,,,302,,,,,302,302,302,302,302,302', +',,,302,302,,,,,,,302,,,302,302,302,,,302,302,305,305,305,,305,,,,305', +'305,,,,305,,305,305,305,305,305,305,305,,,,,,305,305,305,305,305,305', +'305,,,305,,,,,,,305,,,305,305,305,305,305,305,305,305,,305,305,305,', +'305,305,,305,305,305,,,,,,,,,,,,,,,,,,,,305,,,305,,,305,305,,,305,,', +',,,305,,,,,,,,305,,,,,305,305,305,305,305,305,,,,305,305,,,,,,,305,', +',305,305,305,,,305,305,306,306,306,,306,,,,306,306,,,,306,,306,306,306', +'306,306,306,306,,,,,,306,306,306,306,306,306,306,,,306,,,,,,,306,,,306', +'306,306,306,306,306,306,306,,306,306,306,,306,306,,306,306,306,,,,,', +',,,,,,,,,,,,,,306,,,306,,,306,306,,,306,,,,,,306,,,,,,,,306,,,,,306', +'306,306,306,306,306,,,,306,306,,,,,,,306,,,306,306,306,,,306,306,312', +'312,312,312,312,,,,312,312,,,,312,,312,312,312,312,312,312,312,,,,,', +'312,312,312,312,312,312,312,,,312,,,,,,312,312,,312,312,312,312,312', +'312,312,312,312,,312,312,312,,312,312,,312,312,312,,,,,,,,,,,,,,,,,', +',,312,,,312,,,312,312,,,312,,312,,,,312,,,,,,,,312,,,,,312,312,312,312', +'312,312,,,,312,312,,,,,,,312,,,312,312,312,,,312,312,965,965,965,,965', +',,,965,965,,,,965,,965,965,965,965,965,965,965,,,,,,965,965,965,965', +'965,965,965,,,965,,,,,,,965,,,965,965,965,965,965,965,965,965,,965,965', +'965,,965,965,,965,965,965,,,,,,,,,,,,,,,,,,,,965,,,965,,,965,965,,,965', +',965,,,,965,,,,,,,,965,,,,,965,965,965,965,965,965,,,,965,965,,,,,,', +'965,,,965,965,965,,,965,965,320,320,320,,320,,,,320,320,,,,320,,320', +'320,320,320,320,320,320,,,,,,320,320,320,320,320,320,320,,,320,,,,,', +',320,,,320,320,320,320,320,320,320,320,,320,320,320,,320,320,,,,320', +',,,,,,,,,,,,,,,,,,,320,,,320,,,320,320,,,320,,,,,,,,,,,,,,,,,,,320,320', +'320,320,320,320,,,,320,320,,,,320,,,320,,,320,320,320,,,320,320,337', +'337,337,,337,,,,337,337,,,,337,,337,337,337,337,337,337,337,,,,,,337', +'337,337,337,337,337,337,,,337,,,,,,,337,,,337,337,337,337,337,337,337', +'337,,337,337,337,,337,337,,,,337,,,,,,,,,,,,,,,,,,,,337,,,337,,,337', +'337,,,337,,,,,,,,,,,,,,,,,,,337,337,337,337,337,337,,,,337,337,,,,,', +',337,,,337,337,337,,,337,337,344,344,344,,344,,,,344,344,,,,344,,344', +'344,344,344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,', +',344,,,344,344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344', +'344,,,,,,,,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344', +',,,,344,344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344', +'344,346,346,346,,346,,,,346,346,,,,346,,346,346,346,346,346,346,346', +',,,,,346,346,346,346,346,346,346,,,346,,,,,,,346,,,346,346,346,346,346', +'346,346,346,,346,346,346,,346,346,,346,346,346,,,,,,,,,,,,,,,,,,,,346', +',,346,346,,346,346,,,346,,,,,,346,,,,,,,,346,,,,,346,346,346,346,346', +'346,,,,346,346,,,,,,,346,,,346,346,346,,,346,346,939,939,939,,939,,', +',939,939,,,,939,,939,939,939,939,939,939,939,,,,,,939,939,939,939,939', +'939,939,,,939,,,,,,,939,,,939,939,939,939,939,939,939,939,,939,939,939', +',939,939,,,,939,,,,,,,,,,,,,,,,,,,,939,,,939,,,939,939,,,939,,,,,,,', +',,,,,,,,,,,939,939,939,939,939,939,,,,939,939,,,,,,,939,,,939,939,939', +',,939,939,350,350,350,,350,,,,350,350,,,,350,,350,350,350,350,350,350', +'350,,,,,,350,350,350,350,350,350,350,,,350,,,,,,,350,,,350,350,350,350', +'350,350,350,350,350,350,350,350,,350,350,,350,350,350,,,,,,,,,,,,,,', +',,,,,350,,,350,,,350,350,,,350,,350,,,,350,,,,,,,,350,,,,,350,350,350', +'350,350,350,,,,350,350,,,,,,,350,,350,350,350,350,,,350,350,351,351', +'351,,351,,,,351,351,,,,351,,351,351,351,351,351,351,351,,,,,,351,351', +'351,351,351,351,351,,,351,,,,,,,351,,,351,351,351,351,351,351,351,351', +'351,351,351,351,,351,351,,351,351,351,,,,,,,,,,,,,,,,,,,,351,,,351,', +',351,351,,,351,,,,,,351,,,,,,,,351,,,,,351,351,351,351,351,351,,,,351', +'351,,,,,,,351,,351,351,351,351,,,351,351,358,358,358,,358,,,,358,358', +',,,358,,358,358,358,358,358,358,358,,,,,,358,358,358,358,358,358,358', +',,358,,,,,,,358,,,358,358,358,358,358,358,358,358,,358,358,358,,358', +'358,,358,358,358,,,,,,,,,,,,,,,,,,,,358,,,358,,,358,358,,,358,,,,,,358', +',,,,,,,358,,,,,358,358,358,358,358,358,,,,358,358,,,,,,,358,,,358,358', +'358,,,358,358,930,930,930,,930,,,,930,930,,,,930,,930,930,930,930,930', +'930,930,,,,,,930,930,930,930,930,930,930,,,930,,,,,,,930,,,930,930,930', +'930,930,930,930,930,,930,930,930,,930,930,,,,930,,,,,,,,,,,,,,,,,,,', +'930,,,930,,,930,930,,,930,,,,,,,,,,,,,,,,,,,930,930,930,930,930,930', +',,,930,930,,,,,,,930,,,930,930,930,,,930,930,918,918,918,,918,,,,918', +'918,,,,918,,918,918,918,918,918,918,918,,,,,,918,918,918,918,918,918', +'918,,,918,,,,,,,918,,,918,918,918,918,918,918,918,918,,918,918,918,', +'918,918,,918,918,918,,,,,,,,,,,,,,,,,,,,918,,,918,,,918,918,,,918,,', +',,,918,,,,,,,,918,,,,,918,918,918,918,918,918,,,,918,918,,,,,,,918,', +',918,918,918,,,918,918,917,917,917,,917,,,,917,917,,,,917,,917,917,917', +'917,917,917,917,,,,,,917,917,917,917,917,917,917,,,917,,,,,,,917,,,917', +'917,917,917,917,917,917,917,917,917,917,917,,917,917,,917,917,917,,', +',,,,,,,,,,,,,,,,,917,,,917,,,917,917,,,917,,,,917,,917,,,,,,,,917,,', +',,917,917,917,917,917,917,,,,917,917,,,,,,,917,,917,917,917,917,,,917', +'917,372,372,372,,372,,,,372,372,,,,372,,372,372,372,372,372,372,372', +',,,,,372,372,372,372,372,372,372,,,372,,,,,,,372,,,372,372,372,372,372', +'372,372,372,,372,372,372,,372,372,,,,372,,,,,,,,,,,,,,,,,,,,372,,,372', +',,372,372,,,372,,,,,,,,,,,,,,,,,,,372,372,372,372,372,372,,,,372,372', +',,,,,,372,,,372,372,372,,,372,372,374,374,374,,374,,,,374,374,,,,374', +',374,374,374,374,374,374,374,,,,,,374,374,374,374,374,374,374,,,374', +',,,,,,374,,,374,374,374,374,374,374,374,374,,374,374,374,,374,374,,', +',374,,,,,,,,,,,,,,,,,,,,374,,,374,,,374,374,,,374,,,,,,,,,,,,,,,,,,', +'374,374,374,374,374,374,,,,374,374,,,,,,,374,,,374,374,374,,,374,374', +'897,897,897,,897,,,,897,897,,,,897,,897,897,897,897,897,897,897,,,,', +',897,897,897,897,897,897,897,,,897,,,,,,,897,,,897,897,897,897,897,897', +'897,897,,897,897,897,,897,897,,897,897,897,,,,,,,,,,,,,,,,,,,,897,,', +'897,,,897,897,,,897,,,,,,897,,,,,,,,897,,,,,897,897,897,897,897,897', +',,,897,897,,,,,,,897,,,897,897,897,,,897,897,883,883,883,,883,,,,883', +'883,,,,883,,883,883,883,883,883,883,883,,,,,,883,883,883,883,883,883', +'883,,,883,,,,,,,883,,,883,883,883,883,883,883,883,883,,883,883,883,', +'883,883,,883,883,883,,,,,,,,,,,,,,,,,,,,883,,,883,,,883,883,,,883,,', +',,,883,,,,,,,,883,,,,,883,883,883,883,883,883,,,,883,883,,,,,,,883,', +',883,883,883,,,883,883,432,432,432,,432,,,,432,432,,,,432,,432,432,432', +'432,432,432,432,,,,,,432,432,432,432,432,432,432,,,432,,,,,,,432,,,432', +'432,432,432,432,432,432,432,,432,432,432,,432,432,,432,432,432,,,,,', +',,,,,,,,,,,,,,432,,,432,,,432,432,,,432,,,,,,432,,,,,,,,432,,,,,432', +'432,432,432,432,432,,,,432,432,,,,,,,432,,,432,432,432,,,432,432,826', +'826,826,,826,,,,826,826,,,,826,,826,826,826,826,826,826,826,,,,,,826', +'826,826,826,826,826,826,,,826,,,,,,,826,,,826,826,826,826,826,826,826', +'826,,826,826,826,,826,826,,826,826,826,,,,,,,,,,,,,,,,,,,,826,,,826', +',,826,826,,,826,,,,,,826,,,,,,,,826,,,,,826,826,826,826,826,826,,,,826', +'826,,,,,,,826,,,826,826,826,,,826,826,824,824,824,,824,,,,824,824,,', +',824,,824,824,824,824,824,824,824,,,,,,824,824,824,824,824,824,824,', +',824,,,,,,,824,,,824,824,824,824,824,824,824,824,,824,824,824,,824,824', +',824,824,824,,,,,,,,,,,,,,,,,,,,824,,,824,,,824,824,,,824,,,,,,824,', +',,,,,,824,,,,,824,824,824,824,824,824,,,,824,824,,,,,,,824,,,824,824', +'824,,,824,824,823,823,823,,823,,,,823,823,,,,823,,823,823,823,823,823', +'823,823,,,,,,823,823,823,823,823,823,823,,,823,,,,,,,823,,,823,823,823', +'823,823,823,823,823,,823,823,823,,823,823,,823,823,823,,,,,,,,,,,,,', +',,,,,,823,,,823,,,823,823,,,823,,,,,,823,,,,,,,,823,,,,,823,823,823', +'823,823,823,,,,823,823,,,,,,,823,,,823,823,823,,,823,823,822,822,822', +',822,,,,822,822,,,,822,,822,822,822,822,822,822,822,,,,,,822,822,822', +'822,822,822,822,,,822,,,,,,,822,,,822,822,822,822,822,822,822,822,,822', +'822,822,,822,822,,822,822,822,,,,,,,,,,,,,,,,,,,,822,,,822,,,822,822', +',,822,,,,,,822,,,,,,,,822,,,,,822,822,822,822,822,822,,,,822,822,,,', +',,,822,,,822,822,822,,,822,822,476,476,476,,476,,,,476,476,,,,476,,476', +'476,476,476,476,476,476,,,,,,476,476,476,476,476,476,476,,,476,,,,,', +',476,,,476,476,476,476,476,476,476,476,476,476,476,476,,476,476,,476', +'476,476,,,,,,,,,,,,,,,,,,,,476,,,476,,,476,476,,,476,,476,,476,,476', +',,,,,,,476,,,,,476,476,476,476,476,476,,,,476,476,,,,,,,476,,476,476', +'476,476,,,476,476,478,478,478,,478,,,,478,478,,,,478,,478,478,478,478', +'478,478,478,,,,,,478,478,478,478,478,478,478,,,478,,,,,,,478,,,478,478', +'478,478,478,478,478,478,,478,478,478,,478,478,,478,478,478,,,,,,,,,', +',,,,,,,,,,478,,,478,,,478,478,,,478,,,,,,478,,,,,,,,478,,,,,478,478', +'478,478,478,478,,,,478,478,,,,,,,478,,,478,478,478,,,478,478,479,479', +'479,,479,,,,479,479,,,,479,,479,479,479,479,479,479,479,,,,,,479,479', +'479,479,479,479,479,,,479,,,,,,,479,,,479,479,479,479,479,479,479,479', +',479,479,479,,479,479,,479,479,479,,,,,,,,,,,,,,,,,,,,479,,,479,,,479', +'479,,,479,,,,,,479,,,,,,,,479,,,,,479,479,479,479,479,479,,,,479,479', +',,,,,,479,,,479,479,479,,,479,479,480,480,480,,480,,,,480,480,,,,480', +',480,480,480,480,480,480,480,,,,,,480,480,480,480,480,480,480,,,480', +',,,,,,480,,,480,480,480,480,480,480,480,480,,480,480,480,,480,480,,480', +'480,480,,,,,,,,,,,,,,,,,,,,480,,,480,,,480,480,,,480,,,,,,480,,,,,,', +',480,,,,,480,480,480,480,480,480,,,,480,480,,,,,,,480,,,480,480,480', +',,480,480,821,821,821,,821,,,,821,821,,,,821,,821,821,821,821,821,821', +'821,,,,,,821,821,821,821,821,821,821,,,821,,,,,,,821,,,821,821,821,821', +'821,821,821,821,,821,821,821,,821,821,,821,821,821,,,,,,,,,,,,,,,,,', +',,821,,,821,,,821,821,,,821,,,,,,821,,,,,,,,821,,,,,821,821,821,821', +'821,821,,,,821,821,,,,,,,821,,,821,821,821,,,821,821,808,808,808,,808', +',,,808,808,,,,808,,808,808,808,808,808,808,808,,,,,,808,808,808,808', +'808,808,808,,,808,,,,,,,808,,,808,808,808,808,808,808,808,808,,808,808', +'808,,808,808,,808,808,808,,,,,,,,,,,,,,,,,,,,808,,,808,,,808,808,,,808', +',,,,,808,,,,,,,,808,,,,,808,808,808,808,808,808,,,,808,808,,,,,,,808', +',,808,808,808,,,808,808,519,519,519,,519,,,,519,519,,,,519,,519,519', +'519,519,519,519,519,,,,,,519,519,519,519,519,519,519,,,519,,,,,,,519', +',,519,519,519,519,519,519,519,519,519,519,519,519,,519,519,,519,519', +'519,,,,,,,,,,,,,,,,,,,,519,,,519,,,519,519,,,519,,519,,519,,519,,,,', +',,,519,,,,,519,519,519,519,519,519,,,,519,519,,,,,,,519,,519,519,519', +'519,,,519,519,522,522,522,,522,,,,522,522,,,,522,,522,522,522,522,522', +'522,522,,,,,,522,522,522,522,522,522,522,,,522,,,,,,,522,,,522,522,522', +'522,522,522,522,522,522,522,522,522,,522,522,,522,522,522,,,,,,,,,,', +',,,,,,,,,522,,,522,,,522,522,,,522,,,,522,,522,,,,,,,,522,,,,,522,522', +'522,522,522,522,,,,522,522,,,,,,,522,,522,522,522,522,,,522,522,524', +'524,524,,524,,,,524,524,,,,524,,524,524,524,524,524,524,524,,,,,,524', +'524,524,524,524,524,524,,,524,,,,,,,524,,,524,524,524,524,524,524,524', +'524,,524,524,524,,524,524,,524,524,524,,,,,,,,,,,,,,,,,,,,524,,,524', +',,524,524,,,524,,,,,,524,,,,,,,,524,,,,,524,524,524,524,524,524,,,,524', +'524,,,,,,,524,,,524,524,524,,,524,524,530,530,530,530,530,,,,530,530', +',,,530,,530,530,530,530,530,530,530,,,,,,530,530,530,530,530,530,530', +',,530,,,,,,530,530,530,530,530,530,530,530,530,530,530,530,,530,530', +'530,,530,530,,530,530,530,,,,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530', +',530,,,,530,,,,,,,,530,,,,,530,530,530,530,530,530,,,,530,530,,,,,,530', +'530,,,530,530,530,,,530,530,801,801,801,,801,,,,801,801,,,,801,,801', +'801,801,801,801,801,801,,,,,,801,801,801,801,801,801,801,,,801,,,,,', +',801,,,801,801,801,801,801,801,801,801,,801,801,801,,801,801,,801,801', +'801,,,,,,,,,,,,,,,,,,,,801,,,801,,,801,801,,,801,,,,,,801,,,,,,,,801', +',,,,801,801,801,801,801,801,,,,801,801,,,,,,,801,,,801,801,801,,,801', +'801,537,537,537,,537,,,,537,537,,,,537,,537,537,537,537,537,537,537', +',,,,,537,537,537,537,537,537,537,,,537,,,,,,,537,,,537,537,537,537,537', +'537,537,537,,537,537,537,,537,537,,,,537,,,,,,,,,,,,,,,,,,,,537,,,537', +',,537,537,,,537,,,,,,,,,,,,,,,,,,,537,537,537,537,537,537,,,,537,537', +',,,,,,537,,,537,537,537,,,537,537,539,539,539,,539,,,,539,539,,,,539', +',539,539,539,539,539,539,539,,,,,,539,539,539,539,539,539,539,,,539', +',,,,,,539,,,539,539,539,539,539,539,539,539,539,539,539,539,,539,539', +',539,539,539,,,,,,,,,,,,,,,,,,,,539,,,539,,,539,539,,,539,,539,,539', +',539,,,,,,,,539,,,,,539,539,539,539,539,539,,,,539,539,,,,,,,539,,539', +'539,539,539,,,539,539,545,545,545,,545,,,,545,545,,,,545,,545,545,545', +'545,545,545,545,,,,,,545,545,545,545,545,545,545,,,545,,,,,,,545,,,545', +'545,545,545,545,545,545,545,,545,545,545,,545,545,,,,545,,,,,,,,,,,', +',,,,,,,,545,,,545,,,545,545,,,545,,,,,,,,,,,,,,,,,,,545,545,545,545', +'545,545,,,,545,545,,,,,,,545,,,545,545,545,,,545,545,549,549,549,,549', +',,,549,549,,,,549,,549,549,549,549,549,549,549,,,,,,549,549,549,549', +'549,549,549,,,549,,,,,,,549,,,549,549,549,549,549,549,549,549,,549,549', +'549,,549,549,,549,549,549,,,,,,,,,,,,,,,,,,,,549,,,549,,,549,549,,,549', +',,,,,549,,,,,,,,549,,,,,549,549,549,549,549,549,,,,549,549,,,,,,,549', +',,549,549,549,,,549,549,554,554,554,,554,,,,554,554,,,,554,,554,554', +'554,554,554,554,554,,,,,,554,554,554,554,554,554,554,,,554,,,,,,,554', +',,554,554,554,554,554,554,554,554,,554,554,554,,554,554,,554,554,554', +',,,,,,,,,,,,,,,,,,,554,,,554,,,554,554,,,554,,,,,,554,,,,,,,,554,,,', +',554,554,554,554,554,554,,,,554,554,,,,,,,554,,,554,554,554,,,554,554', +'779,779,779,,779,,,,779,779,,,,779,,779,779,779,779,779,779,779,,,,', +',779,779,779,779,779,779,779,,,779,,,,,,,779,,,779,779,779,779,779,779', +'779,779,779,779,779,779,,779,779,,779,779,779,,,,,,,,,,,,,,,,,,,,779', +',,779,,,779,779,,,779,,779,,779,,779,,,,,,,,779,,,,,779,779,779,779', +'779,779,,,,779,779,,,,,,,779,,779,779,779,779,,,779,779,767,767,767', +',767,,,,767,767,,,,767,,767,767,767,767,767,767,767,,,,,,767,767,767', +'767,767,767,767,,,767,,,,,,,767,,,767,767,767,767,767,767,767,767,,767', +'767,767,,767,767,,767,767,767,,,,,,,,,,,,,,,,,,,,767,,,767,,,767,767', +',,767,,767,,,,767,,,,,,,,767,,,,,767,767,767,767,767,767,,,,767,767', +',,,,,,767,,,767,767,767,,,767,767,746,746,746,,746,,,,746,746,,,,746', +',746,746,746,746,746,746,746,,,,,,746,746,746,746,746,746,746,,,746', +',,,,,,746,,,746,746,746,746,746,746,746,746,,746,746,746,,746,746,,746', +'746,746,,,,,,,,,,,,,,,,,,,,746,,,746,,,746,746,,,746,,,,,,746,,,,,,', +',746,,,,,746,746,746,746,746,746,,,,746,746,,,,,,,746,,,746,746,746', +',,746,746,588,588,588,,588,,,,588,588,,,,588,,588,588,588,588,588,588', +'588,,,,,,588,588,588,588,588,588,588,,,588,,,,,,,588,,,588,588,588,588', +'588,588,588,588,,588,588,588,,588,588,,588,588,588,,,,,,,,,,,,,,,,,', +',,588,,,588,,,588,588,,,588,,,,,,588,,,,,,,,588,,,,,588,588,588,588', +'588,588,,,,588,588,,,,,,,588,,,588,588,588,,,588,588,727,727,727,,727', +',,,727,727,,,,727,,727,727,727,727,727,727,727,,,,,,727,727,727,727', +'727,727,727,,,727,,,,,,,727,,,727,727,727,727,727,727,727,727,727,727', +'727,727,,727,727,,727,727,727,,,,,,,,,,,,,,,,,,,,727,,,727,,,727,727', +',,727,,727,,,,727,,,,,,,,727,,,,,727,727,727,727,727,727,,,,727,727', +',,,,,,727,,727,727,727,727,,,727,727,722,722,722,,722,,,,722,722,,,', +'722,,722,722,722,722,722,722,722,,,,,,722,722,722,722,722,722,722,,', +'722,,,,,,,722,,,722,722,722,722,722,722,722,722,,722,722,722,,722,722', +',722,722,722,,,,,,,,,,,,,,,,,,,,722,,,722,,,722,722,,,722,,722,,,,722', +',,,,,,,722,,,,,722,722,722,722,722,722,,,,722,722,,,,,,,722,,,722,722', +'722,,,722,722,611,611,611,,611,,,,611,611,,,,611,,611,611,611,611,611', +'611,611,,,,,,611,611,611,611,611,611,611,,,611,,,,,,,611,,,611,611,611', +'611,611,611,611,611,611,611,611,611,,611,611,,611,611,611,,,,,,,,,,', +',,,,,,,,,611,,,611,,,611,611,,,611,,611,,611,,611,,,,,,,,611,,,,,611', +'611,611,611,611,611,,,,611,611,,,,,,,611,,611,611,611,611,,,611,611', +'717,717,717,,717,,,,717,717,,,,717,,717,717,717,717,717,717,717,,,,', +',717,717,717,717,717,717,717,,,717,,,,,,,717,,,717,717,717,717,717,717', +'717,717,,717,717,717,,717,717,,717,717,717,,,,,,,,,,,,,,,,,,,,717,,', +'717,,,717,717,,,717,,,,,,717,,,,,,,,717,,,,,717,717,717,717,717,717', +',,,717,717,,,,,,,717,,,717,717,717,,,717,717,716,716,716,,716,,,,716', +'716,,,,716,,716,716,716,716,716,716,716,,,,,,716,716,716,716,716,716', +'716,,,716,,,,,,,716,,,716,716,716,716,716,716,716,716,,716,716,716,', +'716,716,,,,716,,,,,,,,,,,,,,,,,,,,716,,,716,,,716,716,,,716,,,,,,,,', +',,,,,,,,,,716,716,716,716,716,716,,,,716,716,,,,,,,716,,,716,716,716', +',,716,716,623,623,623,,623,,,,623,623,,,,623,,623,623,623,623,623,623', +'623,,,,,,623,623,623,623,623,623,623,,,623,,,,,,,623,,,623,623,623,623', +'623,623,623,623,,623,623,623,,623,623,,623,623,623,,,,,,,,,,,,,,,,,', +',,623,,,623,,,623,623,,,623,,,,,,623,,,,,,,,623,,,,,623,623,623,623', +'623,623,,,,623,623,,,,,,,623,,,623,623,623,,,623,623,629,629,629,,629', +',,,629,629,,,,629,,629,629,629,629,629,629,629,,,,,,629,629,629,629', +'629,629,629,,,629,,,,,,,629,,,629,629,629,629,629,629,629,629,,629,629', +'629,,629,629,,629,629,629,,,,,,,,,,,,,,,,,,,,629,,,629,,,629,629,,,629', +',,,,,629,,,,,,,,629,,,,,629,629,629,629,629,629,,,,629,629,,,,,,,629', +',,629,629,629,,,629,629,658,658,658,,658,,,,658,658,,,,658,,658,658', +'658,658,658,658,658,,,,,,658,658,658,658,658,658,658,,,658,,,,,,,658', +',,658,658,658,658,658,658,658,658,,658,658,658,,658,658,,658,658,658', +',,,,,,,,,,,,,,,,,,,658,,,658,,,658,658,,,658,,658,,,,658,,,,,,,,658', +',,,,658,658,658,658,658,658,,,,658,658,,,,,,,658,,,658,658,658,,,658', +'658,659,659,659,,659,,,,659,659,,,,659,,659,659,659,659,659,659,659', +',,,,,659,659,659,659,659,659,659,,,659,,,,,,,659,,,659,659,659,659,659', +'659,659,659,,659,659,659,,659,659,,659,659,659,,,,,,,,,,,,,,,,,,,,659', +',,659,,,659,659,,,659,,,,,,659,,,,,,,,659,,,,,659,659,659,659,659,659', +',,,659,659,,,,,,,659,,,659,659,659,,,659,659,660,660,660,,660,,,,660', +'660,,,,660,,660,660,660,660,660,660,660,,,,,,660,660,660,660,660,660', +'660,,,660,,,,,,,660,,,660,660,660,660,660,660,660,660,660,660,660,660', +',660,660,,660,660,660,,,,,,,,,,,,,,,,,,,,660,,,660,,,660,660,,,660,', +'660,,660,,660,,,,,,,,660,,,,,660,660,660,660,660,660,,,,660,660,,,,', +',,660,,660,660,660,660,,,660,660,663,663,663,,663,,,,663,663,,,,663', +',663,663,663,663,663,663,663,,,,,,663,663,663,663,663,663,663,,,663', +',,,,,,663,,,663,663,663,663,663,663,663,663,,663,663,663,,663,663,,663', +'663,663,,,,,,,,,,,,,,,,,,,,663,,,663,,,663,663,,,663,,,,,,663,,,,,,', +',663,,,,,663,663,663,663,663,663,,,,663,663,,,,,,,663,,,663,663,663', +',,663,663,705,705,705,,705,,,,705,705,,,,705,,705,705,705,705,705,705', +'705,,,,,,705,705,705,705,705,705,705,,,705,,,,,,,705,,,705,705,705,705', +'705,705,705,705,,705,705,705,,705,705,,,,705,,,,,,,,,,,,,,,,,,,,705', +',,705,,,705,705,,,705,,,,,,,,,,,,,,,,,,,705,705,705,705,705,705,,,,705', +'705,,,,,,,705,,,705,705,705,,,705,705,666,666,666,,666,,,,666,666,,', +',666,,666,666,666,666,666,666,666,,,,,,666,666,666,666,666,666,666,', +',666,,,,,,,666,,,666,666,666,666,666,666,666,666,666,666,666,666,,666', +'666,,666,666,666,,,,,,,,,,,,,,,,,,,,666,,,666,,,666,666,,,666,,666,', +'666,,666,,,,,,,,666,,,,,666,666,666,666,666,666,,,,666,666,,,,,,,666', +',666,666,666,666,,,666,666,667,667,667,,667,,,,667,667,,,,667,,667,667', +'667,667,667,667,667,,,,,,667,667,667,667,667,667,667,,,667,,,,,,,667', +',,667,667,667,667,667,667,667,667,667,667,667,667,,667,667,,667,667', +'667,,,,,,,,,,,,,,,,,,,,667,,,667,,,667,667,,,667,,,,667,,667,,,,,,,', +'667,,,,,667,667,667,667,667,667,,,,667,667,,,,,,,667,,667,667,667,667', +',,667,667,668,668,668,,668,,,,668,668,,,,668,,668,668,668,668,668,668', +'668,,,,,,668,668,668,668,668,668,668,,,668,,,,,,,668,,,668,668,668,668', +'668,668,668,668,,668,668,668,,668,668,,668,668,668,,,,,,,,,,,,,,,,,', +',,668,,,668,,,668,668,,,668,,,,,,668,,,,,,,,668,,,,,668,668,668,668', +'668,668,,,,668,668,,,,,,,668,,,668,668,668,,,668,668,669,669,669,,669', +',,,669,669,,,,669,,669,669,669,669,669,669,669,,,,,,669,669,669,669', +'669,669,669,,,669,,,,,,,669,,,669,669,669,669,669,669,669,669,,669,669', +'669,,669,669,,669,669,669,,,,,,,,,,,,,,,,,,,,669,,,669,,,669,669,,,669', +',,,,,669,,,,,,,,669,,,,,669,669,669,669,669,669,,,,669,669,,,,,,,669', +',,669,669,669,,,669,669,702,702,702,,702,,,,702,702,,,,702,,702,702', +'702,702,702,702,702,,,,,,702,702,702,702,702,702,702,,,702,,,,,,,702', +',,702,702,702,702,702,702,702,702,,702,702,702,,702,702,,702,702,702', +',,,,,,,,,,,,,,,,,,,702,,,702,,,702,702,,,702,,,,,,702,,,,,,,,702,,,', +',702,702,702,702,702,702,,,,702,702,,,,,,,702,,,702,702,702,,,702,702', +'674,674,674,,674,,,,674,674,,,,674,,674,674,674,674,674,674,674,,,,', +',674,674,674,674,674,674,674,,,674,,,,,,,674,,,674,674,674,674,674,674', +'674,674,,674,674,674,,674,674,,674,674,674,,,,,,,,,,,,,,,,,,,,674,,', +'674,,,674,674,,,674,,,,,,674,,,,,,,,674,,,,,674,674,674,674,674,674', +',,,674,674,,,,,,,674,,,674,674,674,,,674,674,675,675,675,,675,,,,675', +'675,,,,675,,675,675,675,675,675,675,675,,,,,,675,675,675,675,675,675', +'675,,,675,,,,,,,675,,,675,675,675,675,675,675,675,675,,675,675,675,', +'675,675,,675,675,675,,,,,,,,,,,,,,,,,,,,675,,,675,,,675,675,,,675,,', +',,,675,,,,,,,,675,,,,,675,675,675,675,675,675,,,,675,675,,,,,,,675,', +',675,675,675,,,675,675,699,699,699,,699,,,,699,699,,,,699,,699,699,699', +'699,699,699,699,,,,,,699,699,699,699,699,699,699,,,699,,,,,,,699,,,699', +'699,699,699,699,699,699,699,,699,699,699,,699,699,,699,699,699,,,,,', +',,,,,,,,,,,,,,699,,,699,,,699,699,,,699,,,,,,699,,,,,,,,699,,,,,699', +'699,699,699,699,699,,,,699,699,,,,,,,699,,,699,699,699,,,699,699,423', +'423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423', +'423,423,423,423,423,423,,,,423,423,423,423,423,423,423,423,423,423,', +',,,,423,423,423,423,423,423,423,423,423,,,423,,,,,,,,,423,423,,423,423', +'423,423,423,423,423,,,423,423,,,,423,423,423,423,,,,,,,,,,,,,,423,423', +',423,423,423,423,423,423,423,423,423,423,423,,,423,423,,,,,,,,,,423', +',,,,,,,,423,,,,,423,655,655,655,655,655,655,655,655,655,655,655,655', +'655,655,655,655,655,655,655,655,655,655,655,655,,,,655,655,655,655,655', +'655,655,655,655,655,,,,,,655,655,655,655,655,655,655,655,655,,,655,', +',,,,,,,655,655,,655,655,655,655,655,655,655,,,655,655,,,,655,655,655', +'655,,,,,,,,,,,,,,655,655,,655,655,655,655,655,655,655,655,655,655,655', +',,655,655,,,,,,,,,,655,,,,,,,,,655,,,,,655,103,103,103,103,103,103,103', +'103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103', +',,,103,103,103,103,103,103,103,103,103,103,,,,,,103,103,103,103,103', +'103,103,103,103,103,103,103,,103,,,,,,,103,103,,103,103,103,103,103', +'103,103,,,103,103,,,,103,103,103,103,,,,,,,,,,,,,,103,103,,103,103,103', +'103,103,103,103,103,103,103,103,,,103,,,,,,,,,,,,,,,,,,,,103,,,,,103', +'12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12', +'12,,,,12,12,12,12,12,12,12,12,12,12,,,,,,12,12,12,12,12,12,12,12,12', +',,12,,,,,,,,,12,12,,12,12,12,12,12,12,12,,,12,12,,,,12,12,12,12,,,,', +',,,,,,,,,12,12,,12,12,12,12,12,12,12,12,12,12,12,,,12,12,,,,,,,,,,12', +',,,,,,,,12,,,,,12,788,788,788,788,788,788,788,788,788,788,788,788,788', +'788,788,788,788,788,788,788,788,788,788,788,,,,788,788,788,788,788,788', +'788,788,788,788,,,,,,788,788,788,788,788,788,788,788,788,,,788,,,,,', +',,,788,788,,788,788,788,788,788,788,788,,,788,788,,,,788,788,788,788', +',,,,,,,,,,,,,788,788,,788,788,788,788,788,788,788,788,788,788,788,,', +'788,,,,,,,,,,,,,,,,,,,,788,,,,,788,11,11,11,11,11,11,11,11,11,11,11', +'11,11,11,11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11', +'11,,,,,,11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,,11,11,,11,11,11,11', +'11,11,11,,,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11', +'11,11,11,11,11,,,11,11,,,,,,,,,,11,,,,,,,,,11,,,,,11,75,75,75,75,75', +'75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,,,,75,75,75', +'75,75,75,75,75,75,75,,,,,,75,75,75,75,75,75,75,75,75,75,75,75,,75,,', +',,,,75,75,,75,75,75,75,75,75,75,,,75,75,,,,75,75,75,75,,,,,,75,,,,,', +',,75,75,,75,75,75,75,75,75,75,75,75,75,75,,,75,,,,,,,,,,474,474,,,474', +',,,,,75,,,474,474,75,474,474,474,474,474,474,474,,,474,474,,,,474,474', +'474,474,,,,,,474,,,,,,,,474,474,,474,474,474,474,474,474,474,474,474', +'474,474,,,474,,,,,,,,,,777,777,,,777,,,,,,474,,,777,777,474,777,777', +'777,777,777,777,777,,,777,777,,,,777,777,777,777,,,,,,777,,,,,,,,777', +'777,,777,777,777,777,777,777,777,777,777,777,777,,,777,,,,,,,,,,778', +'778,,,778,,,,,,777,,,778,778,777,778,778,778,778,778,778,778,,,778,778', +',,,778,778,778,778,,,,,,778,,,,,,,,778,778,,778,778,778,778,778,778', +'778,778,778,778,778,,,778,,,,,,,,,,475,475,,,475,,,,,,778,,,475,475', +'778,475,475,475,475,475,475,475,,,475,475,,,,475,475,475,475,,,,,,475', +',,,,,,,475,475,,475,475,475,475,475,475,475,475,475,475,475,,,475,,', +',,,,,,,229,229,,,229,,,,,,475,,,229,229,475,229,229,229,229,229,229', +'229,,,229,229,,,,229,229,229,229,,,,,,229,,,,,,,,229,229,,229,229,229', +'229,229,229,229,229,229,229,229,,,229,,,,,,,,,,661,661,,,661,,,,,,229', +',,661,661,229,661,661,661,661,661,661,661,,,661,661,,,,661,661,661,661', +',,,,,661,,,,,,,,661,661,,661,661,661,661,661,661,661,661,661,661,661', +',,661,,,,,,,,,,1035,1035,,,1035,,,,,,661,,,1035,1035,661,1035,1035,1035', +'1035,1035,1035,1035,,,1035,1035,,,,1035,1035,1035,1035,,,,,,1035,,,', +',,,,1035,1035,,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035', +',,1035,,,,,,,,,,662,662,,,662,,,,,,1035,,,662,662,1035,662,662,662,662', +'662,662,662,,,662,662,,,,662,662,662,662,,,,,,662,,,,,,,,662,662,,662', +'662,662,662,662,662,662,662,662,662,662,,,662,,,,,,,,,,540,540,,,540', +',,,,,662,,,540,540,662,540,540,540,540,540,540,540,,,540,540,,,,540', +'540,540,540,,,,,,540,,,,,,,,540,540,,540,540,540,540,540,540,540,540', +'540,540,540,,,540,,,,,,,,,,541,541,,,541,,,,,,540,,,541,541,540,541', +'541,541,541,541,541,541,,,541,541,,,,541,541,541,541,,,,,,541,,,,,,', +',541,541,,541,541,541,541,541,541,541,541,541,541,541,,,541,,,,,,,,', +',1041,1041,,,1041,,,,,,541,,,1041,1041,541,1041,1041,1041,1041,1041', +'1041,1041,,,1041,1041,,,,1041,1041,1041,1041,,,,,,1041,,,,,,,,1041,1041', +',1041,1041,1041,1041,1041,1041,1041,1041,1041,1041,1041,,,1041,,,,,', +',,,,550,550,,,550,,,,,,1041,,,550,550,1041,550,550,550,550,550,550,550', +',,550,550,,,,550,550,550,550,,,,,,550,,,,,,,,550,550,,550,550,550,550', +'550,550,550,550,550,550,550,,,550,,,,,,,,,,551,551,,,551,,,,,,550,,', +'551,551,550,551,551,551,551,551,551,551,,,551,551,,,,551,551,551,551', +',,,,,551,,,,,,,,551,551,,551,551,551,551,551,551,551,551,551,551,551', +',,551,,,,,,,,,,1040,1040,,,1040,,,,,,551,,,1040,1040,551,1040,1040,1040', +'1040,1040,1040,1040,,,1040,1040,,,,1040,1040,1040,1040,,,,,,1040,,,', +',,,,1040,1040,,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040', +',,1040,,,,,,,,,,230,230,,,230,,,,,,1040,,,230,230,1040,230,230,230,230', +'230,230,230,,,230,230,,,,230,230,230,230,,,,,,230,,,,,,,,230,230,,230', +'230,230,230,230,230,230,230,230,230,230,,981,230,981,981,981,981,981', +',,,,279,279,,,279,981,,,,,230,,,279,279,230,279,279,279,279,279,279', +'279,,,279,279,981,,,279,279,279,279,,,981,981,981,981,,,,,,,,279,279', +',279,279,279,279,279,279,279,279,279,279,279,,,279,,,,,,,,,981,612,612', +',,612,,,,,,279,,,612,612,279,612,612,612,612,612,612,612,,,612,612,', +',,612,612,612,612,,,,,,612,,,,,,,,612,612,,612,612,612,612,612,612,612', +'612,612,612,612,,,612,986,,986,986,986,986,986,,,613,613,,,613,,,986', +',,612,,,613,613,612,613,613,613,613,613,613,613,,,613,613,,,986,613', +'613,613,613,,,,,,613,986,986,,,,,,613,613,,613,613,613,613,613,613,613', +'613,613,613,613,,984,613,984,984,984,984,984,,,,,,986,,,,984,,,,,613', +',,,354,613,354,354,354,354,354,,,,,,,984,,1045,354,1045,1045,1045,1045', +'1045,984,984,984,984,,,,,742,1045,742,742,742,742,742,,354,354,,,,,', +',742,354,354,354,354,,,1045,,,,1063,984,1063,1063,1063,1063,1063,1045', +'1045,,,742,,,,,1063,,,,742,742,742,742,,,354,1065,,1065,1065,1065,1065', +'1065,,,,,1063,,,1045,829,1065,829,829,829,829,829,1063,1063,,,,,,742', +'786,829,786,786,786,786,786,,1065,,,,,,,,786,,,1065,1065,,,829,,947', +'1063,947,947,947,947,947,829,829,829,829,,,786,,949,947,949,949,949', +'949,949,786,786,786,786,,,1065,,,949,,,,829,,,947,,,,,829,,,,947,947', +'947,947,,,949,,,,1088,786,1088,1088,1088,1088,1088,949,949,,,,,,,,1088', +',,,,,,,,,947,,,,,,,,,,,,1088,,,949,,,,,,,,1088,1088,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,1088' ] + racc_action_check = arr = ::Array.new(26078, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -1863,19 +1849,21 @@ end racc_action_pointer = [ - nil, 1215, 4534, 1119, nil, 644, nil, nil, 6082, 878, - nil, 24807, 24275, 996, nil, 959, 976, 630, 395, 876, - 685, nil, -78, 6362, 2560, 952, nil, 295, nil, 196, - 928, 1185, 6502, 6642, 6782, nil, 5380, 6922, 7062, nil, - 848, 258, 295, 830, 184, 7482, 7622, 7762, 725, 472, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 796, - nil, -76, 7902, nil, -19, nil, 8042, 8182, nil, nil, - 8322, 8462, 757, nil, 24408, nil, nil, nil, nil, nil, - -95, nil, nil, nil, nil, nil, nil, 681, 663, 658, - 638, 24142, nil, nil, nil, nil, nil, nil, 125, nil, - nil, 263, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 9162, nil, nil, nil, nil, 9302, - 9442, 9582, 9722, 9862, 648, nil, 634, nil, nil, nil, + nil, 1391, 5456, 1357, nil, 721, nil, nil, 6018, 1255, + nil, 24208, 23932, 1199, nil, 1163, 1162, 786, 1212, 570, + 438, nil, 70, 6158, 2495, 1260, nil, 342, nil, 294, + 1800, 1148, 6298, 6438, 6578, nil, 5738, 6718, 6858, nil, + 1153, 633, 772, 1218, 391, 6998, 7138, 748, 7278, 1146, + 848, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 1540, nil, 7418, nil, nil, 0, nil, 7558, 7698, nil, + nil, 7838, 7978, 1188, nil, 24346, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 204, nil, nil, nil, nil, nil, nil, 1140, + 1135, 1133, 1130, 23794, nil, nil, nil, nil, nil, nil, + 662, nil, nil, 0, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 8258, nil, nil, nil, + nil, 8398, 8538, 8678, 8818, 8958, 1128, nil, 878, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, @@ -1883,294 +1871,316 @@ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 629, nil, 1996, - 10002, 10142, 10282, 25975, 26043, nil, nil, 10422, 10562, 10702, - 10842, 10982, 11122, nil, nil, 409, 174, 103, 466, -30, - 373, 412, nil, 17982, 1714, 211, 18262, 18402, 18542, 18682, - 18822, 18962, 19102, 19242, 19382, 19522, 19662, 19802, 19942, 20082, - 20222, 20362, 20502, 20642, 20782, 20922, 21062, 5802, 21202, 21342, - 21482, 21622, nil, nil, 25059, nil, nil, 200, 22042, nil, - 158, nil, nil, nil, 22322, nil, nil, 22462, nil, 3406, - nil, 60, -14, nil, 23022, 12, 23162, nil, 23302, nil, - -104, 23442, nil, nil, 412, nil, 891, 23582, 1169, 3970, - 1183, 1210, 1171, 24002, 3124, 611, 597, 567, 1226, 768, - nil, 1140, 1097, -24, nil, nil, nil, 1123, -44, 1026, - 11962, nil, -85, 1079, 735, nil, 1073, nil, 12382, 4252, - nil, 12522, 1048, nil, 290, 324, 1171, 12942, nil, nil, - 26446, 396, 136, 157, 13362, 13502, 497, 1279, 1166, -19, - 34, 536, 1247, 164, 1284, nil, nil, 14482, nil, 14622, - 624, -54, 595, 605, 666, 626, 603, 326, 628, nil, - 181, nil, nil, nil, nil, nil, 696, nil, 595, nil, - 535, nil, 693, 465, nil, 738, 460, nil, 766, -28, - nil, 771, -33, nil, 299, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 5239, 24940, nil, - nil, nil, nil, 867, nil, nil, 895, 16722, 897, nil, - nil, 1855, 902, nil, nil, 913, 927, 506, 504, 1442, - nil, nil, nil, 533, 0, 1045, nil, nil, 1310, 1053, - nil, 3124, nil, 1007, nil, nil, 1573, nil, nil, nil, - nil, 237, nil, 25195, 25331, 5942, 177, 17702, 17562, 17422, - 4111, 4252, 332, 493, 1051, 1005, 997, 991, 5380, 5521, - 5404, 5098, 1001, 1135, 1258, 1392, 5239, 4393, 4534, 4675, - 4816, 971, 1200, 3970, 4957, 3547, 210, 25059, nil, nil, - nil, nil, nil, nil, 252, 274, 926, 917, nil, nil, - 17282, nil, nil, 17142, nil, 17002, nil, 256, nil, 16862, - nil, nil, 16582, 1148, 891, 885, nil, nil, 855, 16442, - 840, 16302, 25508, 25576, 483, 866, nil, 16162, 769, nil, - 16022, 15882, 25678, 25746, 3829, 15742, 875, 868, 526, nil, - nil, 15602, nil, nil, 15462, nil, 747, nil, 389, 769, - 58, 25869, nil, 721, 716, nil, 712, 701, 699, nil, - nil, nil, nil, nil, nil, nil, nil, 677, 892, nil, - nil, 15322, nil, nil, nil, 764, nil, nil, nil, 756, - nil, nil, 723, 5521, 738, nil, 5662, 55, 181, 731, - 694, nil, 15182, 26111, 26179, -5, nil, 340, 232, -21, - nil, 749, nil, 9, 15042, nil, 26241, nil, 14902, nil, + 1108, nil, 5315, 9098, 9238, 9378, 9518, 9658, 9798, 24711, + 25441, nil, nil, 9938, 10078, 10218, nil, nil, 572, 142, + 479, 1180, 471, 1084, 1120, nil, 10358, 4751, 1105, 10498, + 10638, 10778, 10918, 11058, 11198, 11338, 11478, 11618, 11758, 11898, + 12038, 12178, 12318, 12458, 12598, 12738, 12878, 13018, 13158, 13298, + 13438, nil, nil, nil, nil, 13578, nil, nil, nil, 25514, + nil, nil, 1089, 13718, nil, nil, 1093, nil, nil, nil, + 13858, nil, nil, 13998, nil, 2777, nil, 1053, 1038, nil, + 14138, 1075, 14418, nil, nil, 14558, 14698, nil, nil, 680, + nil, nil, 14838, 1098, nil, 1004, 4469, 1021, 1037, 997, + 15118, 4187, 754, 768, 772, 1060, 773, nil, 1022, 977, + 160, nil, nil, nil, 1009, 320, 969, 15258, nil, 619, + 1028, 809, nil, 1020, 15398, nil, 15538, 4046, 945, 947, + 15818, 15958, nil, nil, 25747, 924, 159, 147, 16098, 3623, + 3341, 67, 1056, 899, 66, 58, 362, 974, 130, 1002, + nil, nil, 16658, nil, 16798, 666, 36, 248, 714, 609, + 607, 606, 366, 361, nil, 487, nil, nil, nil, nil, + nil, 265, nil, 388, nil, 714, nil, 832, 560, nil, + 726, nil, 722, 102, nil, 693, 128, nil, 574, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 333, nil, nil, 437, nil, nil, nil, 107, nil, nil, - 105, nil, 114, nil, 24674, nil, 42, 14762, 14342, 372, - 1212, 14202, 14062, 13922, 13782, 1190, nil, nil, nil, 13642, - 13222, 1174, nil, 13082, 12802, nil, 136, 138, 401, 658, - 1117, 1714, 1075, nil, nil, 26507, nil, nil, 1173, -14, - -49, nil, nil, nil, nil, 1013, nil, 1046, 12662, nil, - nil, 12242, nil, 1135, -109, 12102, 1014, nil, 1019, 29, - 30, 1063, 152, 705, 1078, 1066, 11822, 2701, 1142, 258, - 1200, 11682, nil, 1094, 226, nil, nil, nil, 4393, 2278, - 1111, 356, nil, nil, 619, 26470, nil, 26453, nil, 26269, - nil, 11542, nil, 932, nil, 1143, 407, 1148, nil, nil, - nil, nil, 48, nil, 1263, nil, nil, nil, nil, 1269, - nil, 11402, 1159, 163, 31, 194, -1, 23862, nil, 569, - nil, 26384, 26316, 23722, nil, nil, nil, -93, 632, 4675, - 4957, 26248, 269, 24541, 203, 904, 5098, nil, nil, nil, - nil, nil, nil, nil, -27, 22882, 1996, 22742, nil, 88, - nil, 2278, nil, 2983, nil, nil, 3265, nil, 2137, nil, - 3688, 22602, 22182, 21902, 21762, 154, 18122, 182, 184, nil, - 199, 274, 276, nil, 356, 341, 360, 349, 17842, nil, - nil, 1855, nil, nil, nil, 3547, 3688, nil, nil, nil, - 408, 28, nil, nil, 540, nil, 3406, 422, 466, nil, - nil, nil, nil, 452, 570, 473, 490, nil, nil, nil, - 493, 496, nil, 502, 520, nil, 522, nil, nil, 527, - 993, 549, 1194, nil, 730, nil, 11262, 739, 2560, 2419, - nil, 16, 21, 189, 441, 500, nil, 651, 4816, 9022, - nil, -80, 785, 788, 672, nil, nil, nil, nil, nil, - nil, nil, nil, 687, 677, nil, 2842, 8882, 8742, 2419, - 455, nil, nil, 25921, nil, nil, 25897, nil, 25890, nil, - nil, 722, 1178, 8602, 629, 787, 835, 3829, 734, 840, - nil, 3265, nil, nil, 51, 7342, nil, nil, nil, nil, - nil, 25839, nil, 25832, nil, 25815, nil, 25808, nil, nil, - nil, nil, 394, 1276, 754, nil, 53, nil, 877, 879, - 7202, 2137, nil, nil, 887, 183, nil, nil, nil, nil, - 25638, nil, 777, nil, nil, 779, 809, 821, 822, nil, - 823, nil, 227, nil, nil, nil, 486, 25440, nil, nil, - 860, nil, nil, nil, 1573, 54, 80, 303, 927, 118, - nil, 859, 862, 863, 865, 880, 1153, 886, 1060, 4111, - nil, nil, nil, 33, 2983, nil, nil, 2842, 2701, nil, - 25400, nil, 25393, nil, 1373, nil, 1116, nil, nil, nil, - 801, 955, 959, nil, 1044, 6222, 25263, 25127, 134, 859, - nil, nil, nil, nil, 921, 944, 372, nil, nil, nil, - 1074, 1077, 1078, 959, 968, 969, 970, nil, nil, 975, - -9, 52, 124, -8, 980, 987, nil, nil, nil, nil, - 725, nil, nil, nil, nil, 44, nil, 1034, nil ] + nil, nil, nil, 23518, nil, nil, nil, nil, 691, nil, + nil, 669, 17218, 651, nil, nil, 609, nil, 537, 368, + nil, nil, nil, 1931, nil, nil, nil, nil, nil, 2072, + 617, nil, nil, 592, 583, 501, 440, 1672, nil, nil, + nil, 534, 267, 620, nil, nil, 1408, 1276, nil, nil, + nil, 127, nil, 617, 24419, 24638, 17918, 342, 18058, 18198, + 18338, 3059, 4187, 997, 871, 606, 569, 565, 529, 1622, + 1067, 1750, 3905, 3764, 3623, 3482, 4046, 4328, 1163, 1488, + 3341, 3200, 2918, 1226, 583, nil, 1068, nil, nil, nil, + nil, nil, nil, nil, nil, 433, 410, nil, nil, 18758, + nil, nil, 18898, nil, 19038, nil, 241, nil, nil, nil, + 19178, 1161, 333, 328, nil, nil, 316, 19458, 317, 19598, + 25003, 25076, 615, 351, nil, 19738, 301, nil, 337, 19878, + 25222, 25295, 1358, 2636, 20018, 407, 368, 243, nil, nil, + 653, 201, 236, 185, nil, 626, 201, nil, 1471, nil, + 91, -69, nil, 1342, 1339, 1337, nil, nil, nil, nil, + nil, nil, nil, nil, 1320, 1008, nil, nil, 20578, nil, + nil, nil, 1409, nil, nil, nil, 1402, nil, nil, 1395, + 1931, 1420, nil, 0, 123, 1422, 1421, 1413, 1418, nil, + nil, 20998, 25587, 25660, 142, nil, 364, 307, 118, nil, + 574, nil, 1316, 21418, nil, 1322, nil, nil, nil, 21558, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 269, nil, nil, 477, nil, nil, nil, 1281, nil, + nil, 1271, nil, 5597, nil, 23656, nil, 1271, 21698, 21838, + 21978, 24784, 24930, 22118, 833, 1302, 22398, 22538, 22678, 22818, + 1289, nil, nil, nil, 23098, 23238, 1281, nil, nil, nil, + 442, 390, 801, 395, 1240, 1234, nil, 95, 1338, 167, + nil, 1255, nil, 1360, nil, nil, 1243, nil, 1288, 23378, + nil, nil, 22958, nil, 271, 22258, 1269, nil, 1273, 32, + 76, 1320, 110, 629, 1323, 1289, 21278, 21138, 1359, 195, + 351, nil, 20858, nil, nil, nil, nil, 20718, nil, nil, + 5878, nil, nil, nil, 162, 1317, 489, nil, nil, 858, + 868, nil, 25777, nil, 1603, nil, 20438, nil, 939, nil, + 1341, 500, 1346, nil, nil, nil, nil, 937, nil, 1460, + nil, nil, nil, nil, nil, 1480, nil, 20298, -45, 133, + 165, 167, 170, 2777, nil, 740, nil, 24492, 24565, 20158, + nil, nil, nil, 935, 2918, 3200, 25861, 463, 24070, 287, + 1139, 3482, nil, nil, 296, nil, nil, nil, 371, nil, + 366, 19318, 386, 481, 270, 139, 940, 2354, 18618, nil, + 524, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 18478, 17778, 17638, 17498, 346, 17358, nil, nil, 25846, + nil, 2072, nil, nil, 681, nil, 240, nil, nil, nil, + nil, 673, 39, nil, nil, nil, nil, nil, nil, nil, + 2213, nil, 695, 745, nil, nil, 764, nil, 2354, 2495, + 723, 739, 753, nil, nil, nil, 762, 770, nil, 789, + 812, nil, 814, nil, nil, 819, 944, 844, 671, nil, + 980, nil, nil, 17078, nil, 2636, 991, nil, nil, 185, + 98, 994, 403, 501, nil, 878, 3059, 16938, 523, 996, + nil, 880, 25, nil, nil, nil, nil, nil, nil, nil, + 883, nil, nil, 893, 280, nil, nil, 16518, 16378, 2213, + 903, 906, nil, 907, 909, 911, nil, 941, 929, 925, + 16238, nil, nil, nil, nil, 3764, 3905, nil, 162, 15678, + nil, nil, 961, 1070, 1068, nil, nil, 25886, nil, 25901, + nil, 730, nil, 1076, nil, nil, nil, nil, 527, 1063, + 984, nil, 191, nil, nil, 14978, 4328, nil, nil, 1133, + 413, nil, nil, 1135, nil, nil, 1055, nil, 493, nil, + nil, 25503, nil, nil, 25722, nil, 25651, nil, nil, 1045, + 14278, 718, 1123, nil, 1171, 4610, 174, 229, 573, 1150, + 171, nil, nil, nil, 734, nil, nil, nil, 1079, 1080, + 1083, 1084, 1085, 1269, 1105, 1401, 5174, nil, 221, nil, + nil, 5033, nil, 4892, 1112, nil, nil, 1115, 1117, 1119, + 1121, nil, 1129, nil, 633, 24857, nil, nil, 1257, 8118, + 25368, 25149, 160, nil, 1003, 25762, nil, nil, nil, nil, + 1285, 1149, 950, nil, nil, nil, 1271, 1272, nil, 1339, + nil, 1035, nil, 25804, nil, 25831, nil, nil, 1210, 1215, + nil, 1180, 187, 132, 222, 138, nil, 1185, 1192, nil, + nil, nil, 1199, 1204, 1205, 1212, 130, nil, 25943, nil, + nil, nil, nil, 1234, nil ] racc_action_default = [ - -1, -628, -627, -628, -2, -614, -4, -5, -628, -8, - -9, -628, -628, -628, -29, -628, -628, -628, -280, -628, - -40, -43, -616, -628, -48, -50, -51, -52, -57, -257, - -257, -257, -294, -333, -334, -69, -627, -73, -81, -83, - -628, -516, -517, -628, -628, -628, -628, -628, -616, -238, - -271, -272, -273, -274, -275, -276, -277, -278, -279, -602, - -282, -285, -627, -292, -302, -405, -628, -628, -307, -310, - -614, -628, -318, -325, -628, -335, -336, -447, -448, -449, - -450, -451, -452, -627, -455, -627, -627, -627, -627, -627, - -627, -627, -492, -498, -500, -501, -502, -503, -600, -505, - -506, -601, -508, -509, -510, -511, -512, -513, -514, -515, - -520, -521, 1059, -3, -615, -623, -624, -625, -7, -628, - -628, -628, -628, -628, -628, -17, -628, -112, -113, -114, - -115, -116, -117, -118, -119, -120, -124, -125, -126, -127, - -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, - -188, -189, -190, -191, -192, -193, -194, -22, -121, -627, - -628, -628, -627, -628, -628, -612, -613, -628, -628, -628, - -628, -628, -616, -617, -47, -628, -516, -517, -628, -280, - -628, -628, -230, -628, -627, -628, -628, -628, -628, -628, - -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, - -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, - -628, -628, -411, -414, -628, -610, -611, -58, -628, -301, - -628, -428, -431, -64, -627, -425, -65, -616, -66, -239, - -252, -627, -627, -256, -628, -262, -628, -627, -492, -593, - -616, -628, -67, -68, -614, -13, -14, -628, -71, -627, - -616, -628, -74, -77, -627, -89, -90, -628, -628, -97, - -294, -297, -616, -418, -333, -334, -337, -426, -628, -79, - -628, -85, -290, -499, -628, -215, -216, -231, -628, -627, - -284, -628, -628, -240, -620, -620, -628, -627, -303, -304, - -548, -49, -628, -628, -628, -628, -614, -628, -615, -516, - -517, -628, -628, -280, -628, -358, -359, -628, -321, -628, - -112, -113, -154, -155, -156, -172, -177, -184, -187, -328, - -628, -516, -517, -588, -589, -453, -628, -476, -628, -478, - -628, -480, -628, -628, -460, -628, -628, -466, -628, -628, - -472, -628, -628, -474, -628, -491, -493, -494, -495, -496, - -6, -626, -23, -24, -25, -26, -27, -627, -628, -19, - -20, -21, -122, -628, -30, -39, -267, -628, -628, -266, - -31, -197, -616, -247, -248, -627, -627, -603, -604, -257, - -423, -605, -606, -604, -603, -257, -422, -424, -605, -606, - -37, -205, -38, -628, -41, -42, -195, -262, -44, -45, - -46, -616, -300, -628, -628, -627, -290, -628, -628, -628, - -206, -207, -208, -209, -210, -211, -212, -213, -217, -218, - -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, - -229, -232, -233, -234, -235, -616, -627, -257, -603, -604, - -54, -59, -258, -419, -627, -627, -616, -616, -296, -253, - -628, -261, -254, -628, -259, -628, -263, -628, -598, -628, - -599, -12, -615, -16, -616, -70, -288, -86, -75, -628, - -616, -627, -628, -628, -96, -628, -499, -628, -82, -87, - -628, -628, -628, -628, -236, -628, -439, -628, -286, -618, - -241, -622, -621, -243, -622, -291, -628, -591, -620, -628, - -628, -548, -408, -587, -587, -531, -533, -533, -533, -547, - -549, -550, -551, -552, -553, -554, -555, -556, -628, -558, - -560, -562, -567, -569, -570, -572, -577, -579, -580, -582, - -583, -584, -628, -627, -349, -350, -627, -628, -628, -628, - -628, -434, -627, -628, -628, -290, -315, -107, -108, -628, - -110, -628, -280, -628, -628, -326, -548, -330, -628, -454, - -477, -482, -483, -485, -456, -479, -457, -481, -458, -459, - -628, -462, -464, -628, -465, -468, -469, -628, -470, -471, - -628, -497, -628, -18, -628, -28, -270, -628, -628, -427, - -628, -249, -251, -628, -628, -60, -245, -246, -420, -628, - -628, -62, -421, -628, -628, -299, -603, -604, -603, -604, - -616, -195, -628, -394, -395, -616, -397, -412, -53, -415, - -627, -429, -432, -244, -295, -627, -260, -264, -628, -594, - -595, -628, -596, -15, -72, -628, -78, -84, -616, -603, - -604, -627, -607, -95, -628, -80, -628, -204, -214, -616, - -627, -627, -283, -616, -620, -293, -592, -406, -627, -627, - -616, -628, -529, -530, -628, -628, -540, -628, -543, -628, - -545, -628, -360, -628, -362, -364, -371, -616, -561, -571, - -581, -585, -627, -351, -627, -308, -352, -353, -311, -628, - -314, -628, -616, -603, -604, -607, -289, -628, -107, -108, - -109, -628, -628, -627, -319, -522, -523, -628, -322, -627, - -627, -548, -628, -628, -616, -628, -627, -461, -463, -467, - -473, -475, -10, -123, -268, -628, -198, -628, -619, -627, - -33, -200, -34, -201, -61, -35, -203, -36, -202, -63, - -196, -628, -628, -628, -628, -427, -628, -587, -587, -376, - -627, -627, -627, -393, -628, -616, -399, -556, -564, -565, - -575, -627, -417, -416, -55, -627, -627, -255, -265, -597, - -76, -427, -88, -298, -627, -356, -627, -440, -627, -441, - -442, -287, -242, -628, -628, -616, -587, -568, -586, -532, - -533, -533, -559, -533, -533, -578, -533, -556, -573, -616, - -628, -369, -628, -557, -628, -354, -628, -628, -627, -627, - -313, -628, -427, -628, -107, -108, -111, -616, -627, -628, - -525, -628, -628, -628, -616, -527, -331, -590, -484, -487, - -488, -489, -490, -628, -269, -32, -199, -250, -628, -237, - -628, -374, -375, -384, -378, -386, -628, -389, -628, -391, - -396, -628, -628, -628, -563, -628, -628, -627, -628, -628, - -11, -627, -446, -357, -628, -628, -444, -409, -410, -407, - -528, -628, -536, -628, -538, -628, -541, -628, -544, -546, - -361, -363, -367, -628, -372, -305, -628, -306, -628, -628, - -628, -627, -316, -427, -628, -628, -323, -327, -329, -526, - -548, -486, -587, -566, -377, -627, -627, -627, -627, -576, - -627, -398, -616, -401, -403, -404, -574, -628, -290, -413, - -628, -430, -433, -445, -627, -516, -517, -628, -628, -280, - -443, -533, -533, -533, -533, -365, -628, -370, -628, -627, - -309, -312, -264, -627, -627, -320, -524, -627, -627, -373, - -628, -381, -628, -383, -628, -387, -628, -390, -392, -400, - -628, -289, -607, -56, -439, -627, -628, -628, -290, -628, - -534, -537, -539, -542, -628, -368, -627, -435, -436, -437, - -628, -628, -628, -627, -627, -627, -627, -402, -438, -616, - -603, -604, -607, -289, -533, -366, -355, -317, -324, -332, - -628, -379, -382, -385, -388, -427, -535, -627, -380 ] + -1, -651, -650, -651, -2, -637, -4, -5, -651, -8, + -9, -651, -651, -651, -35, -651, -651, -39, -651, -651, + -294, -50, -639, -651, -55, -60, -61, -62, -66, -271, + -271, -271, -309, -343, -344, -78, -650, -82, -90, -92, + -651, -538, -539, -651, -651, -651, -651, -230, -651, -639, + -244, -285, -286, -287, -288, -289, -290, -291, -292, -293, + -623, -296, -298, -305, -307, -317, -423, -651, -651, -57, + -57, -637, -651, -327, -334, -651, -345, -346, -348, -349, + -350, -351, -352, -353, -354, -355, -356, -357, -366, -468, + -469, -470, -471, -472, -473, -650, -476, -650, -650, -650, + -486, -650, -650, -650, -514, -520, -522, -523, -524, -525, + -621, -527, -528, -622, -530, -531, -532, -533, -534, -535, + -536, -537, -542, -543, 1095, -3, -638, -646, -647, -648, + -7, -651, -651, -651, -651, -651, -651, -23, -651, -121, + -122, -123, -124, -125, -126, -127, -128, -129, -133, -134, + -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, + -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, + -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, + -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, + -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, + -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, + -195, -196, -197, -198, -199, -200, -201, -202, -203, -204, + -28, -130, -650, -651, -651, -651, -651, -651, -650, -651, + -651, -633, -634, -651, -651, -639, -640, -54, -651, -538, + -539, -651, -294, -651, -651, -236, -651, -650, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -245, -246, -247, -248, -651, -359, -452, -431, -651, + -635, -636, -67, -651, -316, -358, -651, -445, -447, -73, + -650, -442, -74, -639, -75, -251, -266, -650, -650, -270, + -651, -276, -651, -650, -615, -651, -651, -76, -77, -637, + -17, -18, -651, -21, -22, -80, -650, -639, -651, -83, + -86, -650, -98, -99, -651, -651, -106, -309, -312, -639, + -435, -343, -344, -347, -443, -651, -88, -651, -94, -304, + -521, -651, -224, -225, -651, -237, -651, -650, -300, -639, + -650, -650, -318, -319, -570, -56, -651, -651, -651, -650, + -650, -637, -651, -638, -538, -539, -651, -651, -294, -651, + -376, -377, -651, -330, -651, -121, -122, -164, -165, -166, + -182, -187, -194, -197, -337, -651, -538, -539, -610, -611, + -474, -651, -498, -651, -500, -651, -502, -651, -651, -481, + -651, -650, -651, -651, -494, -651, -651, -496, -651, -513, + -515, -516, -517, -518, -6, -649, -29, -30, -31, -32, + -33, -10, -11, -651, -25, -26, -27, -131, -651, -36, + -38, -281, -651, -651, -280, -37, -651, -40, -651, -294, + -48, -49, -205, -256, -276, -51, -52, -41, -206, -256, + -639, -261, -262, -650, -650, -624, -625, -271, -440, -626, + -627, -625, -624, -271, -439, -441, -626, -627, -47, -214, + -53, -639, -315, -651, -651, -651, -650, -304, -651, -651, + -651, -215, -216, -217, -218, -219, -220, -221, -222, -226, + -227, -228, -229, -231, -232, -233, -234, -235, -238, -239, + -240, -241, -639, -249, -651, -453, -271, -624, -625, -64, + -68, -272, -436, -449, -452, -639, -639, -311, -267, -651, + -275, -268, -651, -273, -651, -277, -651, -618, -620, -16, + -638, -20, -639, -79, -302, -95, -84, -651, -639, -650, + -651, -651, -105, -651, -521, -651, -91, -96, -651, -651, + -651, -651, -250, -242, -651, -460, -651, -639, -299, -252, + -643, -643, -651, -651, -613, -643, -651, -424, -570, -427, + -609, -609, -553, -555, -555, -555, -569, -571, -572, -573, + -574, -575, -576, -577, -578, -651, -580, -582, -584, -589, + -591, -592, -594, -599, -601, -602, -604, -605, -606, -651, + -650, -367, -368, -650, -651, -651, -651, -651, -651, -362, + -455, -650, -651, -651, -304, -57, -116, -117, -651, -119, + -651, -294, -650, -651, -335, -548, -340, -631, -632, -651, + -475, -499, -504, -505, -507, -477, -501, -478, -503, -479, + -480, -651, -483, -485, -651, -488, -490, -491, -651, -492, + -493, -651, -519, -650, -24, -651, -34, -284, -651, -651, + -650, -651, -651, -651, -444, -651, -263, -265, -651, -651, + -69, -259, -260, -437, -651, -651, -71, -438, -314, -641, + -624, -625, -624, -625, -639, -651, -430, -650, -63, -432, + -449, -651, -450, -651, -258, -310, -650, -274, -278, -651, + -616, -617, -651, -19, -81, -651, -87, -93, -639, -624, + -625, -650, -628, -104, -651, -89, -651, -651, -223, -639, + -650, -360, -650, -297, -365, -301, -253, -645, -644, -255, + -645, -306, -308, -614, -651, -639, -651, -551, -552, -651, + -651, -562, -651, -565, -651, -567, -651, -378, -651, -380, + -382, -389, -639, -583, -593, -603, -607, -650, -369, -650, + -58, -370, -371, -322, -323, -651, -325, -651, -639, -624, + -625, -628, -303, -650, -116, -117, -118, -651, -651, -650, + -328, -544, -546, -331, -650, -650, -570, -570, -651, -639, + -651, -650, -482, -484, -651, -487, -495, -497, -651, -132, + -282, -651, -639, -624, -625, -625, -624, -257, -651, -642, + -650, -43, -208, -44, -209, -70, -45, -211, -46, -210, + -72, -651, -651, -651, -651, -444, -651, -412, -413, -639, + -415, -650, -434, -433, -651, -446, -650, -448, -269, -279, + -619, -85, -444, -97, -213, -313, -13, -15, -361, -363, + -650, -467, -461, -650, -462, -463, -643, -425, -650, -650, + -417, -639, -609, -590, -608, -554, -555, -555, -581, -555, + -555, -600, -555, -578, -595, -639, -651, -387, -651, -579, + -651, -364, -372, -651, -374, -650, -651, -59, -324, -651, + -444, -651, -116, -117, -120, -639, -650, -651, -651, -651, + -338, -639, -651, -341, -612, -506, -509, -510, -511, -512, + -651, -489, -12, -283, -444, -42, -207, -264, -651, -243, + -609, -609, -394, -650, -650, -650, -411, -651, -639, -578, + -586, -587, -597, -454, -65, -650, -650, -466, -651, -651, + -465, -254, -651, -651, -651, -426, -550, -651, -558, -651, + -560, -651, -563, -651, -566, -568, -379, -381, -385, -651, + -390, -320, -651, -375, -321, -651, -650, -326, -444, -651, + -651, -332, -336, -651, -547, -549, -548, -508, -651, -392, + -393, -402, -396, -404, -651, -407, -651, -409, -414, -651, + -651, -585, -651, -451, -650, -650, -538, -539, -651, -651, + -294, -464, -428, -429, -639, -419, -421, -422, -555, -555, + -555, -555, -383, -651, -388, -651, -650, -278, -650, -329, + -545, -650, -339, -650, -609, -588, -395, -650, -650, -650, + -650, -598, -650, -416, -596, -651, -304, -14, -460, -650, + -651, -651, -304, -418, -651, -651, -556, -559, -561, -564, + -651, -386, -650, -456, -457, -458, -651, -651, -391, -651, + -399, -651, -401, -651, -405, -651, -408, -410, -303, -628, + -459, -639, -624, -625, -628, -303, -420, -555, -384, -373, + -333, -342, -650, -650, -650, -650, -444, -557, -651, -397, + -400, -403, -406, -650, -398 ] clist = [ -'6,422,338,221,700,590,280,280,280,263,583,586,445,133,133,567,130,130', -'369,302,275,528,330,316,316,4,213,502,224,328,559,281,281,281,419,396', -'117,491,323,341,341,760,442,341,552,264,429,435,537,135,135,125,208', -'376,801,676,854,316,676,319,333,334,842,496,540,543,16,113,679,342,343', -'824,16,346,965,639,931,114,934,130,845,377,963,379,381,384,387,390,393', -'379,727,298,341,341,341,341,130,487,722,300,16,117,750,994,959,857,282', -'282,282,679,357,667,29,735,738,267,273,276,29,671,672,118,402,403,404', -'405,868,620,804,615,623,617,347,29,621,378,335,621,603,604,605,394,29', -'29,29,615,29,871,802,997,359,759,712,713,606,278,292,293,763,987,950', -'336,803,634,907,805,670,962,550,707,340,502,408,835,415,486,29,29,16', -'811,29,494,965,452,815,495,280,16,816,1027,1037,741,448,449,450,451', -'676,676,841,828,843,914,375,430,380,383,1,679,959,418,423,386,1025,389', -'931,414,420,418,392,439,686,878,440,444,29,765,567,400,695,29,29,29', -'29,29,453,766,395,9,498,869,842,559,280,9,660,849,356,739,280,207,1045', -'280,840,722,866,710,851,507,910,124,493,515,837,953,608,339,2,281,901', -'546,354,509,423,16,842,754,281,373,706,501,501,567,955,669,845,377,429', -'435,370,316,329,331,703,525,337,814,559,344,16,858,345,859,529,747,538', -',316,275,,,688,,526,795,,,522,341,341,29,29,29,29,,518,117,,29,29,29', -'29,29,29,532,,547,,,,,807,821,282,316,29,316,,587,588,9,1046,282,,842', -'298,691,511,,406,298,593,16,514,16,1028,691,512,520,16,,,768,,,768,', -'956,117,29,957,722,742,722,,29,998,820,29,607,942,567,492,567,16,301', -'862,891,892,,,497,,808,640,981,6,,29,589,29,133,548,655,130,29,784,', -',,647,817,789,,501,501,652,691,646,,280,632,,,,832,920,567,,,29,,29', -'676,430,,,135,445,633,,,559,679,423,29,29,,673,674,439,,,985,722,,874', -'662,,,,,16,,,,684,,647,872,873,,687,1038,1033,663,646,,,,,,,663,663', -',280,,,,,,529,,,,316,,,699,529,,,430,316,,645,722,29,722,423,943,651', -'430,,817,829,,,439,941,,,513,,,,,,439,,,,867,,,,,,,,,999,,,722,,716', -'718,720,,,,,,,29,280,413,807,,,807,,668,675,,16,758,,,,764,974,430,', -'691,,944,,,423,,301,,,,567,,,439,,,,,989,,,813,,,,,,,,704,,,736,736', -',,29,,,567,,808,,,808,29,,808,755,808,133,,,130,559,640,9,,,29,806,16', -'780,782,16,1029,812,,785,787,,301,444,,823,,301,,831,,,529,663,640,', -'316,135,501,773,807,,,822,,,647,316,,652,,,,853,646,,806,1055,29,,,29', -',825,830,418,,29,,,,,876,,,,,,,29,779,1031,1032,29,,341,,,640,,877,', -'280,,,825,,825,,,,,808,,808,861,808,430,808,,,,683,,,863,423,,29,29', -',439,,,29,29,,,29,,,,,130,,,,16,16,,,,501,,,,,885,19,,,806,808,870,19', -',,,875,316,,919,,894,894,894,,,,1039,,,,,,930,,,,,,,19,29,29,,,912,16', -'16,,916,,,341,16,,,,,949,,,,,922,924,341,926,928,,929,,640,691,,,355', -',,,,29,,936,,798,,29,,,,,,29,29,,945,,,16,29,,,16,16,,,,,,,29,,316,16', -',,,736,19,,800,,,,316,946,,19,,,836,,,,,,,,,,,,,,29,16,16,,29,29,,,17', -',,16,,,17,29,,,,,732,,1009,734,,,,,844,225,846,,894,894,894,894,,894', -'225,225,225,,17,307,307,29,,29,29,,16,439,,,16,996,,29,29,,1020,1021', -'1022,1023,,1016,,,280,19,825,,225,225,,,225,351,443,,41,,,,16,430,41', -',,,,,423,,19,,29,,,640,29,439,,825,,,,,,,894,894,894,894,41,305,305', -'16,,,17,,,1056,,225,225,225,225,17,29,799,16,,894,,,16,,,16,16,,,,833', -'834,,,349,,,371,,,,,19,,19,,,,29,19,952,,,798,,,798,,798,,,,838,29,', -'838,,,29,,,29,29,,19,,,41,,,,,,,,,41,,883,29,,,958,,960,,,,,,17,225', -'225,225,,,,,225,225,225,225,225,225,,,,982,,983,,984,,,,17,,,,895,897', -'899,,906,,,,908,909,,,,,,,,,,913,,,,19,,,,,,,225,798,,798,,798,225,798', -',225,,42,,41,,,,42,,,,938,939,,,,,,,17,,17,,,,307,17,1034,41,1035,,1036', -',,,42,306,306,,,,798,307,,,,1044,,,,,17,,225,,,,,,,970,,,,973,,225,225', -',,350,,838,372,,799,,1057,799,601,799,601,,,,,,,19,,,41,,41,993,,,305', -'41,,,,18,,,,,,18,,,,,42,305,1001,1003,1005,1007,,1008,,42,41,416,,,1014', -',17,,,447,,,,18,309,309,,,,1026,,,,,1030,,,,371,,371,,,,,,19,,,19,,', -',,,,,,353,,,,,,225,,,,,799,,799,,799,,799,,,,,1051,1052,1053,1054,,504', -',506,41,508,,,510,,,42,,,,,,18,,,1058,,,,,,18,,,,,,443,,,799,42,17,', -',,,,,307,,225,,,,,,307,,549,,,,,,225,,,,,,,,,,,,,,,,,,,,,,,,,,,19,19', -',,,,,,,,,,42,,42,,,,306,42,,17,41,,17,18,,,,305,225,,,,,306,,305,,,', -',225,,42,,225,636,,,18,19,19,,,,,,19,,,,,,,,,,,,,,372,,372,,,,,,,225', -'225,,,,,225,225,,,225,,41,,,41,,,,,,,19,,,,19,19,,,,,18,,18,,,19,309', -'18,,42,307,,,,,,,677,,,549,307,680,309,,,682,,,,,,18,17,17,,,19,19,', -',,,,,,,19,,,,,,,,,,,677,,602,549,602,,,,,,,,,,225,,,,,,225,,,,305,,17', -'17,19,,728,,19,17,,305,980,,,,,,,,225,,,41,41,,,,18,,,,42,,,,,,19,306', -',,,,,,,306,,,,904,,,17,,,,17,17,,,,,,,,,,17,,19,774,,41,41,677,549,', -',,41,,,,,19,,,,,19,,,19,19,,,,225,,17,17,42,,,42,,,,,17,225,818,,,819', -',,,,,,371,,,41,,,,41,41,,18,,,827,,,,309,41,,,,,966,,309,,17,,,,17,', -'848,,977,,,,,,,,,,,,,,,41,41,,447,,,,,,,41,17,,,,,,,,,,,,,,,,,,,,18', -'306,,18,,,884,,,,,,306,17,371,,,,41,,,,41,,42,42,975,,17,,,,,17,,,17', -'17,,,,,,,,,,,,,,,41,,225,,,,,,,,,,,,,,,,,,,,,42,42,,,,,,42,,,41,,,,', -',,,,,,,,,,41,,309,,,41,,,41,41,,,,309,,,,,549,,,,,,372,18,18,42,,,,42', -'42,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,992,,,42,42,18,18,,,,,882', -'18,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,372,,,,42,,602,,42,18,232,,976', -'18,18,,,,,279,279,279,,,18,,,,,,,,325,326,327,,,,42,,,,,,,,,,,279,,', -',,,,18,18,,,,,,,,,18,,,,,42,,,,,,,,,,,,,,,42,,,,,42,,,42,42,,,,,,602', -',,,18,,,,18,,,,979,,,,,,,,,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,18,,,,,,,,,,,,,,,18,,,,,18,,,18,18,279,421,279,,,,,441,446', -',,,,,,,,,,,,,,232,,,460,461,462,463,464,465,466,467,468,469,470,471', -'472,473,474,475,476,477,478,479,480,481,482,483,484,485,,,,,,,279,,', -',,,279,,,279,,,,,,,279,,279,,279,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,534,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,279,,441,661,421,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279', -',,279,,279,,,,279,,,,,,,,,,,,279,,,,,,,,,697,698,,,,,,,,,,279,,,279', -',,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,776,,,279,279,781,783,,,,,786,788', -',,661,790,,,,,,,,,,,,,,,,,,,,,,,,279,,,279,,,,,,,,,,,,,,,,,,,,279,,', -',,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,279,,,,,,,,,', -',,,,,,,,,,,,279,,886,,,,,,,,,,,,,,781,783,788,786,,889,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,279,886,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,279' ] - racc_goto_table = arr = ::Array.new(3110, nil) +'6,608,234,384,278,296,296,296,229,356,357,4,291,361,521,352,280,29,126', +'318,664,137,221,29,556,142,142,737,738,346,720,410,297,297,297,319,129', +'569,29,600,603,450,145,145,9,359,360,29,29,29,9,29,700,447,355,355,510', +'546,355,468,147,147,282,289,292,457,463,434,435,697,333,333,697,416', +'417,418,419,29,584,125,785,237,29,29,880,886,29,847,641,142,298,298', +'298,392,340,394,396,399,576,404,407,394,129,515,348,333,726,729,636', +'336,638,733,391,642,861,506,448,142,355,355,355,355,469,636,741,743', +'745,504,871,691,317,315,924,957,752,776,294,307,308,1031,867,29,869', +'130,625,362,29,29,29,29,29,960,441,868,831,441,393,973,1005,1007,788', +'441,408,622,976,624,760,926,9,423,521,430,371,928,220,703,1004,420,567', +'857,354,734,936,513,514,836,687,1053,767,853,938,390,395,398,846,644', +'401,700,403,406,905,296,790,791,409,428,897,653,927,136,866,458,445', +'446,1031,421,697,697,863,1025,629,470,471,433,433,344,451,474,2,925', +'318,562,1014,655,689,388,563,29,29,29,29,29,29,29,467,353,765,690,29', +'29,29,735,1,369,825,780,296,706,1076,1007,700,414,29,296,279,715,296', +'887,512,385,626,347,957,349,557,350,351,372,842,896,623,429,440,297', +'1027,440,1051,898,451,684,1021,440,584,297,894,520,520,875,29,318,604', +'392,374,935,318,29,834,989,29,543,457,463,576,540,784,,291,,,946,526', +',530,1078,,,,29,,,550,29,,871,794,547,29,,890,,129,298,605,606,1054', +'355,,1008,559,564,560,298,708,333,531,612,793,,,642,,1037,29,,693,,868', +'469,,448,333,,914,29,29,29,711,979,980,1079,,1028,,529,1029,544,711', +'511,,,,536,129,,868,,,516,,645,,,941,,,333,,333,561,565,532,315,838', +',,538,315,948,950,,952,954,,955,768,841,,661,,,665,1023,,654,,607,,142', +',672,,,,,815,677,,700,711,296,820,520,520,,145,671,458,,,1082,,899,900', +',584,968,584,697,723,901,902,,147,802,451,,,,868,,,1058,685,,,,,747', +'672,467,670,29,,,811,813,676,457,463,,816,818,,,671,,,,,793,584,584', +'296,1070,,,,763,764,,766,,458,,,,838,,,,576,576,458,,,547,943,451,,688', +'472,719,,547,,29,,,,,,,,929,29,467,,812,814,1046,1047,1048,1049,817', +'819,467,854,,862,29,333,,966,969,,,,696,333,,,,,757,296,,759,441,,,', +'773,895,,458,,441,441,517,,,,441,441,,,844,,,451,783,,,,711,29,789,', +'29,,782,995,533,,,,29,467,1087,,,,,296,915,761,,,29,833,,1086,,458,29', +'1016,,,,,747,6,,877,558,,,1055,451,,,921,798,,665,799,,832,29,142,,584', +',,29,29,467,888,,,,,,29,29,827,145,,665,29,29,,,672,520,9,677,916,1056', +',1057,,,547,147,929,,,929,671,812,814,819,817,843,860,903,440,851,,855', +',433,,810,,440,440,,,,,440,440,,,441,,333,,,,,864,,,864,,665,333,,,296', +',,884,891,884,,,458,,,,,,,889,,,,,,,910,,678,451,747,,747,,665,929,', +'856,,,29,,,467,961,,29,,,,964,29,29,,142,967,,,29,916,520,860,1024,972', +',921,933,,921,,921,,694,695,,29,,962,,,,,,,,937,827,,922,704,,970,,942', +',707,,,29,,,,,940,1071,,,,930,,,,1012,747,725,,,29,440,,963,,355,,,29', +'29,665,711,,431,444,,1019,,,355,1022,,,,,,921,,921,,921,,921,29,,29', +',,,,,,,860,,19,29,29,,,747,19,747,993,994,921,982,982,982,,,,,,971,', +'238,,975,,,,,,,238,238,238,,19,324,324,,,1018,29,29,747,,,523,,525,', +',527,528,,333,,,,,1080,1081,19,,333,,,238,238,,1038,238,366,29,,,1043', +'864,,1040,922,,,922,851,922,,,,,,1052,,1020,,,,930,566,,930,,29,930', +'296,930,,,884,,,,,,458,333,845,982,982,982,982,,982,29,,,19,,29,451', +'29,238,238,238,238,19,,,,,,467,884,665,,,29,467,,879,,,,,,,,,922,,922', +',922,,922,,,,,,,32,982,982,982,982,,32,930,657,930,,930,982,930,,904', +'922,,,,,32,,,,,,,,,32,32,32,,32,,930,,,,,,,,,,,,870,,872,19,238,438', +'238,238,438,238,,,32,,438,238,238,32,32,,,32,,,,,,,19,983,985,987,,', +',,,,,945,,,,,,,,698,,,566,,701,956,,,,,,,,,,,238,,,,,,,238,,,238,,32', +',,974,,32,32,32,32,32,,923,,,,,,19,,,,19,,,,324,19,,,,,,,,,,,,,,753', +',324,,,,,,,,,,19,,,,,1060,1062,1064,1066,,1067,238,19,19,,,,,,,,,,,', +'620,,620,,,,,,,,,,,,,,,,,32,32,32,32,32,32,32,,,,,32,32,32,800,,1089', +'1090,1091,1092,,,698,566,,32,,1094,,,,,,1009,,1010,,1011,,,,,,,,18,', +',,,,18,,,,839,,,840,,,32,,,,,,,32,,1030,32,1032,,,,,,852,18,,,,698,', +'238,566,,,,32,,,,32,,,,,32,,,874,,,18,41,,,,,,41,,,,,,,,,,,444,,32,', +',,,,1077,,,,,32,32,32,19,41,322,322,,,1083,324,1084,238,1085,,,,,324', +',,913,,,,,,238,,,41,,,18,,,,,1093,,364,,18,386,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,19,,,19,,,,,,,,238,,,,,,,,,,41,,238,,,,,,238,41,,,,,,,,,,,,', +',,32,,,,,,,,19,,,18,,18,438,238,18,,,566,,,18,438,438,,,,,438,438,,', +',,,18,,,,,,,,,,,,,,,,,,32,,,,,,324,,,32,,,,1017,,,,324,41,,,,,,32,,', +',,,,,,,,,,,,,,,,41,,,,18,,,,18,,,,16,18,,,,,16,,,,,,,,,32,,,32,19,,', +',,,238,32,18,,,19,19,,,16,,,19,32,18,18,,,,32,,,,,,,,,41,438,,,41,,', +'16,322,41,,,,,,32,,370,,,,32,32,,19,322,,,,,32,32,,,,41,32,32,,,,,,19', +',,,41,41,,,19,19,,,,,,,,386,,386,,,,,,,,,16,,,,,238,,19,,16,,,,,,,,', +'19,238,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,991,,,,,19,19,,,998,,,32,,,,', +',32,,,,,32,32,,,,,,32,,,,18,,19,,,,,,,,16,,436,32,,436,,,,,,436,,,,', +'1034,,,,,19,,,,16,32,,,,,,,,,,,,,,,,19,,,32,,19,,19,,41,,32,32,,,,322', +',18,,,18,,238,322,,,,,,,,,,,,32,,32,,,,,,,,,,16,32,32,,16,,,,,16,,,', +',,42,,,,,,42,,18,,,,,,18,,41,,,41,16,,,18,18,32,32,,,18,18,,16,16,42', +'323,323,,,,,,,,,,,,,,,,,,,,32,,,,42,,,,,,,,,41,365,,,387,,,,,,,,,,,', +'32,,,,,,,,,,,,,,,,,,,,,32,,,,,32,,32,,,,,,,,322,,,42,,,,18,32,,,322', +'42,,,,,,18,18,,,,,,18,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,,,,,,18,,', +'41,,,,,,,,,,,41,41,,16,,18,,41,,,,,,18,18,,,,,,42,,,,,,,,,,,,,,,,,,', +',18,,,,,42,,41,,,,18,,,,,,,,,,,,,,,41,,,,,,,16,41,41,16,,,,,,,,,,,,', +',18,18,,,,,,,,,,41,,,,,,,,,42,,41,,42,,,,323,42,,18,,,,,16,,,,,,436', +',,323,,,,,,436,436,,,42,386,436,436,,18,41,41,,,996,,42,42,,20,,,,,', +'20,,,,387,18,387,,,,18,,18,,,,41,,,,,,,,,,,,20,326,326,,,,,,,,,,386', +',,,,41,,,,,,,,,20,,,,,,,,,,368,,41,,,,,41,,41,,,,,,,16,,,,,,,,,,,16', +'16,,,,,,16,,,,,,,,,,,,,,,,,436,,,20,,,,,,,,,20,,,,,,,,,,,16,,,,,,,,', +',,,,,,,,,,16,,,,,42,,,16,16,,,323,,,,,,,,323,,,,,,,,,,,,,,,16,,,,,,', +',,,,16,,,,,,,,,,,20,,439,,,439,,,,,,439,,,,,,,42,,,42,,,,20,,,16,16', +',,1001,,,,,,,,,,,,,,,,,,,,,,,,,,,16,,,,,,,,,,,,42,,,,,,,,,,,,,,,,,16', +',20,,,,20,,,,326,20,,,,,,,,,,16,,,,,16,326,16,,,,,,,323,,20,,,,,,,,', +'323,,,20,20,,,,,,,,,,,,621,,621,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,42,,,,,,,,,,,42,42,,,,,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'42,,,,,,,,,,,,,,,,,,,42,,245,,,,,,42,42,,295,295,295,,,,,,,,,,,342,343', +',345,,,,,,,,42,,,,,20,,,,,,42,326,,,,,,,,326,,,,,,,,,,,,,,,,,,,,,,,', +',387,,,,,42,42,,,997,,,,,,,,,,,,,,,,,,,,,20,,,20,,,42,,,,,,,,,,,,,,', +',,,,,,,,,387,,,,,42,,,,,,,,,,,,,,,,,,20,,,42,,,439,,42,,42,,,,,439,439', +',,,,439,439,,,,,,,,,,,,,,,,,295,443,,,449,295,,,,,449,,,326,,,,,,,,', +',245,326,,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495', +'496,497,498,499,500,501,502,,,,,503,,,,,,,,295,,,,,,,295,,,295,,,,,', +',295,,295,,20,295,295,,,,,,,,,20,20,,,,,909,20,,,,,,,,,,,,,,,,,439,', +',,,552,,553,,,,295,295,,,,,,,,,,,20,,,,,,,,,,,,,,,,,,,20,,,,,,,,20,20', +',,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,20,,,,,295,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,621,,,,,20,20,,,1000,,,,,,295,,449,449,449,,,,,,,,,,,,,,,,', +'20,,,,,,,,,,,,,,,,,,,,,,295,,621,295,,295,,20,,,,,,,,,,,,,295,,,,,,', +',20,,718,,,20,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,,,,,,', +',,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,449,295', +',,807,,,295,295,449,449,,,,,449,449,,,,,,,,,,,,,,,,,,,,,,,,295,,,295', +',,,,,,,,,,,,,,449,,,,,295,,,,,295,,,295,,,,,,,,,,,,,,,,295,,,,,,,,,', +',,,,,,,,,,,295,,,,,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,449,,,', +',,,,,,,,,449,449,449,449,,919,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,449,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295' ] + racc_goto_table = arr = ::Array.new(3854, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2180,87 +2190,103 @@ end clist = [ -'6,25,89,34,13,95,36,36,36,155,92,92,20,64,64,189,61,61,60,53,74,55,51', -'68,68,2,27,76,22,34,185,71,71,71,30,60,98,42,67,32,32,99,30,32,154,39', -'40,40,10,65,65,17,17,171,144,77,93,68,77,54,6,71,190,25,72,72,23,5,200', -'19,19,14,23,19,150,26,132,8,135,61,195,6,149,6,6,6,6,6,6,6,134,49,32', -'32,32,32,61,40,133,50,23,98,58,110,196,14,73,73,73,200,111,43,44,94', -'94,41,41,41,44,43,43,7,19,19,19,19,112,175,147,176,175,176,5,44,176', -'172,73,176,59,113,59,172,44,44,44,176,44,114,145,115,116,117,139,139', -'118,48,48,48,119,135,120,70,136,66,46,142,45,148,151,152,153,76,33,147', -'31,156,44,44,23,157,44,160,150,51,161,162,36,23,163,164,149,165,32,32', -'32,32,77,77,145,166,145,167,170,74,173,174,1,200,196,71,6,177,135,178', -'132,22,22,71,179,61,55,180,22,22,44,181,189,7,55,44,44,44,44,44,27,182', -'183,9,51,184,190,185,36,9,25,134,21,95,36,18,135,36,188,133,58,154,133', -'171,15,11,74,51,192,193,199,91,3,71,147,88,96,34,6,23,190,97,71,87,72', -'6,6,189,144,75,195,6,40,40,100,68,101,102,103,34,104,43,185,105,23,106', -'107,108,53,109,32,,68,74,,,25,,67,26,,,27,32,32,44,44,44,44,,54,98,', -'44,44,44,44,44,44,27,,6,,,,,189,26,73,68,44,68,,19,19,9,93,73,,190,49', -'40,5,,9,49,27,23,50,23,14,40,8,50,23,,,176,,,176,,145,98,44,145,133', -'25,133,,44,99,55,44,39,94,189,48,189,23,12,26,139,139,,,48,,191,34,145', -'6,,44,5,44,64,73,51,61,44,42,,,,74,76,42,,6,6,74,40,6,,36,2,,,,72,139', -'189,,,44,,44,77,74,,,65,20,17,,,185,200,6,44,44,,51,51,61,,,133,133', -',154,34,,,,,23,,,,51,,74,10,10,,51,13,145,6,6,,,,,,,6,6,,36,,,,,,53', -',,,68,,,32,53,,,74,68,,41,133,44,133,6,26,41,74,,76,30,,,61,92,,,9,', -',,,,61,,,,25,,,,,,,,,139,,,133,,187,187,187,,,,,,,44,36,12,189,,,189', -',41,73,,23,32,,,,32,92,74,,40,,10,,,6,,12,,,,189,,,61,,,,,92,,,89,,', -',,,,,73,,,98,98,,,44,,,189,,191,,,191,44,,191,98,191,64,,,61,185,34', -'9,,,44,34,23,22,22,23,95,155,,22,22,,12,22,,51,,12,,51,,,53,6,34,,68', -'65,6,17,189,,,53,,,74,68,,74,,,,51,6,,34,26,44,,,44,,6,6,71,,44,,,,', -'60,,,,,,,44,73,10,10,44,,32,,,34,,51,,36,,,6,,6,,,,,191,,191,71,191', -'74,191,,,,9,,,19,6,,44,44,,61,,,44,44,,,44,,,,,61,,,,23,23,,,,6,,,,', -'22,29,,,34,191,98,29,,,,98,68,,51,,6,6,6,,,,25,,,,,,51,,,,,,,29,44,44', -',,6,23,23,,6,,,32,23,,,,,51,,,,,187,187,32,187,187,,187,,34,40,,,29', -',,,,44,,19,,138,,44,,,,,,44,44,,19,,,23,44,,,23,23,,,,,,,44,,68,23,', -',,98,29,,143,,,,68,98,,29,,,138,,,,,,,,,,,,,,44,23,23,,44,44,,,24,,', -'23,,,24,44,,,,,12,,34,12,,,,,143,24,143,,6,6,6,6,,6,24,24,24,,24,24', -'24,44,,44,44,,23,61,,,23,98,,44,44,,187,187,187,187,,27,,,36,29,6,,24', -'24,,,24,24,29,,56,,,,23,74,56,,,,,,6,,29,,44,,,34,44,61,,6,,,,,,,6,6', -'6,6,56,56,56,23,,,24,,,187,,24,24,24,24,24,44,140,23,,6,,,23,,,23,23', -',,,12,12,,,56,,,56,,,,,29,,29,,,,44,29,138,,,138,,,138,,138,,,,140,44', -',140,,,44,,,44,44,,29,,,56,,,,,,,,,56,,12,44,,,143,,143,,,,,,24,24,24', -'24,,,,,24,24,24,24,24,24,,,,143,,143,,143,,,,24,,,,141,141,141,,12,', -',,12,12,,,,,,,,,,12,,,,29,,,,,,,24,138,,138,,138,24,138,,24,,57,,56', -',,,57,,,,12,12,,,,,,,24,,24,,,,24,24,143,56,143,,143,,,,57,57,57,,,', -'138,24,,,,143,,,,,24,,24,,,,,,,12,,,,12,,24,24,,,57,,140,57,,140,,143', -'140,24,140,24,,,,,,,29,,,56,,56,12,,,56,56,,,,28,,,,,,28,,,,,57,56,141', -'141,141,141,,141,,57,56,69,,,12,,24,,,69,,,,28,28,28,,,,12,,,,,12,,', -',56,,56,,,,,,29,,,29,,,,,,,,,28,,,,,,24,,,,,140,,140,,140,,140,,,,,141', -'141,141,141,,69,,69,56,69,,,69,,,57,,,,,,28,,,141,,,,,,28,,,,,,29,,', -'140,57,24,,,,,,,24,,24,,,,,,24,,69,,,,,,24,,,,,,,,,,,,,,,,,,,,,,,,,', -',29,29,,,,,,,,,,,57,,57,,,,57,57,,24,56,,24,28,,,,56,24,,,,,57,,56,', -',,,24,,57,,24,69,,,28,29,29,,,,,,29,,,,,,,,,,,,,,57,,57,,,,,,,24,24', -',,,,24,24,,,24,,56,,,56,,,,,,,29,,,,29,29,,,,,28,,28,,,29,28,28,,57', -'24,,,,,,,69,,,69,24,69,28,,,69,,,,,,28,24,24,,,29,29,,,,,,,,,29,,,,', -',,,,,,69,,28,69,28,,,,,,,,,,24,,,,,,24,,,,56,,24,24,29,,69,,29,24,,56', -'29,,,,,,,,24,,,56,56,,,,28,,,,57,,,,,,29,57,,,,,,,,57,,,,24,,,24,,,', -'24,24,,,,,,,,,,24,,29,69,,56,56,69,69,,,,56,,,,,29,,,,,29,,,29,29,,', -',24,,24,24,57,,,57,,,,,24,24,69,,,69,,,,,,,56,,,56,,,,56,56,,28,,,69', -',,,28,56,,,,,24,,28,,24,,,,24,,69,,24,,,,,,,,,,,,,,,56,56,,69,,,,,,', -'56,24,,,,,,,,,,,,,,,,,,,,28,57,,28,,,69,,,,,,57,24,56,,,,56,,,,56,,57', -'57,56,,24,,,,,24,,,24,24,,,,,,,,,,,,,,,56,,24,,,,,,,,,,,,,,,,,,,,,57', -'57,,,,,,57,,,56,,,,,,,,,,,,,,,56,,28,,,56,,,56,56,,,,28,,,,,69,,,,,', -'57,28,28,57,,,,57,57,,,,,,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,69,,,57', -'57,28,28,,,,,28,28,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,,,,57,,28', -',57,28,35,,57,28,28,,,,,35,35,35,,,28,,,,,,,,35,35,35,,,,57,,,,,,,,', -',,35,,,,,,,28,28,,,,,,,,,28,,,,,57,,,,,,,,,,,,,,,57,,,,,57,,,57,57,', -',,,,28,,,,28,,,,28,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,28,,,,,28,,,28,28,35,35,35,,,,,35', -'35,,,,,,,,,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', -'35,35,35,35,35,35,35,35,35,35,,,,,,,35,,,,,,35,,,35,,,,,,,35,,35,,35', -',,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,35,35,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,,,35,,,,,,,,,,,,35,,,,,,,,,35,35', -',,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,35,35,35,35,,,,', -'35,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,35,', -',,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,35,,,,,,,,,,,', -',,,,,,,,,,35,,35,,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] - racc_goto_check = arr = ::Array.new(3110, nil) +'6,115,39,69,173,45,45,45,37,23,23,2,87,23,89,104,37,53,8,14,36,21,21', +'53,12,70,70,155,155,39,15,69,84,84,84,62,120,172,53,108,108,35,73,73', +'9,41,41,53,53,53,9,53,221,32,30,30,51,64,30,32,74,74,50,50,50,49,49', +'28,28,90,79,79,90,23,23,23,23,53,210,5,123,26,53,53,109,111,53,17,194', +'70,86,86,86,6,77,6,6,6,205,6,6,6,120,35,9,79,85,85,195,63,195,85,190', +'195,164,49,76,70,30,30,30,30,76,195,208,208,208,174,216,52,59,58,160', +'148,150,67,57,57,57,217,161,53,161,7,138,5,53,53,53,53,53,151,24,211', +'162,24,191,139,166,167,140,24,191,68,141,68,42,152,9,31,89,29,25,158', +'22,20,165,9,168,169,170,171,18,177,178,180,182,183,184,185,186,189,192', +'193,16,196,197,221,198,199,200,45,201,202,203,14,204,13,164,11,209,87', +'30,30,217,10,90,90,213,214,220,30,30,84,84,80,6,37,3,161,14,83,151,75', +'88,100,103,53,53,53,53,53,53,53,70,106,115,54,53,53,53,172,1,117,36', +'119,45,64,166,167,221,7,53,45,48,64,45,44,87,124,125,126,148,127,128', +'129,130,131,36,132,133,26,26,84,160,26,151,134,6,35,135,26,210,84,67', +'6,6,150,53,14,23,6,136,162,14,53,52,164,53,39,49,49,205,37,137,,87,', +',155,190,,8,151,,,,53,,,37,53,,216,194,62,53,,36,,120,86,14,14,111,30', +',161,6,6,84,86,35,79,9,37,195,,,195,,17,53,,174,,211,76,,76,79,,36,53', +'53,53,49,155,155,109,,161,,5,161,77,49,57,,,,63,120,,211,,,57,,6,,,85', +',,79,,79,86,86,59,58,89,,,59,58,208,208,,208,208,,208,35,64,,37,,,39', +'123,,21,,5,,70,,87,,,,,51,87,,221,49,45,51,6,6,,73,6,87,,,161,,12,12', +',210,36,210,90,102,172,172,,74,35,6,,,,211,,,155,39,,,,,149,87,70,50', +'53,,,32,32,50,49,49,,32,32,,,6,,,,,195,210,210,45,15,,,,102,102,,102', +',87,,,,89,,,,205,205,87,,,62,12,6,,50,60,30,,62,,53,,,,,,,,210,53,70', +',76,76,208,208,208,208,76,76,70,28,,154,53,79,,108,12,,,,86,79,,,,,14', +'45,,14,24,,,,41,35,,87,,24,24,60,,,,24,24,,,76,,,6,30,,,,49,53,30,,53', +',6,108,60,,,,53,70,208,,,,,45,32,120,,,53,104,,36,,87,53,108,,,,,149', +'6,,149,60,,,115,6,,,154,2,,39,21,,173,53,70,,210,,,53,53,70,102,,,,', +',53,53,6,73,,39,53,53,,,87,6,9,87,76,12,,12,,,62,74,210,,,210,6,76,76', +'76,76,62,39,69,26,6,,6,,84,,86,,26,26,,,,,26,26,,,24,,79,,,,,156,,,156', +',39,79,,,45,,,6,14,6,,,87,,,,,,,84,,,,,,,14,,60,6,149,,149,,39,210,', +'86,,,53,,,70,102,,53,,,,102,53,53,,70,102,,,53,76,6,39,154,102,,154', +'14,,154,,154,,60,60,,53,,23,,,,,,,,14,6,,156,60,,23,,14,,60,,,53,,,', +',6,35,,,,212,,,,149,149,60,,,53,26,,14,,30,,,53,53,39,49,,82,82,,102', +',,30,102,,,,,,154,,154,,154,,154,53,,53,,,,,,,,39,,34,53,53,,,149,34', +'149,14,14,154,6,6,6,,,,,,120,,34,,120,,,,,,,34,34,34,,34,34,34,,,14', +'53,53,149,,,82,,82,,,82,82,,79,,,,,102,102,34,,79,,,34,34,,14,34,34', +'53,,,39,156,,37,156,,,156,6,156,,,,,,14,,120,,,,212,82,,212,,53,212', +'45,212,,,6,,,,,,87,79,60,6,6,6,6,,6,53,,,34,,53,6,53,34,34,34,34,34', +',,,,,70,6,39,,,53,70,,60,,,,,,,,,156,,156,,156,,156,,,,,,,56,6,6,6,6', +',56,212,82,212,,212,6,212,,60,156,,,,,56,,,,,,,,,56,56,56,,56,,212,', +',,,,,,,,,,159,,159,34,34,34,34,34,34,34,,,56,,34,34,34,56,56,,,56,,', +',,,,34,157,157,157,,,,,,,,60,,,,,,,,82,,,82,,82,60,,,,,,,,,,,34,,,,', +',,34,,,34,,56,,,60,,56,56,56,56,56,,159,,,,,,34,,,,34,,,,34,34,,,,,', +',,,,,,,,82,,34,,,,,,,,,,34,,,,,157,157,157,157,,157,34,34,34,,,,,,,', +',,,,34,,34,,,,,,,,,,,,,,,,,56,56,56,56,56,56,56,,,,,56,56,56,82,,157', +'157,157,157,,,82,82,,56,,157,,,,,,159,,159,,159,,,,,,,,33,,,,,,33,,', +',82,,,82,,,56,,,,,,,56,,159,56,159,,,,,,82,33,,,,82,,34,82,,,,56,,,', +'56,,,,,56,,,82,,,33,65,,,,,,65,,,,,,,,,,,82,,56,,,,,,159,,,,,56,56,56', +'34,65,65,65,,,159,34,159,34,159,,,,,34,,,82,,,,,,34,,,65,,,33,,,,,159', +',65,,33,65,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,,34,,,,,,,,34,,,,,,,,,,65', +',34,,,,,,34,65,,,,,,,,,,,,,,,56,,,,,,,,34,,,33,,33,34,34,33,,,82,,,33', +'34,34,,,,,34,34,,,,,,33,,,,,,,,,,,,,,,,,,56,,,,,,34,,,56,,,,82,,,,34', +'65,,,,,,56,,,,,,,,,,,,,,,,,,,65,,,,33,,,,33,,,,27,33,,,,,27,,,,,,,,', +'56,,,56,34,,,,,,34,56,33,,,34,34,,,27,,,34,56,33,33,,,,56,,,,,,,,,65', +'34,,,65,,,27,65,65,,,,,,56,,27,,,,56,56,,34,65,,,,,56,56,,,,65,56,56', +',,,,,34,,,,65,65,,,34,34,,,,,,,,65,,65,,,,,,,,,27,,,,,34,,34,,27,,,', +',,,,,34,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,34,34,,,34,,,56,,', +',,,56,,,,,56,56,,,,,,56,,,,33,,34,,,,,,,,27,,27,56,,27,,,,,,27,,,,,34', +',,,,34,,,,27,56,,,,,,,,,,,,,,,,34,,,56,,34,,34,,65,,56,56,,,,65,,33', +',,33,,34,65,,,,,,,,,,,,56,,56,,,,,,,,,,27,56,56,,27,,,,,27,,,,,,66,', +',,,,66,,33,,,,,,33,,65,,,65,27,,,33,33,56,56,,,33,33,,27,27,66,66,66', +',,,,,,,,,,,,,,,,,,,56,,,,66,,,,,,,,,65,66,,,66,,,,,,,,,,,,56,,,,,,,', +',,,,,,,,,,,,,56,,,,,56,,56,,,,,,,,65,,,66,,,,33,56,,,65,66,,,,,,33,33', +',,,,,33,,,,,,,,,,,,,,,,,33,,,,,,,,,,,,,,,,,,,,,,,33,,,65,,,,,,,,,,,65', +'65,,27,,33,,65,,,,,,33,33,,,,,,66,,,,,,,,,,,,,,,,,,,,33,,,,,66,,65,', +',,33,,,,,,,,,,,,,,,65,,,,,,,27,65,65,27,,,,,,,,,,,,,,33,33,,,,,,,,,', +'65,,,,,,,,,66,,65,,66,,,,66,66,,33,,,,,27,,,,,,27,,,66,,,,,,27,27,,', +'66,65,27,27,,33,65,65,,,65,,66,66,,38,,,,,,38,,,,66,33,66,,,,33,,33', +',,,65,,,,,,,,,,,,38,38,38,,,,,,,,,,65,,,,,65,,,,,,,,,38,,,,,,,,,,38', +',65,,,,,65,,65,,,,,,,27,,,,,,,,,,,27,27,,,,,,27,,,,,,,,,,,,,,,,,27,', +',38,,,,,,,,,38,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,27,,,,,66,,,27,27,,,66', +',,,,,,,66,,,,,,,,,,,,,,,27,,,,,,,,,,,27,,,,,,,,,,,38,,38,,,38,,,,,,38', +',,,,,,66,,,66,,,,38,,,27,27,,,27,,,,,,,,,,,,,,,,,,,,,,,,,,,27,,,,,,', +',,,,,66,,,,,,,,,,,,,,,,,27,,38,,,,38,,,,38,38,,,,,,,,,,27,,,,,27,38', +'27,,,,,,,66,,38,,,,,,,,,66,,,38,38,,,,,,,,,,,,38,,38,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,,,66,66,,,,,,66,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,,,,,,,,,,,66,,40,,,,,,66,66,,40,40,40', +',,,,,,,,,,40,40,,40,,,,,,,,66,,,,,38,,,,,,66,38,,,,,,,,38,,,,,,,,,,', +',,,,,,,,,,,,,,66,,,,,66,66,,,66,,,,,,,,,,,,,,,,,,,,,38,,,38,,,66,,,', +',,,,,,,,,,,,,,,,,,,,66,,,,,66,,,,,,,,,,,,,,,,,,38,,,66,,,38,,66,,66', +',,,,38,38,,,,,38,38,,,,,,,,,,,,,,,,,40,40,,,40,40,,,,,40,,,38,,,,,,', +',,,40,38,,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40', +'40,40,,,,,40,,,,,,,,40,,,,,,,40,,,40,,,,,,,40,,40,,38,40,40,,,,,,,,', +'38,38,,,,,38,38,,,,,,,,,,,,,,,,,38,,,,,40,,40,,,,40,40,,,,,,,,,,,38', +',,,,,,,,,,,,,,,,,,38,,,,,,,,38,38,,,,,,,,,,,,,,,,,,,,,,,,,,38,,,,,,', +',,,,38,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,38,,,,,38,38,,,38,,,,,,40', +',40,40,40,,,,,,,,,,,,,,,,,38,,,,,,,,,,,,,,,,,,,,,,40,,38,40,,40,,38', +',,,,,,,,,,,,40,,,,,,,,38,,40,,,38,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,40,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,40,40,40,,,40,,,40,40,40,40,,,,,40,40,,,,,,,,,,,,,,,,,,,,,', +',,40,,,40,,,,,,,,,,,,,,,40,,,,,40,,,,,40,,,40,,,,,,,,,,,,,,,,40,,,,', +',,,,,,,,,,,,,,,,40,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,40,,', +',,,,,,,,,,40,40,40,40,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,40,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40' ] + racc_goto_check = arr = ::Array.new(3854, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2270,50 +2296,54 @@ end racc_goto_pointer = [ - nil, 206, 23, 266, nil, 62, -2, 113, 72, 235, - -281, 249, 358, -532, -629, -566, nil, 40, 237, 3, - -206, 175, 5, 64, 927, -211, -347, 9, 1305, 781, - -176, -36, -27, 47, -19, 2094, -26, nil, nil, 18, - -167, 86, -230, -375, 110, -324, -650, nil, 123, 55, - 63, -39, nil, -18, 21, -299, 999, 1204, -497, -219, - -56, 5, nil, nil, 2, 38, -249, -6, -14, 1119, - 99, -1, -270, 74, -10, -204, -255, -445, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 203, -68, -62, - nil, 200, -332, -676, -474, -342, 199, -328, 31, -565, - 214, 230, 230, -246, 231, 229, -436, 231, -437, -293, - -839, 38, -628, -219, -611, -797, 77, -454, -215, -449, - -716, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -774, -470, -478, -774, -503, nil, 196, -401, - 387, 365, -500, 232, -611, -517, nil, -537, -735, -820, - -828, -172, -381, 105, -296, -16, -87, -488, nil, nil, - -90, -487, -87, -484, -804, -400, -502, -627, nil, nil, - 122, -30, 50, 118, 118, -256, -249, 123, 124, 128, - -544, -387, -378, 145, -517, -310, nil, 0, -463, -325, - -653, -263, -449, -627, nil, -637, -792, nil, nil, -110, - -435 ] + nil, 252, 9, 228, nil, 74, -2, 135, 13, 42, + 79, 199, -323, -215, -17, -525, -526, -633, -664, nil, + -355, 10, 162, -58, -72, 100, 58, 1660, -156, -52, + -13, 32, -174, 1342, 908, -187, -430, -11, 2345, -20, + 2814, -24, -438, nil, -493, -27, nil, nil, 237, -164, + 33, -226, -384, 15, -262, nil, 1077, 104, 95, 94, + 305, nil, -2, 71, -280, 1403, 1985, -483, -209, -72, + 14, nil, nil, 31, 49, -194, -111, 50, nil, 33, + 178, nil, 655, -119, 0, -454, 58, -18, -272, -284, + -450, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 160, nil, -88, -115, -50, nil, 179, nil, -317, -673, + nil, -674, nil, nil, nil, -361, nil, 181, nil, -367, + 31, nil, nil, -545, 194, -115, 210, 211, -74, 212, + 212, 204, -501, -93, -496, -681, 228, -310, -240, -743, + -466, -739, nil, nil, nil, nil, nil, nil, -743, -98, + -451, -727, -662, nil, -168, -543, 7, 233, -656, 385, + -697, -600, -533, nil, -621, -768, -786, -785, -176, -555, + 114, -386, -317, -21, -150, nil, nil, -104, -104, nil, + -507, nil, -319, -831, -422, -533, -663, nil, nil, 99, + 17, 59, 94, 94, -310, -285, -206, 96, 97, 97, + -590, -431, -431, 101, -575, -256, nil, nil, -449, -530, + -276, -587, 27, -518, -759, nil, -614, -845, nil, nil, + -169, -470 ] racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 295, 7, 348, 296, - nil, nil, 536, nil, 855, nil, 294, nil, nil, nil, - 14, 15, 21, 231, 324, nil, nil, 752, 229, 230, - nil, nil, 20, nil, 332, 24, 25, 26, 27, nil, - 694, nil, nil, nil, 313, nil, nil, 28, 424, 35, - nil, nil, 37, 40, 39, nil, 226, 227, 600, nil, - 132, 432, 131, 134, 78, 79, nil, 93, 49, 285, - nil, 425, nil, 426, 437, 648, 499, 283, 268, 50, - 51, 52, 53, 54, 55, 56, 57, 58, nil, 269, - 64, nil, nil, nil, nil, nil, nil, nil, 584, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 5, nil, 310, 7, 363, 313, + nil, nil, nil, nil, 555, nil, nil, nil, nil, 309, + 311, nil, nil, nil, 14, 15, 21, 243, nil, nil, + 17, nil, 437, 244, 341, nil, nil, 778, 242, 473, + 24, nil, nil, 358, nil, 25, 26, 27, nil, 714, + nil, nil, nil, 330, nil, 28, 327, 452, 35, nil, + nil, 37, 40, 39, nil, 239, 240, 619, nil, 144, + 460, 143, 146, 90, 91, nil, 442, 105, 47, 50, + 275, 548, 301, nil, 453, nil, 454, 465, 673, 518, + 299, 283, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 61, nil, nil, 284, 65, nil, 67, nil, nil, + 68, 882, 69, 70, 71, nil, 72, nil, 73, nil, + 601, 74, 75, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 724, 566, nil, 725, 954, 797, 554, nil, - 555, nil, nil, 556, nil, 558, 664, nil, nil, nil, - 564, nil, nil, nil, 762, nil, nil, nil, 436, 270, - nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, - 82, nil, nil, nil, nil, nil, 610, nil, nil, nil, - nil, nil, nil, nil, nil, 839, 553, nil, 557, 847, - 569, 571, 572, 809, 575, 576, 810, 579, 582, nil, - 289 ] + nil, nil, 288, 277, 722, 850, 610, 883, 749, 583, + nil, 750, 1026, 920, 571, nil, 572, nil, nil, 573, + nil, 575, nil, 828, nil, nil, nil, 581, nil, nil, + nil, nil, nil, nil, nil, 464, 286, nil, nil, 692, + nil, 505, nil, nil, nil, nil, nil, 89, 92, 94, + nil, nil, nil, nil, nil, 631, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 865, 787, 570, nil, 574, + 873, 586, 588, 589, 931, 592, 593, 932, 596, 599, + nil, 304 ] racc_reduce_table = [ 0, 0, :racc_error, @@ -2324,630 +2354,653 @@ 1, 150, :_reduce_none, 3, 150, :_reduce_6, 2, 150, :_reduce_none, - 1, 153, :_reduce_8, + 1, 153, :_reduce_none, 0, 157, :_reduce_9, - 5, 153, :_reduce_10, - 4, 156, :_reduce_11, - 2, 158, :_reduce_12, - 1, 162, :_reduce_none, - 1, 162, :_reduce_none, - 3, 162, :_reduce_15, - 2, 162, :_reduce_16, - 0, 179, :_reduce_17, - 4, 155, :_reduce_18, - 3, 155, :_reduce_19, - 3, 155, :_reduce_20, - 3, 155, :_reduce_21, - 2, 155, :_reduce_22, - 3, 155, :_reduce_23, - 3, 155, :_reduce_24, + 3, 153, :_reduce_10, + 0, 159, :_reduce_11, + 4, 156, :_reduce_12, + 0, 164, :_reduce_13, + 6, 158, :_reduce_14, + 3, 158, :_reduce_15, + 2, 160, :_reduce_16, + 1, 165, :_reduce_none, + 1, 165, :_reduce_none, + 3, 165, :_reduce_19, + 2, 165, :_reduce_20, + 1, 166, :_reduce_none, + 1, 166, :_reduce_22, + 0, 177, :_reduce_23, + 4, 155, :_reduce_24, 3, 155, :_reduce_25, 3, 155, :_reduce_26, 3, 155, :_reduce_27, - 4, 155, :_reduce_28, - 1, 155, :_reduce_none, + 2, 155, :_reduce_28, + 3, 155, :_reduce_29, 3, 155, :_reduce_30, 3, 155, :_reduce_31, - 6, 155, :_reduce_32, - 5, 155, :_reduce_33, - 5, 155, :_reduce_34, - 5, 155, :_reduce_35, - 5, 155, :_reduce_36, + 3, 155, :_reduce_32, + 3, 155, :_reduce_33, + 4, 155, :_reduce_34, + 1, 155, :_reduce_none, + 3, 155, :_reduce_36, 3, 155, :_reduce_37, 3, 155, :_reduce_38, - 3, 155, :_reduce_39, 1, 155, :_reduce_none, - 3, 166, :_reduce_41, - 3, 166, :_reduce_42, - 1, 178, :_reduce_none, - 3, 178, :_reduce_44, - 3, 178, :_reduce_45, - 3, 178, :_reduce_46, - 2, 178, :_reduce_47, + 3, 170, :_reduce_40, + 3, 170, :_reduce_41, + 6, 170, :_reduce_42, + 5, 170, :_reduce_43, + 5, 170, :_reduce_44, + 5, 170, :_reduce_45, + 5, 170, :_reduce_46, + 3, 170, :_reduce_47, + 1, 178, :_reduce_48, 1, 178, :_reduce_none, - 1, 165, :_reduce_49, - 1, 168, :_reduce_none, - 1, 168, :_reduce_none, - 1, 183, :_reduce_none, - 4, 183, :_reduce_53, - 0, 191, :_reduce_54, - 0, 192, :_reduce_55, - 6, 188, :_reduce_56, - 1, 190, :_reduce_57, - 2, 182, :_reduce_58, - 3, 182, :_reduce_59, - 4, 182, :_reduce_60, - 5, 182, :_reduce_61, - 4, 182, :_reduce_62, - 5, 182, :_reduce_63, - 2, 182, :_reduce_64, - 2, 182, :_reduce_65, - 2, 182, :_reduce_66, - 2, 182, :_reduce_67, - 2, 182, :_reduce_68, + 1, 176, :_reduce_none, + 3, 176, :_reduce_51, + 3, 176, :_reduce_52, + 3, 176, :_reduce_53, + 2, 176, :_reduce_54, + 1, 176, :_reduce_none, + 1, 169, :_reduce_56, + 0, 189, :_reduce_57, + 0, 190, :_reduce_58, + 4, 187, :_reduce_59, + 1, 172, :_reduce_none, + 1, 172, :_reduce_none, + 1, 192, :_reduce_none, + 4, 192, :_reduce_63, + 0, 200, :_reduce_64, + 4, 197, :_reduce_65, + 1, 199, :_reduce_66, + 2, 191, :_reduce_67, + 3, 191, :_reduce_68, + 4, 191, :_reduce_69, + 5, 191, :_reduce_70, + 4, 191, :_reduce_71, + 5, 191, :_reduce_72, + 2, 191, :_reduce_73, + 2, 191, :_reduce_74, + 2, 191, :_reduce_75, + 2, 191, :_reduce_76, + 2, 191, :_reduce_77, + 1, 171, :_reduce_none, + 3, 171, :_reduce_79, + 1, 205, :_reduce_none, + 3, 205, :_reduce_81, + 1, 204, :_reduce_82, + 2, 204, :_reduce_83, + 3, 204, :_reduce_84, + 5, 204, :_reduce_85, + 2, 204, :_reduce_86, + 4, 204, :_reduce_87, + 2, 204, :_reduce_88, + 4, 204, :_reduce_89, + 1, 204, :_reduce_90, + 3, 204, :_reduce_91, + 1, 208, :_reduce_none, + 3, 208, :_reduce_93, + 2, 207, :_reduce_94, + 3, 207, :_reduce_95, + 1, 210, :_reduce_96, + 3, 210, :_reduce_97, + 1, 209, :_reduce_98, + 1, 209, :_reduce_99, + 4, 209, :_reduce_100, + 3, 209, :_reduce_101, + 3, 209, :_reduce_102, + 3, 209, :_reduce_103, + 3, 209, :_reduce_104, + 2, 209, :_reduce_105, + 1, 209, :_reduce_106, + 1, 173, :_reduce_107, + 1, 173, :_reduce_108, + 4, 173, :_reduce_109, + 3, 173, :_reduce_110, + 3, 173, :_reduce_111, + 3, 173, :_reduce_112, + 3, 173, :_reduce_113, + 2, 173, :_reduce_114, + 1, 173, :_reduce_115, + 1, 213, :_reduce_116, + 1, 213, :_reduce_none, + 2, 214, :_reduce_118, + 1, 214, :_reduce_119, + 3, 214, :_reduce_120, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_124, + 1, 215, :_reduce_125, + 1, 218, :_reduce_none, + 1, 218, :_reduce_none, + 1, 167, :_reduce_128, 1, 167, :_reduce_none, - 3, 167, :_reduce_70, - 1, 196, :_reduce_none, - 3, 196, :_reduce_72, - 1, 195, :_reduce_73, - 2, 195, :_reduce_74, - 3, 195, :_reduce_75, - 5, 195, :_reduce_76, - 2, 195, :_reduce_77, - 4, 195, :_reduce_78, - 2, 195, :_reduce_79, - 4, 195, :_reduce_80, - 1, 195, :_reduce_81, - 3, 195, :_reduce_82, - 1, 199, :_reduce_none, - 3, 199, :_reduce_84, - 2, 198, :_reduce_85, - 3, 198, :_reduce_86, - 1, 201, :_reduce_87, - 3, 201, :_reduce_88, - 1, 200, :_reduce_89, - 1, 200, :_reduce_90, - 4, 200, :_reduce_91, - 3, 200, :_reduce_92, - 3, 200, :_reduce_93, - 3, 200, :_reduce_94, - 3, 200, :_reduce_95, - 2, 200, :_reduce_96, - 1, 200, :_reduce_97, - 1, 175, :_reduce_98, - 1, 175, :_reduce_99, - 4, 175, :_reduce_100, - 3, 175, :_reduce_101, - 3, 175, :_reduce_102, - 3, 175, :_reduce_103, - 3, 175, :_reduce_104, - 2, 175, :_reduce_105, - 1, 175, :_reduce_106, - 1, 204, :_reduce_107, - 1, 204, :_reduce_none, - 2, 205, :_reduce_109, - 1, 205, :_reduce_110, - 3, 205, :_reduce_111, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_115, - 1, 206, :_reduce_116, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 163, :_reduce_119, - 1, 163, :_reduce_none, - 1, 164, :_reduce_121, - 0, 212, :_reduce_122, - 4, 164, :_reduce_123, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 3, 181, :_reduce_195, - 5, 181, :_reduce_196, - 3, 181, :_reduce_197, - 5, 181, :_reduce_198, - 6, 181, :_reduce_199, - 5, 181, :_reduce_200, - 5, 181, :_reduce_201, - 5, 181, :_reduce_202, - 5, 181, :_reduce_203, - 4, 181, :_reduce_204, - 3, 181, :_reduce_205, - 3, 181, :_reduce_206, - 3, 181, :_reduce_207, - 3, 181, :_reduce_208, - 3, 181, :_reduce_209, - 3, 181, :_reduce_210, - 3, 181, :_reduce_211, - 3, 181, :_reduce_212, - 3, 181, :_reduce_213, - 4, 181, :_reduce_214, - 2, 181, :_reduce_215, - 2, 181, :_reduce_216, - 3, 181, :_reduce_217, - 3, 181, :_reduce_218, - 3, 181, :_reduce_219, - 3, 181, :_reduce_220, - 3, 181, :_reduce_221, - 3, 181, :_reduce_222, - 3, 181, :_reduce_223, - 3, 181, :_reduce_224, - 3, 181, :_reduce_225, - 3, 181, :_reduce_226, - 3, 181, :_reduce_227, - 3, 181, :_reduce_228, - 3, 181, :_reduce_229, - 2, 181, :_reduce_230, - 2, 181, :_reduce_231, - 3, 181, :_reduce_232, - 3, 181, :_reduce_233, - 3, 181, :_reduce_234, - 3, 181, :_reduce_235, - 3, 181, :_reduce_236, - 6, 181, :_reduce_237, - 1, 181, :_reduce_none, - 1, 215, :_reduce_239, + 1, 168, :_reduce_130, + 0, 221, :_reduce_131, + 4, 168, :_reduce_132, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, 1, 216, :_reduce_none, - 2, 216, :_reduce_241, - 4, 216, :_reduce_242, - 2, 216, :_reduce_243, - 3, 220, :_reduce_244, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 171, :_reduce_247, - 1, 171, :_reduce_248, - 2, 171, :_reduce_249, - 4, 171, :_reduce_250, - 2, 171, :_reduce_251, - 1, 194, :_reduce_252, - 2, 194, :_reduce_253, - 2, 194, :_reduce_254, - 4, 194, :_reduce_255, - 1, 194, :_reduce_256, - 0, 224, :_reduce_257, - 2, 187, :_reduce_258, - 2, 223, :_reduce_259, - 2, 222, :_reduce_260, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 3, 186, :_reduce_205, + 3, 186, :_reduce_206, + 6, 186, :_reduce_207, + 5, 186, :_reduce_208, + 5, 186, :_reduce_209, + 5, 186, :_reduce_210, + 5, 186, :_reduce_211, + 0, 227, :_reduce_212, + 5, 186, :_reduce_213, + 3, 186, :_reduce_214, + 3, 186, :_reduce_215, + 3, 186, :_reduce_216, + 3, 186, :_reduce_217, + 3, 186, :_reduce_218, + 3, 186, :_reduce_219, + 3, 186, :_reduce_220, + 3, 186, :_reduce_221, + 3, 186, :_reduce_222, + 4, 186, :_reduce_223, + 2, 186, :_reduce_224, + 2, 186, :_reduce_225, + 3, 186, :_reduce_226, + 3, 186, :_reduce_227, + 3, 186, :_reduce_228, + 3, 186, :_reduce_229, + 1, 186, :_reduce_none, + 3, 186, :_reduce_231, + 3, 186, :_reduce_232, + 3, 186, :_reduce_233, + 3, 186, :_reduce_234, + 3, 186, :_reduce_235, + 2, 186, :_reduce_236, + 2, 186, :_reduce_237, + 3, 186, :_reduce_238, + 3, 186, :_reduce_239, + 3, 186, :_reduce_240, + 3, 186, :_reduce_241, + 3, 186, :_reduce_242, + 6, 186, :_reduce_243, + 1, 186, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 3, 224, :_reduce_249, + 3, 224, :_reduce_250, + 1, 228, :_reduce_251, + 1, 229, :_reduce_none, + 2, 229, :_reduce_253, + 4, 229, :_reduce_254, + 2, 229, :_reduce_255, 1, 222, :_reduce_none, - 1, 217, :_reduce_262, - 2, 217, :_reduce_263, - 3, 217, :_reduce_264, - 4, 217, :_reduce_265, - 1, 177, :_reduce_266, - 1, 177, :_reduce_267, - 3, 176, :_reduce_268, - 4, 176, :_reduce_269, - 2, 176, :_reduce_270, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_281, - 0, 247, :_reduce_282, - 4, 214, :_reduce_283, - 2, 214, :_reduce_284, - 0, 248, :_reduce_285, - 0, 249, :_reduce_286, - 5, 214, :_reduce_287, - 3, 214, :_reduce_288, - 3, 214, :_reduce_289, - 2, 214, :_reduce_290, - 3, 214, :_reduce_291, - 0, 250, :_reduce_292, - 4, 214, :_reduce_293, - 1, 214, :_reduce_294, - 4, 214, :_reduce_295, - 3, 214, :_reduce_296, - 1, 214, :_reduce_297, - 5, 214, :_reduce_298, - 4, 214, :_reduce_299, - 3, 214, :_reduce_300, - 2, 214, :_reduce_301, - 1, 214, :_reduce_none, - 2, 214, :_reduce_303, - 2, 214, :_reduce_304, - 6, 214, :_reduce_305, - 6, 214, :_reduce_306, - 0, 251, :_reduce_307, - 0, 252, :_reduce_308, - 7, 214, :_reduce_309, - 0, 253, :_reduce_310, - 0, 254, :_reduce_311, - 7, 214, :_reduce_312, - 5, 214, :_reduce_313, - 4, 214, :_reduce_314, - 0, 255, :_reduce_315, - 0, 256, :_reduce_316, - 9, 214, :_reduce_317, - 0, 257, :_reduce_318, - 0, 258, :_reduce_319, - 7, 214, :_reduce_320, - 0, 259, :_reduce_321, - 0, 260, :_reduce_322, - 0, 261, :_reduce_323, - 9, 214, :_reduce_324, - 0, 262, :_reduce_325, - 0, 263, :_reduce_326, - 6, 214, :_reduce_327, - 0, 264, :_reduce_328, - 6, 214, :_reduce_329, - 0, 265, :_reduce_330, - 0, 266, :_reduce_331, - 9, 214, :_reduce_332, - 1, 214, :_reduce_333, - 1, 214, :_reduce_334, - 1, 214, :_reduce_335, - 1, 214, :_reduce_336, - 1, 170, :_reduce_337, + 3, 222, :_reduce_257, + 3, 233, :_reduce_258, + 1, 234, :_reduce_none, + 1, 234, :_reduce_none, + 1, 181, :_reduce_none, + 1, 181, :_reduce_none, + 2, 181, :_reduce_263, + 4, 181, :_reduce_264, + 2, 181, :_reduce_265, + 1, 203, :_reduce_266, + 2, 203, :_reduce_267, + 2, 203, :_reduce_268, + 4, 203, :_reduce_269, + 1, 203, :_reduce_270, + 0, 237, :_reduce_271, + 2, 196, :_reduce_272, + 2, 236, :_reduce_273, + 2, 235, :_reduce_274, + 1, 235, :_reduce_none, + 1, 230, :_reduce_276, + 2, 230, :_reduce_277, + 3, 230, :_reduce_278, + 4, 230, :_reduce_279, + 1, 175, :_reduce_280, + 1, 175, :_reduce_281, + 3, 174, :_reduce_282, + 4, 174, :_reduce_283, + 2, 174, :_reduce_284, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_295, + 0, 272, :_reduce_296, + 4, 225, :_reduce_297, + 0, 273, :_reduce_298, + 3, 225, :_reduce_299, + 0, 274, :_reduce_300, + 4, 225, :_reduce_301, + 3, 225, :_reduce_302, + 3, 225, :_reduce_303, + 2, 225, :_reduce_304, + 0, 275, :_reduce_305, + 4, 225, :_reduce_306, + 0, 276, :_reduce_307, + 4, 225, :_reduce_308, + 1, 225, :_reduce_309, + 4, 225, :_reduce_310, + 3, 225, :_reduce_311, + 1, 225, :_reduce_312, + 5, 225, :_reduce_313, + 4, 225, :_reduce_314, + 3, 225, :_reduce_315, + 2, 225, :_reduce_316, + 1, 225, :_reduce_none, + 2, 225, :_reduce_318, + 2, 225, :_reduce_319, + 6, 225, :_reduce_320, + 6, 225, :_reduce_321, + 4, 225, :_reduce_322, + 4, 225, :_reduce_323, + 5, 225, :_reduce_324, + 4, 225, :_reduce_325, + 6, 225, :_reduce_326, + 0, 277, :_reduce_327, + 0, 278, :_reduce_328, + 7, 225, :_reduce_329, + 0, 279, :_reduce_330, + 0, 280, :_reduce_331, + 0, 281, :_reduce_332, + 9, 225, :_reduce_333, + 0, 282, :_reduce_334, + 0, 283, :_reduce_335, + 6, 225, :_reduce_336, + 0, 284, :_reduce_337, + 0, 285, :_reduce_338, + 7, 225, :_reduce_339, + 0, 286, :_reduce_340, + 0, 287, :_reduce_341, + 9, 225, :_reduce_342, + 1, 225, :_reduce_343, + 1, 225, :_reduce_344, + 1, 225, :_reduce_345, + 1, 225, :_reduce_346, + 1, 180, :_reduce_347, + 1, 247, :_reduce_none, + 1, 253, :_reduce_none, + 1, 256, :_reduce_none, + 1, 258, :_reduce_none, + 1, 259, :_reduce_none, + 1, 260, :_reduce_none, + 1, 262, :_reduce_none, + 1, 264, :_reduce_none, 1, 267, :_reduce_none, 1, 268, :_reduce_none, - 1, 269, :_reduce_none, - 1, 270, :_reduce_none, - 1, 271, :_reduce_none, - 1, 272, :_reduce_none, - 1, 273, :_reduce_none, - 1, 274, :_reduce_none, - 1, 275, :_reduce_none, - 1, 276, :_reduce_none, - 1, 277, :_reduce_none, - 1, 238, :_reduce_none, - 1, 238, :_reduce_none, - 2, 238, :_reduce_none, - 1, 240, :_reduce_none, - 1, 240, :_reduce_none, - 1, 239, :_reduce_none, - 5, 239, :_reduce_355, - 1, 160, :_reduce_none, - 2, 160, :_reduce_357, - 1, 242, :_reduce_none, - 1, 242, :_reduce_359, - 1, 278, :_reduce_none, - 3, 278, :_reduce_361, - 1, 281, :_reduce_362, - 3, 281, :_reduce_363, - 1, 280, :_reduce_364, - 4, 280, :_reduce_365, - 6, 280, :_reduce_366, - 3, 280, :_reduce_367, - 5, 280, :_reduce_368, - 2, 280, :_reduce_369, - 4, 280, :_reduce_370, - 1, 280, :_reduce_371, - 3, 280, :_reduce_372, - 4, 282, :_reduce_373, - 2, 282, :_reduce_374, - 2, 282, :_reduce_375, - 1, 282, :_reduce_376, - 2, 287, :_reduce_377, - 1, 287, :_reduce_none, - 6, 288, :_reduce_379, - 8, 288, :_reduce_380, - 4, 288, :_reduce_381, - 6, 288, :_reduce_382, - 4, 288, :_reduce_383, - 2, 288, :_reduce_384, - 6, 288, :_reduce_385, - 2, 288, :_reduce_386, - 4, 288, :_reduce_387, - 6, 288, :_reduce_388, - 2, 288, :_reduce_389, - 4, 288, :_reduce_390, - 2, 288, :_reduce_391, - 4, 288, :_reduce_392, - 1, 288, :_reduce_393, - 1, 189, :_reduce_394, - 1, 189, :_reduce_none, - 3, 292, :_reduce_396, - 1, 292, :_reduce_397, - 4, 292, :_reduce_398, + 1, 288, :_reduce_none, + 1, 289, :_reduce_none, + 1, 290, :_reduce_none, + 1, 291, :_reduce_none, + 1, 292, :_reduce_none, + 1, 162, :_reduce_none, 1, 293, :_reduce_none, - 4, 293, :_reduce_400, - 1, 294, :_reduce_401, - 3, 294, :_reduce_402, - 1, 295, :_reduce_403, - 1, 295, :_reduce_none, - 0, 299, :_reduce_405, - 3, 237, :_reduce_406, - 4, 297, :_reduce_407, - 1, 297, :_reduce_408, - 3, 298, :_reduce_409, - 3, 298, :_reduce_410, - 0, 302, :_reduce_411, - 0, 303, :_reduce_412, - 6, 301, :_reduce_413, - 2, 184, :_reduce_414, - 4, 184, :_reduce_415, - 5, 184, :_reduce_416, - 5, 184, :_reduce_417, - 0, 305, :_reduce_418, - 3, 236, :_reduce_419, - 4, 236, :_reduce_420, - 4, 236, :_reduce_421, - 3, 236, :_reduce_422, - 3, 236, :_reduce_423, - 3, 236, :_reduce_424, - 2, 236, :_reduce_425, - 1, 236, :_reduce_426, - 4, 236, :_reduce_427, - 0, 306, :_reduce_428, - 0, 307, :_reduce_429, - 6, 235, :_reduce_430, - 0, 308, :_reduce_431, - 0, 309, :_reduce_432, - 6, 235, :_reduce_433, - 0, 311, :_reduce_434, - 6, 241, :_reduce_435, - 1, 310, :_reduce_none, + 1, 248, :_reduce_none, + 1, 202, :_reduce_none, + 1, 254, :_reduce_none, + 1, 254, :_reduce_none, + 2, 254, :_reduce_none, + 1, 188, :_reduce_none, + 1, 188, :_reduce_none, + 1, 255, :_reduce_none, + 5, 255, :_reduce_373, + 1, 257, :_reduce_none, + 2, 257, :_reduce_375, + 1, 263, :_reduce_none, + 1, 263, :_reduce_377, + 1, 294, :_reduce_none, + 3, 294, :_reduce_379, + 1, 297, :_reduce_380, + 3, 297, :_reduce_381, + 1, 296, :_reduce_382, + 4, 296, :_reduce_383, + 6, 296, :_reduce_384, + 3, 296, :_reduce_385, + 5, 296, :_reduce_386, + 2, 296, :_reduce_387, + 4, 296, :_reduce_388, + 1, 296, :_reduce_389, + 3, 296, :_reduce_390, + 4, 298, :_reduce_391, + 2, 298, :_reduce_392, + 2, 298, :_reduce_393, + 1, 298, :_reduce_394, + 2, 303, :_reduce_395, + 1, 303, :_reduce_none, + 6, 304, :_reduce_397, + 8, 304, :_reduce_398, + 4, 304, :_reduce_399, + 6, 304, :_reduce_400, + 4, 304, :_reduce_401, + 2, 304, :_reduce_402, + 6, 304, :_reduce_403, + 2, 304, :_reduce_404, + 4, 304, :_reduce_405, + 6, 304, :_reduce_406, + 2, 304, :_reduce_407, + 4, 304, :_reduce_408, + 2, 304, :_reduce_409, + 4, 304, :_reduce_410, + 1, 304, :_reduce_411, + 1, 308, :_reduce_412, + 1, 308, :_reduce_413, + 3, 309, :_reduce_414, + 1, 309, :_reduce_415, + 4, 309, :_reduce_416, 1, 310, :_reduce_none, - 6, 159, :_reduce_438, - 0, 159, :_reduce_439, - 1, 312, :_reduce_440, + 4, 310, :_reduce_418, + 1, 311, :_reduce_419, + 3, 311, :_reduce_420, + 1, 312, :_reduce_421, 1, 312, :_reduce_none, - 1, 312, :_reduce_none, - 2, 313, :_reduce_443, - 1, 313, :_reduce_none, - 2, 161, :_reduce_445, - 1, 161, :_reduce_none, - 1, 225, :_reduce_447, - 1, 225, :_reduce_448, - 1, 225, :_reduce_none, - 1, 226, :_reduce_450, - 1, 315, :_reduce_451, - 1, 315, :_reduce_none, - 2, 315, :_reduce_453, - 3, 316, :_reduce_454, - 1, 316, :_reduce_455, - 3, 227, :_reduce_456, - 3, 228, :_reduce_457, - 3, 229, :_reduce_458, - 3, 229, :_reduce_459, - 1, 320, :_reduce_460, - 3, 320, :_reduce_461, - 1, 321, :_reduce_none, - 2, 321, :_reduce_463, - 3, 231, :_reduce_464, - 3, 231, :_reduce_465, - 1, 323, :_reduce_466, - 3, 323, :_reduce_467, - 3, 230, :_reduce_468, - 3, 230, :_reduce_469, - 3, 232, :_reduce_470, - 3, 232, :_reduce_471, - 1, 324, :_reduce_472, - 3, 324, :_reduce_473, - 1, 325, :_reduce_474, - 3, 325, :_reduce_475, - 1, 317, :_reduce_476, - 2, 317, :_reduce_477, - 1, 318, :_reduce_478, - 2, 318, :_reduce_479, - 1, 319, :_reduce_480, - 2, 319, :_reduce_481, - 1, 322, :_reduce_482, - 0, 327, :_reduce_483, - 3, 322, :_reduce_484, - 0, 328, :_reduce_485, - 4, 322, :_reduce_486, - 1, 326, :_reduce_487, - 1, 326, :_reduce_488, - 1, 326, :_reduce_489, - 1, 326, :_reduce_none, - 2, 210, :_reduce_491, - 1, 210, :_reduce_492, - 1, 329, :_reduce_none, + 0, 316, :_reduce_423, + 0, 317, :_reduce_424, + 4, 252, :_reduce_425, + 4, 314, :_reduce_426, + 1, 314, :_reduce_427, + 3, 315, :_reduce_428, + 3, 315, :_reduce_429, + 3, 319, :_reduce_430, + 2, 193, :_reduce_431, + 4, 193, :_reduce_432, + 5, 193, :_reduce_433, + 5, 193, :_reduce_434, + 0, 322, :_reduce_435, + 3, 251, :_reduce_436, + 4, 251, :_reduce_437, + 4, 251, :_reduce_438, + 3, 251, :_reduce_439, + 3, 251, :_reduce_440, + 3, 251, :_reduce_441, + 2, 251, :_reduce_442, + 1, 251, :_reduce_443, + 4, 251, :_reduce_444, + 0, 323, :_reduce_445, + 4, 250, :_reduce_446, + 0, 324, :_reduce_447, + 4, 250, :_reduce_448, + 0, 325, :_reduce_449, + 0, 326, :_reduce_450, + 4, 198, :_reduce_451, + 0, 327, :_reduce_452, + 0, 328, :_reduce_453, + 4, 320, :_reduce_454, + 0, 330, :_reduce_455, + 6, 261, :_reduce_456, 1, 329, :_reduce_none, 1, 329, :_reduce_none, - 1, 329, :_reduce_none, - 3, 211, :_reduce_497, - 1, 314, :_reduce_none, - 2, 314, :_reduce_499, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 203, :_reduce_509, - 1, 203, :_reduce_510, - 1, 203, :_reduce_511, - 1, 203, :_reduce_512, - 1, 203, :_reduce_513, - 1, 203, :_reduce_514, - 1, 203, :_reduce_515, - 1, 233, :_reduce_516, - 1, 233, :_reduce_517, - 1, 169, :_reduce_518, - 1, 169, :_reduce_519, - 1, 174, :_reduce_520, - 1, 174, :_reduce_521, - 1, 243, :_reduce_522, - 0, 330, :_reduce_523, - 4, 243, :_reduce_524, - 2, 243, :_reduce_525, - 3, 245, :_reduce_526, - 2, 245, :_reduce_527, - 4, 331, :_reduce_528, - 2, 331, :_reduce_529, - 2, 331, :_reduce_530, + 6, 161, :_reduce_459, + 0, 161, :_reduce_460, + 1, 331, :_reduce_461, 1, 331, :_reduce_none, - 2, 333, :_reduce_532, - 0, 333, :_reduce_533, - 6, 300, :_reduce_534, - 8, 300, :_reduce_535, - 4, 300, :_reduce_536, - 6, 300, :_reduce_537, - 4, 300, :_reduce_538, - 6, 300, :_reduce_539, - 2, 300, :_reduce_540, - 4, 300, :_reduce_541, - 6, 300, :_reduce_542, - 2, 300, :_reduce_543, - 4, 300, :_reduce_544, - 2, 300, :_reduce_545, - 4, 300, :_reduce_546, - 1, 300, :_reduce_547, - 0, 300, :_reduce_548, - 1, 296, :_reduce_549, - 1, 296, :_reduce_550, - 1, 296, :_reduce_551, - 1, 296, :_reduce_552, - 1, 279, :_reduce_none, - 1, 279, :_reduce_554, - 1, 335, :_reduce_none, - 1, 336, :_reduce_none, - 3, 336, :_reduce_557, - 1, 289, :_reduce_558, - 3, 289, :_reduce_559, - 1, 337, :_reduce_none, - 2, 338, :_reduce_561, - 1, 338, :_reduce_562, - 2, 339, :_reduce_563, - 1, 339, :_reduce_564, - 1, 283, :_reduce_none, - 3, 283, :_reduce_566, + 1, 331, :_reduce_none, + 2, 332, :_reduce_464, 1, 332, :_reduce_none, - 3, 332, :_reduce_568, - 1, 340, :_reduce_none, + 2, 163, :_reduce_466, + 1, 163, :_reduce_none, + 1, 238, :_reduce_468, + 1, 238, :_reduce_469, + 1, 238, :_reduce_none, + 1, 239, :_reduce_471, + 1, 334, :_reduce_472, + 1, 334, :_reduce_none, + 2, 334, :_reduce_474, + 3, 335, :_reduce_475, + 1, 335, :_reduce_476, + 3, 240, :_reduce_477, + 3, 241, :_reduce_478, + 3, 242, :_reduce_479, + 3, 242, :_reduce_480, + 1, 339, :_reduce_481, + 3, 339, :_reduce_482, 1, 340, :_reduce_none, - 2, 284, :_reduce_571, - 1, 284, :_reduce_572, - 3, 341, :_reduce_573, - 3, 342, :_reduce_574, - 1, 290, :_reduce_575, - 3, 290, :_reduce_576, - 1, 334, :_reduce_577, - 3, 334, :_reduce_578, - 1, 343, :_reduce_none, - 1, 343, :_reduce_none, - 2, 291, :_reduce_581, - 1, 291, :_reduce_582, - 1, 344, :_reduce_none, - 1, 344, :_reduce_none, - 2, 286, :_reduce_585, - 2, 285, :_reduce_586, - 0, 285, :_reduce_587, - 1, 246, :_reduce_none, - 0, 345, :_reduce_589, - 4, 246, :_reduce_590, - 1, 234, :_reduce_591, - 2, 234, :_reduce_592, - 1, 219, :_reduce_none, - 3, 219, :_reduce_594, - 3, 346, :_reduce_595, - 3, 346, :_reduce_596, - 4, 346, :_reduce_597, - 2, 346, :_reduce_598, - 2, 346, :_reduce_599, - 1, 193, :_reduce_none, - 1, 193, :_reduce_none, - 1, 193, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 304, :_reduce_none, - 1, 304, :_reduce_none, - 1, 304, :_reduce_none, - 1, 185, :_reduce_none, - 1, 185, :_reduce_none, - 1, 173, :_reduce_none, - 1, 173, :_reduce_none, + 2, 340, :_reduce_484, + 3, 244, :_reduce_485, + 0, 343, :_reduce_486, + 4, 244, :_reduce_487, + 1, 342, :_reduce_488, + 3, 342, :_reduce_489, + 3, 243, :_reduce_490, + 3, 243, :_reduce_491, + 3, 245, :_reduce_492, + 3, 245, :_reduce_493, + 1, 344, :_reduce_494, + 3, 344, :_reduce_495, + 1, 345, :_reduce_496, + 3, 345, :_reduce_497, + 1, 336, :_reduce_498, + 2, 336, :_reduce_499, + 1, 337, :_reduce_500, + 2, 337, :_reduce_501, + 1, 338, :_reduce_502, + 2, 338, :_reduce_503, + 1, 341, :_reduce_504, + 0, 347, :_reduce_505, + 3, 341, :_reduce_506, + 0, 348, :_reduce_507, + 4, 341, :_reduce_508, + 1, 346, :_reduce_509, + 1, 346, :_reduce_510, + 1, 346, :_reduce_511, + 1, 346, :_reduce_none, + 2, 219, :_reduce_513, + 1, 219, :_reduce_514, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 3, 220, :_reduce_519, + 1, 333, :_reduce_none, + 2, 333, :_reduce_521, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 212, :_reduce_531, + 1, 212, :_reduce_532, + 1, 212, :_reduce_533, + 1, 212, :_reduce_534, + 1, 212, :_reduce_535, + 1, 212, :_reduce_536, + 1, 212, :_reduce_537, + 1, 246, :_reduce_538, + 1, 246, :_reduce_539, + 1, 179, :_reduce_540, + 1, 179, :_reduce_541, + 1, 184, :_reduce_542, + 1, 184, :_reduce_543, + 0, 350, :_reduce_544, + 4, 265, :_reduce_545, + 1, 265, :_reduce_546, + 3, 269, :_reduce_547, + 0, 352, :_reduce_548, + 3, 269, :_reduce_549, + 4, 351, :_reduce_550, + 2, 351, :_reduce_551, + 2, 351, :_reduce_552, + 1, 351, :_reduce_none, + 2, 354, :_reduce_554, + 0, 354, :_reduce_555, + 6, 318, :_reduce_556, + 8, 318, :_reduce_557, + 4, 318, :_reduce_558, + 6, 318, :_reduce_559, + 4, 318, :_reduce_560, + 6, 318, :_reduce_561, + 2, 318, :_reduce_562, + 4, 318, :_reduce_563, + 6, 318, :_reduce_564, + 2, 318, :_reduce_565, + 4, 318, :_reduce_566, + 2, 318, :_reduce_567, + 4, 318, :_reduce_568, + 1, 318, :_reduce_569, + 0, 318, :_reduce_570, + 1, 313, :_reduce_571, + 1, 313, :_reduce_572, + 1, 313, :_reduce_573, + 1, 313, :_reduce_574, + 1, 295, :_reduce_none, + 1, 295, :_reduce_576, + 1, 356, :_reduce_none, + 1, 357, :_reduce_none, + 3, 357, :_reduce_579, + 1, 305, :_reduce_580, + 3, 305, :_reduce_581, + 1, 358, :_reduce_none, + 2, 359, :_reduce_583, + 1, 359, :_reduce_584, + 2, 360, :_reduce_585, + 1, 360, :_reduce_586, + 1, 299, :_reduce_none, + 3, 299, :_reduce_588, + 1, 353, :_reduce_none, + 3, 353, :_reduce_590, + 1, 361, :_reduce_none, + 1, 361, :_reduce_none, + 2, 300, :_reduce_593, + 1, 300, :_reduce_594, + 3, 362, :_reduce_595, + 3, 363, :_reduce_596, + 1, 306, :_reduce_597, + 3, 306, :_reduce_598, + 1, 355, :_reduce_599, + 3, 355, :_reduce_600, + 1, 364, :_reduce_none, + 1, 364, :_reduce_none, + 2, 307, :_reduce_603, + 1, 307, :_reduce_604, + 1, 365, :_reduce_none, + 1, 365, :_reduce_none, + 2, 302, :_reduce_607, + 2, 301, :_reduce_608, + 0, 301, :_reduce_609, + 1, 270, :_reduce_none, + 0, 366, :_reduce_611, + 4, 270, :_reduce_612, + 1, 249, :_reduce_613, + 2, 249, :_reduce_none, + 1, 232, :_reduce_none, + 3, 232, :_reduce_616, + 3, 367, :_reduce_617, + 2, 367, :_reduce_618, + 4, 367, :_reduce_619, + 2, 367, :_reduce_620, + 1, 201, :_reduce_none, + 1, 201, :_reduce_none, + 1, 201, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 321, :_reduce_none, + 1, 321, :_reduce_none, + 1, 321, :_reduce_none, + 1, 271, :_reduce_none, + 1, 271, :_reduce_none, + 1, 183, :_reduce_none, + 1, 183, :_reduce_none, + 1, 194, :_reduce_none, + 1, 194, :_reduce_none, 0, 151, :_reduce_none, 1, 151, :_reduce_none, - 0, 180, :_reduce_none, - 1, 180, :_reduce_none, - 2, 197, :_reduce_none, - 2, 172, :_reduce_none, - 0, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 244, :_reduce_623, - 1, 244, :_reduce_none, + 0, 185, :_reduce_none, + 1, 185, :_reduce_none, + 2, 206, :_reduce_none, + 2, 182, :_reduce_none, + 0, 231, :_reduce_none, + 1, 231, :_reduce_none, + 1, 231, :_reduce_none, + 1, 266, :_reduce_646, + 1, 266, :_reduce_none, 1, 154, :_reduce_none, - 2, 154, :_reduce_626, - 0, 152, :_reduce_627 ] + 2, 154, :_reduce_649, + 0, 152, :_reduce_650 ] -racc_reduce_n = 628 +racc_reduce_n = 651 -racc_shift_n = 1059 +racc_shift_n = 1095 racc_token_table = { false => 0, @@ -3094,8 +3147,8 @@ :tIMAGINARY => 141, :tLABEL_END => 142, :tLONELY => 143, - :tEQL => 144, - :tLOWEST => 145 } + :tLOWEST => 144, + :tEQL => 145 } racc_nt_base = 146 @@ -3262,8 +3315,8 @@ "tIMAGINARY", "tLABEL_END", "tLONELY", - "tEQL", "tLOWEST", + "tEQL", "$start", "program", "top_compstmt", @@ -3274,44 +3327,53 @@ "top_stmt", "terms", "stmt", - "bodystmt", + "begin_block", "@2", + "bodystmt", + "@3", "compstmt", "opt_rescue", - "opt_else", + "k_else", "opt_ensure", + "@4", "stmts", + "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", + "lhs", + "mrhs", + "mrhs_arg", + "expr", + "@5", + "command_rhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@3", "opt_nl", "arg", + "expr_value_do", + "do", + "@6", + "@7", "command", "block_command", "block_call", - "dot_or_colon", + "call_op2", "operation2", "command_args", "cmd_brace_block", - "opt_block_param", + "brace_body", "fcall", - "@4", - "@5", + "@8", "operation", + "k_return", "call_args", "mlhs_basic", "mlhs_inner", @@ -3330,9 +3392,13 @@ "fsym", "symbol", "dsym", - "@6", + "@9", + "arg_rhs", "simple_numeric", + "rel_expr", "primary", + "relop", + "@10", "arg_value", "aref_args", "args", @@ -3342,7 +3408,7 @@ "opt_paren_args", "opt_block_arg", "block_arg", - "@7", + "@11", "literal", "strings", "xstring", @@ -3352,23 +3418,31 @@ "symbols", "qsymbols", "var_ref", + "k_begin", + "k_end", "assoc_list", "brace_block", "method_call", "lambda", + "k_if", "then", "if_tail", - "do", + "k_unless", + "opt_else", + "k_while", + "k_until", + "k_case", "case_body", + "k_for", "for_var", + "k_class", "superclass", "term", + "k_module", + "k_def", "f_arglist", "singleton", - "@8", - "@9", - "@10", - "@11", + "dot_or_colon", "@12", "@13", "@14", @@ -3385,17 +3459,12 @@ "@25", "@26", "@27", - "k_begin", - "k_if", - "k_unless", - "k_while", - "k_until", - "k_case", - "k_for", - "k_class", - "k_module", - "k_def", - "k_end", + "k_do", + "k_do_block", + "k_rescue", + "k_ensure", + "k_when", + "k_elsif", "f_marg", "f_norm_arg", "f_margs", @@ -3410,6 +3479,7 @@ "f_arg", "f_block_optarg", "f_rest_arg", + "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", @@ -3418,18 +3488,20 @@ "f_larglist", "lambda_body", "@28", + "@29", "f_args", "do_block", - "@29", - "@30", + "do_body", "operation3", + "@30", "@31", "@32", "@33", "@34", "@35", - "cases", "@36", + "cases", + "@37", "exc_list", "exc_var", "numeric", @@ -3442,14 +3514,16 @@ "word", "string_content", "symbol_list", + "@38", "qword_list", "qsym_list", "string_dvar", - "@37", - "@38", - "sym", "@39", + "@40", + "sym", + "@41", "args_tail", + "@42", "f_kwarg", "opt_args_tail", "f_optarg", @@ -3463,7 +3537,7 @@ "f_block_opt", "restarg_mark", "blkarg_mark", - "@40", + "@43", "assoc" ] Racc_debug_parser = false @@ -3473,20 +3547,21 @@ # reduce 0 omitted def _reduce_1(val, _values, result) - self.lexer.lex_state = :expr_beg - + self.lexer.lex_state = EXPR_BEG + result end def _reduce_2(val, _values, result) result = new_compstmt val - + result end def _reduce_3(val, _values, result) - result = val[0] - + stmt, _ = val + result = stmt + result end @@ -3496,22 +3571,13 @@ def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] - + result end # reduce 7 omitted -def _reduce_8(val, _values, result) - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - - result -end +# reduce 8 omitted def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then @@ -3519,707 +3585,833 @@ yyerror "BEGIN in method" end self.env.extend - + result end def _reduce_10(val, _values, result) - result = new_iter s(:preexe), nil, val[3] - + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + result end def _reduce_11(val, _values, result) - result = new_body val - + result = lexer.lineno result end def _reduce_12(val, _values, result) - result = new_compstmt val - + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt + result end -# reduce 13 omitted +def _reduce_13(val, _values, result) + res = _values[-2] + yyerror "else without rescue is useless" unless res -# reduce 14 omitted - -def _reduce_15(val, _values, result) - result = self.block_append val[0], val[2] - result end -def _reduce_16(val, _values, result) - result = val[1] - debug20 2, val, result - - result -end +def _reduce_14(val, _values, result) + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] -def _reduce_17(val, _values, result) - lexer.lex_state = :expr_fname - result = self.lexer.lineno - result end -def _reduce_18(val, _values, result) - result = s(:alias, val[1], val[3]).line(val[2]) - +def _reduce_15(val, _values, result) + body, resc, ens = val + + result = new_body [body, resc, nil, ens] + result end -def _reduce_19(val, _values, result) - result = s(:valias, val[1].to_sym, val[2].to_sym) - +def _reduce_16(val, _values, result) + result = new_compstmt val + result end -def _reduce_20(val, _values, result) - result = s(:valias, val[1].to_sym, :"$#{val[2]}") - +# reduce 17 omitted + +# reduce 18 omitted + +def _reduce_19(val, _values, result) + result = self.block_append val[0], val[2] + result end -def _reduce_21(val, _values, result) - yyerror "can't make alias for the number variables" - +def _reduce_20(val, _values, result) + result = val[1] + debug20 2, val, result + result end +# reduce 21 omitted + def _reduce_22(val, _values, result) - result = val[1] - + yyerror "BEGIN is permitted only at toplevel" + result end def _reduce_23(val, _values, result) - result = new_if val[2], val[0], nil - + lexer.lex_state = EXPR_FNAME + result end def _reduce_24(val, _values, result) - result = new_if val[2], nil, val[0] - + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line + result end def _reduce_25(val, _values, result) - result = new_while val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line + result end def _reduce_26(val, _values, result) - result = new_until val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line + result end def _reduce_27(val, _values, result) - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) - + yyerror "can't make alias for the number variables" + result end def _reduce_28(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 3 - yyerror "END in method; use at_exit" - end - result = new_iter s(:postexe), 0, val[2] - + result = val[1] + result end -# reduce 29 omitted +def _reduce_29(val, _values, result) + t, _, c = val + result = new_if c, t, nil + + result +end def _reduce_30(val, _values, result) - result = new_masgn val[0], val[2], :wrap - + f, _, c = val + result = new_if c, nil, f + result end def _reduce_31(val, _values, result) - result = new_op_asgn val - + e, _, c = val + result = new_while e, c, true + result end def _reduce_32(val, _values, result) - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - + e, _, c = val + result = new_until e, c, true + result end def _reduce_33(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn - end - result.line = val[0].line - + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody + result end def _reduce_34(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn + (_, line), _, stmt, _ = val + + if (self.in_def || self.in_single > 0) then + debug20 3 + yyerror "END in method; use at_exit" end - result.line = val[0].line - - result -end -def _reduce_35(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result - + result = new_iter s(:postexe).line(line), 0, stmt + result end +# reduce 35 omitted + def _reduce_36(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result - + result = new_masgn val[0], val[2], :wrap + result end def _reduce_37(val, _values, result) - self.backref_assign_error val[0] - + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + result end def _reduce_38(val, _values, result) - result = new_assign val[0], s(:svalue, val[2]) - + result = new_masgn val[0], val[2] + result end -def _reduce_39(val, _values, result) - result = new_masgn val[0], val[2] - +# reduce 39 omitted + +def _reduce_40(val, _values, result) + result = new_assign val[0], val[2] + result end -# reduce 40 omitted - def _reduce_41(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn val + result end def _reduce_42(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn1 val + result end -# reduce 43 omitted +def _reduce_43(val, _values, result) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + + result +end def _reduce_44(val, _values, result) - result = logical_op :and, val[0], val[2] - + result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + result end def _reduce_45(val, _values, result) - result = logical_op :or, val[0], val[2] - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_46(val, _values, result) - result = s(:call, val[2], :"!") - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_47(val, _values, result) - result = s(:call, val[1], :"!") - + self.backref_assign_error val[0] + result end -# reduce 48 omitted +def _reduce_48(val, _values, result) + expr, = val + result = value_expr expr -def _reduce_49(val, _values, result) - result = value_expr(val[0]) - result end +# reduce 49 omitted + # reduce 50 omitted -# reduce 51 omitted +def _reduce_51(val, _values, result) + lhs, _, rhs = val + result = logical_op :and, lhs, rhs + + result +end -# reduce 52 omitted +def _reduce_52(val, _values, result) + lhs, _, rhs = val + result = logical_op :or, lhs, rhs -def _reduce_53(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - result end -def _reduce_54(val, _values, result) - self.env.extend(:dynamic) - result = self.lexer.lineno - +def _reduce_53(val, _values, result) + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op + result end -def _reduce_55(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_54(val, _values, result) + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y + result end +# reduce 55 omitted + def _reduce_56(val, _values, result) - result = new_iter nil, val[2], val[4] - result.line = val[1] + result = value_expr(val[0]) - self.env.unextend - result end def _reduce_57(val, _values, result) - result = new_call nil, val[0].to_sym - + lexer.cond.push true + result end def _reduce_58(val, _values, result) - result = val[0].concat val[1].sexp_body # REFACTOR pattern - + lexer.cond.pop + result end def _reduce_59(val, _values, result) - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] - - result, operation = val[2], result - result.insert 1, operation - end - - result -end + _, expr, _, _ = val + result = expr -def _reduce_60(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3], val[1] - result end -def _reduce_61(val, _values, result) - recv, _, msg, args, block = val - call = new_call recv, msg.to_sym, args, val[1] - - block_dup_check call, block +# reduce 60 omitted - block.insert 1, call - result = block - - result -end +# reduce 61 omitted -def _reduce_62(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - - result -end +# reduce 62 omitted def _reduce_63(val, _values, result) - recv, _, msg, args, block = val - call = new_call recv, msg.to_sym, args - - block_dup_check call, block + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line - block.insert 1, call - result = block - result end def _reduce_64(val, _values, result) - result = new_super val[1] - + # self.env.extend(:dynamic) + result = self.lexer.lineno + result end def _reduce_65(val, _values, result) - result = new_yield val[1] - + _, line, body, _ = val + + result = body + result.line = line + + # self.env.unextend + result end def _reduce_66(val, _values, result) - line = val[0].last - result = s(:return, ret_args(val[1])).line(line) - + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno + result end def _reduce_67(val, _values, result) - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) - + call, args = val + result = call.concat args.sexp_body + result end def _reduce_68(val, _values, result) - line = val[0].last - result = s(:next, ret_args(val[1])).line(line) - + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result + result.insert 1, operation + end + result end -# reduce 69 omitted +def _reduce_69(val, _values, result) + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop + + result +end def _reduce_70(val, _values, result) - result = val[1] - + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args, val[1] + + block_dup_check call, block + + block.insert 1, call + result = block + result end -# reduce 71 omitted +def _reduce_71(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3] + + result +end def _reduce_72(val, _values, result) - result = s(:masgn, s(:array, val[1])) - + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args + + block_dup_check call, block + + block.insert 1, call + result = block + result end def _reduce_73(val, _values, result) - result = s(:masgn, val[0]) - + result = new_super val[1] + result end def _reduce_74(val, _values, result) - result = s(:masgn, val[0] << val[1].compact) - + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield + result end def _reduce_75(val, _values, result) - result = s(:masgn, val[0] << s(:splat, val[2])) - + line = val[0].last + result = s(:return, ret_args(val[1])).line(line) + result end def _reduce_76(val, _values, result) - ary1, _, splat, _, ary2 = val + (_, line), args = val + result = s(:break, ret_args(args)).line line - result = list_append ary1, s(:splat, splat) - result.concat ary2.sexp_body - result = s(:masgn, result) - result end def _reduce_77(val, _values, result) - result = s(:masgn, val[0] << s(:splat)) - - result -end + line = val[0].last + result = s(:next, ret_args(val[1])).line(line) -def _reduce_78(val, _values, result) - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - result end +# reduce 78 omitted + def _reduce_79(val, _values, result) - result = s(:masgn, s(:array, s(:splat, val[1]))) - - result -end + result = val[1] -def _reduce_80(val, _values, result) - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - result end +# reduce 80 omitted + def _reduce_81(val, _values, result) - result = s(:masgn, s(:array, s(:splat))) - + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l + result end def _reduce_82(val, _values, result) - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) - + head, = val + result = s(:masgn, head).line head.line + result end -# reduce 83 omitted +def _reduce_83(val, _values, result) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line + + result +end def _reduce_84(val, _values, result) - result = val[1] - + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line + result end def _reduce_85(val, _values, result) - result = s(:array, val[0]) - + ary1, _, splat, _, ary2 = val + + result = list_append ary1, s(:splat, splat).line(splat.line) + result.concat ary2.sexp_body + result = s(:masgn, result).line result.line + result end def _reduce_86(val, _values, result) - result = val[0] << val[1].compact - + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l + result end def _reduce_87(val, _values, result) - result = s(:array, val[0]) - + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end def _reduce_88(val, _values, result) - result = list_append val[0], val[2] - + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l + result end def _reduce_89(val, _values, result) - result = self.assignable val[0] - + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end def _reduce_90(val, _values, result) - result = self.assignable val[0] - + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l + result end def _reduce_91(val, _values, result) - result = self.aryset val[0], val[2] - - result -end + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l -def _reduce_92(val, _values, result) - result = new_attrasgn val[0], val[2], val[1] - result end +# reduce 92 omitted + def _reduce_93(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - + result = val[1] + result end def _reduce_94(val, _values, result) - result = new_attrasgn val[0], val[2], val[1] - + lhs, _ = val + result = s(:array, lhs).line lhs.line + result end def _reduce_95(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 7 - yyerror "dynamic constant assignment" - end + result = val[0] << val[1].compact - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) - result end def _reduce_96(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 8 - yyerror "dynamic constant assignment" - end + item, = val + result = s(:array, item).line item.line - result = s(:const, nil, s(:colon3, val[1].to_sym)) - result end def _reduce_97(val, _values, result) - self.backref_assign_error val[0] - + result = list_append val[0], val[2] + result end def _reduce_98(val, _values, result) result = self.assignable val[0] - + result end def _reduce_99(val, _values, result) result = self.assignable val[0] - debug20 9, val, result - + result end def _reduce_100(val, _values, result) result = self.aryset val[0], val[2] - + result end def _reduce_101(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end def _reduce_102(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - + recv, _, id = val + result = new_attrasgn recv, id + result end def _reduce_103(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end def _reduce_104(val, _values, result) if (self.in_def || self.in_single > 0) then - debug20 10 + debug20 7 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) - + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l + result end def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then - debug20 11 + debug20 8 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) - + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l + result end def _reduce_106(val, _values, result) self.backref_assign_error val[0] - + result end def _reduce_107(val, _values, result) - yyerror "class/module name must be CONSTANT" - - result + line = lexer.lineno + result = self.assignable val[0] + result.line = line + + result end -# reduce 108 omitted +def _reduce_108(val, _values, result) + line = lexer.lineno + result = self.assignable val[0] + result.line = line + debug20 9, val, result + + result +end def _reduce_109(val, _values, result) - result = s(:colon3, val[1].to_sym) - + lhs, _, args, _ = val + result = self.aryset lhs, args + result end def _reduce_110(val, _values, result) - result = val[0].to_sym - + lhs, op, id = val + result = new_attrasgn lhs, id, op + result end def _reduce_111(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - + lhs, _, id = val + result = new_attrasgn lhs, id + result end -# reduce 112 omitted +def _reduce_112(val, _values, result) + result = new_attrasgn val[0], val[2], val[1] -# reduce 113 omitted + result +end -# reduce 114 omitted +def _reduce_113(val, _values, result) + expr, _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 10 + yyerror "dynamic constant assignment" + end + + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l + + result +end + +def _reduce_114(val, _values, result) + _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 11 + yyerror "dynamic constant assignment" + end + + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l + + result +end def _reduce_115(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - + self.backref_assign_error val[0] + result end def _reduce_116(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - + yyerror "class/module name must be CONSTANT" + result end # reduce 117 omitted -# reduce 118 omitted +def _reduce_118(val, _values, result) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno -def _reduce_119(val, _values, result) - result = s(:lit, val[0].to_sym) - result end -# reduce 120 omitted +def _reduce_119(val, _values, result) + result = val[0].to_sym -def _reduce_121(val, _values, result) - result = new_undef val[0] - result end -def _reduce_122(val, _values, result) - lexer.lex_state = :expr_fname - +def _reduce_120(val, _values, result) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line + result end -def _reduce_123(val, _values, result) - result = new_undef val[0], val[3] - +# reduce 121 omitted + +# reduce 122 omitted + +# reduce 123 omitted + +def _reduce_124(val, _values, result) + lexer.lex_state = EXPR_END + result = val[0] + result end -# reduce 124 omitted +def _reduce_125(val, _values, result) + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym -# reduce 125 omitted + result +end # reduce 126 omitted # reduce 127 omitted -# reduce 128 omitted +def _reduce_128(val, _values, result) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno + + result +end # reduce 129 omitted -# reduce 130 omitted +def _reduce_130(val, _values, result) + result = new_undef val[0] -# reduce 131 omitted + result +end + +def _reduce_131(val, _values, result) + lexer.lex_state = EXPR_FNAME -# reduce 132 omitted + result +end + +def _reduce_132(val, _values, result) + result = new_undef val[0], val[3] + + result +end # reduce 133 omitted @@ -4345,1280 +4537,1376 @@ # reduce 194 omitted -def _reduce_195(val, _values, result) +# reduce 195 omitted + +# reduce 196 omitted + +# reduce 197 omitted + +# reduce 198 omitted + +# reduce 199 omitted + +# reduce 200 omitted + +# reduce 201 omitted + +# reduce 202 omitted + +# reduce 203 omitted + +# reduce 204 omitted + +def _reduce_205(val, _values, result) result = new_assign val[0], val[2] - - result -end -def _reduce_196(val, _values, result) - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - result end -def _reduce_197(val, _values, result) +def _reduce_206(val, _values, result) result = new_op_asgn val - + result end -def _reduce_198(val, _values, result) - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) - +def _reduce_207(val, _values, result) + result = new_op_asgn1 val + result end -def _reduce_199(val, _values, result) - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - +def _reduce_208(val, _values, result) + result = new_op_asgn2 val + result end -def _reduce_200(val, _values, result) +def _reduce_209(val, _values, result) result = new_op_asgn2 val - + result end -def _reduce_201(val, _values, result) - result = new_op_asgn2 val - +def _reduce_210(val, _values, result) + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line + result end -def _reduce_202(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - +def _reduce_211(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_203(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_212(val, _values, result) + result = self.lexer.lineno + result end -def _reduce_204(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_213(val, _values, result) + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_205(val, _values, result) - self.backref_assign_error val[0] - +def _reduce_214(val, _values, result) + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn + result end -def _reduce_206(val, _values, result) +def _reduce_215(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end - + result end -def _reduce_207(val, _values, result) +def _reduce_216(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end - + result end -def _reduce_208(val, _values, result) +def _reduce_217(val, _values, result) result = new_call val[0], :+, argl(val[2]) - + result end -def _reduce_209(val, _values, result) +def _reduce_218(val, _values, result) result = new_call val[0], :-, argl(val[2]) - + result end -def _reduce_210(val, _values, result) +def _reduce_219(val, _values, result) result = new_call val[0], :*, argl(val[2]) - + result end -def _reduce_211(val, _values, result) +def _reduce_220(val, _values, result) result = new_call val[0], :"/", argl(val[2]) - + result end -def _reduce_212(val, _values, result) +def _reduce_221(val, _values, result) result = new_call val[0], :"%", argl(val[2]) - + result end -def _reduce_213(val, _values, result) +def _reduce_222(val, _values, result) result = new_call val[0], :**, argl(val[2]) - + result end -def _reduce_214(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - +def _reduce_223(val, _values, result) + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + + result end -def _reduce_215(val, _values, result) +def _reduce_224(val, _values, result) result = new_call val[1], :"+@" - + result end -def _reduce_216(val, _values, result) +def _reduce_225(val, _values, result) result = new_call val[1], :"-@" - + result end -def _reduce_217(val, _values, result) +def _reduce_226(val, _values, result) result = new_call val[0], :"|", argl(val[2]) - + result end -def _reduce_218(val, _values, result) +def _reduce_227(val, _values, result) result = new_call val[0], :"^", argl(val[2]) - - result -end -def _reduce_219(val, _values, result) - result = new_call val[0], :"&", argl(val[2]) - result end -def _reduce_220(val, _values, result) - result = new_call val[0], :"<=>", argl(val[2]) - - result -end +def _reduce_228(val, _values, result) + result = new_call val[0], :"&", argl(val[2]) -def _reduce_221(val, _values, result) - result = new_call val[0], :">", argl(val[2]) - result end -def _reduce_222(val, _values, result) - result = new_call val[0], :">=", argl(val[2]) - - result -end +def _reduce_229(val, _values, result) + result = new_call val[0], :"<=>", argl(val[2]) -def _reduce_223(val, _values, result) - result = new_call val[0], :"<", argl(val[2]) - result end -def _reduce_224(val, _values, result) - result = new_call val[0], :"<=", argl(val[2]) - - result -end +# reduce 230 omitted -def _reduce_225(val, _values, result) +def _reduce_231(val, _values, result) result = new_call val[0], :"==", argl(val[2]) - + result end -def _reduce_226(val, _values, result) +def _reduce_232(val, _values, result) result = new_call val[0], :"===", argl(val[2]) - + result end -def _reduce_227(val, _values, result) +def _reduce_233(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) - + result end -def _reduce_228(val, _values, result) - result = new_match val[0], val[2] - +def _reduce_234(val, _values, result) + lhs, _, rhs = val + result = new_match lhs, rhs + result end -def _reduce_229(val, _values, result) - result = s(:not, new_match(val[0], val[2])) - +def _reduce_235(val, _values, result) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line + result end -def _reduce_230(val, _values, result) - result = new_call val[1], :"!" - +def _reduce_236(val, _values, result) + _, arg = val + result = new_call arg, :"!" + result.line arg.line + result end -def _reduce_231(val, _values, result) +def _reduce_237(val, _values, result) result = new_call value_expr(val[1]), :"~" - + result end -def _reduce_232(val, _values, result) +def _reduce_238(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) - + result end -def _reduce_233(val, _values, result) +def _reduce_239(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) - + result end -def _reduce_234(val, _values, result) +def _reduce_240(val, _values, result) result = logical_op :and, val[0], val[2] - + result end -def _reduce_235(val, _values, result) +def _reduce_241(val, _values, result) result = logical_op :or, val[0], val[2] - + result end -def _reduce_236(val, _values, result) - result = s(:defined, val[2]) - +def _reduce_242(val, _values, result) + (_, line), _, arg = val + result = s(:defined, arg).line line + result end -def _reduce_237(val, _values, result) - result = s(:if, val[0], val[2], val[5]) - +def _reduce_243(val, _values, result) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line + result end -# reduce 238 omitted +# reduce 244 omitted -def _reduce_239(val, _values, result) +# reduce 245 omitted + +# reduce 246 omitted + +# reduce 247 omitted + +# reduce 248 omitted + +def _reduce_249(val, _values, result) + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_250(val, _values, result) + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_251(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 240 omitted +# reduce 252 omitted -def _reduce_241(val, _values, result) +def _reduce_253(val, _values, result) result = args [val[0]] - + result end -def _reduce_242(val, _values, result) +def _reduce_254(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_243(val, _values, result) +def _reduce_255(val, _values, result) result = args [array_to_hash(val[0])] - - result -end -def _reduce_244(val, _values, result) - result = val[1] - result end -# reduce 245 omitted +# reduce 256 omitted -# reduce 246 omitted +def _reduce_257(val, _values, result) + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) -def _reduce_247(val, _values, result) - result = val[0] - result end -def _reduce_248(val, _values, result) - result = val[0] - +def _reduce_258(val, _values, result) + _, args, _ = val + result = args + result end -def _reduce_249(val, _values, result) +# reduce 259 omitted + +# reduce 260 omitted + +# reduce 261 omitted + +# reduce 262 omitted + +def _reduce_263(val, _values, result) result = args val - + result end -def _reduce_250(val, _values, result) +def _reduce_264(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_251(val, _values, result) +def _reduce_265(val, _values, result) result = args [array_to_hash(val[0])] - + result end -def _reduce_252(val, _values, result) +def _reduce_266(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val - + result end -def _reduce_253(val, _values, result) +def _reduce_267(val, _values, result) result = call_args val - result = self.arg_blk_pass val[0], val[1] - + result end -def _reduce_254(val, _values, result) - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] - +def _reduce_268(val, _values, result) + result = call_args [array_to_hash(val[0]), val[1]] + result end -def _reduce_255(val, _values, result) - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] - +def _reduce_269(val, _values, result) + result = call_args [val[0], array_to_hash(val[2]), val[3]] + result end -def _reduce_256(val, _values, result) +def _reduce_270(val, _values, result) result = call_args val - + result end -def _reduce_257(val, _values, result) - result = lexer.cmdarg.stack.dup # TODO: smell? +def _reduce_271(val, _values, result) + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true - + lexer.cmdarg.push false if lookahead + result end -def _reduce_258(val, _values, result) - lexer.cmdarg.stack.replace val[0] - result = val[1] - +def _reduce_272(val, _values, result) + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args + result end -def _reduce_259(val, _values, result) - result = s(:block_pass, val[1]) - +def _reduce_273(val, _values, result) + _, arg = val + result = s(:block_pass, arg).line arg.line + result end -def _reduce_260(val, _values, result) +def _reduce_274(val, _values, result) result = val[1] - + result end -# reduce 261 omitted +# reduce 275 omitted + +def _reduce_276(val, _values, result) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno -def _reduce_262(val, _values, result) - result = s(:array, val[0]) - result end -def _reduce_263(val, _values, result) - result = s(:array, s(:splat, val[1])) - +def _reduce_277(val, _values, result) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line + result end -def _reduce_264(val, _values, result) - result = self.list_append val[0], val[2] - +def _reduce_278(val, _values, result) + args, _, id = val + result = self.list_append args, id + result end -def _reduce_265(val, _values, result) - result = self.list_append val[0], s(:splat, val[3]) - +def _reduce_279(val, _values, result) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) + result end -def _reduce_266(val, _values, result) +def _reduce_280(val, _values, result) result = new_masgn_arg val[0] - + result end -def _reduce_267(val, _values, result) +def _reduce_281(val, _values, result) result = new_masgn_arg val[0], :wrap - + result end -def _reduce_268(val, _values, result) +def _reduce_282(val, _values, result) result = val[0] << val[2] - + result end -def _reduce_269(val, _values, result) - result = self.arg_concat val[0], val[3] - +def _reduce_283(val, _values, result) + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat + result end -def _reduce_270(val, _values, result) - result = s(:splat, val[1]) - +def _reduce_284(val, _values, result) + _, arg = val + result = s(:splat, arg).line arg.line + result end -# reduce 271 omitted +# reduce 285 omitted -# reduce 272 omitted +# reduce 286 omitted -# reduce 273 omitted +# reduce 287 omitted -# reduce 274 omitted +# reduce 288 omitted -# reduce 275 omitted +# reduce 289 omitted -# reduce 276 omitted +# reduce 290 omitted -# reduce 277 omitted +# reduce 291 omitted -# reduce 278 omitted +# reduce 292 omitted -# reduce 279 omitted +# reduce 293 omitted -# reduce 280 omitted +# reduce 294 omitted + +def _reduce_295(val, _values, result) + msg, = val + result = new_call nil, msg.to_sym -def _reduce_281(val, _values, result) - result = new_call nil, val[0].to_sym - result end -def _reduce_282(val, _values, result) +def _reduce_296(val, _values, result) + lexer.cmdarg.push false result = self.lexer.lineno - + result end -def _reduce_283(val, _values, result) - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end +def _reduce_297(val, _values, result) + lexer.cmdarg.pop + result = new_begin val - result.line = val[1] - result end -def _reduce_284(val, _values, result) - debug20 13, val, result - +def _reduce_298(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno + result end -def _reduce_285(val, _values, result) - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these - +def _reduce_299(val, _values, result) + _, line, _ = val + result = s(:begin).line line + result end -def _reduce_286(val, _values, result) - lexer.lex_state = :expr_endarg - +def _reduce_300(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result end -def _reduce_287(val, _values, result) - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] - +def _reduce_301(val, _values, result) + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt + result end -def _reduce_288(val, _values, result) - result = val[1] || s(:nil) +def _reduce_302(val, _values, result) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true - + result end -def _reduce_289(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - +def _reduce_303(val, _values, result) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line + result end -def _reduce_290(val, _values, result) - result = s(:colon3, val[1].to_sym) - +def _reduce_304(val, _values, result) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno + + result +end + +def _reduce_305(val, _values, result) + result = lexer.lineno result end -def _reduce_291(val, _values, result) - result = val[1] || s(:array) +def _reduce_306(val, _values, result) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args - + result.line line + result end -def _reduce_292(val, _values, result) +def _reduce_307(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_293(val, _values, result) +def _reduce_308(val, _values, result) result = new_hash val - + result end -def _reduce_294(val, _values, result) - result = s(:return) - +def _reduce_309(val, _values, result) + (_, line), = val + result = s(:return).line line + result end -def _reduce_295(val, _values, result) +def _reduce_310(val, _values, result) result = new_yield val[2] - + result end -def _reduce_296(val, _values, result) +def _reduce_311(val, _values, result) result = new_yield - + result end -def _reduce_297(val, _values, result) +def _reduce_312(val, _values, result) result = new_yield - + result end -def _reduce_298(val, _values, result) - result = s(:defined, val[3]) - +def _reduce_313(val, _values, result) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line + result end -def _reduce_299(val, _values, result) - result = s(:call, val[2], :"!") - +def _reduce_314(val, _values, result) + _, _, lhs, _ = val + result = new_call lhs, :"!" + result end -def _reduce_300(val, _values, result) +def _reduce_315(val, _values, result) debug20 14, val, result - + result end -def _reduce_301(val, _values, result) - oper, iter = val[0], val[1] - call = oper # FIX +def _reduce_316(val, _values, result) + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line - + # FIX: probably not: call.line = iter.line + result end -# reduce 302 omitted +# reduce 317 omitted -def _reduce_303(val, _values, result) +def _reduce_318(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter - + result end -def _reduce_304(val, _values, result) +def _reduce_319(val, _values, result) result = val[1] # TODO: fix lineno - - result -end -def _reduce_305(val, _values, result) - result = new_if val[1], val[3], val[4] - result end -def _reduce_306(val, _values, result) - result = new_if val[1], val[4], val[3] - - result -end +def _reduce_320(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, t, f -def _reduce_307(val, _values, result) - lexer.cond.push true - result end -def _reduce_308(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_321(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, f, t -def _reduce_309(val, _values, result) - result = new_while val[5], val[2], true - result end -def _reduce_310(val, _values, result) - lexer.cond.push true - - result -end +def _reduce_322(val, _values, result) + _, cond, body, _ = val + result = new_while body, cond, true -def _reduce_311(val, _values, result) - lexer.cond.pop - result end -def _reduce_312(val, _values, result) - result = new_until val[5], val[2], true - +def _reduce_323(val, _values, result) + _, cond, body, _ = val + result = new_until body, cond, true + result end -def _reduce_313(val, _values, result) +def _reduce_324(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line - + result end -def _reduce_314(val, _values, result) +def _reduce_325(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line - - result -end -def _reduce_315(val, _values, result) - lexer.cond.push true - result end -def _reduce_316(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_326(val, _values, result) + _, var, _, iter, body, _ = val + result = new_for iter, var, body -def _reduce_317(val, _values, result) - result = new_for val[4], val[1], val[7] - result end -def _reduce_318(val, _values, result) +def _reduce_327(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_319(val, _values, result) +def _reduce_328(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend - + result end -def _reduce_320(val, _values, result) +def _reduce_329(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_321(val, _values, result) +def _reduce_330(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_322(val, _values, result) +def _reduce_331(val, _values, result) result = self.in_def self.in_def = false - + result end -def _reduce_323(val, _values, result) +def _reduce_332(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend - + result end -def _reduce_324(val, _values, result) +def _reduce_333(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_325(val, _values, result) +def _reduce_334(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_326(val, _values, result) +def _reduce_335(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend - + result end -def _reduce_327(val, _values, result) +def _reduce_336(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_328(val, _values, result) - result = [self.in_def, self.lexer.cmdarg.stack.dup] +def _reduce_337(val, _values, result) + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments + result end -def _reduce_329(val, _values, result) - in_def, cmdarg = val[2] +def _reduce_338(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_339(val, _values, result) + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_330(val, _values, result) - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname - +def _reduce_340(val, _values, result) + lexer.lex_state = EXPR_FNAME + result end -def _reduce_331(val, _values, result) - self.in_single += 1 +def _reduce_341(val, _values, result) + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments + result end -def _reduce_332(val, _values, result) - line, cmdarg = val[5] - result = new_defs val - result[3].line line +def _reduce_342(val, _values, result) + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_333(val, _values, result) - result = s(:break) - +def _reduce_343(val, _values, result) + (_, line), = val + result = s(:break).line line + result end -def _reduce_334(val, _values, result) - result = s(:next) - +def _reduce_344(val, _values, result) + (_, line), = val + result = s(:next).line line + result end -def _reduce_335(val, _values, result) - result = s(:redo) - +def _reduce_345(val, _values, result) + (_, line), = val + result = s(:redo).line line + result end -def _reduce_336(val, _values, result) - result = s(:retry) - +def _reduce_346(val, _values, result) + (_, line), = val + result = s(:retry).line line + result end -def _reduce_337(val, _values, result) +def _reduce_347(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 338 omitted +# reduce 348 omitted + +# reduce 349 omitted + +# reduce 350 omitted -# reduce 339 omitted +# reduce 351 omitted -# reduce 340 omitted +# reduce 352 omitted -# reduce 341 omitted +# reduce 353 omitted -# reduce 342 omitted +# reduce 354 omitted -# reduce 343 omitted +# reduce 355 omitted -# reduce 344 omitted +# reduce 356 omitted -# reduce 345 omitted +# reduce 357 omitted -# reduce 346 omitted +# reduce 358 omitted -# reduce 347 omitted +# reduce 359 omitted -# reduce 348 omitted +# reduce 360 omitted -# reduce 349 omitted +# reduce 361 omitted -# reduce 350 omitted +# reduce 362 omitted -# reduce 351 omitted +# reduce 363 omitted -# reduce 352 omitted +# reduce 364 omitted -# reduce 353 omitted +# reduce 365 omitted -# reduce 354 omitted +# reduce 366 omitted + +# reduce 367 omitted + +# reduce 368 omitted + +# reduce 369 omitted + +# reduce 370 omitted + +# reduce 371 omitted + +# reduce 372 omitted + +def _reduce_373(val, _values, result) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line -def _reduce_355(val, _values, result) - result = s(:if, val[1], val[3], val[4]) - result end -# reduce 356 omitted +# reduce 374 omitted -def _reduce_357(val, _values, result) +def _reduce_375(val, _values, result) result = val[1] - + result end -# reduce 358 omitted +# reduce 376 omitted -def _reduce_359(val, _values, result) +def _reduce_377(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK - + result end -# reduce 360 omitted +# reduce 378 omitted -def _reduce_361(val, _values, result) +def _reduce_379(val, _values, result) result = val[1] - + result end -def _reduce_362(val, _values, result) - result = s(:array, val[0]) - +def _reduce_380(val, _values, result) + sym, = val + + result = s(:array, sym).line lexer.lineno + result end -def _reduce_363(val, _values, result) +def _reduce_381(val, _values, result) result = list_append val[0], val[2] - + result end -def _reduce_364(val, _values, result) +def _reduce_382(val, _values, result) args, = val result = block_var args - + result end -def _reduce_365(val, _values, result) +def _reduce_383(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym - + result end -def _reduce_366(val, _values, result) +def _reduce_384(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 - + result end -def _reduce_367(val, _values, result) +def _reduce_385(val, _values, result) args, _, _ = val result = block_var args, :* - + result end -def _reduce_368(val, _values, result) +def _reduce_386(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 - + result end -def _reduce_369(val, _values, result) +def _reduce_387(val, _values, result) _, splat = val result = block_var :"*#{splat}" - + result end -def _reduce_370(val, _values, result) +def _reduce_388(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args - + result end -def _reduce_371(val, _values, result) +def _reduce_389(val, _values, result) result = block_var :* - + result end -def _reduce_372(val, _values, result) +def _reduce_390(val, _values, result) _, _, args = val result = block_var :*, args - + result end -def _reduce_373(val, _values, result) +def _reduce_391(val, _values, result) result = call_args val - + result end -def _reduce_374(val, _values, result) +def _reduce_392(val, _values, result) result = call_args val - + result end -def _reduce_375(val, _values, result) +def _reduce_393(val, _values, result) result = call_args val - + result end -def _reduce_376(val, _values, result) - result = call_args val - +def _reduce_394(val, _values, result) + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line + result end -def _reduce_377(val, _values, result) +def _reduce_395(val, _values, result) result = args val - + result end -# reduce 378 omitted +# reduce 396 omitted -def _reduce_379(val, _values, result) +def _reduce_397(val, _values, result) result = args val - + result end -def _reduce_380(val, _values, result) +def _reduce_398(val, _values, result) result = args val - + result end -def _reduce_381(val, _values, result) +def _reduce_399(val, _values, result) result = args val - + result end -def _reduce_382(val, _values, result) +def _reduce_400(val, _values, result) result = args val - + result end -def _reduce_383(val, _values, result) +def _reduce_401(val, _values, result) result = args val - + result end -def _reduce_384(val, _values, result) - result = args val - +def _reduce_402(val, _values, result) + result = args(val) << nil + result end -def _reduce_385(val, _values, result) +def _reduce_403(val, _values, result) result = args val - + result end -def _reduce_386(val, _values, result) +def _reduce_404(val, _values, result) result = args val - + result end -def _reduce_387(val, _values, result) +def _reduce_405(val, _values, result) result = args val - + result end -def _reduce_388(val, _values, result) +def _reduce_406(val, _values, result) result = args val - + result end -def _reduce_389(val, _values, result) +def _reduce_407(val, _values, result) result = args val - + result end -def _reduce_390(val, _values, result) +def _reduce_408(val, _values, result) result = args val - + result end -def _reduce_391(val, _values, result) +def _reduce_409(val, _values, result) result = args val - + result end -def _reduce_392(val, _values, result) +def _reduce_410(val, _values, result) result = args val - + result end -def _reduce_393(val, _values, result) +def _reduce_411(val, _values, result) result = args val - + result end -def _reduce_394(val, _values, result) - result = 0 +def _reduce_412(val, _values, result) + result = 0 result end -# reduce 395 omitted +def _reduce_413(val, _values, result) + self.lexer.command_start = true + + result +end -def _reduce_396(val, _values, result) +def _reduce_414(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -def _reduce_397(val, _values, result) - self.lexer.command_start = true - result = s(:args) - +def _reduce_415(val, _values, result) + result = s(:args).line lexer.lineno + result end -def _reduce_398(val, _values, result) +def _reduce_416(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -# reduce 399 omitted +# reduce 417 omitted -def _reduce_400(val, _values, result) +def _reduce_418(val, _values, result) result = args val - + result end -def _reduce_401(val, _values, result) +def _reduce_419(val, _values, result) result = args val - + result end -def _reduce_402(val, _values, result) +def _reduce_420(val, _values, result) result = args val - + result end -def _reduce_403(val, _values, result) - result = s(:shadow, val[0].to_sym) - +def _reduce_421(val, _values, result) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line + result end -# reduce 404 omitted +# reduce 422 omitted -def _reduce_405(val, _values, result) +def _reduce_423(val, _values, result) self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest - + result end -def _reduce_406(val, _values, result) - lpar, args, body = val +def _reduce_424(val, _values, result) + lexer.cmdarg.push false + + result +end + +def _reduce_425(val, _values, result) + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend - + result.line = line + self.env.unextend # TODO: dynapush & dynapop + result end -def _reduce_407(val, _values, result) +def _reduce_426(val, _values, result) result = args val - + result end -def _reduce_408(val, _values, result) +def _reduce_427(val, _values, result) result = val[0] result = 0 if result == s(:args) - - result -end -def _reduce_409(val, _values, result) - result = val[1] - result end -def _reduce_410(val, _values, result) +def _reduce_428(val, _values, result) result = val[1] - - result -end -def _reduce_411(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - result end -def _reduce_412(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_429(val, _values, result) + result = val[1] + result end -def _reduce_413(val, _values, result) - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] +def _reduce_430(val, _values, result) + (_, line), iter, _ = val + result = iter.line line - self.env.unextend - result end -def _reduce_414(val, _values, result) +def _reduce_431(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); @@ -5628,465 +5916,523 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] - + cmd, blk = val + + result = blk + result.insert 1, cmd + result end -def _reduce_415(val, _values, result) +def _reduce_432(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_416(val, _values, result) +def _reduce_433(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_417(val, _values, result) +def _reduce_434(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_418(val, _values, result) +def _reduce_435(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_419(val, _values, result) - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body - +def _reduce_436(val, _values, result) + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno + result end -def _reduce_420(val, _values, result) +def _reduce_437(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] - + result end -def _reduce_421(val, _values, result) +def _reduce_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_422(val, _values, result) +def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym - + result end -def _reduce_423(val, _values, result) +def _reduce_440(val, _values, result) result = new_call val[0], :call, val[2], val[1] - + result end -def _reduce_424(val, _values, result) +def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2] - + result end -def _reduce_425(val, _values, result) +def _reduce_442(val, _values, result) result = new_super val[1] - + result end -def _reduce_426(val, _values, result) - result = s(:zsuper) - +def _reduce_443(val, _values, result) + result = s(:zsuper).line lexer.lineno + result end -def _reduce_427(val, _values, result) +def _reduce_444(val, _values, result) result = new_aref val - + result end -def _reduce_428(val, _values, result) +def _reduce_445(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - - result -end -def _reduce_429(val, _values, result) - result = nil # self.env.dynamic.keys - result end -def _reduce_430(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_446(val, _values, result) + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend - + result end -def _reduce_431(val, _values, result) +def _reduce_447(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - + result end -def _reduce_432(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_448(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + result end -def _reduce_433(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_449(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end - result = new_iter nil, args, body - result.line = line +def _reduce_450(val, _values, result) + result = lexer.cmdarg.store(false) + result +end + +def _reduce_451(val, _values, result) + line, cmdarg, param, cmpstmt = val + result = new_brace_body param, cmpstmt, line self.env.unextend - + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + result end -def _reduce_434(val, _values, result) +def _reduce_452(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end + +def _reduce_453(val, _values, result) + lexer.cmdarg.push false + result +end + +def _reduce_454(val, _values, result) + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop + self.env.unextend + + result +end + +def _reduce_455(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_435(val, _values, result) +def _reduce_456(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] - + result end -# reduce 436 omitted +# reduce 457 omitted -# reduce 437 omitted +# reduce 458 omitted -def _reduce_438(val, _values, result) +def _reduce_459(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above - + result end -def _reduce_439(val, _values, result) +def _reduce_460(val, _values, result) result = nil - + result end -def _reduce_440(val, _values, result) - result = s(:array, val[0]) - +def _reduce_461(val, _values, result) + arg, = val + result = s(:array, arg).line arg.line + result end -# reduce 441 omitted +# reduce 462 omitted -# reduce 442 omitted +# reduce 463 omitted -def _reduce_443(val, _values, result) +def _reduce_464(val, _values, result) result = val[1] - + result end -# reduce 444 omitted +# reduce 465 omitted -def _reduce_445(val, _values, result) - _, body = val +def _reduce_466(val, _values, result) + (_, line), body = val + + result = body || s(:nil).line(line) - result = body || s(:nil) - result end -# reduce 446 omitted +# reduce 467 omitted -def _reduce_447(val, _values, result) +def _reduce_468(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -def _reduce_448(val, _values, result) +def _reduce_469(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -# reduce 449 omitted +# reduce 470 omitted + +def _reduce_471(val, _values, result) + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str -def _reduce_450(val, _values, result) - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] - result end -def _reduce_451(val, _values, result) +def _reduce_472(val, _values, result) debug20 23, val, result - + result end -# reduce 452 omitted +# reduce 473 omitted -def _reduce_453(val, _values, result) +def _reduce_474(val, _values, result) result = self.literal_concat val[0], val[1] - + result end -def _reduce_454(val, _values, result) - result = val[1] - +def _reduce_475(val, _values, result) + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str + result end -def _reduce_455(val, _values, result) +def _reduce_476(val, _values, result) result = new_string val - + result end -def _reduce_456(val, _values, result) - result = new_xstring val[1] - +def _reduce_477(val, _values, result) + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? + result end -def _reduce_457(val, _values, result) +def _reduce_478(val, _values, result) result = new_regexp val - + result end -def _reduce_458(val, _values, result) - result = s(:array) - +def _reduce_479(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_459(val, _values, result) +def _reduce_480(val, _values, result) result = val[1] - + result end -def _reduce_460(val, _values, result) +def _reduce_481(val, _values, result) result = new_word_list - + result end -def _reduce_461(val, _values, result) +def _reduce_482(val, _values, result) result = val[0].dup << new_word_list_entry(val) - + result end -# reduce 462 omitted +# reduce 483 omitted -def _reduce_463(val, _values, result) +def _reduce_484(val, _values, result) result = self.literal_concat val[0], val[1] - + result end -def _reduce_464(val, _values, result) - result = s(:array) - +def _reduce_485(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_465(val, _values, result) - result = val[1] - +def _reduce_486(val, _values, result) + result = lexer.lineno result end -def _reduce_466(val, _values, result) - result = new_symbol_list - +def _reduce_487(val, _values, result) + _, line, list, _, = val + list.line = line + result = list + result end -def _reduce_467(val, _values, result) - result = val[0].dup << new_symbol_list_entry(val) - +def _reduce_488(val, _values, result) + result = new_symbol_list.line lexer.lineno + result end -def _reduce_468(val, _values, result) - result = s(:array) - +def _reduce_489(val, _values, result) + list, * = val + result = list.dup << new_symbol_list_entry(val) + result end -def _reduce_469(val, _values, result) +def _reduce_490(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +def _reduce_491(val, _values, result) result = val[1] - + result end -def _reduce_470(val, _values, result) - result = s(:array) - +def _reduce_492(val, _values, result) + result = s(:array).line lexer.lineno # FIX + result end -def _reduce_471(val, _values, result) +def _reduce_493(val, _values, result) result = val[1] - + result end -def _reduce_472(val, _values, result) +def _reduce_494(val, _values, result) result = new_qword_list - + result end -def _reduce_473(val, _values, result) +def _reduce_495(val, _values, result) result = val[0].dup << new_qword_list_entry(val) - + result end -def _reduce_474(val, _values, result) +def _reduce_496(val, _values, result) result = new_qsym_list - + result end -def _reduce_475(val, _values, result) +def _reduce_497(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) - + result end -def _reduce_476(val, _values, result) - result = s(:str, "") - +def _reduce_498(val, _values, result) + result = s(:str, "").line lexer.lineno + result end -def _reduce_477(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_499(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_478(val, _values, result) +def _reduce_500(val, _values, result) result = nil - + result end -def _reduce_479(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_501(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_480(val, _values, result) +def _reduce_502(val, _values, result) result = nil - + result end -def _reduce_481(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_503(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_482(val, _values, result) +def _reduce_504(val, _values, result) result = new_string val - + result end -def _reduce_483(val, _values, result) +def _reduce_505(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? - + lexer.lex_state = EXPR_BEG + result end -def _reduce_484(val, _values, result) - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) - +def _reduce_506(val, _values, result) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line + result end -def _reduce_485(val, _values, result) +def _reduce_507(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value - + lexer.lex_state = EXPR_BEG + result end -def _reduce_486(val, _values, result) - # TODO: tRCURLY -> tSTRING_END +def _reduce_508(val, _values, result) _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -6096,718 +6442,729 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end - + result end -def _reduce_487(val, _values, result) - result = s(:gvar, val[0].to_sym) +def _reduce_509(val, _values, result) + result = s(:gvar, val[0].to_sym).line lexer.lineno result end -def _reduce_488(val, _values, result) - result = s(:ivar, val[0].to_sym) +def _reduce_510(val, _values, result) + result = s(:ivar, val[0].to_sym).line lexer.lineno result end -def _reduce_489(val, _values, result) - result = s(:cvar, val[0].to_sym) +def _reduce_511(val, _values, result) + result = s(:cvar, val[0].to_sym).line lexer.lineno result end -# reduce 490 omitted +# reduce 512 omitted -def _reduce_491(val, _values, result) - lexer.lex_state = :expr_end +def _reduce_513(val, _values, result) + lexer.lex_state = EXPR_END result = val[1].to_sym - + result end -def _reduce_492(val, _values, result) +def _reduce_514(val, _values, result) result = val[0].to_sym - + result end -# reduce 493 omitted +# reduce 515 omitted -# reduce 494 omitted +# reduce 516 omitted -# reduce 495 omitted +# reduce 517 omitted -# reduce 496 omitted +# reduce 518 omitted -def _reduce_497(val, _values, result) - lexer.lex_state = :expr_end - result = val[1] +def _reduce_519(val, _values, result) + _, result, _ = val - result ||= s(:str, "") + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end - + result end -# reduce 498 omitted +# reduce 520 omitted -def _reduce_499(val, _values, result) +def _reduce_521(val, _values, result) result = -val[1] # TODO: pt_testcase - + result end -# reduce 500 omitted +# reduce 522 omitted -# reduce 501 omitted +# reduce 523 omitted -# reduce 502 omitted +# reduce 524 omitted -# reduce 503 omitted +# reduce 525 omitted -# reduce 504 omitted +# reduce 526 omitted -# reduce 505 omitted +# reduce 527 omitted -# reduce 506 omitted +# reduce 528 omitted -# reduce 507 omitted +# reduce 529 omitted -# reduce 508 omitted +# reduce 530 omitted -def _reduce_509(val, _values, result) - result = s(:nil) +def _reduce_531(val, _values, result) + result = s(:nil).line lexer.lineno result end -def _reduce_510(val, _values, result) - result = s(:self) +def _reduce_532(val, _values, result) + result = s(:self).line lexer.lineno result end -def _reduce_511(val, _values, result) - result = s(:true) +def _reduce_533(val, _values, result) + result = s(:true).line lexer.lineno result end -def _reduce_512(val, _values, result) - result = s(:false) +def _reduce_534(val, _values, result) + result = s(:false).line lexer.lineno result end -def _reduce_513(val, _values, result) - result = s(:str, self.file) +def _reduce_535(val, _values, result) + result = s(:str, self.file).line lexer.lineno result end -def _reduce_514(val, _values, result) - result = s(:lit, lexer.lineno) +def _reduce_536(val, _values, result) + result = s(:lit, lexer.lineno).line lexer.lineno result end -def _reduce_515(val, _values, result) +def _reduce_537(val, _values, result) + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end - + result end -def _reduce_516(val, _values, result) +def _reduce_538(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_517(val, _values, result) +def _reduce_539(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_518(val, _values, result) +def _reduce_540(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_519(val, _values, result) +def _reduce_541(val, _values, result) result = self.assignable val[0] debug20 29, val, result - - result -end -def _reduce_520(val, _values, result) - result = s(:nth_ref, val[0]) result end -def _reduce_521(val, _values, result) - result = s(:back_ref, val[0]) +def _reduce_542(val, _values, result) + result = s(:nth_ref, val[0]).line lexer.lineno result end -def _reduce_522(val, _values, result) - result = nil - +def _reduce_543(val, _values, result) + result = s(:back_ref, val[0]).line lexer.lineno result end -def _reduce_523(val, _values, result) - lexer.lex_state = :expr_beg - +def _reduce_544(val, _values, result) + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_524(val, _values, result) +def _reduce_545(val, _values, result) result = val[2] - + result end -def _reduce_525(val, _values, result) - yyerrok +def _reduce_546(val, _values, result) result = nil - debug20 30, val, result - + result end -def _reduce_526(val, _values, result) +def _reduce_547(val, _values, result) result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; - + result end -def _reduce_527(val, _values, result) - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true - +def _reduce_548(val, _values, result) + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + + result +end + +def _reduce_549(val, _values, result) + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_528(val, _values, result) +def _reduce_550(val, _values, result) result = args val - + result end -def _reduce_529(val, _values, result) +def _reduce_551(val, _values, result) result = args val - + result end -def _reduce_530(val, _values, result) +def _reduce_552(val, _values, result) result = args val - + result end -# reduce 531 omitted +# reduce 553 omitted -def _reduce_532(val, _values, result) +def _reduce_554(val, _values, result) result = val[1] - + result end -def _reduce_533(val, _values, result) +def _reduce_555(val, _values, result) result = nil - + result end -def _reduce_534(val, _values, result) +def _reduce_556(val, _values, result) result = args val - + result end -def _reduce_535(val, _values, result) +def _reduce_557(val, _values, result) result = args val - + result end -def _reduce_536(val, _values, result) +def _reduce_558(val, _values, result) result = args val - + result end -def _reduce_537(val, _values, result) +def _reduce_559(val, _values, result) result = args val - + result end -def _reduce_538(val, _values, result) +def _reduce_560(val, _values, result) result = args val - + result end -def _reduce_539(val, _values, result) +def _reduce_561(val, _values, result) result = args val - + result end -def _reduce_540(val, _values, result) +def _reduce_562(val, _values, result) result = args val - + result end -def _reduce_541(val, _values, result) +def _reduce_563(val, _values, result) result = args val - + result end -def _reduce_542(val, _values, result) +def _reduce_564(val, _values, result) result = args val - + result end -def _reduce_543(val, _values, result) +def _reduce_565(val, _values, result) result = args val - + result end -def _reduce_544(val, _values, result) +def _reduce_566(val, _values, result) result = args val - + result end -def _reduce_545(val, _values, result) +def _reduce_567(val, _values, result) result = args val - + result end -def _reduce_546(val, _values, result) +def _reduce_568(val, _values, result) result = args val - + result end -def _reduce_547(val, _values, result) +def _reduce_569(val, _values, result) result = args val - + result end -def _reduce_548(val, _values, result) +def _reduce_570(val, _values, result) result = args val - + result end -def _reduce_549(val, _values, result) +def _reduce_571(val, _values, result) yyerror "formal argument cannot be a constant" - + result end -def _reduce_550(val, _values, result) +def _reduce_572(val, _values, result) yyerror "formal argument cannot be an instance variable" - + result end -def _reduce_551(val, _values, result) +def _reduce_573(val, _values, result) yyerror "formal argument cannot be a global variable" - + result end -def _reduce_552(val, _values, result) +def _reduce_574(val, _values, result) yyerror "formal argument cannot be a class variable" - + result end -# reduce 553 omitted +# reduce 575 omitted -def _reduce_554(val, _values, result) +def _reduce_576(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier - + result end -# reduce 555 omitted +# reduce 577 omitted -# reduce 556 omitted +# reduce 578 omitted -def _reduce_557(val, _values, result) +def _reduce_579(val, _values, result) result = val[1] - + result end -def _reduce_558(val, _values, result) - case val[0] +def _reduce_580(val, _values, result) + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end - + result end -def _reduce_559(val, _values, result) +def _reduce_581(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item - + result end -# reduce 560 omitted +# reduce 582 omitted + +def _reduce_583(val, _values, result) + # TODO: new_kw_arg + (label, line), arg = val -def _reduce_561(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) - + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line + result end -def _reduce_562(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_584(val, _values, result) + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line - result = s(:array, s(:kwarg, identifier)) - result end -def _reduce_563(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_585(val, _values, result) + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id, expr).line(line)).line line - result = s(:array, s(:kwarg, identifier, val[1])) - result end -def _reduce_564(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_586(val, _values, result) + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line - result = s(:array, s(:kwarg, identifier)) - result end -# reduce 565 omitted +# reduce 587 omitted -def _reduce_566(val, _values, result) +def _reduce_588(val, _values, result) list, _, item = val result = list << item.last - + result end -# reduce 567 omitted +# reduce 589 omitted -def _reduce_568(val, _values, result) +def _reduce_590(val, _values, result) result = args val - + result end -# reduce 569 omitted +# reduce 591 omitted -# reduce 570 omitted +# reduce 592 omitted + +def _reduce_593(val, _values, result) + name = val[1].to_sym + self.assignable name + result = :"**#{name}" -def _reduce_571(val, _values, result) - result = :"**#{val[1]}" - result end -def _reduce_572(val, _values, result) +def _reduce_594(val, _values, result) result = :"**" - + result end -def _reduce_573(val, _values, result) +def _reduce_595(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names - + result end -def _reduce_574(val, _values, result) +def _reduce_596(val, _values, result) result = self.assignable val[0], val[2] - + result end -def _reduce_575(val, _values, result) - result = s(:block, val[0]) - +def _reduce_597(val, _values, result) + optblk, = val + result = s(:block, optblk).line optblk.line + result end -def _reduce_576(val, _values, result) - result = val[0] - result << val[2] - +def _reduce_598(val, _values, result) + optarg, _, optblk = val + result = optarg + result << optblk + result end -def _reduce_577(val, _values, result) - result = s(:block, val[0]) - +def _reduce_599(val, _values, result) + opt, = val + result = s(:block, opt).line opt.line + result end -def _reduce_578(val, _values, result) +def _reduce_600(val, _values, result) result = self.block_append val[0], val[2] - + result end -# reduce 579 omitted +# reduce 601 omitted -# reduce 580 omitted +# reduce 602 omitted -def _reduce_581(val, _values, result) +def _reduce_603(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" - + result end -def _reduce_582(val, _values, result) +def _reduce_604(val, _values, result) name = :"*" self.env[name] = :lvar result = name - + result end -# reduce 583 omitted +# reduce 605 omitted -# reduce 584 omitted +# reduce 606 omitted -def _reduce_585(val, _values, result) +def _reduce_607(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym - + result end -def _reduce_586(val, _values, result) +def _reduce_608(val, _values, result) result = val[1] - + result end -def _reduce_587(val, _values, result) +def _reduce_609(val, _values, result) result = nil - + result end -# reduce 588 omitted +# reduce 610 omitted + +def _reduce_611(val, _values, result) + lexer.lex_state = EXPR_BEG -def _reduce_589(val, _values, result) - lexer.lex_state = :expr_beg - result end -def _reduce_590(val, _values, result) +def _reduce_612(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit - - result -end -def _reduce_591(val, _values, result) - result = s(:array) - result end -def _reduce_592(val, _values, result) - result = val[0] - +def _reduce_613(val, _values, result) + result = s(:array).line lexer.lineno + result end -# reduce 593 omitted +# reduce 614 omitted + +# reduce 615 omitted -def _reduce_594(val, _values, result) +def _reduce_616(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash - + result end -def _reduce_595(val, _values, result) - result = s(:array, val[0], val[2]) - +def _reduce_617(val, _values, result) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line + result end -def _reduce_596(val, _values, result) - result = s(:array, s(:lit, val[0][0].to_sym), val.last) - +def _reduce_618(val, _values, result) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line + result end -def _reduce_597(val, _values, result) +def _reduce_619(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym - result = s(:array, sym, value) - - result -end + result = s(:array, sym, value).line sym.line -def _reduce_598(val, _values, result) - raise "not yet: #{val.inspect}" - # result = s(:array, s(:lit, val[1].to_sym), val[1]) - result end -def _reduce_599(val, _values, result) - result = s(:array, s(:kwsplat, val[1])) - +def _reduce_620(val, _values, result) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line + result end -# reduce 600 omitted +# reduce 621 omitted + +# reduce 622 omitted -# reduce 601 omitted +# reduce 623 omitted -# reduce 602 omitted +# reduce 624 omitted -# reduce 603 omitted +# reduce 625 omitted -# reduce 604 omitted +# reduce 626 omitted -# reduce 605 omitted +# reduce 627 omitted -# reduce 606 omitted +# reduce 628 omitted -# reduce 607 omitted +# reduce 629 omitted -# reduce 608 omitted +# reduce 630 omitted -# reduce 609 omitted +# reduce 631 omitted -# reduce 610 omitted +# reduce 632 omitted -# reduce 611 omitted +# reduce 633 omitted -# reduce 612 omitted +# reduce 634 omitted -# reduce 613 omitted +# reduce 635 omitted -# reduce 614 omitted +# reduce 636 omitted -# reduce 615 omitted +# reduce 637 omitted -# reduce 616 omitted +# reduce 638 omitted -# reduce 617 omitted +# reduce 639 omitted -# reduce 618 omitted +# reduce 640 omitted -# reduce 619 omitted +# reduce 641 omitted -# reduce 620 omitted +# reduce 642 omitted -# reduce 621 omitted +# reduce 643 omitted -# reduce 622 omitted +# reduce 644 omitted + +# reduce 645 omitted -def _reduce_623(val, _values, result) - yyerrok +def _reduce_646(val, _values, result) + yyerrok result end -# reduce 624 omitted +# reduce 647 omitted -# reduce 625 omitted +# reduce 648 omitted -def _reduce_626(val, _values, result) - yyerrok +def _reduce_649(val, _values, result) + yyerrok result end -def _reduce_627(val, _values, result) - result = nil; +def _reduce_650(val, _values, result) + result = nil; result end diff -Nru ruby-ruby-parser-3.11.0/lib/ruby23_parser.y ruby-ruby-parser-3.15.1/lib/ruby23_parser.y --- ruby-ruby-parser-3.11.0/lib/ruby23_parser.y 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby23_parser.y 2021-01-18 16:48:25.000000000 +0000 @@ -23,35 +23,35 @@ tLABEL_END tLONELY -prechigh - right tBANG tTILDE tUPLUS - right tPOW - right tUMINUS_NUM tUMINUS - left tSTAR2 tDIVIDE tPERCENT - left tPLUS tMINUS - left tLSHFT tRSHFT - left tAMPER2 - left tPIPE tCARET - left tGT tGEQ tLT tLEQ - nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH - left tANDOP - left tOROP - nonassoc tDOT2 tDOT3 - right tEH tCOLON - left kRESCUE_MOD - right tEQL tOP_ASGN - nonassoc kDEFINED - right kNOT - left kOR kAND - nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD - nonassoc tLBRACE_ARG - nonassoc tLOWEST preclow + nonassoc tLOWEST + nonassoc tLBRACE_ARG + nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD + left kOR kAND + right kNOT + nonassoc kDEFINED + right tEQL tOP_ASGN + left kRESCUE_MOD + right tEH tCOLON + nonassoc tDOT2 tDOT3 + left tOROP + left tANDOP + nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH + left tGT tGEQ tLT tLEQ + left tPIPE tCARET + left tAMPER2 + left tLSHFT tRSHFT + left tPLUS tMINUS + left tSTAR2 tDIVIDE tPERCENT # TODO: tSTAR2 -> tMULT + right tUMINUS_NUM tUMINUS + right tPOW + right tBANG tTILDE tUPLUS +prechigh rule program: { - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG } top_compstmt { @@ -60,7 +60,8 @@ top_compstmt: top_stmts opt_terms { - result = val[0] + stmt, _ = val + result = stmt } top_stmts: none @@ -72,14 +73,6 @@ | error top_stmt top_stmt: stmt - { - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - } | klBEGIN { if (self.in_def || self.in_single > 0) then @@ -88,14 +81,40 @@ end self.env.extend } - tLCURLY top_compstmt tRCURLY + begin_block + { + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + } + + begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY { - result = new_iter s(:preexe), nil, val[3] + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt } - bodystmt: compstmt opt_rescue opt_else opt_ensure + bodystmt: compstmt opt_rescue k_else { - result = new_body val + res = _values[-2] + yyerror "else without rescue is useless" unless res + } + compstmt + opt_ensure + { + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + } + | compstmt opt_rescue opt_ensure + { + body, resc, ens = val + + result = new_body [body, resc, nil, ens] } compstmt: stmts opt_terms @@ -104,8 +123,8 @@ } stmts: none - | stmt - | stmts terms stmt + | stmt_or_begin # TODO: newline_node ? + | stmts terms stmt_or_begin { result = self.block_append val[0], val[2] } @@ -115,22 +134,30 @@ debug20 2, val, result } + stmt_or_begin: stmt + | klBEGIN + { + yyerror "BEGIN is permitted only at toplevel" + } + stmt: kALIAS fitem { - lexer.lex_state = :expr_fname - result = self.lexer.lineno + lexer.lex_state = EXPR_FNAME } fitem { - result = s(:alias, val[1], val[3]).line(val[2]) + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line } | kALIAS tGVAR tGVAR { - result = s(:valias, val[1].to_sym, val[2].to_sym) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line } | kALIAS tGVAR tBACK_REF { - result = s(:valias, val[1].to_sym, :"$#{val[2]}") + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line } | kALIAS tGVAR tNTH_REF { @@ -142,54 +169,84 @@ } | stmt kIF_MOD expr_value { - result = new_if val[2], val[0], nil + t, _, c = val + result = new_if c, t, nil } | stmt kUNLESS_MOD expr_value { - result = new_if val[2], nil, val[0] + f, _, c = val + result = new_if c, nil, f } | stmt kWHILE_MOD expr_value { - result = new_while val[0], val[2], true + e, _, c = val + result = new_while e, c, true } | stmt kUNTIL_MOD expr_value { - result = new_until val[0], val[2], true + e, _, c = val + result = new_until e, c, true } | stmt kRESCUE_MOD stmt { - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody } | klEND tLCURLY compstmt tRCURLY { + (_, line), _, stmt, _ = val + if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end - result = new_iter s(:postexe), 0, val[2] + + result = new_iter s(:postexe).line(line), 0, stmt } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } - | var_lhs tOP_ASGN command_call + | lhs tEQL mrhs + { + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + } + | mlhs tEQL mrhs_arg + { + result = new_masgn val[0], val[2] + } + | expr + + command_asgn: lhs tEQL command_rhs + { + result = new_assign val[0], val[2] + } + # | lhs tEQL command_asgn + # { + # result = new_assign val[0], val[2] + # } + | var_lhs tOP_ASGN command_rhs { result = new_op_asgn val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn1 val } - | primary_value call_op tIDENTIFIER tOP_ASGN command_call + | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } - | primary_value call_op tCONSTANT tOP_ASGN command_call + | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' @@ -197,55 +254,53 @@ end result.line = val[0].line } - | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call + | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | backref tOP_ASGN command_call + | backref tOP_ASGN command_rhs { self.backref_assign_error val[0] } - | lhs tEQL mrhs - { - result = new_assign val[0], s(:svalue, val[2]) - } - | mlhs tEQL mrhs_arg - { - result = new_masgn val[0], val[2] - } - | expr - command_asgn: lhs tEQL command_call - { - result = new_assign val[0], val[2] - } - | lhs tEQL command_asgn + command_rhs: command_call =tOP_ASGN { - result = new_assign val[0], val[2] + expr, = val + result = value_expr expr } + | command_asgn expr: command_call | expr kAND expr { - result = logical_op :and, val[0], val[2] + lhs, _, rhs = val + result = logical_op :and, lhs, rhs } | expr kOR expr { - result = logical_op :or, val[0], val[2] + lhs, _, rhs = val + result = logical_op :or, lhs, rhs } | kNOT opt_nl expr { - result = s(:call, val[2], :"!") + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op } | tBANG command_call { - result = s(:call, val[1], :"!") + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y } | arg @@ -254,54 +309,71 @@ result = value_expr(val[0]) } + expr_value_do: { + lexer.cond.push true + } + expr_value do + { + lexer.cond.pop + } + { + _, expr, _, _ = val + result = expr + } + command_call: command | block_command block_command: block_call - | block_call dot_or_colon operation2 command_args + | block_call call_op2 operation2 command_args { - result = new_call val[0], val[2].to_sym, val[3] + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line } cmd_brace_block: tLBRACE_ARG { - self.env.extend(:dynamic) + # self.env.extend(:dynamic) result = self.lexer.lineno } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY + brace_body tRCURLY { - result = new_iter nil, val[2], val[4] - result.line = val[1] + _, line, body, _ = val - self.env.unextend + result = body + result.line = line + + # self.env.unextend } fcall: operation { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno } command: fcall command_args =tLOWEST { - result = val[0].concat val[1].sexp_body # REFACTOR pattern + call, args = val + result = call.concat args.sexp_body } | fcall command_args cmd_brace_block { - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block - result, operation = val[2], result + result, operation = block, result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { - result = new_call val[0], val[2].to_sym, val[3], val[1] + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop } | primary_value call_op operation2 command_args cmd_brace_block { @@ -333,17 +405,19 @@ } | kYIELD command_args { - result = new_yield val[1] + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield } - | kRETURN call_args + | k_return call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) + (_, line), args = val + result = s(:break, ret_args(args)).line line } | kNEXT call_args { @@ -360,56 +434,79 @@ mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { - result = s(:masgn, s(:array, val[1])) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l } mlhs_basic: mlhs_head { - result = s(:masgn, val[0]) + head, = val + result = s(:masgn, head).line head.line } | mlhs_head mlhs_item { - result = s(:masgn, val[0] << val[1].compact) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line } | mlhs_head tSTAR mlhs_node { - result = s(:masgn, val[0] << s(:splat, val[2])) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val - result = list_append ary1, s(:splat, splat) + result = list_append ary1, s(:splat, splat).line(splat.line) result.concat ary2.sexp_body - result = s(:masgn, result) + result = s(:masgn, result).line result.line } | mlhs_head tSTAR { - result = s(:masgn, val[0] << s(:splat)) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l } | mlhs_head tSTAR tCOMMA mlhs_post { - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR mlhs_node { - result = s(:masgn, s(:array, s(:splat, val[1]))) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l } | tSTAR mlhs_node tCOMMA mlhs_post { - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR { - result = s(:masgn, s(:array, s(:splat))) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l } | tSTAR tCOMMA mlhs_post { - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l } mlhs_item: mlhs_node @@ -420,7 +517,8 @@ mlhs_head: mlhs_item tCOMMA { - result = s(:array, val[0]) + lhs, _ = val + result = s(:array, lhs).line lhs.line } | mlhs_head mlhs_item tCOMMA { @@ -429,7 +527,8 @@ mlhs_post: mlhs_item { - result = s(:array, val[0]) + item, = val + result = s(:array, item).line item.line } | mlhs_post tCOMMA mlhs_item { @@ -454,7 +553,8 @@ } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + recv, _, id = val + result = new_attrasgn recv, id } | primary_value call_op tCONSTANT { @@ -467,7 +567,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l } | tCOLON3 tCONSTANT { @@ -476,7 +579,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, nil, s(:colon3, val[1].to_sym)) + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -485,24 +591,31 @@ lhs: user_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line } | keyword_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { - result = self.aryset val[0], val[2] + lhs, _, args, _ = val + result = self.aryset lhs, args } | primary_value call_op tIDENTIFIER # REFACTOR { - result = new_attrasgn val[0], val[2], val[1] + lhs, op, id = val + result = new_attrasgn lhs, id, op } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + lhs, _, id = val + result = new_attrasgn lhs, id } | primary_value call_op tCONSTANT # REFACTOR? { @@ -510,21 +623,27 @@ } | primary_value tCOLON2 tCONSTANT { + expr, _, id = val + if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l } | tCOLON3 tCONSTANT { + _, id = val + if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -539,7 +658,8 @@ cpath: tCOLON3 cname { - result = s(:colon3, val[1].to_sym) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno } | cname { @@ -547,27 +667,32 @@ } | primary_value tCOLON2 cname { - result = s(:colon2, val[0], val[2].to_sym) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line } fname: tIDENTIFIER | tCONSTANT | tFID | op { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[0] } | reswords { - lexer.lex_state = :expr_end - result = val[0] + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym } fsym: fname | symbol fitem: fsym { - result = s(:lit, val[0].to_sym) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno } | dsym @@ -578,7 +703,7 @@ | undef_list tCOMMA { - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fitem { @@ -590,6 +715,8 @@ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 + # TODO: tUBANG dead? + | tUBANG reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE @@ -601,68 +728,72 @@ | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL - arg: lhs tEQL arg + arg: lhs tEQL arg_rhs { result = new_assign val[0], val[2] } - | lhs tEQL arg kRESCUE_MOD arg - { - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - } - | var_lhs tOP_ASGN arg + | var_lhs tOP_ASGN arg_rhs { result = new_op_asgn val } - | var_lhs tOP_ASGN arg kRESCUE_MOD arg + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) + result = new_op_asgn1 val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg + | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn2 val } - | primary_value call_op tIDENTIFIER tOP_ASGN arg + | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = new_op_asgn2 val } - | primary_value call_op tCONSTANT tOP_ASGN arg + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { - result = new_op_asgn2 val + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg + | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] } - | primary_value tCOLON2 tCONSTANT tOP_ASGN arg + | tCOLON3 tCONSTANT { - yyerror "constant re-assignment" + result = self.lexer.lineno } - | tCOLON3 tCONSTANT tOP_ASGN arg + tOP_ASGN arg_rhs { - yyerror "constant re-assignment" + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] } - | backref tOP_ASGN arg + | backref tOP_ASGN arg_rhs { - self.backref_assign_error val[0] + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end } | arg tPLUS arg @@ -691,7 +822,9 @@ } | tUMINUS_NUM simple_numeric tPOW arg { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + } | tUPLUS arg { @@ -717,22 +850,7 @@ { result = new_call val[0], :"<=>", argl(val[2]) } - | arg tGT arg - { - result = new_call val[0], :">", argl(val[2]) - } - | arg tGEQ arg - { - result = new_call val[0], :">=", argl(val[2]) - } - | arg tLT arg - { - result = new_call val[0], :"<", argl(val[2]) - } - | arg tLEQ arg - { - result = new_call val[0], :"<=", argl(val[2]) - } + | rel_expr =tCMP | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) @@ -747,15 +865,19 @@ } | arg tMATCH arg { - result = new_match val[0], val[2] + lhs, _, rhs = val + result = new_match lhs, rhs } | arg tNMATCH arg { - result = s(:not, new_match(val[0], val[2])) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line } | tBANG arg { - result = new_call val[1], :"!" + _, arg = val + result = new_call arg, :"!" + result.line arg.line } | tTILDE arg { @@ -783,14 +905,33 @@ } | kDEFINED opt_nl arg { - result = s(:defined, val[2]) + (_, line), _, arg = val + result = s(:defined, arg).line line } | arg tEH arg opt_nl tCOLON arg { - result = s(:if, val[0], val[2], val[5]) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line } | primary + relop: tGT + | tLT + | tGEQ + | tLEQ + + rel_expr: arg relop arg =tGT + { + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + } + | rel_expr relop arg =tGT + { + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + } + arg_value: arg { result = value_expr(val[0]) @@ -810,22 +951,28 @@ result = args [array_to_hash(val[0])] } + arg_rhs: arg =tOP_ASGN + | arg kRESCUE_MOD arg + { + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + } + paren_args: tLPAREN2 opt_call_args rparen { - result = val[1] + _, args, _ = val + result = args } opt_paren_args: none | paren_args opt_call_args: none - { - result = val[0] - } | call_args - { - result = val[0] - } | args tCOMMA { result = args val @@ -847,17 +994,14 @@ | args opt_block_arg { result = call_args val - result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] + result = call_args [array_to_hash(val[0]), val[1]] } | args tCOMMA assocs opt_block_arg { - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] + result = call_args [val[0], array_to_hash(val[2]), val[3]] } | block_arg { @@ -865,18 +1009,45 @@ } command_args: { - result = lexer.cmdarg.stack.dup # TODO: smell? + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead } call_args { - lexer.cmdarg.stack.replace val[0] - result = val[1] + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args } block_arg: tAMPER arg_value { - result = s(:block_pass, val[1]) + _, arg = val + result = s(:block_pass, arg).line arg.line } opt_block_arg: tCOMMA block_arg @@ -887,19 +1058,27 @@ args: arg_value { - result = s(:array, val[0]) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno } | tSTAR arg_value { - result = s(:array, s(:splat, val[1])) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line } | args tCOMMA arg_value { - result = self.list_append val[0], val[2] + args, _, id = val + result = self.list_append args, id } | args tCOMMA tSTAR arg_value { - result = self.list_append val[0], s(:splat, val[3]) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) } mrhs_arg: mrhs @@ -917,11 +1096,14 @@ } | args tCOMMA tSTAR arg_value { - result = self.arg_concat val[0], val[3] + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat } | tSTAR arg_value { - result = s(:splat, val[1]) + _, arg = val + result = s(:splat, arg).line arg.line } primary: literal @@ -936,58 +1118,65 @@ | backref | tFID { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call nil, msg.to_sym } - | kBEGIN + | k_begin { + lexer.cmdarg.push false result = self.lexer.lineno } - bodystmt kEND + bodystmt k_end { - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] + lexer.cmdarg.pop + result = new_begin val } - | tLPAREN_ARG rparen + | tLPAREN_ARG { - debug20 13, val, result + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno } - | tLPAREN_ARG + rparen { - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these + _, line, _ = val + result = s(:begin).line line } - expr + | tLPAREN_ARG + stmt { - lexer.lex_state = :expr_endarg + lexer.lex_state = EXPR_ENDARG } rparen { - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt } | tLPAREN compstmt tRPAREN { - result = val[1] || s(:nil) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true } | primary_value tCOLON2 tCONSTANT { - result = s(:colon2, val[0], val[2].to_sym) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line } | tCOLON3 tCONSTANT { - result = s(:colon3, val[1].to_sym) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno } - | tLBRACK aref_args tRBRACK + | tLBRACK { result = lexer.lineno } aref_args tRBRACK { - result = val[1] || s(:array) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args + result.line line } | tLBRACE { @@ -997,9 +1186,10 @@ { result = new_hash val } - | kRETURN + | k_return { - result = s(:return) + (_, line), = val + result = s(:return).line line } | kYIELD tLPAREN2 call_args rparen { @@ -1015,11 +1205,14 @@ } | kDEFINED opt_nl tLPAREN2 expr rparen { - result = s(:defined, val[3]) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line } | kNOT tLPAREN2 expr rparen { - result = s(:call, val[2], :"!") + _, _, lhs, _ = val + result = new_call lhs, :"!" } | kNOT tLPAREN2 rparen { @@ -1027,11 +1220,11 @@ } | fcall brace_block { - oper, iter = val[0], val[1] - call = oper # FIX + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line + # FIX: probably not: call.line = iter.line } | method_call | method_call brace_block @@ -1045,61 +1238,42 @@ { result = val[1] # TODO: fix lineno } - | kIF expr_value then compstmt if_tail kEND - { - result = new_if val[1], val[3], val[4] - } - | kUNLESS expr_value then compstmt opt_else kEND - { - result = new_if val[1], val[4], val[3] - } - | kWHILE - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_if expr_value then compstmt if_tail k_end { - result = new_while val[5], val[2], true + _, c, _, t, f, _ = val + result = new_if c, t, f } - | kUNTIL + | k_unless expr_value then compstmt opt_else k_end { - lexer.cond.push true + _, c, _, t, f, _ = val + result = new_if c, f, t } - expr_value do + | k_while expr_value_do compstmt k_end { - lexer.cond.pop + _, cond, body, _ = val + result = new_while body, cond, true } - compstmt kEND + | k_until expr_value_do compstmt k_end { - result = new_until val[5], val[2], true + _, cond, body, _ = val + result = new_until body, cond, true } - | kCASE expr_value opt_terms case_body kEND + | k_case expr_value opt_terms case_body k_end { (_, line), expr, _, body, _ = val result = new_case expr, body, line } - | kCASE opt_terms case_body kEND + | k_case opt_terms case_body k_end { (_, line), _, body, _ = val result = new_case nil, body, line } - | kFOR for_var kIN - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_for for_var kIN expr_value_do compstmt k_end { - result = new_for val[4], val[1], val[7] + _, var, _, iter, body, _ = val + result = new_for iter, var, body } - | kCLASS + | k_class { result = self.lexer.lineno } @@ -1111,13 +1285,13 @@ end self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kCLASS tLSHFT + | k_class tLSHFT { result = self.lexer.lineno } @@ -1132,13 +1306,13 @@ self.in_single = 0 self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kMODULE + | k_module { result = self.lexer.lineno } @@ -1150,74 +1324,90 @@ self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kDEF fname + | k_def fname { - result = [self.in_def, self.lexer.cmdarg.stack.dup] + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt { result = lexer.lineno } k_end { - in_def, cmdarg = val[2] + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body } - | kDEF singleton dot_or_colon + | k_def singleton dot_or_colon { - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fname { - self.in_single += 1 + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt k_end { - line, cmdarg = val[5] - result = new_defs val - result[3].line line + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body } | kBREAK { - result = s(:break) + (_, line), = val + result = s(:break).line line } | kNEXT { - result = s(:next) + (_, line), = val + result = s(:next).line line } | kREDO { - result = s(:redo) + (_, line), = val + result = s(:redo).line line } | kRETRY { - result = s(:retry) + (_, line), = val + result = s(:retry).line line } primary_value: primary @@ -1236,7 +1426,15 @@ k_class: kCLASS k_module: kMODULE k_def: kDEF + k_do: kDO + k_do_block: kDO_BLOCK + k_rescue: kRESCUE + k_ensure: kENSURE + k_when: kWHEN + k_else: kELSE + k_elsif: kELSIF k_end: kEND + k_return: kRETURN then: term | kTHEN @@ -1246,9 +1444,11 @@ | kDO_COND if_tail: opt_else - | kELSIF expr_value then compstmt if_tail + | k_elsif expr_value then compstmt if_tail { - result = s(:if, val[1], val[3], val[4]) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line } opt_else: none @@ -1271,7 +1471,9 @@ f_marg_list: f_marg { - result = s(:array, val[0]) + sym, = val + + result = s(:array, sym).line lexer.lineno } | f_marg_list tCOMMA f_marg { @@ -1345,7 +1547,9 @@ } | f_block_arg { - result = call_args val + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line } opt_block_args_tail: tCOMMA block_args_tail @@ -1376,7 +1580,7 @@ } | f_arg tCOMMA { - result = args val + result = args(val) << nil } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { @@ -1417,18 +1621,22 @@ opt_block_param: none { result = 0 } | block_param_def + { + self.lexer.command_start = true + } block_param_def: tPIPE opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } | tOROP { - self.lexer.command_start = true - result = s(:args) + result = s(:args).line lexer.lineno } | tPIPE block_param opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } @@ -1449,26 +1657,33 @@ bvar: tIDENTIFIER { - result = s(:shadow, val[0].to_sym) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line } | f_bad_arg lambda: { self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } - f_larglist lambda_body + f_larglist + { + lexer.cmdarg.push false + } + lambda_body { - lpar, args, body = val + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend + result.line = line + self.env.unextend # TODO: dynapush & dynapop } f_larglist: tLPAREN2 f_args opt_bv_decl rparen @@ -1485,28 +1700,15 @@ { result = val[1] } - | kDO_LAMBDA compstmt kEND + | kDO_LAMBDA bodystmt kEND { result = val[1] } - do_block: kDO_BLOCK - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt kEND + do_block: k_do_block do_body kEND { - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] - - self.env.unextend + (_, line), iter, _ = val + result = iter.line line } block_call: command do_block @@ -1520,14 +1722,16 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] + cmd, blk = val + + result = blk + result.insert 1, cmd } - | block_call dot_or_colon operation2 opt_paren_args + | block_call call_op2 operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } - | block_call dot_or_colon operation2 opt_paren_args brace_block + | block_call call_op2 operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val @@ -1536,7 +1740,7 @@ result = iter2 } - | block_call dot_or_colon operation2 command_args do_block + | block_call call_op2 operation2 command_args do_block { iter1, _, name, args, iter2 = val @@ -1552,8 +1756,10 @@ } paren_args { - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno } | primary_value call_op operation2 opt_paren_args { @@ -1581,7 +1787,7 @@ } | kSUPER { - result = s(:zsuper) + result = s(:zsuper).line lexer.lineno } | primary_value tLBRACK2 opt_call_args rbracket { @@ -1593,39 +1799,55 @@ self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + brace_body tRCURLY { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - _, line, args, _, body, _ = val + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend } - | kDO + | k_do { self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + do_body kEND { - result = nil # self.env.dynamic.keys + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend } - compstmt kEND + + brace_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { result = lexer.cmdarg.store(false) } + opt_block_param compstmt { - _, line, args, _, body, _ = val + line, cmdarg, param, cmpstmt = val - result = new_iter nil, args, body - result.line = line + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + } + do_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { lexer.cmdarg.push false } + opt_block_param + compstmt + { + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop self.env.unextend } - case_body: kWHEN + case_body: k_when { result = self.lexer.lineno } @@ -1638,12 +1860,12 @@ cases: opt_else | case_body - opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue + opt_rescue: k_rescue exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) @@ -1656,7 +1878,8 @@ exc_list: arg_value { - result = s(:array, val[0]) + arg, = val + result = s(:array, arg).line arg.line } | mrhs | none @@ -1667,28 +1890,33 @@ } | none - opt_ensure: kENSURE compstmt + opt_ensure: k_ensure compstmt { - _, body = val + (_, line), body = val - result = body || s(:nil) + result = body || s(:nil).line(line) } | none literal: numeric { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | symbol { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | dsym strings: string { - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str } string: tCHAR @@ -1703,7 +1931,11 @@ string1: tSTRING_BEG string_contents tSTRING_END { - result = val[1] + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str } | tSTRING { @@ -1712,7 +1944,8 @@ xstring: tXSTRING_BEG xstring_contents tSTRING_END { - result = new_xstring val[1] + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? } regexp: tREGEXP_BEG regexp_contents tREGEXP_END @@ -1722,7 +1955,7 @@ words: tWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tWORDS_BEG word_list tSTRING_END { @@ -1746,25 +1979,28 @@ symbols: tSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } - | tSYMBOLS_BEG symbol_list tSTRING_END + | tSYMBOLS_BEG { result = lexer.lineno } symbol_list tSTRING_END { - result = val[1] + _, line, list, _, = val + list.line = line + result = list } symbol_list: none { - result = new_symbol_list + result = new_symbol_list.line lexer.lineno } | symbol_list word tSPACE { - result = val[0].dup << new_symbol_list_entry(val) + list, * = val + result = list.dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tQWORDS_BEG qword_list tSTRING_END { @@ -1773,7 +2009,7 @@ qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno # FIX } | tQSYMBOLS_BEG qsym_list tSTRING_END { @@ -1800,11 +2036,12 @@ string_contents: none { - result = s(:str, "") + result = s(:str, "").line lexer.lineno } | string_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } xstring_contents: none @@ -1813,7 +2050,8 @@ } | xstring_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } regexp_contents: none @@ -1822,7 +2060,8 @@ } | regexp_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } string_content: tSTRING_CONTENT @@ -1834,42 +2073,46 @@ result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? + lexer.lex_state = EXPR_BEG } string_dvar { - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value + lexer.lex_state = EXPR_BEG } - compstmt tRCURLY + compstmt + tSTRING_DEND { - # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -1879,24 +2122,24 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end } - string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } - | tIVAR { result = s(:ivar, val[0].to_sym) } - | tCVAR { result = s(:cvar, val[0].to_sym) } + string_dvar: tGVAR { result = s(:gvar, val[0].to_sym).line lexer.lineno } + | tIVAR { result = s(:ivar, val[0].to_sym).line lexer.lineno } + | tCVAR { result = s(:cvar, val[0].to_sym).line lexer.lineno } | backref symbol: tSYMBEG sym { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[1].to_sym } | tSYMBOL @@ -1908,18 +2151,19 @@ dsym: tSYMBEG xstring_contents tSTRING_END { - lexer.lex_state = :expr_end - result = val[1] + _, result, _ = val - result ||= s(:str, "") + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end @@ -1942,19 +2186,20 @@ | tCONSTANT | tCVAR -keyword_variable: kNIL { result = s(:nil) } - | kSELF { result = s(:self) } - | kTRUE { result = s(:true) } - | kFALSE { result = s(:false) } - | k__FILE__ { result = s(:str, self.file) } - | k__LINE__ { result = s(:lit, lexer.lineno) } +keyword_variable: kNIL { result = s(:nil).line lexer.lineno } + | kSELF { result = s(:self).line lexer.lineno } + | kTRUE { result = s(:true).line lexer.lineno } + | kFALSE { result = s(:false).line lexer.lineno } + | k__FILE__ { result = s(:str, self.file).line lexer.lineno } + | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno } | k__ENCODING__ { + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end } @@ -1979,43 +2224,42 @@ debug20 29, val, result } - backref: tNTH_REF { result = s(:nth_ref, val[0]) } - | tBACK_REF { result = s(:back_ref, val[0]) } + backref: tNTH_REF { result = s(:nth_ref, val[0]).line lexer.lineno } + | tBACK_REF { result = s(:back_ref, val[0]).line lexer.lineno } - superclass: term - { - result = nil - } - | tLT + superclass: tLT { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG + lexer.command_start = true } expr_value term { result = val[2] } - | error term + | none { - yyerrok result = nil - debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; } - | f_args term - { - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true + | { + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + } + f_args term + { + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg @@ -2138,12 +2382,13 @@ f_arg: f_arg_item { - case val[0] + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" @@ -2156,7 +2401,7 @@ if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item @@ -2166,38 +2411,42 @@ f_kw: f_label arg_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? + # TODO: new_kw_arg + (label, line), arg = val + identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line } | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } f_block_kw: f_label primary_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + result = s(:array, s(:kwarg, id, expr).line(line)).line line } | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } f_block_kwarg: f_block_kw @@ -2218,7 +2467,9 @@ f_kwrest: kwrest_mark tIDENTIFIER { - result = :"**#{val[1]}" + name = val[1].to_sym + self.assignable name + result = :"**#{name}" } | kwrest_mark { @@ -2238,17 +2489,20 @@ f_block_optarg: f_block_opt { - result = s(:block, val[0]) + optblk, = val + result = s(:block, optblk).line optblk.line } | f_block_optarg tCOMMA f_block_opt { - result = val[0] - result << val[2] + optarg, _, optblk = val + result = optarg + result << optblk } f_optarg: f_opt { - result = s(:block, val[0]) + opt, = val + result = s(:block, opt).line opt.line } | f_optarg tCOMMA f_opt { @@ -2293,7 +2547,7 @@ singleton: var_ref | tLPAREN2 { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG } expr rparen { @@ -2302,14 +2556,11 @@ result.sexp_type == :lit } - assoc_list: none # [!nil] + assoc_list: none { - result = s(:array) - } - | assocs trailer # [!nil] - { - result = val[0] + result = s(:array).line lexer.lineno } + | assocs trailer assocs: assoc | assocs tCOMMA assoc @@ -2323,26 +2574,27 @@ assoc: arg_value tASSOC arg_value { - result = s(:array, val[0], val[2]) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line } - | tLABEL opt_nl arg_value + | tLABEL arg_value { - result = s(:array, s(:lit, val[0][0].to_sym), val.last) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line } | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym - result = s(:array, sym, value) - } - | tSYMBOL arg_value - { - raise "not yet: #{val.inspect}" - # result = s(:array, s(:lit, val[1].to_sym), val[1]) + result = s(:array, sym, value).line sym.line } | tDSTAR arg_value { - result = s(:array, s(:kwsplat, val[1])) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line } operation: tIDENTIFIER | tCONSTANT | tFID @@ -2350,7 +2602,11 @@ operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT - | tLONELY + | tLONELY # TODO: rename tANDDOT? + + call_op2: call_op + | tCOLON2 + opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN @@ -2370,6 +2626,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: diff -Nru ruby-ruby-parser-3.11.0/lib/ruby24_parser.rb ruby-ruby-parser-3.15.1/lib/ruby24_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby24_parser.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby24_parser.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,7 +1,7 @@ # # DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.4.14 -# from Racc grammer file "". +# This file is automatically generated by Racc 1.5.0 +# from Racc grammar file "". # require 'racc/parser.rb' @@ -10,6 +10,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: @@ -19,888 +20,899 @@ ##### State transition tables begin ### clist = [ -'-607,272,530,-101,-104,-98,272,-607,-607,-607,757,272,222,-607,-607', -'-616,-607,94,95,-105,-84,83,223,-104,-507,-607,666,630,585,84,748,-507', -'627,116,749,-70,-607,-607,115,-607,-607,-607,-607,-607,-96,-100,116', -'826,223,591,223,115,-91,-92,-94,-103,-100,457,-99,-105,665,856,826,585', -'-103,585,-98,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607', -'-607,-607,-607,737,-604,-607,-607,-607,709,650,271,-604,629,-607,-99', -'271,-607,626,96,97,271,-607,505,-607,-264,-607,-607,-607,-607,-607,-607', -'-607,-89,-607,-607,-607,-106,503,756,-101,-104,-91,-92,-94,-101,-104', -'-96,-504,-607,-607,-95,-93,-106,-607,-504,-504,-504,116,-102,-504,-504', -'-504,115,-504,116,-607,-102,940,-105,115,585,-504,-91,-504,-504,-504', -'-91,-92,-94,-91,-92,-94,-94,-504,-504,-90,-504,-504,-504,-504,-504,585', -'-100,-263,-91,-92,-94,-100,-93,116,-103,116,-98,116,115,-103,115,-98', -'115,-101,-106,500,-519,708,-504,-504,-504,-504,-504,-504,-504,-504,-504', -'-504,-504,-504,-504,-504,-99,737,-504,-504,-504,-99,-504,-504,-603,737', -'-504,887,-102,-504,-504,272,-504,791,-504,792,-504,772,-504,-504,-504', -'-504,-504,-504,-504,771,-504,770,-504,219,220,888,-603,-93,-106,94,95', -'-99,274,-106,-102,-504,-504,-504,-504,-102,-504,-601,-504,265,-105,-518', -'116,-507,530,-105,266,115,-504,-504,-507,-507,-507,219,220,-507,-507', -'-507,-93,-507,-101,-93,-103,116,-603,666,-418,-507,115,-507,-507,-507', -'-92,-97,219,220,-93,490,-100,-507,-507,222,-507,-507,-507,-507,-507', -'116,271,116,-507,890,115,714,115,116,611,-507,-98,665,115,-105,-601', -'-93,96,97,-507,666,893,223,-507,-507,-507,-507,-507,-507,-507,-507,-507', -'-507,-507,-507,-507,-507,-601,-518,-507,-507,-507,666,-507,-507,542', -'223,-507,544,1010,-507,-507,611,-507,665,-507,223,-507,-600,-507,-507', -'-507,-507,-507,-507,-507,265,-507,-507,-507,613,612,609,266,215,-519', -'665,223,856,826,-89,1017,-507,-507,-507,-507,611,-507,116,-507,1015', -'681,243,115,-607,-98,896,-510,898,-507,-507,-607,-607,-607,-510,570', -'-607,-607,-607,542,-607,-504,541,613,612,631,573,-90,-504,-607,-607', -'-607,-607,-600,240,219,220,-504,242,241,-607,-607,-99,-607,-607,-607', -'-607,-607,565,216,562,561,560,542,563,-600,544,613,612,581,580,565,777', -'562,561,560,767,563,900,-607,223,-607,-607,-607,-607,-607,-607,-607', -'-607,-607,-607,-607,-607,-607,-607,217,-504,-607,-607,-607,215,793,-607', -'574,902,-607,903,454,-607,-607,611,-607,459,-607,-91,-607,455,-607,-607', -'-607,-607,-607,-607,-607,570,-607,-607,-607,542,-100,458,544,-607,611', -'456,573,986,-97,611,-607,-607,-607,-607,-607,-603,-607,-289,-607,-607', -'852,696,116,-106,-289,-289,-289,115,-607,-102,-289,-289,911,-289,-337', -'-262,216,-607,915,581,580,-337,613,612,243,-290,219,220,215,917,-337', -'769,-290,-289,-289,967,-289,-289,-289,-289,-289,-290,-289,918,753,613', -'612,624,-607,-289,613,612,619,574,-604,644,240,643,-289,611,242,241', -'616,223,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', -'-289,-289,215,-337,-289,-289,-289,714,649,594,921,116,-289,923,-290', -'-289,115,216,592,925,-289,-94,-289,-92,-289,-289,-289,-289,-289,-289', -'-289,-289,-289,215,-289,-290,-103,927,-101,927,523,223,-290,611,613', -'612,-289,-289,-289,521,-95,-290,-289,-289,-289,-289,219,220,-289,-289', -'-289,-514,-289,-517,-289,-104,933,216,-514,-509,-517,-513,-289,-289', -'-289,409,-509,-516,-513,-517,411,410,-289,-289,-516,-289,-289,-289,-289', -'-289,-504,740,-512,-516,-511,215,215,-504,216,-512,-290,-511,967,214', -'613,612,614,581,580,219,220,753,212,-289,-289,-289,-289,-289,-289,-289', -'-289,-289,-289,-289,-289,-289,-289,935,-517,-289,-289,-289,-515,794', -'-289,591,937,-289,733,-515,-289,-289,-516,-289,611,-289,412,-289,407', -'-289,-289,-289,-289,-289,-289,-289,391,-289,116,-289,216,216,731,115', -'565,223,562,561,560,570,563,-289,-289,-289,-289,-289,388,-289,-289,-289', -'573,385,947,-604,-281,948,223,-289,951,-289,-104,-281,-281,-281,-265', -'730,-281,-281,-281,382,-281,215,568,729,618,613,612,609,533,721,-281', -'-281,-281,581,580,215,719,455,717,961,-281,-281,751,-281,-281,-281,-281', -'-281,358,715,968,753,969,714,-280,971,-289,972,711,223,964,-280,562', -'561,560,505,563,574,705,622,-280,-281,-281,-281,-281,-281,-281,-281', -'-281,-281,-281,-281,-281,-281,-281,702,216,-281,-281,-281,701,988,-281', -'322,990,-281,991,625,-281,-281,216,-281,628,-281,995,-281,696,-281,-281', -'-281,-281,-281,-281,-281,714,-281,1000,-281,565,-280,562,561,560,570', -'563,119,120,121,122,123,-281,-281,-281,-281,573,-281,-426,-281,119,120', -'121,122,123,-426,-426,-426,1002,-281,-426,-426,-426,565,-426,562,561', -'560,568,563,1004,1006,1006,-426,-426,-426,535,879,880,581,580,881,110', -'111,-426,-426,223,-426,-426,-426,-426,-426,565,1013,562,561,560,321', -'563,262,635,723,1018,565,685,562,561,560,1019,563,726,927,927,574,927', -'-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426', -'1024,723,-426,-426,-426,-84,988,-426,223,274,-426,218,723,-426,-426', -'-262,-426,637,-426,223,-426,726,-426,-426,-426,-426,-426,-426,-426,243', -'-426,-426,-426,641,223,565,-604,562,561,560,-603,563,701,223,-609,-426', -'-426,642,-426,243,-426,-609,-609,-609,211,243,-609,-609,-609,243,-609', -'240,-426,243,988,242,241,238,239,-609,-609,-609,-609,723,1047,257,258', -'1048,1049,1050,-609,-609,932,-609,-609,-609,-609,-609,1006,1006,1006', -'240,223,246,210,242,241,238,239,209,927,244,565,245,562,561,560,988', -'563,243,112,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609', -'-609,-609,505,274,-609,-609,-609,539,243,-609,503,696,-609,223,531,-609', -'-609,723,-609,653,-609,274,-609,527,-609,-609,-609,-609,-609,-609,-609', -'1006,-609,-609,-609,565,274,562,561,560,570,563,119,120,121,122,123', -'-609,-609,-609,-609,573,-609,-297,-609,119,120,121,122,123,-297,-297', -'-297,696,-609,-297,-297,-297,262,-297,243,796,565,568,562,561,560,243', -'563,-297,-297,274,826,3,581,580,257,258,223,-297,-297,223,-297,-297', -'-297,-297,-297,964,277,562,561,560,240,563,246,223,242,241,238,239,723', -'223,244,565,245,562,561,560,574,563,-297,-297,-297,-297,-297,-297,-297', -'-297,-297,-297,-297,-297,-297,-297,545,243,-297,-297,-297,490,850,-297', -'223,277,-297,826,860,-297,-297,524,-297,723,-297,223,-297,490,-297,-297', -'-297,-297,-297,-297,-297,591,-297,401,-297,240,517,516,595,242,241,238', -'239,778,596,223,-608,-297,-297,-69,-297,,-297,-608,-608,-608,,,-608', -'-608,-608,243,-608,565,-297,562,561,560,,563,,-608,-608,-608,-608,,', -'257,258,,,,-608,-608,,-608,-608,-608,-608,-608,,,,240,,246,,242,241', -'238,239,723,,244,,245,,,,,,,,-608,-608,-608,-608,-608,-608,-608,-608', -'-608,-608,-608,-608,-608,-608,,,-608,-608,-608,,,-608,,,-608,,,-608', -'-608,,-608,,-608,,-608,,-608,-608,-608,-608,-608,-608,-608,,-608,-608', -'-608,565,,562,561,560,570,563,,,,,,-608,-608,-608,-608,573,-608,-627', -'-608,,,,,,-627,-627,-627,,-608,-627,-627,-627,,-627,243,,,568,,,,,-627', -'-627,-627,,,,581,580,257,258,,-627,-627,,-627,-627,-627,-627,-627,,', -',,,240,,246,,242,241,238,239,,,244,,245,,,,574,,-627,-627,-627,-627', -'-627,-627,-627,-627,-627,-627,-627,-627,-627,-627,,,-627,-627,-627,', -',-627,,274,-627,,,-627,-627,,-627,,-627,,-627,,-627,-627,-627,-627,-627', -'-627,-627,,-627,-627,-627,,,,,,,,,,,,,-627,-627,,-627,,-627,297,72,73', -'74,12,60,,,,66,67,-627,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,654,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,-239,,,65', -',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,654,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', -'251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', -',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', -'92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,638,11', -'48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', -'247,252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36', -',,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91', -'83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74', -'12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94', -'95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,', -'257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248', -'244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96', -'97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255', -'256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', -'238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65', -',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', -'251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', -',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', -'92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', -',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247', -'252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61', -'62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83', -'85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', -'258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', -'297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', -'88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', -'259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', -'47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', -',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', -'253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', -',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', -'86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60', -',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', -',22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', -'258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', -'297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', -'88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', -'259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', -'47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', -',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', -'253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', -',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', -'86,87,89,,,,84,92,223,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', -'258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', -'297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', -'88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', -',,255,256,,,,,,257,258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241', -'238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', -'251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62,,,63,,38,240', -',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', -'253,254,249,251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62', -',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', -',,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,', -',36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,8,72,73,74', -'12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257', -'258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', -'72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,', -',,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250', -'248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628', -'-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', -',,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259', -',255,256,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', -'238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628', -'249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', -'47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,8,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628', -'-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38', -'240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11', -'48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', -',,,,,,,,,,,,,,,257,258,,43,,,299,,243,61,62,,,63,,38,240,,246,47,242', -'241,238,239,257,258,,23,,,,,91,83,85,86,87,89,,,240,84,92,,242,241,238', -'239,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69', -'71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,,,,,,,,,', -',,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239', -',,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', -'72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,', -'47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', -'102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', -'63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', -',291,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', -',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', -'89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', -',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', -'48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', -',,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,', -',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94', -'95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47', -',,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,', -',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', -'102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', -'63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', -',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,', -',304,,,61,62,,,63,,303,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,', -',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308', -',,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,320', -',,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,678,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,', -',,,978,,,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,', -',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,116,,,,,115,65,,,81,88,90,,', -'96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,352,,,36,,,61,62,,,63,', -'38,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,', -'96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -'290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62', -',,63,,,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', -',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', -'36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,401,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', -',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', -'89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', -',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', -'48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', -',,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,', -',,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', -',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,223,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', -',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,', -'235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', -',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417', -',,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,535,,61,62', -',,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', -'310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', -'62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,', -',84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,', -'68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,', -',,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,', -',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284', -',47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88', -'90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', -'310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', -'62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', -'100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', -',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', -'100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', -',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,775,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,', -',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', -'65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288', -',,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287', -'85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', -',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,,,47,,,,,', -',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', -'47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', -',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61', -'62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,', -'32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62', -',,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,401,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,,,,,91,287', -'85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', -',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284,,47,,', -',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234', -',,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', -',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', -'47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', -',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', -'47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91', -'287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', -',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', -',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,223,,,,,,65,,291', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,', -',,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,', -'22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', -'45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', -',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,234,,,61,62,,,63,,,,', -',,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,519,,,65,,,81,88,90,,,96', -'97,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205,206', -'185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190', -',,,,,171,178,169,170,166,167,168,127,129,398,397,128,,399,,,,,,,161', -'162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,', -',,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,', -',,,,,,,,,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', -'180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', -'199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', -',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', -'150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', -'204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', -'197,367,366,368,365,172,191,190,,,,,,171,178,169,170,362,363,364,360', -'129,100,99,361,,102,,,,,,,161,162,,157,139,140,141,148,145,147,,,142', -'143,,,,163,164,149,150,,,,,,374,,,,,,,,154,153,,138,160,156,155,151', -'152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200', -'173,193,183,182,203,204,198,181,180,175,201,205,206,185,174,188,192', -'194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178', -'169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148', -'145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187', -'177,200,173,193,183,182,203,204,198,181,180,175,201,205,206,185,174', -'188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,', -'171,178,169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138', -'160,156,155,151,152,146,144,136,159,137,,,165,91,,,,,,,,,,92,,,,,,,', -',158,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205', -'206,185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191', -'190,,,,,,171,178,169,170,166,167,168,127,129,126,,128,,,,,,,,,161,162', -',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,', -',,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,91,,,', -',,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', -'180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', -'199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', -',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', -'150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,91,,,,-627,,,,,,92,-627,-627,-627,,,-627,-627,-627,158,-627,,', -',,,,,,-627,-627,,,,,,,,,,-627,-627,,-627,-627,-627,-627,-627,,,,,,,', -'488,431,,,489,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143', -'-627,,,163,164,149,150,-627,,,,,274,-627,,,,,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,-627,-627,165,,,,,1042,438,,,1043,,', -'-627,,,,,-627,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,,,,,656,431,,,657,,,,,,,,,161,162,158,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', -',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,1040,431,,,1041', -',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', -'149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', -'159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139,140,141', -'148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153,,138', -'160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570,563', -'565,,562,561,560,570,563,,,573,,,,,158,,573,,,,,,,,,,,,,,,568,,,,,,', -'568,,1012,438,581,580,1011,,,578,577,581,580,,,161,162,,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,574,,,274,,,,574,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,689,431,', -',690,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,,,,,692,438,,,693,,,,,,,,,161,162,158,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', -',138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570', -'563,,,,,,,,,,573,,,,,158,,,,,,,,,,,,,,,,,568,761,656,431,,,657,,,578', -'577,581,580,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,574,,,,154,153,,138,160,156,155,151,152,146', -'144,136,159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139', -'140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', -'570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', -'570,563,565,,562,561,560,570,563,568,,573,,,,,568,,573,,581,580,,,,', -',581,580,,,,565,568,562,561,560,570,563,,568,,,,581,580,,,573,578,577', -'581,580,565,574,562,561,560,570,563,565,574,562,561,560,570,563,,,573', -'568,,,,,,573,,574,578,577,581,580,,565,574,562,561,560,570,563,568,', -',,,,,568,,573,,581,580,,,,578,577,581,580,,,,,574,,,,,,,568,,,,,,,,', -'578,577,581,580,,574,,427,431,,,428,574,,,,,,,,161,162,,157,139,140', -'141,148,145,147,,,142,143,,,574,163,164,149,150,,,,,,274,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,434,438,', -',433,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,,,,,743,431,,,744,,,,,,,,,161,162,158,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', -',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,745,438,,,746', -',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', -'149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', -'159,137,,565,165,562,561,560,570,563,565,,562,561,560,570,563,,,573', -',,,,158,,573,,,,,565,,562,561,560,570,563,,,,568,761,,,,,573,568,,578', -'577,581,580,,,,578,577,581,580,,,,,,,,,568,,,,,,,,,488,431,581,580,489', -',,,574,,,,,161,162,574,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,574,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146', -'144,136,159,137,,,165,,,,,864,438,,,865,,,,,,,,,161,162,158,157,139', -'140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', -'570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', -'570,563,,,,,,,,568,551,573,,,,,568,,578,577,581,580,,,,578,577,581,580', -',,,565,568,562,561,560,570,563,,,,578,577,581,580,,,573,,,,,,574,,,', -',,,574,,,,,,,,,568,,,,,,,,574,578,577,581,580,,,,,,,,,,,,,,,,,,,,,,', -',,223,,,,,,,,574' ] - racc_action_table = arr = ::Array.new(26642, nil) +'-629,285,285,-116,587,-115,285,-629,-629,-629,-116,-110,832,-629,-629', +'590,-629,-537,861,-104,-110,832,235,236,-537,-629,1046,285,-102,273', +'274,231,-111,-113,-94,236,-629,-629,281,-629,-629,-629,-629,-629,992', +'-109,831,-114,598,597,-80,-101,-108,-103,763,831,509,-111,236,-115,850', +'602,602,-108,272,271,851,-629,-629,-629,-629,-629,-629,-629,-629,-629', +'-629,-629,-629,-629,-629,-113,591,-629,-629,-629,-104,676,287,287,235', +'-629,-436,287,-629,-102,232,225,226,-629,480,-629,602,-629,-629,-629', +'-629,-629,-629,-629,-106,-629,-629,-629,287,-107,-101,-116,-101,-625', +'-103,-104,-116,860,-104,-626,-629,-629,-304,-103,-102,-629,-112,-102', +'-110,-304,-304,-304,-629,-110,-104,-304,-304,-629,-304,-112,-111,-113', +'602,-102,-100,-111,-113,-101,128,-103,-101,-99,-103,127,602,-114,-102', +'-109,-304,-304,-114,-304,-304,-304,-304,-304,-101,-115,-103,128,128', +'-108,-115,967,127,127,-108,-112,-114,651,-104,236,225,226,225,226,225', +'226,-213,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304', +'-304,-304,479,-625,-304,-304,-304,632,675,128,637,128,-304,648,127,-304', +'127,632,106,107,-304,1004,-304,95,-304,-304,-304,-304,-304,-304,-304', +'96,-304,632,-304,106,107,729,1005,-112,728,650,-625,-626,-112,-115,-527', +'-304,-304,-629,-304,670,-304,-527,824,128,-629,-629,-629,-304,127,477', +'-629,-629,-304,-629,-114,128,634,633,-109,236,127,236,-629,-109,647', +'-623,634,633,630,-103,-105,478,729,-629,-629,731,-629,-629,-629,-629', +'-629,-104,634,633,652,108,109,703,887,582,609,579,578,577,-530,580,1017', +'-113,823,632,-113,-530,108,109,-629,-629,-629,-629,-629,-629,-629,-629', +'-629,-629,-629,-629,-629,-629,-530,231,-629,-629,-629,427,676,-530,778', +'-542,-629,-116,-623,-629,-541,632,-530,780,-629,632,-629,920,-629,-629', +'-629,-629,-629,-629,-629,422,-629,-629,-629,582,-623,579,578,577,-111', +'580,670,-622,634,633,725,-629,-629,-527,-629,1015,-629,793,598,597,-527', +'-527,-527,-629,587,-527,-527,-527,-629,-527,-112,-530,232,-109,725,590', +'787,-527,-108,-527,-527,-527,634,633,405,-110,634,633,640,-527,-527', +'913,-527,-527,-527,-527,-527,810,-539,-536,-527,225,226,-540,-113,-539', +'-536,-527,598,597,-540,632,-622,402,-539,400,-527,880,669,-540,-527', +'-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-622', +'810,-527,-527,-527,-101,-527,-527,591,1035,-527,233,128,-527,-527,397', +'-527,127,-527,632,-527,-110,-527,-527,-527,-527,-527,-527,-527,-539', +'-527,-527,-527,1038,-540,850,128,231,634,633,796,127,-111,632,613,-527', +'-527,-527,-527,669,-527,-213,-527,611,-541,128,-538,-527,-304,-110,127', +'-535,-527,-538,-527,-304,-304,-304,-535,-116,-304,-304,-304,582,-304', +'579,578,577,587,580,634,633,635,-532,-304,-304,-304,128,373,590,-532', +'-102,127,-106,-304,-304,-99,-304,-304,-304,-304,-304,232,231,634,633', +'630,-111,231,-115,541,585,-108,775,1044,230,-542,776,233,539,595,594', +'598,597,228,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304', +'-304,-304,236,-533,-304,-304,-304,-534,826,-304,-533,1047,-304,955,-534', +'-304,-304,955,-304,591,-304,-100,-304,-107,-304,-304,-304,-304,-304', +'-304,-304,232,-304,128,-304,955,232,-109,127,-116,582,1052,579,578,577', +'587,580,-304,-304,-304,-304,627,-304,1017,-304,231,590,339,628,-304', +'-530,740,475,1061,-304,1063,-114,-530,-530,-530,1065,476,-530,-530,-530', +'1067,-530,582,585,579,578,577,256,580,-530,1067,-530,-530,-530,598,597', +'231,729,-629,722,731,-530,-530,662,-530,-530,-530,-530,-530,338,-304', +'276,660,729,231,1017,731,-304,725,253,749,1043,-626,255,254,232,-304', +'725,591,752,1041,227,-530,-530,-530,-530,-530,-530,-530,-530,-530,-530', +'-530,-530,-530,-530,225,226,-530,-530,-530,-629,-530,-530,883,887,-530', +'-626,-629,-530,-530,232,-530,-625,-530,256,-530,-629,-530,-530,-530', +'-530,-530,-530,-530,-304,-530,424,-530,232,883,887,426,425,582,-629', +'579,578,577,587,580,-530,-530,-530,-530,-625,-530,253,-530,231,590,255', +'254,-530,-304,236,1037,224,-530,223,-530,-304,-304,-304,222,780,-629', +'-304,-304,955,-304,-348,585,1008,1017,579,578,577,-348,580,1090,595', +'594,598,597,-305,1067,-348,1067,1067,-304,-304,-305,-304,-304,-304,-304', +'-304,124,-305,236,-305,1067,-295,231,-94,-305,706,236,236,-295,551,236', +'687,232,-305,554,591,717,-295,476,-304,-304,-304,-304,-304,-304,-304', +'-304,-304,-304,-304,-304,-304,-304,-304,-348,-304,-304,-304,718,675', +'-304,722,725,-304,236,-626,-304,732,-305,-304,733,-304,524,-304,737', +'-304,-304,-304,-304,-304,-304,-304,-305,-304,740,-304,-295,232,231,741', +'1008,743,579,578,577,1037,580,745,-304,-304,-629,-105,747,-304,780,755', +'756,-629,-629,-629,-304,757,-629,-629,-629,-304,-629,-114,-304,131,132', +'133,134,135,759,-629,-629,-629,-629,908,909,725,725,910,122,123,-629', +'-629,609,-629,-629,-629,-629,-629,582,725,579,578,577,256,580,782,256', +'232,787,582,256,579,578,577,797,580,131,132,133,134,135,-629,-629,-629', +'-629,-629,-629,-629,-629,-629,-629,-629,-629,-629,-629,798,749,-629', +'-629,-629,256,825,-629,256,-278,-629,680,749,-629,-629,290,-629,256', +'-629,811,-629,752,-629,-629,-629,-629,-629,-629,-629,668,-629,-629,-629', +'266,267,667,236,253,509,663,509,255,254,251,252,-629,-629,-629,-629', +'253,-629,259,-629,255,254,251,252,-629,-444,257,659,258,-629,236,-112', +'-444,-444,-444,828,276,-444,-444,-444,582,-444,579,578,577,587,580,658', +'837,839,-444,-444,-444,522,524,-277,590,656,717,236,649,-444,-444,290', +'-444,-444,-444,-444,-444,290,717,646,643,582,256,579,578,577,585,580', +'582,639,579,578,577,236,580,595,594,598,597,878,-444,-444,-444,-444', +'-444,-444,-444,-444,-444,-444,-444,-444,-444,-444,236,256,-444,-444', +'-444,749,887,-444,725,290,-444,236,749,-444,-444,615,-444,591,-444,614', +'-444,960,-444,-444,-444,-444,-444,-444,-444,415,-444,-444,-444,253,609', +'236,256,255,254,251,252,914,-279,236,549,-444,-444,-651,-444,545,-444', +'919,3,290,-651,-651,-651,-444,236,-651,-651,-651,-444,-651,582,293,579', +'578,577,587,580,542,-651,-651,131,132,133,134,135,256,590,936,717,-651', +'-651,-277,-651,-651,-651,-651,-651,941,256,535,534,266,267,131,132,133', +'134,135,585,946,236,740,949,951,266,267,953,253,955,598,597,255,254', +'251,252,955,236,961,725,236,253,-651,259,-631,255,254,251,252,-651,-79', +'-631,-631,-631,290,-651,-631,-631,-631,725,-631,725,256,524,591,236', +'522,519,725,-631,-631,-631,-631,236,979,-280,-651,-651,266,267,-631', +'-631,290,-631,-631,-631,-631,-631,980,740,-651,983,986,988,253,-651', +'259,990,255,254,251,252,-651,,257,,258,-651,,,,-631,-631,-631,-631,-631', +'-631,-631,-631,-631,-631,-631,-631,-631,-631,,,-631,-631,-631,,,-631', +',,-631,,,-631,-631,,-631,,-631,,-631,,-631,-631,-631,-631,-631,-631', +'-631,,-631,-631,-631,582,,579,578,577,587,580,,,,,,-631,-631,-631,-631', +'590,-631,-630,-631,,,,,-631,-630,-630,-630,,-631,-630,-630,-630,,-630', +'256,,,585,,,,,-630,-630,-630,-630,,,598,597,266,267,,-630,-630,,-630', +'-630,-630,-630,-630,582,,579,578,577,253,580,259,,255,254,251,252,,582', +',579,578,577,,580,591,,-630,-630,-630,-630,-630,-630,-630,-630,-630', +'-630,-630,-630,-630,-630,,749,-630,-630,-630,,,-630,,,-630,,,-630,-630', +'749,-630,,-630,,-630,,-630,-630,-630,-630,-630,-630,-630,,-630,-630', +'-630,582,,579,578,577,587,580,,,,,,-630,-630,-630,-630,590,-630,-651', +'-630,,,,,-630,-651,-651,-651,,-630,-651,-651,-651,582,-651,579,578,577', +'585,580,,,,-651,-651,-651,,595,594,598,597,,,,-651,-651,,-651,-651,-651', +'-651,-651,,,,,,,,,,749,,,,,,,,,,,,591,,-651,-651,-651,-651,-651,-651', +'-651,-651,-651,-651,-651,-651,-651,-651,,,-651,-651,-651,,,-651,,290', +'-651,,,-651,-651,,-651,,-651,,-651,,-651,-651,-651,-651,-651,-651,-651', +',-651,-651,-651,,,,,,,,,,,,,-651,-651,-296,-651,,-651,,,,-296,-296,-296', +'-651,,-296,-296,-296,-651,-296,,,,,,,,,,-296,-296,-296,,,,,,,,-296,-296', +',-296,-296,-296,-296,-296,,,,,,,,,,,,,,,,,,,,,,,,-296,-296,-296,-296', +'-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,,,-296,-296,-296,', +',-296,,,-296,,,-296,-296,,-296,,-296,,-296,,-296,-296,-296,-296,-296', +'-296,-296,,-296,,-296,582,,579,578,577,587,580,,,,,,-296,-296,-296,-296', +'590,-296,-313,-296,,,,,-296,-313,-313,-313,,-296,-313,-313,-313,,-313', +',,,585,,,,,,-313,-313,,595,594,598,597,,,,-313,-313,,-313,-313,-313', +'-313,-313,,,,,,,,,,,,,,,,,,,,,,591,,-313,-313,-313,-313,-313,-313,-313', +'-313,-313,-313,-313,-313,-313,-313,,,-313,-313,-313,,,-313,,293,-313', +',,-313,-313,,-313,,-313,,-313,,-313,-313,-313,-313,-313,-313,-313,,-313', +',-313,,,,,,,,,,,,,-313,-313,,-313,,-313,8,85,86,87,12,78,-313,,,79,80', +'-313,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,', +',,,664,11,49,10,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,', +',266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271', +'257,23,258,,,,103,95,97,98,99,101,,,,96,104,,270,,-252,,,66,,,93,100', +'102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,664,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263', +'273,274,268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38', +'253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101', +',,,96,104,,270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266', +'267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257', +'23,258,,,,103,95,97,98,99,101,,,,96,104,236,270,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,249,250,,,266,267,,43,,,316,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266', +'267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257', +'23,258,,,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102,,,108', +'109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273,274', +'268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259', +'48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104', +',270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +'256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102,,,108,109', +'312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,256,260,261,262,263,273,274,268,269', +'264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255', +'254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,270', +',,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256', +'-652,-652,-652,-652,273,274,,,-652,-652,,,,,,266,267,,43,,,36,,,62,63', +',,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,8,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,11,49,10,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,256,260,261,262,263,273,274,268,269,264,265,,-652,-652', +',,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272', +'271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,-652,-652,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,256,-652,-652,-652,-652,273,274,,,-652,-652,,,,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,256,260,261,262,263,273,274,268,,264,265', +',,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272', +'271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,-652,-652,-652,-652', +'273,274,,,-652,-652,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259', +'48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256', +'-652,-652,-652,-652,273,274,,,-652,-652,,,,,,266,267,,43,,,36,,,62,63', +',,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,', +'106,107,,45,46,44,256,260,261,262,263,273,274,,,264,265,,,,,,266,267', +',43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23', +'258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109', +'312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,256,-652,-652,-652,-652,273,274,,,-652', +'-652,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251', +'252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256,-652,-652,-652', +'-652,273,274,,,-652,-652,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,43,,,316,,,62,63,,,64,,38,,,,48,,,,,,,,23,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,', +'38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43', +',,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'316,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,700,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,', +',,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331', +'332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,', +',,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302', +',300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,', +',49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334', +'116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,320', +',,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,247,,,62,63', +',,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,337,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,', +'247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,', +',,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,', +',83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,', +',,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,128,,,,,127,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,367,,,36,,,62,63', +',,64,,38,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77', +',,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,994,,,247', +',,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,415,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,', +',83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,', +',,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,', +',62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,415,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,432,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,432,,', +',48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,', +',,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,', +',,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +'236,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,', +'335,,,,,,,,,,,,,,,,,,,,994,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48', +',,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,', +',49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,236,,,,,,66,,306,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +'305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,', +',,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,247,,,62,63,,,64,,,,,,,,,,', +',,,,,,,,103,95,97,98,99,101,,,,96,104,,,,537,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325', +',,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,554,,62,63,,,64', +',,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,', +'247,,,62,63,,,64,,302,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96', +'104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49', +',,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305', +'114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,', +',,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120', +'119,121,616,60,112,111,617,,114,122,123,,106,107,,,,335,,,,,,,,,,,,', +',,,,,,,618,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'329,,,120,119,121,616,60,112,111,617,,114,122,123,,106,107,,,,335,,', +',,,,,,,,,,,,,,,,,618,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,,,48,,,,,', +',,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,', +',,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334', +'116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',432,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77', +',,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,', +',,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,', +',,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104', +',,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,', +',,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,300,,48,,,,,,,,246,,,,,103', +'303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62', +'63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,', +'66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99', +'101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,802', +',,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325', +',,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,300,,48', +',,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104', +',,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,', +'335,,,,,,,,,,,,,,,,,,,,1001,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,189,200,190,213,186,206,196,195', +'216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208', +'215,210,382,381,383,380,185,204,203,,,,,,184,191,182,183,377,378,379', +'375,141,112,111,376,,114,,,,,,,173,174,,169,151,152,153,160,157,159', +',,154,155,,,,175,176,161,162,,,,,,389,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,,,,,,,,170,,,,,178,189', +'200,190,213,186,206,196,195,216,217,211,194,193,188,214,218,219,198', +'187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203,', +',,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169,151', +'152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165', +',150,172,168,167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,,104', +',,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211,194', +'193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209,202', +'212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140,', +',,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161', +'162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,103,,,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196', +'195,216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192', +',,,208,215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179', +'180,181,139,141,412,411,140,,413,,,,,,,173,174,,169,151,152,153,160', +'157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,,,,,,,,170,,,,,178', +'189,200,190,213,186,206,196,195,216,217,211,194,193,188,214,218,219', +'198,187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203', +',,,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,', +'104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211', +'194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209', +'202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140', +',,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161', +'162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,,,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195', +'216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208', +'215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181', +'139,141,138,,140,,,,,,,,,173,174,,169,151,152,153,160,157,159,,,154', +'155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,103,,,,,,,,,,104,,507,459,,,508,,,170,,,,', +'178,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,462,466,,,461,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,455,459,,,456', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,894,466,,,895,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,', +',807,466,,,806,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,', +'154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,681,459,,,682,,,,,,170,,', +'173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,683,466,,,684,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,804,459,,,805', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,713,466,,,714,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,582,177,579,578', +'577,587,580,,,,,507,459,,,508,590,,,,,170,,,173,174,178,169,151,152', +'153,160,157,159,,,154,155,585,,,175,176,161,162,,,,,598,597,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,591,683', +'466,,,684,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,,,,,,,,,,681,459,,,682,,,,,,170,,,173,174', +'178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290', +',,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,', +',,,,,,,710,459,,,711,,,,,,170,,,173,174,178,169,151,152,153,160,157', +'159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,,,,,,,,,,772,466,,,773,,,,,,170', +',,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,770,459,,,771,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,1071,466,,,1070', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,1074,459,,,1075,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,582,,579', +'578,577,587,580,,,1076,466,,,1077,,,590,,,170,,,173,174,178,169,151', +'152,153,160,157,159,,,154,155,,,585,175,176,161,162,,,,,,290,598,597', +',,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,582,177,579', +'578,577,587,580,,,,,,591,,,,590,,,,,170,,,,582,178,579,578,577,587,580', +',,,,,,585,,582,590,579,578,577,587,580,595,594,598,597,,,,,582,590,579', +'578,577,587,580,,585,,,,,,,,590,,,598,597,,,585,568,,,,591,,,,595,594', +'598,597,,,585,582,,579,578,577,587,580,,595,594,598,597,,,591,582,590', +'579,578,577,587,580,,,,,,,,591,582,590,579,578,577,587,580,,585,,,,', +',591,,590,,,598,597,,,585,582,,579,578,577,587,580,,,,598,597,,,585', +'582,590,579,578,577,587,580,,,,598,597,,,591,582,590,579,578,577,587', +'580,,585,,,,,,591,,590,595,594,598,597,,,585,,,,,,591,,,595,594,598', +'597,,,585,582,,579,578,577,587,580,,595,594,598,597,,,591,,590,,,,,', +',,,,,,,591,,,,,,,236,,585,,,,,,591,,,,,598,597,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,591' ] + racc_action_table = arr = ::Array.new(26358, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -910,950 +922,938 @@ end clist = [ -'434,313,322,1040,1043,349,64,434,434,434,603,669,22,434,434,61,434,318', -'318,595,684,80,290,746,361,434,670,392,861,80,599,361,389,757,599,684', -'434,434,757,434,434,434,434,434,322,862,871,993,22,993,61,871,821,689', -'690,744,1055,229,350,322,670,732,732,914,1041,936,975,434,434,434,434', -'434,434,434,434,434,434,434,434,434,434,587,1043,434,434,434,550,434', -'313,746,392,434,976,64,434,389,318,318,669,434,285,434,774,434,434,434', -'434,434,434,434,349,434,434,434,229,282,603,1040,1043,821,689,690,1040', -'1043,595,98,434,434,746,434,979,434,98,98,98,603,1042,98,98,98,603,98', -'861,434,434,861,1018,861,342,98,862,98,98,98,821,689,690,821,689,690', -'744,98,98,350,98,98,98,98,98,343,1055,636,821,689,690,1055,692,914,1041', -'936,975,587,914,1041,936,975,587,743,353,281,227,550,98,98,98,98,98', -'98,98,98,98,98,98,98,98,98,976,588,98,98,98,976,98,98,1042,863,98,779', -'745,98,98,29,98,656,98,657,98,632,98,98,98,98,98,98,98,630,98,627,98', -'764,764,795,692,692,979,44,44,227,270,979,1042,98,98,98,98,1042,98,598', -'98,370,1018,226,342,101,456,1018,370,342,98,98,101,101,101,451,451,101', -'101,101,692,101,656,692,657,343,745,486,29,101,343,101,101,101,743,353', -'699,699,692,267,795,101,101,235,101,101,101,101,101,588,29,945,598,797', -'588,798,945,863,507,598,226,486,863,456,598,745,44,44,598,494,800,764', -'101,101,101,101,101,101,101,101,101,101,101,101,101,101,598,41,101,101', -'101,495,101,101,704,962,101,704,962,101,101,394,101,494,101,451,101', -'597,101,101,101,101,101,101,101,27,101,598,101,507,507,507,27,977,42', -'495,699,1026,1026,41,977,101,101,101,101,620,101,762,101,977,507,462', -'762,658,41,801,367,802,101,101,658,658,658,367,711,658,658,658,334,658', -'597,334,394,394,394,711,42,597,658,658,658,658,597,462,341,341,597,462', -'462,658,658,42,658,658,658,658,658,932,977,932,932,932,335,932,597,335', -'620,620,711,711,726,639,726,726,726,620,726,804,864,805,658,658,658', -'658,658,658,658,658,658,658,658,658,658,658,18,597,658,658,658,225,658', -'658,711,806,658,807,225,658,658,623,658,231,658,639,658,225,658,658', -'658,658,658,658,658,890,658,658,658,548,639,230,548,864,386,228,890', -'932,18,383,864,658,658,658,658,864,658,433,658,864,726,820,294,18,433', -'433,433,294,658,658,433,433,824,433,49,827,225,864,828,890,890,49,623', -'623,463,524,538,538,966,833,49,623,524,433,433,966,433,433,433,433,433', -'524,865,834,966,386,386,386,864,865,383,383,383,890,865,428,463,427', -'865,380,463,463,380,835,433,433,433,433,433,433,433,433,433,433,433', -'433,433,433,351,49,433,433,433,836,433,351,840,346,433,841,524,433,346', -'966,351,843,433,428,433,427,433,433,433,433,433,433,433,865,433,307', -'433,749,428,844,427,846,307,849,749,378,380,380,659,433,433,307,433', -'749,433,659,659,659,758,758,659,659,659,362,659,306,433,433,851,351', -'362,366,306,363,659,659,659,126,366,305,363,306,126,126,659,659,305', -'659,659,659,659,659,360,590,365,305,368,904,17,360,307,365,749,368,904', -'17,378,378,378,714,714,20,20,904,17,659,659,659,659,659,659,659,659', -'659,659,659,659,659,659,854,306,659,659,659,364,659,659,589,857,659', -'584,364,659,659,305,659,376,659,207,659,124,659,659,659,659,659,659', -'659,90,659,5,659,904,17,582,5,1050,867,1050,1050,1050,1050,1050,693', -'659,659,659,659,89,659,693,659,1050,88,872,693,59,873,874,693,883,659', -'659,59,59,59,884,579,59,59,59,87,59,324,1050,575,382,376,376,376,324', -'567,59,59,59,1050,1050,601,558,324,557,901,59,59,601,59,59,59,59,59', -'72,556,905,601,906,554,309,908,693,909,553,48,1010,309,1010,1010,1010', -'549,1010,1050,546,385,309,59,59,59,59,59,59,59,59,59,59,59,59,59,59', -'537,324,59,59,59,536,934,59,43,938,59,939,388,59,59,601,59,391,59,944', -'59,528,59,59,59,59,59,59,59,952,59,955,59,1019,309,1019,1019,1019,1019', -'1019,9,9,9,9,9,59,59,59,59,1019,59,30,59,296,296,296,296,296,30,30,30', -'956,59,30,30,30,568,30,568,568,568,1019,568,957,958,960,30,30,30,525', -'765,765,1019,1019,765,765,765,30,30,520,30,30,30,30,30,1024,970,1024', -'1024,1024,40,1024,25,413,568,978,723,518,723,723,723,981,723,568,982', -'983,1019,984,30,30,30,30,30,30,30,30,30,30,30,30,30,30,985,1024,30,30', -'30,515,987,30,514,30,30,19,723,30,30,416,30,418,30,422,30,723,30,30', -'30,30,30,30,30,481,30,30,30,425,497,850,1011,850,850,850,1012,850,1014', -'496,439,30,30,426,30,467,30,439,439,439,16,466,439,439,439,472,439,481', -'30,465,1025,481,481,481,481,439,439,439,439,850,1030,472,472,1031,1032', -'1033,439,439,850,439,439,439,439,439,1034,1035,1036,472,1039,472,15', -'472,472,472,472,13,1044,472,988,472,988,988,988,1045,988,464,3,439,439', -'439,439,439,439,439,439,439,439,439,439,439,439,677,435,439,439,439', -'332,326,439,675,686,439,688,323,439,439,988,439,443,439,691,439,319', -'439,439,439,439,439,439,439,1057,439,439,439,1006,694,1006,1006,1006', -'1006,1006,683,683,683,683,683,439,439,439,439,1006,439,31,439,513,513', -'513,513,513,31,31,31,695,439,31,31,31,668,31,473,662,986,1006,986,986', -'986,698,986,31,31,317,700,1,1006,1006,473,473,703,31,31,312,31,31,31', -'31,31,902,311,902,902,902,473,902,473,710,473,473,473,473,986,660,473', -'852,473,852,852,852,1006,852,31,31,31,31,31,31,31,31,31,31,31,31,31', -'31,336,482,31,31,31,651,725,31,727,31,31,734,739,31,31,308,31,852,31', -'742,31,645,31,31,31,31,31,31,31,347,31,348,31,482,302,301,352,482,482', -'482,482,640,354,300,438,31,31,298,31,,31,438,438,438,,,438,438,438,474', -'438,933,31,933,933,933,,933,,438,438,438,438,,,474,474,,,,438,438,,438', -'438,438,438,438,,,,474,,474,,474,474,474,474,933,,474,,474,,,,,,,,438', -'438,438,438,438,438,438,438,438,438,438,438,438,438,,,438,438,438,,', -'438,,,438,,,438,438,,438,,438,,438,,438,438,438,438,438,438,438,,438', -'438,438,1004,,1004,1004,1004,1004,1004,,,,,,438,438,438,438,1004,438', -'429,438,,,,,,429,429,429,,438,429,429,429,,429,475,,,1004,,,,,429,429', -'429,,,,1004,1004,475,475,,429,429,,429,429,429,429,429,,,,,,475,,475', -',475,475,475,475,,,475,,475,,,,1004,,429,429,429,429,429,429,429,429', -'429,429,429,429,429,429,,,429,429,429,,,429,,429,429,,,429,429,,429', -',429,,429,,429,429,429,429,429,429,429,,429,429,429,,,,,,,,,,,,,429', -'429,,429,,429,974,974,974,974,974,974,,,,974,974,429,,,974,,974,974', -'974,974,974,974,974,,,,,,974,974,974,974,974,974,974,,,974,,,,,446,974', -'974,,974,974,974,974,974,974,974,974,974,,974,974,974,,974,974,,974', -'974,974,446,446,446,446,446,446,446,446,446,446,446,,446,446,,,446,446', -',974,,,974,,,974,974,,,974,,974,446,,446,974,446,446,446,446,446,446', -'446,974,446,,,,974,974,974,974,974,974,,,,974,974,,446,,446,,,974,,', -'974,974,974,,,974,974,234,234,234,234,234,234,,,,234,234,,,,234,,234', -'234,234,234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,661', -'234,234,,234,234,234,234,234,234,234,234,234,,234,234,234,,234,234,', -'234,234,234,661,661,661,661,661,661,661,661,661,661,661,,661,661,,,661', -'661,,234,,,234,,,234,234,,,234,,234,661,,661,234,661,661,661,661,661', -'661,661,234,661,,,,234,234,234,234,234,234,,,,234,234,,661,,,,,234,', -',234,234,234,,,234,234,811,811,811,811,811,811,,,,811,811,,,,811,,811', -'811,811,811,811,811,811,,,,,,811,811,811,811,811,811,811,,,811,,,,,421', -'811,811,,811,811,811,811,811,811,811,811,811,,811,811,811,,811,811,', -'811,811,811,421,421,421,421,421,421,421,421,421,421,421,,421,421,,,421', -'421,,811,,,811,,,811,811,,,811,,811,421,,421,811,421,421,421,421,421', -'421,421,811,421,,,,811,811,811,811,811,811,,,,811,811,,421,,,,,811,', -',811,811,811,,,811,811,209,209,209,209,209,209,,,,209,209,,,,209,,209', -'209,209,209,209,209,209,,,,,,209,209,209,209,209,209,209,,,209,,,,,', -'209,209,,209,209,209,209,209,209,209,209,209,,209,209,209,,209,209,', -'209,209,209,776,776,776,776,776,776,776,776,776,776,776,,776,776,,,776', -'776,,209,,,209,,,209,209,,,209,,209,776,,776,209,776,776,776,776,776', -'776,776,209,776,,,,209,209,209,209,209,209,,,,209,209,,776,,,,,209,', -',209,209,209,,,209,209,941,941,941,941,941,941,,,,941,941,,,,941,,941', -'941,941,941,941,941,941,,,,,,941,941,941,941,941,941,941,,,941,,,,,', -'941,941,,941,941,941,941,941,941,941,941,941,,941,941,941,,941,941,', -'941,941,941,788,788,788,788,788,788,788,788,788,788,788,,788,788,,,788', -'788,,941,,,941,,,941,941,,,941,,941,788,,788,941,788,788,788,788,788', -'788,788,941,788,,,,941,941,941,941,941,941,,,,941,941,,788,,,,,941,', -',941,941,941,,,941,941,709,709,709,709,709,709,,,,709,709,,,,709,,709', -'709,709,709,709,709,709,,,,,,709,709,709,709,709,709,709,,,709,,,,,', -'709,709,,709,709,709,709,709,709,709,709,709,,709,709,709,,709,709,', -'709,709,709,781,781,781,781,781,781,781,781,781,781,781,,781,781,,,781', -'781,,709,,,709,,,709,709,,,709,,709,781,,781,709,781,781,781,781,781', -'781,781,709,781,,,,709,709,709,709,709,709,,,,709,709,,781,,,,,709,', -',709,709,709,,,709,709,859,859,859,859,859,859,,,,859,859,,,,859,,859', -'859,859,859,859,859,859,,,,,,859,859,859,859,859,859,859,,,859,,,,,', -'859,859,,859,859,859,859,859,859,859,859,859,,859,859,859,,859,859,', -'859,859,859,889,889,889,889,889,889,889,889,889,889,889,,889,889,,,889', -'889,,859,,,859,,,859,859,,,859,,859,889,,889,859,889,889,889,889,889', -'889,889,859,889,,,,859,859,859,859,859,859,,,,859,859,,889,,,,,859,', -',859,859,859,,,859,859,858,858,858,858,858,858,,,,858,858,,,,858,,858', -'858,858,858,858,858,858,,,,,,858,858,858,858,858,858,858,,,858,,,,,', -'858,858,,858,858,858,858,858,858,858,858,858,,858,858,858,,858,858,', -'858,858,858,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,858,,,858', -',,858,858,,,858,,858,24,,24,858,24,24,24,24,24,24,24,858,24,,,,858,858', -'858,858,858,858,,,,858,858,,24,,,,,858,,,858,858,858,,,858,858,998,998', -'998,998,998,998,,,,998,998,,,,998,,998,998,998,998,998,998,998,,,,,', -'998,998,998,998,998,998,998,,,998,,,,,,998,998,,998,998,998,998,998', -'998,998,998,998,,998,998,998,,998,998,,998,998,998,697,697,697,697,697', -'697,697,697,697,697,697,,697,697,,,697,697,,998,,,998,,,998,998,,,998', -',998,697,,697,998,697,697,697,697,697,697,697,998,697,,,,998,998,998', -'998,998,998,,,,998,998,,697,,,,,998,,,998,998,998,,,998,998,997,997', -'997,997,997,997,,,,997,997,,,,997,,997,997,997,997,997,997,997,,,,,', -'997,997,997,997,997,997,997,,,997,,,,,,997,997,,997,997,997,997,997', -'997,997,997,997,,997,997,997,,997,997,,997,997,997,886,886,886,886,886', -'886,886,886,886,886,886,,886,886,,,886,886,,997,,,997,,,997,997,,,997', -',997,886,,886,997,886,886,886,886,886,886,886,997,886,,,,997,997,997', -'997,997,997,,,,997,997,,886,,,,,997,,,997,997,997,,,997,997,994,994', -'994,994,994,994,,,,994,994,,,,994,,994,994,994,994,994,994,994,,,,,', -'994,994,994,994,994,994,994,,,994,,,,,,994,994,,994,994,994,994,994', -'994,994,994,994,,994,994,994,,994,994,,994,994,994,783,783,783,783,783', -'783,783,783,783,783,783,,783,783,,,783,783,,994,,,994,,,994,994,,,994', -',994,783,,783,994,783,783,783,783,783,783,783,994,783,,,,994,994,994', -'994,994,994,,,,994,994,,783,,,,,994,,,994,994,994,,,994,994,304,304', -'304,304,304,304,,,,304,304,,,,304,,304,304,304,304,304,304,304,,,,,', -'304,304,304,304,304,304,304,,,304,,,,,,304,304,,304,304,304,304,304', -'304,304,304,304,,304,304,304,,304,304,,304,304,304,441,441,441,441,441', -'441,441,441,441,441,441,,441,441,,,441,441,,304,,,304,,,304,304,,,304', -',304,441,,441,304,441,441,441,441,441,441,441,304,441,,,,304,304,304', -'304,304,304,,,,304,304,,441,,,,,304,,,304,304,304,,,304,304,911,911', -'911,911,911,911,,,,911,911,,,,911,,911,911,911,911,911,911,911,,,,,', -'911,911,911,911,911,911,911,,,911,,,,,,911,911,,911,911,911,911,911', -'911,911,911,911,,911,911,911,,911,911,,911,911,911,786,786,786,786,786', -'786,786,786,786,786,786,,786,786,,,786,786,,911,,,911,,,911,911,,,911', -',911,786,,786,911,786,786,786,786,786,786,786,911,786,,,,911,911,911', -'911,911,911,,,,911,911,,786,,,,,911,,,911,911,911,,,911,911,826,826', -'826,826,826,826,,,,826,826,,,,826,,826,826,826,826,826,826,826,,,,,', -'826,826,826,826,826,826,826,,,826,,,,,,826,826,,826,826,826,826,826', -'826,826,826,826,,826,826,826,,826,826,,826,826,826,279,279,279,279,279', -'279,279,279,279,279,279,,279,279,,,279,279,,826,,,826,,,826,826,,,826', -',826,279,,279,826,279,279,279,279,279,279,279,826,279,,,,826,826,826', -'826,826,826,,,,826,826,,279,,,,,826,,,826,826,826,,,826,826,815,815', -'815,815,815,815,,,,815,815,,,,815,,815,815,815,815,815,815,815,,,,,', -'815,815,815,815,815,815,815,,,815,,,,,,815,815,,815,815,815,815,815', -'815,815,815,815,,815,815,815,,815,815,,815,815,815,485,485,485,485,485', -'485,485,485,485,485,485,,485,485,,,485,485,,815,,,815,,,815,815,,,815', -',815,485,,485,815,485,485,485,485,485,485,485,815,485,,,,815,815,815', -'815,815,815,,,,815,815,485,485,,,,,815,,,815,815,815,,,815,815,816,816', -'816,816,816,816,,,,816,816,,,,816,,816,816,816,816,816,816,816,,,,,', -'816,816,816,816,816,816,816,,,816,,,,,,816,816,,816,816,816,816,816', -'816,816,816,816,,816,816,816,,816,816,,816,816,816,790,790,790,790,790', -'790,790,790,790,790,790,,790,790,,,790,790,,816,,,816,,,816,816,,,816', -',816,790,,790,816,790,790,790,790,790,790,790,816,790,,,,816,816,816', -'816,816,816,,,,816,816,,790,,,,,816,,,816,816,816,,,816,816,907,907', -'907,907,907,907,,,,907,907,,,,907,,907,907,907,907,907,907,907,,,,,', -'907,907,907,907,907,907,907,,,907,,,,,,907,907,,907,907,907,907,907', -'907,907,907,907,,907,907,907,,907,907,,907,907,907,534,534,534,534,534', -'534,534,534,534,534,534,,534,534,,,534,534,,907,,,907,,,907,907,,,907', -',907,534,,534,907,534,534,534,534,534,534,534,907,534,,,,907,907,907', -'907,907,907,,,,907,907,,534,,,,,907,,,907,907,907,,,907,907,299,299', -'299,299,299,299,,,,299,299,,,,299,,299,299,299,299,299,299,299,,,,,', -'299,299,299,299,299,299,299,,,299,,,,,,299,299,,299,299,299,299,299', -'299,299,299,299,,299,299,299,,299,299,,299,299,299,483,483,483,483,483', -'483,483,,,483,483,,,,,,483,483,,299,,,299,,,299,299,,,299,,299,483,', -'483,299,483,483,483,483,483,483,483,299,483,,,,299,299,299,299,299,299', -',,,299,299,,,,,,,299,,,299,299,299,,,299,299,989,989,989,989,989,989', -',,,989,989,,,,989,,989,989,989,989,989,989,989,,,,,,989,989,989,989', -'989,989,989,,,989,,,,,,989,989,,989,989,989,989,989,989,989,989,989', -',989,989,989,,989,989,,989,989,989,460,460,460,460,460,460,460,460,460', -'460,460,,460,460,,,460,460,,989,,,989,,,989,989,,,989,,989,460,,460', -'989,460,460,460,460,460,460,460,989,460,,,,989,989,989,989,989,989,', -',,989,989,,,,,,,989,,,989,989,989,,,989,989,329,329,329,329,329,329', -',,,329,329,,,,329,,329,329,329,329,329,329,329,,,,,,329,329,329,329', -'329,329,329,,,329,,,,,,329,329,,329,329,329,329,329,329,329,329,329', -',329,329,329,,329,329,,329,329,329,461,461,461,461,461,461,461,461,461', -'461,461,,461,461,,,461,461,,329,,,329,,,329,329,,,329,,329,461,,461', -'329,461,461,461,461,461,461,461,329,461,,,,329,329,329,329,329,329,', -',,329,329,,,,,,,329,,,329,329,329,,,329,329,708,708,708,708,708,708', -',,,708,708,,,,708,,708,708,708,708,708,708,708,,,,,,708,708,708,708', -'708,708,708,,,708,,,,,,708,708,,708,708,708,708,708,708,708,708,708', -',708,708,708,,708,708,,708,708,708,477,477,477,477,477,477,477,,,477', -'477,,,,,,477,477,,708,,,708,,,708,708,,,708,,708,477,,477,708,477,477', -'477,477,477,477,477,708,477,,,,708,708,708,708,708,708,,,,708,708,,', -',,,,708,,,708,708,708,,,708,708,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2', -'2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,,2', -'2,2,478,478,478,478,478,478,478,,,478,478,,,,,,478,478,,2,,,2,,,2,2', -',,2,,2,478,,478,2,478,478,478,478,478,478,478,2,478,,,,2,2,2,2,2,2,', -',,2,2,,,,,,,2,,,2,2,2,,,2,2,759,759,759,759,759,759,,,,759,759,,,,759', -',759,759,759,759,759,759,759,,,,,,759,759,759,759,759,759,759,,,759', -',,,,,759,759,,759,759,759,759,759,759,759,759,759,,759,759,759,,759', -'759,,759,759,759,479,479,479,479,479,479,479,,,479,479,,,,,,479,479', -',759,,,759,,,759,759,,,759,,759,479,,479,759,479,479,479,479,479,479', -'479,759,479,,,,759,759,759,759,759,759,,,,759,759,,,,,,,759,,,759,759', -'759,,,759,759,868,868,868,868,868,868,,,,868,868,,,,868,,868,868,868', -'868,868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,868,868', -',868,868,868,868,868,868,868,868,868,,868,868,868,,868,868,,868,868', -'868,480,480,480,480,480,480,480,,,480,480,,,,,,480,480,,868,,,868,,', -'868,868,,,868,,868,480,,480,868,480,480,480,480,480,480,480,868,480', -',,,868,868,868,868,868,868,,,,868,868,,,,,,,868,,,868,868,868,,,868', -'868,760,760,760,760,760,760,,,,760,760,,,,760,,760,760,760,760,760,760', -'760,,,,,,760,760,760,760,760,760,760,,,760,,,,,,760,760,,760,760,760', -'760,760,760,760,760,760,,760,760,760,,760,760,,760,760,760,484,484,484', -'484,484,484,484,484,,484,484,,,,,,484,484,,760,,,760,,,760,760,,,760', -',760,484,,484,760,484,484,484,484,484,484,484,760,484,,,,760,760,760', -'760,760,760,,,,760,760,,,,,,,760,,,760,760,760,,,760,760,766,766,766', -'766,766,766,,,,766,766,,,,766,,766,766,766,766,766,766,766,,,,,,766', -'766,766,766,766,766,766,,,766,,,,,,766,766,,766,766,766,766,766,766', -'766,766,766,,766,766,766,,766,766,,766,766,766,471,471,471,471,471,471', -'471,,,471,471,,,,,,471,471,,766,,,766,,,766,766,,,766,,766,471,,471', -'766,471,471,471,471,471,471,471,766,471,,,,766,766,766,766,766,766,', -',,766,766,,,,,,,766,,,766,766,766,,,766,766,407,407,407,407,407,407', -',,,407,407,,,,407,,407,407,407,407,407,407,407,,,,,,407,407,407,407', -'407,407,407,,,407,,,,,,407,407,407,407,407,407,407,407,407,407,407,407', -',407,407,407,,407,407,,407,407,407,476,476,476,476,476,476,476,,,476', -'476,,,,,,476,476,,407,,,407,,,407,407,,,407,,407,476,,476,407,476,476', -'476,476,476,476,476,407,476,,,,407,407,407,407,407,407,,,,407,407,,', -',,,,407,,,407,407,407,,,407,407,36,36,36,36,36,36,,,,36,36,,,,36,,36', -'36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36,,36,36,36', -'36,36,36,36,36,36,,36,36,36,,36,36,,36,36,36,468,,,,,,,,,,,,,,,,468', -'468,,36,,,36,,470,36,36,,,36,,36,468,,468,36,468,468,468,468,470,470', -',36,,,,,36,36,36,36,36,36,,,470,36,36,,470,470,470,470,,36,,,36,36,36', -',,36,36,583,583,583,583,583,583,,,,583,583,,,,583,,583,583,583,583,583', -'583,583,,,,,,583,583,583,583,583,583,583,,,583,,,,,,583,583,,583,583', -'583,583,583,583,583,583,583,,583,583,583,,583,583,,583,583,583,469,', -',,,,,,,,,,,,,,469,469,,583,,,583,,,583,583,,,583,,583,469,,469,583,469', -'469,469,469,,,,583,,,,,583,583,583,583,583,583,,,,583,583,,,,,,,583', -',,583,583,583,,,583,583,586,586,586,586,586,586,,,,586,586,,,,586,,586', -'586,586,586,586,586,586,,,,,,586,586,586,586,586,586,586,,,586,,,,,', -'586,586,,586,586,586,586,586,586,586,586,586,,586,586,586,,586,586,', -'586,586,586,,,,,,,,,,,,,,,,,,,,586,,,586,,,586,586,,,586,,586,,,,586', -',,,,,,,586,,,,,586,586,586,586,586,586,,,,586,586,,,,,,,586,,,586,586', -'586,,,586,586,257,257,257,,257,,,,257,257,,,,257,,257,257,257,257,257', -'257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257,257', -'257,257,257,257,257,,257,257,257,,257,257,,257,257,257,,,,,,,,,,,,,', -',,,,,,257,,,257,,,257,257,,,257,,,,,,257,,,,,,,,257,,,,,257,257,257', -'257,257,257,,,,257,257,,,,,,,257,,,257,257,257,,,257,257,455,455,455', -',455,,,,455,455,,,,455,,455,455,455,455,455,455,455,,,,,,455,455,455', -'455,455,455,455,,,455,,,,,,,455,,,455,455,455,455,455,455,455,455,455', -'455,455,455,,455,455,,455,455,455,,,,,,,,,,,,,,,,,,,,455,,,455,,,455', -'455,,,455,,455,,455,,455,,,,,,,,455,,,,,455,455,455,455,455,455,,,,455', -'455,,,,,,,455,,455,455,455,455,,,455,455,8,8,8,8,8,,,,8,8,,,,8,,8,8', -'8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8', -',8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,', -'8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,1015,1015,1015,,1015,,,,1015', -'1015,,,,1015,,1015,1015,1015,1015,1015,1015,1015,,,,,,1015,1015,1015', -'1015,1015,1015,1015,,,1015,,,,,,,1015,,,1015,1015,1015,1015,1015,1015', -'1015,1015,1015,1015,1015,1015,,1015,1015,,1015,1015,1015,,,,,,,,,,,', -',,,,,,,,1015,,,1015,,,1015,1015,,,1015,,1015,,1015,,1015,,,,,,,,1015', -',,,,1015,1015,1015,1015,1015,1015,,,,1015,1015,,,,,,,1015,,1015,1015', -'1015,1015,,,1015,1015,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23,23,23', -'23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23,23,23', -',23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23,,,23,', -',,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,,,23,23,23', -',,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32', -'32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,', -'32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32', -',,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32,,,32', -'32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33', -'33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,,33,33', -',33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33,,,,,,', -',33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33,33,34', -'34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34', -'34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,,34,34', -'34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,,,34,,,', -',34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37,37,37,', -'37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,', -'37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,', -',,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37', -'37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,,38', -',38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38', -'38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38', -',,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,,,38', -',,38,38,38,,,38,38,940,940,940,,940,,,,940,940,,,,940,,940,940,940,940', -'940,940,940,,,,,,940,940,940,940,940,940,940,,,940,,,,,,,940,,,940,940', -'940,940,940,940,940,940,,940,940,940,,940,940,,940,940,940,,,,,,,,,', -',,,,,,,,,,940,,,940,,,940,940,,,940,,940,,,,940,,,,,,,,940,,,,,940,940', -'940,940,940,940,,,,940,940,,,,,,,940,,,940,940,940,,,940,940,915,915', -'915,,915,,,,915,915,,,,915,,915,915,915,915,915,915,915,,,,,,915,915', -'915,915,915,915,915,,,915,,,,,,,915,,,915,915,915,915,915,915,915,915', -',915,915,915,,915,915,,,,915,,,,,,,,,,,,,,,,,,,,915,,,915,,,915,915', -',,915,,,,,,,,,,,,,,,,,,,915,915,915,915,915,915,,,,915,915,,,,,,,915', -',,915,915,915,,,915,915,45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45', -'45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45', -'45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45', -',,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45', -',,45,45,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46', -'46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46', -'46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,', -'46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,47,47', -'47,,47,,,,47,47,,,,47,,47,47,47,47,47,47,47,,,,,,47,47,47,47,47,47,47', -',,47,,,,,,,47,,,47,47,47,47,47,47,47,47,,47,47,47,,47,47,,47,47,47,', -',,,,,,,,,,,,,,,,,,47,,,47,,,47,47,,,47,,,,,,47,,,,,,,,47,,,,,47,47,47', -'47,47,47,,,,47,47,,,,,,,47,,,47,47,47,,,47,47,62,62,62,,62,,,,62,62', -',,,62,,62,62,62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62', -',,62,62,62,62,62,62,62,62,62,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,', -',,,,,,62,,,62,,,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62', -',,,62,62,,,,,,,62,,62,62,62,62,,,62,62,66,66,66,,66,,,,66,66,,,,66,', -'66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66', -'66,66,66,66,66,66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,,,,,,66,', -',66,,,66,66,,,66,,,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,,66,66,,', -',,,,66,,,66,66,66,,,66,66,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67', -'67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67', -'67,,67,67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67', -',,,,,67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67', -',,67,67,70,70,70,,70,,,,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70', -'70,70,70,70,70,,,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70', -'70,,70,70,70,,,,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,70,,,,,,,', -'70,,,,,70,70,70,70,70,70,,,,70,70,70,,,,,70,70,,,70,70,70,,,70,70,71', -'71,71,,71,,,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71', -'71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,,,71,,', -',,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,71,,,,,,,,,,,,,,,,,71,71,71,71', -'71,71,,,,71,71,,,,,,,71,,,71,71,71,,,71,71,903,903,903,,903,,,,903,903', -',,,903,,903,903,903,903,903,903,903,,,,,,903,903,903,903,903,903,903', -',,903,,,,,,,903,,,903,903,903,903,903,903,903,903,,903,903,903,,903', -'903,,,,903,,,,,,,,,,,,,,,,,,,,903,,,903,,,903,903,,,903,,,,,,,,,,,,', -',,,,,,903,903,903,903,903,903,,,,903,903,,,,,,,903,,,903,903,903,,,903', -'903,888,888,888,,888,,,,888,888,,,,888,,888,888,888,888,888,888,888', -',,,,,888,888,888,888,888,888,888,,,888,,,,,,,888,,,888,888,888,888,888', -'888,888,888,,888,888,888,,888,888,,888,888,888,,,,,,,,,,,,,,,,,,,,888', -',,888,,,888,888,,,888,,,,,,888,,,,,,,,888,,,,,888,888,888,888,888,888', -',,,888,888,,,,,,,888,,,888,888,888,,,888,888,887,887,887,,887,,,,887', -'887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887,887,887,887,887', -'887,,,887,,,,,,,887,,,887,887,887,887,887,887,887,887,887,887,887,887', -',887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887,,,887,887,,,887,', -',,887,,887,,,,,,,,887,,,,,887,887,887,887,887,887,,,,887,887,,,,,,,887', -',887,887,887,887,,,887,887,869,869,869,,869,,,,869,869,,,,869,,869,869', -'869,869,869,869,869,,,,,,869,869,869,869,869,869,869,,,869,,,,,,,869', -',,869,869,869,869,869,869,869,869,,869,869,869,,869,869,,869,869,869', -',,,,,,,,,,,,,,,,,,,869,,,869,,,869,869,,,869,,,,,,869,,,,,,,,869,,,', -',869,869,869,869,869,869,,,,869,869,,,,,,,869,,,869,869,869,,,869,869', -'114,114,114,114,114,,,,114,114,,,,114,,114,114,114,114,114,114,114,', -',,,,114,114,114,114,114,114,114,,,114,,,,,,114,114,114,114,114,114,114', -'114,114,114,114,114,,114,114,114,,114,114,,114,114,114,,,,,,,,,,,,,', -',,,,,,114,,,114,,,114,114,,,114,,114,,,,114,,,,,,,,114,,,,,114,114,114', -'114,114,114,,,,114,114,,,,,,114,114,,,114,114,114,,,114,114,119,119', -'119,,119,,,,119,119,,,,119,,119,119,119,119,119,119,119,,,,,,119,119', -'119,119,119,119,119,,,119,,,,,,,119,,,119,119,119,119,119,119,119,119', -',119,119,119,,119,119,,119,119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119', -'119,,,119,,,,,,119,,,,,,,,119,,,,,119,119,119,119,119,119,,,,119,119', -',,,,,,119,,,119,119,119,,,119,119,120,120,120,,120,,,,120,120,,,,120', -',120,120,120,120,120,120,120,,,,,,120,120,120,120,120,120,120,,,120', -',,,,,,120,,,120,120,120,120,120,120,120,120,,120,120,120,,120,120,,120', -'120,120,,,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120,,,,,,', -',120,,,,,120,120,120,120,120,120,,,,120,120,,,,,,,120,,,120,120,120', -',,120,120,121,121,121,,121,,,,121,121,,,,121,,121,121,121,121,121,121', -'121,,,,,,121,121,121,121,121,121,121,,,121,,,,,,,121,,,121,121,121,121', -'121,121,121,121,,121,121,121,,121,121,,121,121,121,,,,,,,,,,,,,,,,,', -',,121,,,121,,,121,121,,,121,,,,,,121,,,,,,,,121,,,,,121,121,121,121', -'121,121,,,,121,121,,,,,,,121,,,121,121,121,,,121,121,122,122,122,,122', -',,,122,122,,,,122,,122,122,122,122,122,122,122,,,,,,122,122,122,122', -'122,122,122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122,,122,122', -'122,,122,122,,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122', -',,,,,122,,,,,,,,122,,,,,122,122,122,122,122,122,,,,122,122,,,,,,,122', -',,122,122,122,,,122,122,123,123,123,123,123,,,,123,123,,,,123,,123,123', -'123,123,123,123,123,,,,,,123,123,123,123,123,123,123,,,123,,,,,,123', -'123,,123,123,123,123,123,123,123,123,123,,123,123,123,,123,123,,123', -'123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123,,,123,,123,,,,123,,,', -',,,,123,,,,,123,123,123,123,123,123,,,,123,123,,,,,,,123,,,123,123,123', -',,123,123,210,210,210,,210,,,,210,210,,,,210,,210,210,210,210,210,210', -'210,,,,,,210,210,210,210,210,210,210,,,210,,,,,,,210,,,210,210,210,210', -'210,210,210,210,,210,210,210,,210,210,,210,210,210,,,,,,,,,,,,,,,,,', -',,210,,,210,,,210,210,,,210,,210,,,,210,,,,,,,,210,,,,,210,210,210,210', -'210,210,,,,210,210,,,,,,,210,,,210,210,210,,,210,210,211,211,211,,211', -',,,211,211,,,,211,,211,211,211,211,211,211,211,,,,,,211,211,211,211', -'211,211,211,,,211,,,,,,,211,,,211,211,211,211,211,211,211,211,,211,211', -'211,,211,211,,211,211,211,,,,,,,,,,,,,,,,,,,,211,,,211,,,211,211,,,211', -',,,,,211,,,,,,,,211,,,,,211,211,211,211,211,211,,,,211,211,,,,,,,211', -',,211,211,211,,,211,211,212,212,212,,212,,,,212,212,,,,212,,212,212', -'212,212,212,212,212,,,,,,212,212,212,212,212,212,212,,,212,,,,,,,212', -',,212,212,212,212,212,212,212,212,212,212,212,212,,212,212,,212,212', -'212,,,,,,,,,,,,,,,,,,,,212,,,212,,,212,212,,,212,,212,,212,,212,,,,', -',,,212,,,,,212,212,212,212,212,212,,,,212,212,,,,,,,212,,212,212,212', -'212,,,212,212,217,217,217,,217,,,,217,217,,,,217,,217,217,217,217,217', -'217,217,,,,,,217,217,217,217,217,217,217,,,217,,,,,,,217,,,217,217,217', -'217,217,217,217,217,,217,217,217,,217,217,,217,217,217,,,,,,,,,,,,,', -',,,,,,217,,,217,,,217,217,,,217,,,,,,217,,,,,,,,217,,,,,217,217,217', -'217,217,217,,,,217,217,,,,,,,217,,,217,217,217,,,217,217,218,218,218', -',218,,,,218,218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218,218', -'218,218,218,218,,,218,,,,,,,218,,,218,218,218,218,218,218,218,218,,218', -'218,218,,218,218,,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,,,218,218', -',,218,,218,,,,218,,,,,,,,218,,,,,218,218,218,218,218,218,,,,218,218', -',,,,,,218,,,218,218,218,,,218,218,219,219,219,,219,,,,219,219,,,,219', -',219,219,219,219,219,219,219,,,,,,219,219,219,219,219,219,219,,,219', -',,,,,,219,,,219,219,219,219,219,219,219,219,,219,219,219,,219,219,,219', -'219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219,,,,,,219,,,,,,', -',219,,,,,219,219,219,219,219,219,,,,219,219,,,,,,,219,,,219,219,219', -',,219,219,220,220,220,,220,,,,220,220,,,,220,,220,220,220,220,220,220', -'220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220,220', -'220,220,220,220,,220,220,220,,220,220,,220,220,220,,,,,,,,,,,,,,,,,', -',,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,220,,,,,220,220,220,220', -'220,220,,,,220,220,,,,,,,220,,,220,220,220,,,220,220,221,221,221,,221', -',,,221,221,,,,221,,221,221,221,221,221,221,221,,,,,,221,221,221,221', -'221,221,221,,,221,,,,,,,221,,,221,221,221,221,221,221,221,221,,221,221', -'221,,221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221', -',,,,,221,,,,,,,,221,,,,,221,221,221,221,221,221,,,,221,221,,,,,,,221', -',,221,221,221,,,221,221,222,222,222,,222,,,,222,222,,,,222,,222,222', -'222,222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,,222', -',,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222,222', -',,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222,,,,,,222,,,,,,,,222,,,', -',222,222,222,222,222,222,,,,222,222,222,,,,,,222,,,222,222,222,,,222', -'222,856,856,856,,856,,,,856,856,,,,856,,856,856,856,856,856,856,856', -',,,,,856,856,856,856,856,856,856,,,856,,,,,,,856,,,856,856,856,856,856', -'856,856,856,,856,856,856,,856,856,,856,856,856,,,,,,,,,,,,,,,,,,,,856', -',,856,,,856,856,,,856,,,,,,856,,,,,,,,856,,,,,856,856,856,856,856,856', -',,,856,856,,,,,,,856,,,856,856,856,,,856,856,741,741,741,,741,,,,741', -'741,,,,741,,741,741,741,741,741,741,741,,,,,,741,741,741,741,741,741', -'741,,,741,,,,,,,741,,,741,741,741,741,741,741,741,741,,741,741,741,', -'741,741,,741,741,741,,,,,,,,,,,,,,,,,,,,741,,,741,,,741,741,,,741,,741', -',,,741,,,,,,,,741,,,,,741,741,741,741,741,741,,,,741,741,,,,,,,741,', -',741,741,741,,,741,741,721,721,721,,721,,,,721,721,,,,721,,721,721,721', -'721,721,721,721,,,,,,721,721,721,721,721,721,721,,,721,,,,,,,721,,,721', -'721,721,721,721,721,721,721,,721,721,721,,721,721,,721,721,721,,,,,', -',,,,,,,,,,,,,,721,,,721,,,721,721,,,721,,,,,,721,,,,,,,,721,,,,,721', -'721,721,721,721,721,,,,721,721,,,,,,,721,,,721,721,721,,,721,721,701', -'701,701,,701,,,,701,701,,,,701,,701,701,701,701,701,701,701,,,,,,701', -'701,701,701,701,701,701,,,701,,,,,,,701,,,701,701,701,701,701,701,701', -'701,,701,701,701,,701,701,,701,701,701,,,,,,,,,,,,,,,,,,,,701,,,701', -',,701,701,,,701,,701,,,,701,,,,,,,,701,,,,,701,701,701,701,701,701,', -',,701,701,,,,,,,701,,,701,701,701,,,701,701,696,696,696,,696,,,,696', -'696,,,,696,,696,696,696,696,696,696,696,,,,,,696,696,696,696,696,696', -'696,,,696,,,,,,,696,,,696,696,696,696,696,696,696,696,,696,696,696,', -'696,696,,,,696,,,,,,,,,,,,,,,,,,,,696,,,696,,,696,696,,,696,,,,,,,,', -',,,,,,,,,,696,696,696,696,696,696,,,,696,696,,,,,,,696,,,696,696,696', -',,696,696,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320', +'462,690,65,1002,980,614,330,462,462,462,368,892,688,462,462,980,462', +'377,735,711,1088,838,22,1006,377,462,1006,29,710,47,47,27,1074,1075', +'705,930,462,462,27,462,462,462,462,462,931,365,688,1077,980,980,705', +'844,364,713,604,838,282,770,22,1044,721,964,891,998,47,47,721,462,462', +'462,462,462,462,462,462,462,462,462,462,462,462,771,980,462,462,462', +'711,462,690,65,248,462,29,330,462,710,27,790,790,462,244,462,357,462', +'462,462,462,462,462,462,614,462,462,462,29,368,892,1002,844,713,713', +'711,1002,735,711,1077,462,462,806,462,710,462,1076,710,1088,806,806', +'806,462,1088,711,806,806,462,806,462,1074,1075,940,710,365,1074,1075', +'844,604,713,844,364,713,604,356,1077,770,999,806,806,1077,806,806,806', +'806,806,844,1044,713,964,891,998,1044,891,964,891,998,772,773,406,771', +'790,720,720,471,471,784,784,477,806,806,806,806,806,806,806,806,806', +'806,806,806,806,806,243,1076,806,806,806,395,806,357,395,5,806,403,357', +'806,5,526,335,335,806,944,806,92,806,806,806,806,806,806,806,92,806', +'408,806,44,44,560,945,1076,560,406,772,773,1076,477,375,806,806,807', +'806,456,806,375,682,940,807,807,807,806,940,241,807,807,806,807,806', +'356,395,395,999,720,356,471,807,999,403,617,526,526,526,772,773,242', +'565,807,807,565,807,807,807,807,807,456,408,408,408,335,335,526,1020', +'960,1020,960,960,960,376,960,962,456,681,641,682,376,44,44,807,807,807', +'807,807,807,807,807,807,807,807,807,807,807,617,620,807,807,807,220', +'807,617,620,240,807,242,617,807,239,795,617,620,807,398,807,827,807', +'807,807,807,807,807,807,136,807,807,807,752,617,752,752,752,681,752', +'805,616,641,641,971,807,807,110,807,960,807,641,740,740,110,110,110', +'807,737,110,110,110,807,110,807,617,620,240,975,737,978,110,239,110', +'110,110,795,795,102,827,398,398,398,110,110,795,110,110,110,110,110', +'665,322,378,616,355,355,323,805,322,378,616,737,737,323,644,616,101', +'322,100,616,752,804,323,110,110,110,110,110,110,110,110,110,110,110', +'110,110,110,616,916,110,110,110,665,110,110,737,991,110,439,904,110', +'110,99,110,904,110,393,110,665,110,110,110,110,110,110,110,322,110,616', +'110,994,323,996,361,366,644,644,644,361,804,391,366,110,110,110,110', +'455,110,339,110,366,41,900,379,110,684,916,900,380,110,379,110,684,684', +'684,380,439,684,684,684,949,684,949,949,949,949,949,393,393,393,381', +'684,684,684,972,73,949,381,455,972,339,684,684,41,684,684,684,684,684', +'366,324,391,391,391,455,19,339,324,949,41,618,1001,19,42,618,20,324', +'949,949,949,949,19,684,684,684,684,684,684,684,684,684,684,684,684,684', +'684,49,382,684,684,684,383,684,684,382,1010,684,1011,383,684,684,1012', +'684,949,684,42,684,20,684,684,684,684,684,684,684,324,684,309,684,1013', +'19,42,309,20,1090,1014,1090,1090,1090,1090,1090,684,684,684,684,385', +'684,1016,684,238,1090,43,385,684,113,1026,238,1029,684,1030,684,113', +'113,113,1031,238,113,113,113,1032,113,749,1090,749,749,749,484,749,113', +'1034,113,113,113,1090,1090,438,561,894,1040,561,113,113,438,113,113', +'113,113,113,40,895,25,438,858,1000,1053,858,895,1058,484,749,1000,895', +'484,484,238,895,1059,1090,749,1000,18,113,113,113,113,113,113,113,113', +'113,113,113,113,113,113,17,17,113,113,113,894,113,113,758,758,113,1070', +'894,113,113,438,113,894,113,483,113,894,113,113,113,113,113,113,113', +'895,113,138,113,1000,1054,1054,138,138,787,894,787,787,787,787,787,113', +'113,113,113,1071,113,483,113,993,787,483,483,113,461,1073,993,16,113', +'15,113,461,461,461,13,993,894,461,461,1079,461,50,787,1046,1080,1046', +'1046,1046,50,1046,1084,787,787,787,787,542,1085,50,1086,1087,461,461', +'542,461,461,461,461,461,3,776,532,542,1095,326,341,533,776,536,538,516', +'326,341,515,504,993,776,543,787,546,326,341,461,461,461,461,461,461', +'461,461,461,461,461,461,461,461,714,50,461,461,461,548,461,714,555,556', +'461,557,714,461,562,542,714,563,461,566,461,570,461,461,461,461,461', +'461,461,776,461,571,461,326,341,1036,573,946,574,946,946,946,1036,946', +'575,461,461,683,461,584,461,1036,592,596,683,683,683,461,599,683,683', +'683,461,683,461,714,531,531,531,531,531,601,683,683,683,683,791,791', +'605,606,791,791,791,683,683,607,683,683,683,683,683,1052,608,1052,1052', +'1052,488,1052,622,487,1036,625,585,486,585,585,585,648,585,9,9,9,9,9', +'683,683,683,683,683,683,683,683,683,683,683,683,683,683,651,1052,683', +'683,683,498,683,683,485,657,683,473,585,683,683,463,683,552,683,666', +'683,585,683,683,683,683,683,683,683,454,683,683,683,552,552,453,450', +'498,671,440,677,498,498,498,498,683,683,683,683,552,683,552,683,552', +'552,552,552,683,30,552,436,552,683,685,683,30,30,30,686,689,30,30,30', +'568,30,568,568,568,568,568,433,692,694,30,30,30,697,699,431,568,428', +'707,709,405,30,30,712,30,30,30,30,30,715,716,402,400,880,719,880,880', +'880,568,880,878,397,878,878,878,736,878,568,568,568,568,751,30,30,30', +'30,30,30,30,30,30,30,30,30,30,30,753,499,30,30,30,880,760,30,766,30', +'30,769,878,30,30,369,30,568,30,367,30,878,30,30,30,30,30,30,30,363,30', +'30,30,499,362,349,343,499,499,499,499,799,801,803,340,30,30,506,30,336', +'30,812,1,334,506,506,506,30,329,506,506,506,30,506,1067,328,1067,1067', +'1067,1067,1067,325,506,506,348,348,348,348,348,491,1067,836,843,506', +'506,854,506,506,506,506,506,855,490,319,318,491,491,313,313,313,313', +'313,1067,862,863,864,868,869,490,490,871,491,872,1067,1067,491,491,491', +'491,874,877,879,882,317,490,506,490,467,490,490,490,490,506,315,467', +'467,467,506,506,467,467,467,888,467,893,503,301,1067,897,298,297,901', +'467,467,467,467,903,912,915,506,506,503,503,467,467,286,467,467,467', +'467,467,922,923,506,925,926,927,503,506,503,929,503,503,503,503,506', +',503,,503,506,,,,467,467,467,467,467,467,467,467,467,467,467,467,467', +'467,,,467,467,467,,,467,,,467,,,467,467,,467,,467,,467,,467,467,467', +'467,467,467,467,,467,467,467,951,,951,951,951,951,951,,,,,,467,467,467', +'467,951,467,466,467,,,,,467,466,466,466,,467,466,466,466,,466,489,,', +'951,,,,,466,466,466,466,,,951,951,489,489,,466,466,,466,466,466,466', +'466,1015,,1015,1015,1015,489,1015,489,,489,489,489,489,,1017,,1017,1017', +'1017,,1017,951,,466,466,466,466,466,466,466,466,466,466,466,466,466', +'466,,1015,466,466,466,,,466,,,466,,,466,466,1017,466,,466,,466,,466', +'466,466,466,466,466,466,,466,466,466,741,,741,741,741,741,741,,,,,,466', +'466,466,466,741,466,457,466,,,,,466,457,457,457,,466,457,457,457,961', +'457,961,961,961,741,961,,,,457,457,457,,741,741,741,741,,,,457,457,', +'457,457,457,457,457,,,,,,,,,,961,,,,,,,,,,,,741,,457,457,457,457,457', +'457,457,457,457,457,457,457,457,457,,,457,457,457,,,457,,457,457,,,457', +'457,,457,,457,,457,,457,457,457,457,457,457,457,,457,457,457,,,,,,,', +',,,,,457,457,60,457,,457,,,,60,60,60,457,,60,60,60,457,60,,,,,,,,,,60', +'60,60,,,,,,,,60,60,,60,60,60,60,60,,,,,,,,,,,,,,,,,,,,,,,,60,60,60,60', +'60,60,60,60,60,60,60,60,60,60,,,60,60,60,,,60,,,60,,,60,60,,60,,60,', +'60,,60,60,60,60,60,60,60,,60,,60,743,,743,743,743,743,743,,,,,,60,60', +'60,60,743,60,31,60,,,,,60,31,31,31,,60,31,31,31,,31,,,,743,,,,,,31,31', +',743,743,743,743,,,,31,31,,31,31,31,31,31,,,,,,,,,,,,,,,,,,,,,,743,', +'31,31,31,31,31,31,31,31,31,31,31,31,31,31,,,31,31,31,,,31,,31,31,,,31', +'31,,31,,31,,31,,31,31,31,31,31,31,31,,31,,31,,,,,,,,,,,,,31,31,,31,', +'31,653,653,653,653,653,653,31,,,653,653,31,,,653,,653,653,653,653,653', +'653,653,,,,,,653,653,653,653,653,653,653,,,653,,,,,443,653,653,653,653', +'653,653,653,653,653,653,653,653,,653,653,653,,653,653,,653,653,653,443', +'443,443,443,443,443,443,443,443,443,443,,443,443,,,443,443,,653,,,653', +',,653,653,,,653,,653,443,,443,653,443,443,443,443,443,443,443,653,443', +',,,653,653,653,653,653,653,,,,653,653,,443,,443,,,653,,,653,653,653', +',,653,653,898,898,898,898,898,898,,,,898,898,,,,898,,898,898,898,898', +'898,898,898,,,,,,898,898,898,898,898,898,898,,,898,,,,,449,898,898,898', +'898,898,898,898,898,898,898,898,898,,898,898,898,,898,898,,898,898,898', +'449,449,449,449,449,449,449,449,449,449,449,,449,449,,,449,449,,898', +',,898,,,898,898,,,898,,898,449,,449,898,449,449,449,449,449,449,449', +'898,449,,,,898,898,898,898,898,898,,,,898,898,,449,,,,,898,,,898,898', +'898,,,898,898,222,222,222,222,222,222,,,,222,222,,,,222,,222,222,222', +'222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,222,222', +'222,222,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222', +'222,502,502,502,502,502,502,502,502,502,502,502,,502,502,,,502,502,', +'222,,,222,,,222,222,,,222,,222,502,,502,222,502,502,502,502,502,502', +'502,222,502,,,,222,222,222,222,222,222,,,,222,222,502,502,,,,,222,,', +'222,222,222,,,222,222,36,36,36,36,36,36,,,,36,36,,,,36,,36,36,36,36', +'36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36,36,36,36,36,36,36', +'36,36,36,36,,36,36,36,,36,36,,36,36,36,553,553,553,553,553,553,553,553', +'553,553,553,,553,553,,,553,553,,36,,,36,,,36,36,,,36,,36,553,,553,36', +'553,553,553,553,553,553,553,36,553,,,,36,36,36,36,36,36,,,,36,36,,553', +',,,,36,,,36,36,36,,,36,36,785,785,785,785,785,785,,,,785,785,,,,785', +',785,785,785,785,785,785,785,,,,,,785,785,785,785,785,785,785,,,785', +',,,,,785,785,785,785,785,785,785,785,785,785,785,785,,785,785,785,,785', +'785,,785,785,785,295,295,295,295,295,295,295,295,295,295,295,,295,295', +',,295,295,,785,,,785,,,785,785,,,785,,785,295,,295,785,295,295,295,295', +'295,295,295,785,295,,,,785,785,785,785,785,785,,,,785,785,,295,,,,,785', +',,785,785,785,,,785,785,1025,1025,1025,1025,1025,1025,,,,1025,1025,', +',,1025,,1025,1025,1025,1025,1025,1025,1025,,,,,,1025,1025,1025,1025', +'1025,1025,1025,,,1025,,,,,,1025,1025,1025,1025,1025,1025,1025,1025,1025', +'1025,1025,1025,,1025,1025,1025,,1025,1025,,1025,1025,1025,921,921,921', +'921,921,921,921,921,921,921,921,,921,921,,,921,921,,1025,,,1025,,,1025', +'1025,,,1025,,1025,921,,921,1025,921,921,921,921,921,921,921,1025,921', +',,,1025,1025,1025,1025,1025,1025,,,,1025,1025,,921,,,,,1025,,,1025,1025', +'1025,,,1025,1025,937,937,937,937,937,937,,,,937,937,,,,937,,937,937', +'937,937,937,937,937,,,,,,937,937,937,937,937,937,937,,,937,,,,,,937', +'937,937,937,937,937,937,937,937,937,937,937,,937,937,937,,937,937,,937', +'937,937,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,937,,,937,', +',937,937,,,937,,937,24,,24,937,24,24,24,24,24,24,24,937,24,,,,937,937', +'937,937,937,937,,,,937,937,,24,,,,,937,,,937,937,937,,,937,937,247,247', +'247,247,247,247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,', +'247,247,247,247,247,247,247,,,247,,,,,,247,247,247,247,247,247,247,247', +'247,247,247,247,,247,247,247,,247,247,,247,247,247,809,809,809,809,809', +'809,809,809,809,809,809,,809,809,,,809,809,,247,,,247,,,247,247,,,247', +',247,809,,809,247,809,809,809,809,809,809,809,247,809,,,,247,247,247', +'247,247,247,,,,247,247,,809,,,,,247,,,247,247,247,,,247,247,1023,1023', +'1023,1023,1023,1023,,,,1023,1023,,,,1023,,1023,1023,1023,1023,1023,1023', +'1023,,,,,,1023,1023,1023,1023,1023,1023,1023,,,1023,,,,,,1023,1023,1023', +'1023,1023,1023,1023,1023,1023,1023,1023,1023,,1023,1023,1023,,1023,1023', +',1023,1023,1023,497,497,497,497,497,497,497,,,497,497,,,,,,497,497,', +'1023,,,1023,,,1023,1023,,,1023,,1023,497,,497,1023,497,497,497,497,497', +'497,497,1023,497,,,,1023,1023,1023,1023,1023,1023,,,,1023,1023,,,,,', +',1023,,,1023,1023,1023,,,1023,1023,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2', +'2,2,2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2', +'2,,2,2,2,482,482,482,482,482,482,482,482,482,482,482,,482,482,,,482', +'482,,2,,,2,,,2,2,,,2,,2,482,,482,2,482,482,482,482,482,482,482,2,482', +',,,2,2,2,2,2,2,,,,2,2,,,,,,,2,,,2,2,2,,,2,2,938,938,938,938,938,938', +',,,938,938,,,,938,,938,938,938,938,938,938,938,,,,,,938,938,938,938', +'938,938,938,,,938,,,,,,938,938,938,938,938,938,938,938,938,938,938,938', +',938,938,938,,938,938,,938,938,938,481,481,481,481,481,481,481,481,481', +'481,481,,481,481,,,481,481,,938,,,938,,,938,938,,,938,,938,481,,481', +'938,481,481,481,481,481,481,481,938,481,,,,938,938,938,938,938,938,', +',,938,938,,,,,,,938,,,938,938,938,,,938,938,1018,1018,1018,1018,1018', +'1018,,,,1018,1018,,,,1018,,1018,1018,1018,1018,1018,1018,1018,,,,,,1018', +'1018,1018,1018,1018,1018,1018,,,1018,,,,,,1018,1018,1018,1018,1018,1018', +'1018,1018,1018,1018,1018,1018,,1018,1018,1018,,1018,1018,,1018,1018', +'1018,496,496,496,496,496,496,496,,,496,496,,,,,,496,496,,1018,,,1018', +',,1018,1018,,,1018,,1018,496,,496,1018,496,496,496,496,496,496,496,1018', +'496,,,,1018,1018,1018,1018,1018,1018,,,,1018,1018,,,,,,,1018,,,1018', +'1018,1018,,,1018,1018,833,833,833,833,833,833,,,,833,833,,,,833,,833', +'833,833,833,833,833,833,,,,,,833,833,833,833,833,833,833,,,833,,,,,', +'833,833,833,833,833,833,833,833,833,833,833,833,,833,833,833,,833,833', +',833,833,833,501,501,501,501,501,501,501,501,,501,501,,,,,,501,501,', +'833,,,833,,,833,833,,,833,,833,501,,501,833,501,501,501,501,501,501', +'501,833,501,,,,833,833,833,833,833,833,,,,833,833,,,,,,,833,,,833,833', +'833,,,833,833,774,774,774,774,774,774,,,,774,774,,,,774,,774,774,774', +'774,774,774,774,,,,,,774,774,774,774,774,774,774,,,774,,,,,,774,774', +'774,774,774,774,774,774,774,774,774,774,,774,774,774,,774,774,,774,774', +'774,495,495,495,495,495,495,495,,,495,495,,,,,,495,495,,774,,,774,,', +'774,774,,,774,,774,495,,495,774,495,495,495,495,495,495,495,774,495', +',,,774,774,774,774,774,774,,,,774,774,,,,,,,774,,,774,774,774,,,774', +'774,792,792,792,792,792,792,,,,792,792,,,,792,,792,792,792,792,792,792', +'792,,,,,,792,792,792,792,792,792,792,,,792,,,,,,792,792,792,792,792', +'792,792,792,792,792,792,792,,792,792,792,,792,792,,792,792,792,494,494', +'494,494,494,494,494,,,494,494,,,,,,494,494,,792,,,792,,,792,792,,,792', +',792,494,,494,792,494,494,494,494,494,494,494,792,494,,,,792,792,792', +'792,792,792,,,,792,792,,,,,,,792,,,792,792,792,,,792,792,600,600,600', +'600,600,600,,,,600,600,,,,600,,600,600,600,600,600,600,600,,,,,,600', +'600,600,600,600,600,600,,,600,,,,,,600,600,600,600,600,600,600,600,600', +'600,600,600,,600,600,600,,600,600,,600,600,600,500,500,500,500,500,500', +'500,,,500,500,,,,,,500,500,,600,,,600,,,600,600,,,600,,600,500,,500', +'600,500,500,500,500,500,500,500,600,500,,,,600,600,600,600,600,600,', +',,600,600,,,,,,,600,,,600,600,600,,,600,600,786,786,786,786,786,786', +',,,786,786,,,,786,,786,786,786,786,786,786,786,,,,,,786,786,786,786', +'786,786,786,,,786,,,,,,786,786,786,786,786,786,786,786,786,786,786,786', +',786,786,786,,786,786,,786,786,786,493,493,493,493,493,493,493,,,493', +'493,,,,,,493,493,,786,,,786,,,786,786,,,786,,786,493,,493,786,493,493', +'493,493,493,493,493,786,493,,,,786,786,786,786,786,786,,,,786,786,,', +',,,,786,,,786,786,786,,,786,786,852,852,852,852,852,852,,,,852,852,', +',,852,,852,852,852,852,852,852,852,,,,,,852,852,852,852,852,852,852', +',,852,,,,,,852,852,852,852,852,852,852,852,852,852,852,852,,852,852', +'852,,852,852,,852,852,852,492,492,492,492,492,492,492,,,492,492,,,,', +',492,492,,852,,,852,,,852,852,,,852,,852,492,,492,852,492,492,492,492', +'492,492,492,852,492,,,,852,852,852,852,852,852,,,,852,852,,,,,,,852', +',,852,852,852,,,852,852,321,321,321,321,321,321,,,,321,321,,,,321,,321', +'321,321,321,321,321,321,,,,,,321,321,321,321,321,321,321,,,321,,,,,', +'321,321,321,321,321,321,321,321,321,321,321,321,,321,321,321,,321,321', +',321,321,321,,,,,,,,,,,,,,,,,,,,321,,,321,,,321,321,,,321,,321,,,,321', +',,,,,,,321,,,,,321,321,321,321,321,321,,,,321,321,,,,,,,321,,,321,321', +'321,,,321,321,997,997,997,997,997,997,,,,997,997,,,,997,,997,997,997', +'997,997,997,997,,,,,,997,997,997,997,997,997,997,,,997,,,,,,997,997', +'997,997,997,997,997,997,997,997,997,997,,997,997,997,,997,997,,997,997', +'997,,,,,,,,,,,,,,,,,,,,997,,,997,,,997,997,,,997,,997,,,,997,,,,,,,', +'997,,,,,997,997,997,997,997,997,,,,997,997,,,,,,,997,,,997,997,997,', +',997,997,360,360,360,360,360,360,,,,360,360,,,,360,,360,360,360,360', +'360,360,360,,,,,,360,360,360,360,360,360,360,,,360,,,,,,360,360,360', +'360,360,360,360,360,360,360,360,360,,360,360,360,,360,360,,360,360,360', +',,,,,,,,,,,,,,,,,,,360,,,360,,,360,360,,,360,,360,,,,360,,,,,,,,360', +',,,,360,360,360,360,360,360,,,,360,360,,,,,,,360,,,360,360,360,,,360', +'360,860,860,860,860,860,860,,,,860,860,,,,860,,860,860,860,860,860,860', +'860,,,,,,860,860,860,860,860,860,860,,,860,,,,,,860,860,860,860,860', +'860,860,860,860,860,860,860,,860,860,860,,860,860,,860,860,860,,,,,', +',,,,,,,,,,,,,,860,,,860,,,860,860,,,860,,860,,,,860,,,,,,,,860,,,,,860', +'860,860,860,860,860,,,,860,860,,,,,,,860,,,860,860,860,,,860,860,861', +'861,861,861,861,861,,,,861,861,,,,861,,861,861,861,861,861,861,861,', +',,,,861,861,861,861,861,861,861,,,861,,,,,,861,861,861,861,861,861,861', +'861,861,861,861,861,,861,861,861,,861,861,,861,861,861,,,,,,,,,,,,,', +',,,,,,861,,,861,,,861,861,,,861,,861,,,,861,,,,,,,,861,,,,,861,861,861', +'861,861,861,,,,861,861,,,,,,,861,,,861,861,861,,,861,861,316,316,316', +'316,316,316,,,,316,316,,,,316,,316,316,316,316,316,316,316,,,,,,316', +'316,316,316,316,316,316,,,316,,,,,,316,316,316,316,316,316,316,316,316', +'316,316,316,,316,316,316,,316,316,,316,316,316,,,,,,,,,,,,,,,,,,,,316', +',,316,,,316,316,,,316,,316,,,,316,,,,,,,,316,,,,,316,316,316,316,316', +'316,,,,316,316,,,,,,,316,,,316,316,316,,,316,316,887,887,887,887,887', +'887,,,,887,887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887,887', +'887,887,887,887,,,887,,,,,,887,887,887,887,887,887,887,887,887,887,887', +'887,,887,887,887,,887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887', +',,887,887,,,887,,887,,,,887,,,,,,,,887,,,,,887,887,887,887,887,887,', +',,887,887,,,,,,,887,,,887,887,887,,,887,887,359,359,359,359,359,359', +',,,359,359,,,,359,,359,359,359,359,359,359,359,,,,,,359,359,359,359', +'359,359,359,,,359,,,,,,359,359,359,359,359,359,359,359,359,359,359,359', +',359,359,359,,359,359,,359,359,359,,,,,,,,,,,,,,,,,,,,359,,,359,,,359', +'359,,,359,,359,,,,359,,,,,,,,359,,,,,359,359,359,359,359,359,,,,359', +'359,,,,,,,359,,,359,359,359,,,359,359,347,347,347,347,347,347,,,,347', +'347,,,,347,,347,347,347,347,347,347,347,,,,,,347,347,347,347,347,347', +'347,,,347,,,,,,347,347,347,347,347,347,347,347,347,347,347,347,,347', +'347,347,,347,347,,347,347,347,,,,,,,,,,,,,,,,,,,,347,,,347,,,347,347', +',,347,,347,,,,347,,,,,,,,347,,,,,347,347,347,347,347,347,,,,347,347', +',,,,,,347,,,347,347,347,,,347,347,603,603,603,603,603,603,,,,603,603', +',,,603,,603,603,603,603,603,603,603,,,,,,603,603,603,603,603,603,603', +',,603,,,,,,603,603,603,603,603,603,603,603,603,603,603,603,,603,603', +'603,,603,603,,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603,603,,,603', +',603,,,,603,,,,,,,,603,,,,,603,603,603,603,603,603,,,,603,603,,,,,,', +'603,,,603,603,603,,,603,603,968,968,968,968,968,968,,,,968,968,,,,968', +',968,968,968,968,968,968,968,,,,,,968,968,968,968,968,968,968,,,968', +',,,,,968,968,968,968,968,968,968,968,968,968,968,968,,968,968,968,,968', +'968,,968,968,968,,,,,,,,,,,,,,,,,,,,968,,,968,,,968,968,,,968,,968,', +',,968,,,,,,,,968,,,,,968,968,968,968,968,968,,,,968,968,,,,,,,968,,', +'968,968,968,,,968,968,967,967,967,,967,,,,967,967,,,,967,,967,967,967', +'967,967,967,967,,,,,,967,967,967,967,967,967,967,,,967,,,,,,,967,,,967', +'967,967,967,967,967,967,967,,967,967,967,,967,967,,967,967,967,,,,,', +',,,,,,,,,,,,,,967,,,967,,,967,967,,,967,,967,,,,967,,,,,,,,967,,,,,967', +'967,967,967,967,967,,,,967,967,,,,,,,967,,,967,967,967,,,967,967,537', +'537,537,,537,,,,537,537,,,,537,,537,537,537,537,537,537,537,,,,,,537', +'537,537,537,537,537,537,,,537,,,,,,,537,,,537,537,537,537,537,537,537', +'537,,537,537,537,,537,537,,,,537,,,,,,,,,,,,,,,,,,,,537,,,537,,,537', +'537,,,537,,,,,,,,,,,,,,,,,,,537,537,537,537,537,537,,,,537,537,,,,,', +',537,,,537,537,537,,,537,537,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,', +',,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8,,8,8,,8,8,8', +',,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8,8,8,8', +',,,8,8,,,,,,,8,,,8,8,8,,,8,8,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23', +'23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23', +'23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23', +',,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,,,23', +'23,23,,,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,', +',32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32', +'32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,', +'32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32', +',,32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33', +'33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,', +'33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33', +',,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33', +'33,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34', +'34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34', +',34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,', +',34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37', +'37,37,,37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37', +'37,,,37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,', +',,,,,,,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37', +'37,37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,', +'38,,38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38', +'38,38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,', +'38,,,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,', +',38,,,38,38,38,,,38,38,1041,1041,1041,,1041,,,,1041,1041,,,,1041,,1041', +'1041,1041,1041,1041,1041,1041,,,,,,1041,1041,1041,1041,1041,1041,1041', +',,1041,,,,,,,1041,,,1041,1041,1041,1041,1041,1041,1041,1041,1041,1041', +'1041,1041,,1041,1041,,1041,1041,1041,,,,,,,,,,,,,,,,,,,,1041,,,1041', +',,1041,1041,,,1041,,1041,,1041,,1041,,,,,,,,1041,,,,,1041,1041,1041', +'1041,1041,1041,,,,1041,1041,,,,,,,1041,,1041,1041,1041,1041,,,1041,1041', +'45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45,45,45,,,,,,45,45,45,45,45', +'45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45,45,,45,45,45,,45,45,,45,45', +'45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45,,,,,,45,,,,,,,,45,,,,,45', +'45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45,,,45,45,46,46,46,,46,,,', +'46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46,46,46,46,46,46,,,46,,,', +',,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46,46,,46,46,46,,,,,,,,,', +',,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,,46,,,,,46,46,46,46,46', +'46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,48,48,48,,48,,,,48,48,,,,48', +',48,48,48,48,48,48,48,,,,,,48,48,48,48,48,48,48,,,48,,,,,,,48,,,48,48', +'48,48,48,48,48,48,,48,48,48,,48,48,,48,48,48,,,,,,,,,,,,,,,,,,,,48,', +',48,,,48,48,,,48,,,,,,48,,,,,,,,48,,,,,48,48,48,48,48,48,,,,48,48,,', +',,,,48,,,48,48,48,,,48,48,62,62,62,62,62,,,,62,62,,,,62,,62,62,62,62', +'62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,62,62,,62,62,62,62,62,62', +'62,62,62,,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62,,,62', +'62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,,,,62', +',,62,62,62,,,62,62,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67', +',,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67', +'67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,', +'67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,,,67', +'67,68,68,68,,68,,,,68,68,,,,68,,68,68,68,68,68,68,68,,,,,,68,68,68,68', +'68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68,68,68,,68,68,68,,68,68,,68', +'68,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68,,,,,,68,,,,,,,,68,,,,', +'68,68,68,68,68,68,,,,68,68,,,,,,,68,,,68,68,68,,,68,68,71,71,71,,71', +',,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71', +',,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,71,71,71,,,,,,', +',,,,,,,,,,,,,71,,,71,,,71,71,,,71,,,,,,71,,,,,,,,71,,,,,71,71,71,71', +'71,71,,,,71,71,71,,,,,71,71,,,71,71,71,,,71,71,72,72,72,,72,,,,72,72', +',,,72,,72,72,72,72,72,72,72,,,,,,72,72,72,72,72,72,72,,,72,,,,,,,72', +',,72,72,72,72,72,72,72,72,,72,72,72,,72,72,,,,72,,,,,,,,,,,,,,,,,,,', +'72,,,72,,,72,72,,,72,,72,,,,,,,,,,,,,,,,,72,72,72,72,72,72,,,,72,72', +',,,,,,72,,,72,72,72,,,72,72,992,992,992,,992,,,,992,992,,,,992,,992', +'992,992,992,992,992,992,,,,,,992,992,992,992,992,992,992,,,992,,,,,', +',992,,,992,992,992,992,992,992,992,992,,992,992,992,,992,992,,,,992', +',,,,,,,,,,,,,,,,,,,992,,,992,,,992,992,,,992,,,,,,,,,,,,,,,,,,,992,992', +'992,992,992,992,,,,992,992,,,,,,,992,,,992,992,992,,,992,992,126,126', +'126,126,126,,,,126,126,,,,126,,126,126,126,126,126,126,126,,,,,,126', +'126,126,126,126,126,126,,,126,,,,,,126,126,126,126,126,126,126,126,126', +'126,126,126,,126,126,126,,126,126,,126,126,126,,,,,,,,,,,,,,,,,,,,126', +',,126,,,126,126,,,126,,126,,,,126,,,,,,,,126,,,,,126,126,126,126,126', +'126,,,,126,126,,,,,,126,126,,,126,126,126,,,126,126,131,131,131,,131', +',,,131,131,,,,131,,131,131,131,131,131,131,131,,,,,,131,131,131,131', +'131,131,131,,,131,,,,,,,131,,,131,131,131,131,131,131,131,131,,131,131', +'131,,131,131,,131,131,131,,,,,,,,,,,,,,,,,,,,131,,,131,,,131,131,,,131', +',,,,,131,,,,,,,,131,,,,,131,131,131,131,131,131,,,,131,131,,,,,,,131', +',,131,131,131,,,131,131,132,132,132,,132,,,,132,132,,,,132,,132,132', +'132,132,132,132,132,,,,,,132,132,132,132,132,132,132,,,132,,,,,,,132', +',,132,132,132,132,132,132,132,132,,132,132,132,,132,132,,132,132,132', +',,,,,,,,,,,,,,,,,,,132,,,132,,,132,132,,,132,,,,,,132,,,,,,,,132,,,', +',132,132,132,132,132,132,,,,132,132,,,,,,,132,,,132,132,132,,,132,132', +'133,133,133,,133,,,,133,133,,,,133,,133,133,133,133,133,133,133,,,,', +',133,133,133,133,133,133,133,,,133,,,,,,,133,,,133,133,133,133,133,133', +'133,133,,133,133,133,,133,133,,133,133,133,,,,,,,,,,,,,,,,,,,,133,,', +'133,,,133,133,,,133,,,,,,133,,,,,,,,133,,,,,133,133,133,133,133,133', +',,,133,133,,,,,,,133,,,133,133,133,,,133,133,134,134,134,,134,,,,134', +'134,,,,134,,134,134,134,134,134,134,134,,,,,,134,134,134,134,134,134', +'134,,,134,,,,,,,134,,,134,134,134,134,134,134,134,134,,134,134,134,', +'134,134,,134,134,134,,,,,,,,,,,,,,,,,,,,134,,,134,,,134,134,,,134,,', +',,,134,,,,,,,,134,,,,,134,134,134,134,134,134,,,,134,134,,,,,,,134,', +',134,134,134,,,134,134,135,135,135,135,135,,,,135,135,,,,135,,135,135', +'135,135,135,135,135,,,,,,135,135,135,135,135,135,135,,,135,,,,,,135', +'135,,135,135,135,135,135,135,135,135,135,,135,135,135,,135,135,,135', +'135,135,,,,,,,,,,,,,,,,,,,,135,,,135,,,135,135,,,135,,135,,,,135,,,', +',,,,135,,,,,135,135,135,135,135,135,,,,135,135,,,,,,,135,,,135,135,135', +',,135,135,530,530,530,530,530,,,,530,530,,,,530,,530,530,530,530,530', +'530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,,530,530,530,530', +'530,530,530,530,530,530,530,530,,530,530,530,,530,530,,530,530,530,', +',,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,530,,,,530,,,,,,,,530,', +',,,530,530,530,530,530,530,,,,530,530,,,,,,530,530,,,530,530,530,,,530', +'530,223,223,223,,223,,,,223,223,,,,223,,223,223,223,223,223,223,223', +',,,,,223,223,223,223,223,223,223,,,223,,,,,,,223,,,223,223,223,223,223', +'223,223,223,,223,223,223,,223,223,,223,223,223,,,,,,,,,,,,,,,,,,,,223', +',,223,,,223,223,,,223,,223,,,,223,,,,,,,,223,,,,,223,223,223,223,223', +'223,,,,223,223,,,,,,,223,,,223,223,223,,,223,223,224,224,224,,224,,', +',224,224,,,,224,,224,224,224,224,224,224,224,,,,,,224,224,224,224,224', +'224,224,,,224,,,,,,,224,,,224,224,224,224,224,224,224,224,,224,224,224', +',224,224,,224,224,224,,,,,,,,,,,,,,,,,,,,224,,,224,,,224,224,,,224,', +'224,,,,224,,,,,,,,224,,,,,224,224,224,224,224,224,,,,224,224,,,,,,,224', +',,224,224,224,,,224,224,225,225,225,,225,,,,225,225,,,,225,,225,225', +'225,225,225,225,225,,,,,,225,225,225,225,225,225,225,,,225,,,,,,,225', +',,225,225,225,225,225,225,225,225,,225,225,225,,225,225,,225,225,225', +',,,,,,,,,,,,,,,,,,,225,,,225,,,225,225,,,225,,,,,,225,,,,,,,,225,,,', +',225,225,225,225,225,225,,,,225,225,,,,,,,225,,,225,225,225,,,225,225', +'226,226,226,,226,,,,226,226,,,,226,,226,226,226,226,226,226,226,,,,', +',226,226,226,226,226,226,226,,,226,,,,,,,226,,,226,226,226,226,226,226', +'226,226,,226,226,226,,226,226,,226,226,226,,,,,,,,,,,,,,,,,,,,226,,', +'226,,,226,226,,,226,,,,,,226,,,,,,,,226,,,,,226,226,226,226,226,226', +',,,226,226,,,,,,,226,,,226,226,226,,,226,226,227,227,227,,227,,,,227', +'227,,,,227,,227,227,227,227,227,227,227,,,,,,227,227,227,227,227,227', +'227,,,227,,,,,,,227,,,227,227,227,227,227,227,227,227,,227,227,227,', +'227,227,,227,227,227,,,,,,,,,,,,,,,,,,,,227,,,227,,,227,227,,,227,,', +',,,227,,,,,,,,227,,,,,227,227,227,227,227,227,,,,227,227,,,,,,,227,', +',227,227,227,,,227,227,228,228,228,,228,,,,228,228,,,,228,,228,228,228', +'228,228,228,228,,,,,,228,228,228,228,228,228,228,,,228,,,,,,,228,,,228', +'228,228,228,228,228,228,228,228,228,228,228,,228,228,,228,228,228,,', +',,,,,,,,,,,,,,,,,228,,,228,,,228,228,,,228,,228,,228,,228,,,,,,,,228', +',,,,228,228,228,228,228,228,,,,228,228,,,,,,,228,,228,228,228,228,,', +'228,228,233,233,233,,233,,,,233,233,,,,233,,233,233,233,233,233,233', +'233,,,,,,233,233,233,233,233,233,233,,,233,,,,,,,233,,,233,233,233,233', +'233,233,233,233,,233,233,233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,', +',,233,,,233,,,233,233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233', +'233,233,,,,233,233,,,,,,,233,,,233,233,233,,,233,233,234,234,234,,234', +',,,234,234,,,,234,,234,234,234,234,234,234,234,,,,,,234,234,234,234', +'234,234,234,,,234,,,,,,,234,,,234,234,234,234,234,234,234,234,,234,234', +'234,,234,234,,234,234,234,,,,,,,,,,,,,,,,,,,,234,,,234,,,234,234,,,234', +',,,,,234,,,,,,,,234,,,,,234,234,234,234,234,234,,,,234,234,,,,,,,234', +',,234,234,234,,,234,234,235,235,235,,235,,,,235,235,,,,235,,235,235', +'235,235,235,235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,,,235', +',,235,235,235,235,235,235,235,235,,235,235,235,,235,235,,235,235,235', +',,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,,,235,,,', +',235,235,235,235,235,235,,,,235,235,235,,,,,,235,,,235,235,235,,,235', +'235,251,251,251,,251,,,,251,251,,,,251,,251,251,251,251,251,251,251', +',,,,,251,251,251,251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251', +'251,251,251,,251,251,251,,251,251,,251,251,251,,,,,,,,,,,,,,,,,,,,251', +',,251,,,251,251,,,251,,,,,,251,,,,,,,,251,,,,,251,251,251,251,251,251', +',,,251,251,,,,,,,251,,,251,251,251,,,251,251,252,252,252,,252,,,,252', +'252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252,252,252', +'252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,252,252,', +'252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,', +',,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252,252,,,,,,,252,', +',252,252,252,,,252,252,253,253,253,,253,,,,253,253,,,,253,,253,253,253', +'253,253,253,253,,,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253', +'253,253,253,253,253,253,253,,253,253,253,,253,253,,253,253,253,,,,,', +',,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,,,253', +'253,253,253,253,253,,,,253,253,,,,,,,253,,,253,253,253,,,253,253,254', +'254,254,,254,,,,254,254,,,,254,,254,254,254,254,254,254,254,,,,,,254', +'254,254,254,254,254,254,,,254,,,,,,,254,,,254,254,254,254,254,254,254', +'254,,254,254,254,,254,254,,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254', +',,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254', +'254,,,,,,,254,,,254,254,254,,,254,254,255,255,255,,255,,,,255,255,,', +',255,,255,255,255,255,255,255,255,,,,,,255,255,255,255,255,255,255,', +',255,,,,,,,255,,,255,255,255,255,255,255,255,255,,255,255,255,,255,255', +',255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,,,,,255,', +',,,,,,255,,,,,255,255,255,255,255,255,,,,255,255,,,,,,,255,,,255,255', +'255,,,255,255,256,256,256,,256,,,,256,256,,,,256,,256,256,256,256,256', +'256,256,,,,,,256,256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256', +'256,256,256,256,256,,256,256,256,,256,256,,256,256,256,,,,,,,,,,,,,', +',,,,,,256,,,256,,,256,256,,,256,,,,,,256,,,,,,,,256,,,,,256,256,256', +'256,256,256,,,,256,256,,,,,,,256,,,256,256,256,,,256,256,257,257,257', +',257,,,,257,257,,,,257,,257,257,257,257,257,257,257,,,,,,257,257,257', +'257,257,257,257,,,257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257', +'257,257,,257,257,,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257', +',,257,,,,,,257,,,,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,,,', +',,,257,,,257,257,257,,,257,257,258,258,258,,258,,,,258,258,,,,258,,258', +'258,258,258,258,258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,', +',258,,,258,258,258,258,258,258,258,258,,258,258,258,,258,258,,258,258', +'258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258', +',,,,258,258,258,258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258', +'258,259,259,259,,259,,,,259,259,,,,259,,259,259,259,259,259,259,259', +',,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259', +'259,259,259,,259,259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259', +',,259,,,259,259,,,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259', +',,,259,259,,,,,,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260', +'260,,,,260,,260,260,260,260,260,260,260,,,,,,260,260,260,260,260,260', +'260,,,260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260,260,260,', +'260,260,,260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,', +',,,260,,,,,,,,260,,,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,', +',260,260,260,,,260,260,261,261,261,,261,,,,261,261,,,,261,,261,261,261', +'261,261,261,261,,,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261', +'261,261,261,261,261,261,261,,261,261,261,,261,261,,261,261,261,,,,,', +',,,,,,,,,,,,,,261,,,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261', +'261,261,261,261,261,,,,261,261,,,,,,,261,,,261,261,261,,,261,261,262', +'262,262,,262,,,,262,262,,,,262,,262,262,262,262,262,262,262,,,,,,262', +'262,262,262,262,262,262,,,262,,,,,,,262,,,262,262,262,262,262,262,262', +'262,,262,262,262,,262,262,,262,262,262,,,,,,,,,,,,,,,,,,,,262,,,262', +',,262,262,,,262,,,,,,262,,,,,,,,262,,,,,262,262,262,262,262,262,,,,262', +'262,,,,,,,262,,,262,262,262,,,262,262,263,263,263,,263,,,,263,263,,', +',263,,263,263,263,263,263,263,263,,,,,,263,263,263,263,263,263,263,', +',263,,,,,,,263,,,263,263,263,263,263,263,263,263,,263,263,263,,263,263', +',263,263,263,,,,,,,,,,,,,,,,,,,,263,,,263,,,263,263,,,263,,,,,,263,', +',,,,,,263,,,,,263,263,263,263,263,263,,,,263,263,,,,,,,263,,,263,263', +'263,,,263,263,264,264,264,,264,,,,264,264,,,,264,,264,264,264,264,264', +'264,264,,,,,,264,264,264,264,264,264,264,,,264,,,,,,,264,,,264,264,264', +'264,264,264,264,264,,264,264,264,,264,264,,264,264,264,,,,,,,,,,,,,', +',,,,,,264,,,264,,,264,264,,,264,,,,,,264,,,,,,,,264,,,,,264,264,264', +'264,264,264,,,,264,264,,,,,,,264,,,264,264,264,,,264,264,265,265,265', +',265,,,,265,265,,,,265,,265,265,265,265,265,265,265,,,,,,265,265,265', +'265,265,265,265,,,265,,,,,,,265,,,265,265,265,265,265,265,265,265,,265', +'265,265,,265,265,,265,265,265,,,,,,,,,,,,,,,,,,,,265,,,265,,,265,265', +',,265,,,,,,265,,,,,,,,265,,,,,265,265,265,265,265,265,,,,265,265,,,', +',,,265,,,265,265,265,,,265,265,266,266,266,,266,,,,266,266,,,,266,,266', +'266,266,266,266,266,266,,,,,,266,266,266,266,266,266,266,,,266,,,,,', +',266,,,266,266,266,266,266,266,266,266,,266,266,266,,266,266,,266,266', +'266,,,,,,,,,,,,,,,,,,,,266,,,266,,,266,266,,,266,,,,,,266,,,,,,,,266', +',,,,266,266,266,266,266,266,,,,266,266,,,,,,,266,,,266,266,266,,,266', +'266,267,267,267,,267,,,,267,267,,,,267,,267,267,267,267,267,267,267', +',,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267,267,267,267,267', +'267,267,267,,267,267,267,,267,267,,267,267,267,,,,,,,,,,,,,,,,,,,,267', +',,267,,,267,267,,,267,,,,,,267,,,,,,,,267,,,,,267,267,267,267,267,267', +',,,267,267,,,,,,,267,,,267,267,267,,,267,267,268,268,268,,268,,,,268', +'268,,,,268,,268,268,268,268,268,268,268,,,,,,268,268,268,268,268,268', +'268,,,268,,,,,,,268,,,268,268,268,268,268,268,268,268,,268,268,268,', +'268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268,,,268,268,,,268,,', +',,,268,,,,,,,,268,,,,,268,268,268,268,268,268,,,,268,268,,,,,,,268,', +',268,268,268,,,268,268,269,269,269,,269,,,,269,269,,,,269,,269,269,269', +'269,269,269,269,,,,,,269,269,269,269,269,269,269,,,269,,,,,,,269,,,269', +'269,269,269,269,269,269,269,,269,269,269,,269,269,,269,269,269,,,,,', +',,,,,,,,,,,,,,269,,,269,,,269,269,,,269,,,,,,269,,,,,,,,269,,,,,269', +'269,269,269,269,269,,,,269,269,,,,,,,269,,,269,269,269,,,269,269,270', +'270,270,,270,,,,270,270,,,,270,,270,270,270,270,270,270,270,,,,,,270', +'270,270,270,270,270,270,,,270,,,,,,,270,,,270,270,270,270,270,270,270', +'270,,270,270,270,,270,270,,270,270,270,,,,,,,,,,,,,,,,,,,,270,,,270', +',,270,270,,,270,,,,,,270,,,,,,,,270,,,,,270,270,270,270,270,270,,,,270', +'270,,,,,,,270,,,270,270,270,,,270,270,275,275,275,,275,,,,275,275,,', +',275,,275,275,275,275,275,275,275,,,,,,275,275,275,275,275,275,275,', +',275,,,,,,,275,,,275,275,275,275,275,275,275,275,,275,275,275,,275,275', +',275,275,275,,,,,,,,,,,,,,,,,,,,275,,,275,,,275,275,,,275,,,,,,275,', +',,,,,,275,,,,,275,275,275,275,275,275,,,,275,275,,,,,,,275,,,275,275', +'275,,,275,275,932,932,932,,932,,,,932,932,,,,932,,932,932,932,932,932', +'932,932,,,,,,932,932,932,932,932,932,932,,,932,,,,,,,932,,,932,932,932', +'932,932,932,932,932,,932,932,932,,932,932,,,,932,,,,,,,,,,,,,,,,,,,', +'932,,,932,,,932,932,,,932,,,,,,,,,,,,,,,,,,,932,932,932,932,932,932', +',,,932,932,,,,,,,932,,,932,932,932,,,932,932,283,283,283,,283,,,,283', +'283,,,,283,,283,283,283,283,283,283,283,,,,,,283,283,283,283,283,283', +'283,,,283,,,,,,,283,,,283,283,283,283,283,283,283,283,283,283,283,283', +',283,283,,283,283,283,,,,,,,,,,,,,,,,,,,,283,,,283,,,283,283,,,283,', +'283,,283,,283,,,,,,,,283,,,,,283,283,283,283,283,283,,,,283,283,,,,', +',,283,,283,283,283,283,,,283,283,920,920,920,,920,,,,920,920,,,,920', +',920,920,920,920,920,920,920,,,,,,920,920,920,920,920,920,920,,,920', +',,,,,,920,,,920,920,920,920,920,920,920,920,,920,920,920,,920,920,,920', +'920,920,,,,,,,,,,,,,,,,,,,,920,,,920,,,920,920,,,920,,,,,,920,,,,,,', +',920,,,,,920,920,920,920,920,920,,,,920,920,,,,,,,920,,,920,920,920', +',,920,920,290,290,290,,290,,,,290,290,,,,290,,290,290,290,290,290,290', +'290,,,,,,290,290,290,290,290,290,290,,,290,,,,,,,290,,,290,290,290,290', +'290,290,290,290,290,290,290,290,,290,290,,290,290,290,,,,,,,,,,,,,,', +',,,,,290,,,290,,,290,290,,,290,,290,,290,,290,,,,,,,,290,,,,,290,290', +'290,290,290,290,,,,290,290,,,,,,,290,,290,290,290,290,,,290,290,293', +'293,293,,293,,,,293,293,,,,293,,293,293,293,293,293,293,293,,,,,,293', +'293,293,293,293,293,293,,,293,,,,,,,293,,,293,293,293,293,293,293,293', +'293,293,293,293,293,,293,293,,293,293,293,,,,,,,,,,,,,,,,,,,,293,,,293', +',,293,293,,,293,,293,,293,,293,,,,,,,,293,,,,,293,293,293,293,293,293', +',,,293,293,293,,,,,,293,,293,293,293,293,,,293,293,919,919,919,,919', +',,,919,919,,,,919,,919,919,919,919,919,919,919,,,,,,919,919,919,919', +'919,919,919,,,919,,,,,,,919,,,919,919,919,919,919,919,919,919,919,919', +'919,919,,919,919,,919,919,919,,,,,,,,,,,,,,,,,,,,919,,,919,,,919,919', +',,919,,,,919,,919,,,,,,,,919,,,,,919,919,919,919,919,919,,,,919,919', +',,,,,,919,,919,919,919,919,,,919,919,899,899,899,,899,,,,899,899,,,', +'899,,899,899,899,899,899,899,899,,,,,,899,899,899,899,899,899,899,,', +'899,,,,,,,899,,,899,899,899,899,899,899,899,899,,899,899,899,,899,899', +',899,899,899,,,,,,,,,,,,,,,,,,,,899,,,899,,,899,899,,,899,,,,,,899,', +',,,,,,899,,,,,899,899,899,899,899,899,,,,899,899,,,,,,,899,,,899,899', +'899,,,899,899,300,300,300,,300,,,,300,300,,,,300,,300,300,300,300,300', +'300,300,,,,,,300,300,300,300,300,300,300,,,300,,,,,,,300,,,300,300,300', +'300,300,300,300,300,,300,300,300,,300,300,,300,300,300,,,,,,,,,,,,,', +',,,,,,300,,,300,,,300,300,,,300,,,,,,300,,,,,,,,300,,,,,300,300,300', +'300,300,300,,,,300,300,,,,,,,300,,,300,300,300,,,300,300,302,302,302', +',302,,,,302,302,,,,302,,302,302,302,302,302,302,302,,,,,,302,302,302', +'302,302,302,302,,,302,,,,,,,302,,,302,302,302,302,302,302,302,302,,302', +'302,302,,302,302,,302,302,302,,,,,,,,,,,,,,,,,,,,302,,,302,,,302,302', +',,302,,,,,,302,,,,,,,,302,,,,,302,302,302,302,302,302,,,,302,302,,,', +',,,302,,,302,302,302,,,302,302,305,305,305,,305,,,,305,305,,,,305,,305', +'305,305,305,305,305,305,,,,,,305,305,305,305,305,305,305,,,305,,,,,', +',305,,,305,305,305,305,305,305,305,305,,305,305,305,,305,305,,305,305', +'305,,,,,,,,,,,,,,,,,,,,305,,,305,,,305,305,,,305,,,,,,305,,,,,,,,305', +',,,,305,305,305,305,305,305,,,,305,305,,,,,,,305,,,305,305,305,,,305', +'305,306,306,306,,306,,,,306,306,,,,306,,306,306,306,306,306,306,306', +',,,,,306,306,306,306,306,306,306,,,306,,,,,,,306,,,306,306,306,306,306', +'306,306,306,,306,306,306,,306,306,,306,306,306,,,,,,,,,,,,,,,,,,,,306', +',,306,,,306,306,,,306,,,,,,306,,,,,,,,306,,,,,306,306,306,306,306,306', +',,,306,306,,,,,,,306,,,306,306,306,,,306,306,312,312,312,312,312,,,', +'312,312,,,,312,,312,312,312,312,312,312,312,,,,,,312,312,312,312,312', +'312,312,,,312,,,,,,312,312,,312,312,312,312,312,312,312,312,312,,312', +'312,312,,312,312,,312,312,312,,,,,,,,,,,,,,,,,,,,312,,,312,,,312,312', +',,312,,312,,,,312,,,,,,,,312,,,,,312,312,312,312,312,312,,,,312,312', +',,,,,,312,,,312,312,312,,,312,312,885,885,885,,885,,,,885,885,,,,885', +',885,885,885,885,885,885,885,,,,,,885,885,885,885,885,885,885,,,885', +',,,,,,885,,,885,885,885,885,885,885,885,885,,885,885,885,,885,885,,885', +'885,885,,,,,,,,,,,,,,,,,,,,885,,,885,,,885,885,,,885,,,,,,885,,,,,,', +',885,,,,,885,885,885,885,885,885,,,,885,885,,,,,,,885,,,885,885,885', +',,885,885,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320', '320,,,,,,320,320,320,320,320,320,320,,,320,,,,,,,320,,,320,320,320,320', '320,320,320,320,,320,320,320,,320,320,,,,320,,,,,,,,,,,,,,,,,,,,320', ',,320,,,320,320,,,320,,,,,,,,,,,,,,,,,,,320,320,320,320,320,320,,,,320', -'320,,,,,,,320,,,320,320,320,,,320,320,685,685,685,,685,,,,685,685,,', -',685,,685,685,685,685,685,685,685,,,,,,685,685,685,685,685,685,685,', -',685,,,,,,,685,,,685,685,685,685,685,685,685,685,,685,685,685,,685,685', -',,,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685,685,,,685,,,,,,,,,,,,,,,,', -',,685,685,685,685,685,685,,,,685,685,,,,,,,685,,,685,685,685,,,685,685', -'681,681,681,,681,,,,681,681,,,,681,,681,681,681,681,681,681,681,,,,', -',681,681,681,681,681,681,681,,,681,,,,,,,681,,,681,681,681,681,681,681', -'681,681,,681,681,681,,681,681,,681,681,681,,,,,,,,,,,,,,,,,,,,681,,', -'681,,,681,681,,,681,,,,,,681,,,,,,,,681,,,,,681,681,681,681,681,681', -',,,681,681,,,,,,,681,,,681,681,681,,,681,681,328,328,328,,328,,,,328', -'328,,,,328,,328,328,328,328,328,328,328,,,,,,328,328,328,328,328,328', -'328,,,328,,,,,,,328,,,328,328,328,328,328,328,328,328,,328,328,328,', -'328,328,,328,328,328,,,,,,,,,,,,,,,,,,,,328,,,328,328,,328,328,,,328', -',,,,,328,,,,,,,,328,,,,,328,328,328,328,328,328,,,,328,328,,,,,,,328', -',,328,328,328,,,328,328,331,331,331,,331,,,,331,331,,,,331,,331,331', -'331,331,331,331,331,,,,,,331,331,331,331,331,331,331,,,331,,,,,,,331', -',,331,331,331,331,331,331,331,331,,331,331,331,,331,331,,331,331,331', -',,,,,,,,,,,,,,,,,,,331,,,331,,,331,331,,,331,,,,,,331,,,,,,,,331,,,', -',331,331,331,331,331,331,,,,331,331,,,,,,,331,,,331,331,331,,,331,331', -'678,678,678,,678,,,,678,678,,,,678,,678,678,678,678,678,678,678,,,,', -',678,678,678,678,678,678,678,,,678,,,,,,,678,,,678,678,678,678,678,678', -'678,678,,678,678,678,,678,678,,678,678,678,,,,,,,,,,,,,,,,,,,,678,,', -'678,,,678,678,,,678,,,,,,678,,,,,,,,678,,,,,678,678,678,678,678,678', -',,,678,678,,,,,,,678,,,678,678,678,,,678,678,654,654,654,,654,,,,654', -'654,,,,654,,654,654,654,654,654,654,654,,,,,,654,654,654,654,654,654', -'654,,,654,,,,,,,654,,,654,654,654,654,654,654,654,654,,654,654,654,', -'654,654,,654,654,654,,,,,,,,,,,,,,,,,,,,654,,,654,,,654,654,,,654,,', -',,,654,,,,,,,,654,,,,,654,654,654,654,654,654,,,,654,654,,,,,,,654,', -',654,654,654,,,654,654,337,337,337,,337,,,,337,337,,,,337,,337,337,337', +'320,,,,320,,,320,,,320,320,320,,,320,320,828,828,828,,828,,,,828,828', +',,,828,,828,828,828,828,828,828,828,,,,,,828,828,828,828,828,828,828', +',,828,,,,,,,828,,,828,828,828,828,828,828,828,828,,828,828,828,,828', +'828,,828,828,828,,,,,,,,,,,,,,,,,,,,828,,,828,,,828,828,,,828,,,,,,828', +',,,,,,,828,,,,,828,828,828,828,828,828,,,,828,828,,,,,,,828,,,828,828', +'828,,,828,828,826,826,826,,826,,,,826,826,,,,826,,826,826,826,826,826', +'826,826,,,,,,826,826,826,826,826,826,826,,,826,,,,,,,826,,,826,826,826', +'826,826,826,826,826,,826,826,826,,826,826,,826,826,826,,,,,,,,,,,,,', +',,,,,,826,,,826,,,826,826,,,826,,,,,,826,,,,,,,,826,,,,,826,826,826', +'826,826,826,,,,826,826,,,,,,,826,,,826,826,826,,,826,826,825,825,825', +',825,,,,825,825,,,,825,,825,825,825,825,825,825,825,,,,,,825,825,825', +'825,825,825,825,,,825,,,,,,,825,,,825,825,825,825,825,825,825,825,,825', +'825,825,,825,825,,825,825,825,,,,,,,,,,,,,,,,,,,,825,,,825,,,825,825', +',,825,,,,,,825,,,,,,,,825,,,,,825,825,825,825,825,825,,,,825,825,,,', +',,,825,,,825,825,825,,,825,825,824,824,824,,824,,,,824,824,,,,824,,824', +'824,824,824,824,824,824,,,,,,824,824,824,824,824,824,824,,,824,,,,,', +',824,,,824,824,824,824,824,824,824,824,,824,824,824,,824,824,,824,824', +'824,,,,,,,,,,,,,,,,,,,,824,,,824,,,824,824,,,824,,,,,,824,,,,,,,,824', +',,,,824,824,824,824,824,824,,,,824,824,,,,,,,824,,,824,824,824,,,824', +'824,823,823,823,,823,,,,823,823,,,,823,,823,823,823,823,823,823,823', +',,,,,823,823,823,823,823,823,823,,,823,,,,,,,823,,,823,823,823,823,823', +'823,823,823,,823,823,823,,823,823,,823,823,823,,,,,,,,,,,,,,,,,,,,823', +',,823,,,823,823,,,823,,,,,,823,,,,,,,,823,,,,,823,823,823,823,823,823', +',,,823,823,,,,,,,823,,,823,823,823,,,823,823,810,810,810,,810,,,,810', +'810,,,,810,,810,810,810,810,810,810,810,,,,,,810,810,810,810,810,810', +'810,,,810,,,,,,,810,,,810,810,810,810,810,810,810,810,,810,810,810,', +'810,810,,810,810,810,,,,,,,,,,,,,,,,,,,,810,,,810,,,810,810,,,810,,', +',,,810,,,,,,,,810,,,,,810,810,810,810,810,810,,,,810,810,,,,,,,810,', +',810,810,810,,,810,810,337,337,337,,337,,,,337,337,,,,337,,337,337,337', '337,337,337,337,,,,,,337,337,337,337,337,337,337,,,337,,,,,,,337,,,337', -'337,337,337,337,337,337,337,337,337,337,337,,337,337,,337,337,337,,', -',,,,,,,,,,,,,,,,,337,,,337,,,337,337,,,337,,,,,,337,,,,,,,,337,,,,,337', -'337,337,337,337,337,,,,337,337,,,,,,,337,,337,337,337,337,,,337,337', -'653,653,653,,653,,,,653,653,,,,653,,653,653,653,653,653,653,653,,,,', -',653,653,653,653,653,653,653,,,653,,,,,,,653,,,653,653,653,653,653,653', -'653,653,,653,653,653,,653,653,,653,653,653,,,,,,,,,,,,,,,,,,,,653,,', -'653,,,653,653,,,653,,,,,,653,,,,,,,,653,,,,,653,653,653,653,653,653', -',,,653,653,,,,,,,653,,,653,653,653,,,653,653,650,650,650,,650,,,,650', -'650,,,,650,,650,650,650,650,650,650,650,,,,,,650,650,650,650,650,650', -'650,,,650,,,,,,,650,,,650,650,650,650,650,650,650,650,,650,650,650,', -'650,650,,650,650,650,,,,,,,,,,,,,,,,,,,,650,,,650,,,650,650,,,650,,', -',,,650,,,,,,,,650,,,,,650,650,650,650,650,650,,,,650,650,,,,,,,650,', -',650,650,650,,,650,650,344,344,344,,344,,,,344,344,,,,344,,344,344,344', -'344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344,,,344', -'344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344,,,,,', -',,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344,,,,,344', -'344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344,344,345', -'345,345,,345,,,,345,345,,,,345,,345,345,345,345,345,345,345,,,,,,345', -'345,345,345,345,345,345,,,345,,,,,,,345,,,345,345,345,345,345,345,345', -'345,,345,345,345,,345,345,,345,345,345,,,,,,,,,,,,,,,,,,,,345,,,345', -',,345,345,,,345,,,,,,345,,,,,,,,345,,,,,345,345,345,345,345,345,,,,345', -'345,,,,,,,345,,,345,345,345,,,345,345,649,649,649,,649,,,,649,649,,', -',649,,649,649,649,649,649,649,649,,,,,,649,649,649,649,649,649,649,', -',649,,,,,,,649,,,649,649,649,649,649,649,649,649,,649,649,649,,649,649', -',649,649,649,,,,,,,,,,,,,,,,,,,,649,,,649,,,649,649,,,649,,,,,,649,', -',,,,,,649,,,,,649,649,649,649,649,649,,,,649,649,,,,,,,649,,,649,649', -'649,,,649,649,644,644,644,,644,,,,644,644,,,,644,,644,644,644,644,644', -'644,644,,,,,,644,644,644,644,644,644,644,,,644,,,,,,,644,,,644,644,644', -'644,644,644,644,644,,644,644,644,,644,644,,644,644,644,,,,,,,,,,,,,', -',,,,,,644,,,644,,,644,644,,,644,,,,,,644,,,,,,,,644,,,,,644,644,644', -'644,644,644,,,,644,644,,,,,,,644,,,644,644,644,,,644,644,643,643,643', -',643,,,,643,643,,,,643,,643,643,643,643,643,643,643,,,,,,643,643,643', -'643,643,643,643,,,643,,,,,,,643,,,643,643,643,643,643,643,643,643,,643', -'643,643,,643,643,,643,643,643,,,,,,,,,,,,,,,,,,,,643,,,643,,,643,643', -',,643,,,,,,643,,,,,,,,643,,,,,643,643,643,643,643,643,,,,643,643,,,', -',,,643,,,643,643,643,,,643,643,642,642,642,,642,,,,642,642,,,,642,,642', -'642,642,642,642,642,642,,,,,,642,642,642,642,642,642,642,,,642,,,,,', -',642,,,642,642,642,642,642,642,642,642,642,642,642,642,,642,642,,642', -'642,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642,,,642,,,,642,,642,,,', -',,,,642,,,,,642,642,642,642,642,642,,,,642,642,,,,,,,642,,642,642,642', -'642,,,642,642,641,641,641,,641,,,,641,641,,,,641,,641,641,641,641,641', -'641,641,,,,,,641,641,641,641,641,641,641,,,641,,,,,,,641,,,641,641,641', -'641,641,641,641,641,641,641,641,641,,641,641,,641,641,641,,,,,,,,,,', -',,,,,,,,,641,,,641,,,641,641,,,641,,641,,641,,641,,,,,,,,641,,,,,641', -'641,641,641,641,641,,,,641,641,,,,,,,641,,641,641,641,641,,,641,641', -'638,638,638,,638,,,,638,638,,,,638,,638,638,638,638,638,638,638,,,,', -',638,638,638,638,638,638,638,,,638,,,,,,,638,,,638,638,638,638,638,638', -'638,638,,638,638,638,,638,638,,638,638,638,,,,,,,,,,,,,,,,,,,,638,,', -'638,,,638,638,,,638,,,,,,638,,,,,,,,638,,,,,638,638,638,638,638,638', -',,,638,638,,,,,,,638,,,638,638,638,,,638,638,357,357,357,,357,,,,357', -'357,,,,357,,357,357,357,357,357,357,357,,,,,,357,357,357,357,357,357', -'357,,,357,,,,,,,357,,,357,357,357,357,357,357,357,357,,357,357,357,', -'357,357,,,,357,,,,,,,,,,,,,,,,,,,,357,,,357,,,357,357,,,357,,,,,,,,', -',,,,,,,,,,357,357,357,357,357,357,,,,357,357,,,,,,,357,,,357,357,357', -',,357,357,359,359,359,,359,,,,359,359,,,,359,,359,359,359,359,359,359', -'359,,,,,,359,359,359,359,359,359,359,,,359,,,,,,,359,,,359,359,359,359', -'359,359,359,359,,359,359,359,,359,359,,,,359,,,,,,,,,,,,,,,,,,,,359', -',,359,,,359,359,,,359,,,,,,,,,,,,,,,,,,,359,359,359,359,359,359,,,,359', -'359,,,,,,,359,,,359,359,359,,,359,359,637,637,637,,637,,,,637,637,,', -',637,,637,637,637,637,637,637,637,,,,,,637,637,637,637,637,637,637,', -',637,,,,,,,637,,,637,637,637,637,637,637,637,637,,637,637,637,,637,637', -',637,637,637,,,,,,,,,,,,,,,,,,,,637,,,637,,,637,637,,,637,,637,,,,637', -',,,,,,,637,,,,,637,637,637,637,637,637,,,,637,637,,,,,,,637,,,637,637', -'637,,,637,637,608,608,608,,608,,,,608,608,,,,608,,608,608,608,608,608', -'608,608,,,,,,608,608,608,608,608,608,608,,,608,,,,,,,608,,,608,608,608', -'608,608,608,608,608,,608,608,608,,608,608,,608,608,608,,,,,,,,,,,,,', -',,,,,,608,,,608,,,608,608,,,608,,,,,,608,,,,,,,,608,,,,,608,608,608', -'608,608,608,,,,608,608,,,,,,,608,,,608,608,608,,,608,608,604,604,604', -',604,,,,604,604,,,,604,,604,604,604,604,604,604,604,,,,,,604,604,604', -'604,604,604,604,,,604,,,,,,,604,,,604,604,604,604,604,604,604,604,,604', -'604,604,,604,604,,604,604,604,,,,,,,,,,,,,,,,,,,,604,,,604,,,604,604', -',,604,,,,,,604,,,,,,,,604,,,,,604,604,604,604,604,604,,,,604,604,,,', -',,,604,,,604,604,604,,,604,604,592,592,592,,592,,,,592,592,,,,592,,592', -'592,592,592,592,592,592,,,,,,592,592,592,592,592,592,592,,,592,,,,,', -',592,,,592,592,592,592,592,592,592,592,592,592,592,592,,592,592,,592', -'592,592,,,,,,,,,,,,,,,,,,,,592,,,592,,,592,592,,,592,,592,,592,,592', -',,,,,,,592,,,,,592,592,592,592,592,592,,,,592,592,,,,,,,592,,592,592', -'592,592,,,592,592,571,571,571,,571,,,,571,571,,,,571,,571,571,571,571', -'571,571,571,,,,,,571,571,571,571,571,571,571,,,571,,,,,,,571,,,571,571', -'571,571,571,571,571,571,,571,571,571,,571,571,,571,571,571,,,,,,,,,', -',,,,,,,,,,571,,,571,,,571,571,,,571,,,,,,571,,,,,,,,571,,,,,571,571', -'571,571,571,571,,,,571,571,,,,,,,571,,,571,571,571,,,571,571,544,544', -'544,,544,,,,544,544,,,,544,,544,544,544,544,544,544,544,,,,,,544,544', -'544,544,544,544,544,,,544,,,,,,,544,,,544,544,544,544,544,544,544,544', -'544,544,544,544,,544,544,,544,544,544,,,,,,,,,,,,,,,,,,,,544,,,544,', -',544,544,,,544,,,,,,544,,,,,,,,544,,,,,544,544,544,544,544,544,,,,544', -'544,,,,,,,544,,544,544,544,544,,,544,544,541,541,541,,541,,,,541,541', -',,,541,,541,541,541,541,541,541,541,,,,,,541,541,541,541,541,541,541', -',,541,,,,,,,541,,,541,541,541,541,541,541,541,541,541,541,541,541,,541', -'541,,541,541,541,,,,,,,,,,,,,,,,,,,,541,,,541,,,541,541,,,541,,541,', -',,541,,,,,,,,541,,,,,541,541,541,541,541,541,,,,541,541,,,,,,,541,,541', -'541,541,541,,,541,541,535,535,535,,535,,,,535,535,,,,535,,535,535,535', -'535,535,535,535,,,,,,535,535,535,535,535,535,535,,,535,,,,,,,535,,,535', -'535,535,535,535,535,535,535,,535,535,535,,535,535,,535,535,535,,,,,', -',,,,,,,,,,,,,,535,,,535,,,535,535,,,535,,,,,,535,,,,,,,,535,,,,,535', -'535,535,535,535,535,,,,535,535,,,,,,,535,,,535,535,535,,,535,535,531', -'531,531,,531,,,,531,531,,,,531,,531,531,531,531,531,531,531,,,,,,531', -'531,531,531,531,531,531,,,531,,,,,,,531,,,531,531,531,531,531,531,531', -'531,,531,531,531,,531,531,,531,531,531,,,,,,,,,,,,,,,,,,,,531,,,531', -',,531,531,,,531,,,,,,531,,,,,,,,531,,,,,531,531,531,531,531,531,,,,531', -'531,,,,,,,531,,,531,531,531,,,531,531,530,530,530,,530,,,,530,530,,', -',530,,530,530,530,530,530,530,530,,,,,,530,530,530,530,530,530,530,', -',530,,,,,,,530,,,530,530,530,530,530,530,530,530,,530,530,530,,530,530', -',530,530,530,,,,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,,,,,530,', -',,,,,,530,,,,,530,530,530,530,530,530,,,,530,530,,,,,,,530,,,530,530', -'530,,,530,530,527,527,527,,527,,,,527,527,,,,527,,527,527,527,527,527', -'527,527,,,,,,527,527,527,527,527,527,527,,,527,,,,,,,527,,,527,527,527', -'527,527,527,527,527,,527,527,527,,527,527,,,,527,,,,,,,,,,,,,,,,,,,', -'527,,,527,,,527,527,,,527,,,,,,,,,,,,,,,,,,,527,527,527,527,527,527', -',,,527,527,,,,,,,527,,,527,527,527,,,527,527,521,521,521,,521,,,,521', -'521,,,,521,,521,521,521,521,521,521,521,,,,,,521,521,521,521,521,521', -'521,,,521,,,,,,,521,,,521,521,521,521,521,521,521,521,521,521,521,521', -',521,521,,521,521,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,', -'521,,521,,521,,,,,,,,521,,,,,521,521,521,521,521,521,,,,521,521,,,,', -',,521,,521,521,521,521,,,521,521,519,519,519,,519,,,,519,519,,,,519', -',519,519,519,519,519,519,519,,,,,,519,519,519,519,519,519,519,,,519', -',,,,,,519,,,519,519,519,519,519,519,519,519,,519,519,519,,519,519,,', -',519,,,,,,,,,,,,,,,,,,,,519,,,519,,,519,519,,,519,,,,,,,,,,,,,,,,,,', -'519,519,519,519,519,519,,,,519,519,,,,,,,519,,,519,519,519,,,519,519', -'512,512,512,512,512,,,,512,512,,,,512,,512,512,512,512,512,512,512,', -',,,,512,512,512,512,512,512,512,,,512,,,,,,512,512,,512,512,512,512', -'512,512,512,512,512,,512,512,512,,512,512,,512,512,512,,,,,,,,,,,,,', -',,,,,,512,,,512,,,512,512,,,512,,512,,,,512,,,,,,,,512,,,,,512,512,512', -'512,512,512,,,,512,512,,,,,,512,512,,,512,512,512,,,512,512,417,417', -'417,,417,,,,417,417,,,,417,,417,417,417,417,417,417,417,,,,,,417,417', -'417,417,417,417,417,,,417,,,,,,,417,,,417,417,417,417,417,417,417,417', -',417,417,417,,417,417,,417,417,417,,,,,,,,,,,,,,,,,,,,417,,,417,,,417', -'417,,,417,,,,,,417,,,,,,,,417,,,,,417,417,417,417,417,417,,,,417,417', -',,,,,,417,,,417,417,417,,,417,417,509,509,509,,509,,,,509,509,,,,509', -',509,509,509,509,509,509,509,,,,,,509,509,509,509,509,509,509,,,509', -',,,,,,509,,,509,509,509,509,509,509,509,509,,509,509,509,,509,509,,509', -'509,509,,,,,,,,,,,,,,,,,,,,509,,,509,,,509,509,,,509,,,,,,509,,,,,,', -',509,,,,,509,509,509,509,509,509,,,,509,509,,,,,,,509,,,509,509,509', -',,509,509,505,505,505,,505,,,,505,505,,,,505,,505,505,505,505,505,505', -'505,,,,,,505,505,505,505,505,505,505,,,505,,,,,,,505,,,505,505,505,505', -'505,505,505,505,,505,505,505,,505,505,,505,505,505,,,,,,,,,,,,,,,,,', -',,505,,,505,,,505,505,,,505,,,,,,505,,,,,,,,505,,,,,505,505,505,505', -'505,505,,,,505,505,,,,,,,505,,,505,505,505,,,505,505,503,503,503,,503', -',,,503,503,,,,503,,503,503,503,503,503,503,503,,,,,,503,503,503,503', -'503,503,503,,,503,,,,,,,503,,,503,503,503,503,503,503,503,503,503,503', -'503,503,,503,503,,503,503,503,,,,,,,,,,,,,,,,,,,,503,,,503,,,503,503', -',,503,,,,503,,503,,,,,,,,503,,,,,503,503,503,503,503,503,,,,503,503', -',,,,,,503,,503,503,503,503,,,503,503,500,500,500,,500,,,,500,500,,,', -'500,,500,500,500,500,500,500,500,,,,,,500,500,500,500,500,500,500,,', -'500,,,,,,,500,,,500,500,500,500,500,500,500,500,500,500,500,500,,500', -'500,,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500,,,500,500,,,500,,500,', -'500,,500,,,,,,,,500,,,,,500,500,500,500,500,500,,,,500,500,,,,,,,500', -',500,500,500,500,,,500,500,459,459,459,,459,,,,459,459,,,,459,,459,459', -'459,459,459,459,459,,,,,,459,459,459,459,459,459,459,,,459,,,,,,,459', -',,459,459,459,459,459,459,459,459,,459,459,459,,459,459,,459,459,459', -',,,,,,,,,,,,,,,,,,,459,,,459,,,459,459,,,459,,,,,,459,,,,,,,,459,,,', -',459,459,459,459,459,459,,,,459,459,,,,,,,459,,,459,459,459,,,459,459', -'458,458,458,,458,,,,458,458,,,,458,,458,458,458,458,458,458,458,,,,', -',458,458,458,458,458,458,458,,,458,,,,,,,458,,,458,458,458,458,458,458', -'458,458,,458,458,458,,458,458,,458,458,458,,,,,,,,,,,,,,,,,,,,458,,', -'458,,,458,458,,,458,,,,,,458,,,,,,,,458,,,,,458,458,458,458,458,458', -',,,458,458,,,,,,,458,,,458,458,458,,,458,458,457,457,457,,457,,,,457', -'457,,,,457,,457,457,457,457,457,457,457,,,,,,457,457,457,457,457,457', -'457,,,457,,,,,,,457,,,457,457,457,457,457,457,457,457,,457,457,457,', -'457,457,,457,457,457,,,,,,,,,,,,,,,,,,,,457,,,457,,,457,457,,,457,,', -',,,457,,,,,,,,457,,,,,457,457,457,457,457,457,,,,457,457,,,,,,,457,', -',457,457,457,,,457,457,808,808,808,,808,,,,808,808,,,,808,,808,808,808', -'808,808,808,808,,,,,,808,808,808,808,808,808,808,,,808,,,,,,,808,,,808', -'808,808,808,808,808,808,808,,808,808,808,,808,808,,,,808,,,,,,,,,,,', -',,,,,,,,808,,,808,,,808,808,,,808,,,,,,,,,,,,,,,,,,,808,808,808,808', -'808,808,,,,808,808,,,,,,,808,,,808,808,808,,,808,808,233,233,233,,233', -',,,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233,233,233', -'233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233,,233,233', -'233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233', -',,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233,,,,,,,233', -',,233,233,233,,,233,233,796,796,796,,796,,,,796,796,,,,796,,796,796', -'796,796,796,796,796,,,,,,796,796,796,796,796,796,796,,,796,,,,,,,796', -',,796,796,796,796,796,796,796,796,,796,796,796,,796,796,,796,796,796', -',,,,,,,,,,,,,,,,,,,796,,,796,,,796,796,,,796,,,,,,796,,,,,,,,796,,,', -',796,796,796,796,796,796,,,,796,796,,,,,,,796,,,796,796,796,,,796,796', -'236,236,236,,236,,,,236,236,,,,236,,236,236,236,236,236,236,236,,,,', -',236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236,236,236,236', -'236,236,,236,236,236,,236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236,,', -'236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236,236,236,236', -',,,236,236,,,,,,,236,,,236,236,236,,,236,236,237,237,237,,237,,,,237', -'237,,,,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237,237', -'237,,,237,,,,,,,237,,,237,237,237,237,237,237,237,237,,237,237,237,', -'237,237,,237,237,237,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,237,,,237,,', -',,,237,,,,,,,,237,,,,,237,237,237,237,237,237,,,,237,237,,,,,,,237,', -',237,237,237,,,237,237,238,238,238,,238,,,,238,238,,,,238,,238,238,238', -'238,238,238,238,,,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238', -'238,238,238,238,238,238,238,,238,238,238,,238,238,,238,238,238,,,,,', -',,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,,,,,238,,,,,,,,238,,,,,238', -'238,238,238,238,238,,,,238,238,,,,,,,238,,,238,238,238,,,238,238,239', -'239,239,,239,,,,239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239', -'239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239', -'239,,239,239,239,,239,239,,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239', -',,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239,239,239,239,239,239,,,,239', -'239,,,,,,,239,,,239,239,239,,,239,239,240,240,240,,240,,,,240,240,,', -',240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240,240,240,', -',240,,,,,,,240,,,240,240,240,240,240,240,240,240,,240,240,240,,240,240', -',240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,240,,,240,,,,,,240,', -',,,,,,240,,,,,240,240,240,240,240,240,,,,240,240,,,,,,,240,,,240,240', -'240,,,240,240,241,241,241,,241,,,,241,241,,,,241,,241,241,241,241,241', -'241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241', -'241,241,241,241,241,,241,241,241,,241,241,,241,241,241,,,,,,,,,,,,,', -',,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,,,241,241,241', -'241,241,241,,,,241,241,,,,,,,241,,,241,241,241,,,241,241,242,242,242', -',242,,,,242,242,,,,242,,242,242,242,242,242,242,242,,,,,,242,242,242', -'242,242,242,242,,,242,,,,,,,242,,,242,242,242,242,242,242,242,242,,242', -'242,242,,242,242,,242,242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242', -',,242,,,,,,242,,,,,,,,242,,,,,242,242,242,242,242,242,,,,242,242,,,', -',,,242,,,242,242,242,,,242,242,243,243,243,,243,,,,243,243,,,,243,,243', -'243,243,243,243,243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,', -',243,,,243,243,243,243,243,243,243,243,,243,243,243,,243,243,,243,243', -'243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243,,,243,,,,,,243,,,,,,,,243', -',,,,243,243,243,243,243,243,,,,243,243,,,,,,,243,,,243,243,243,,,243', -'243,244,244,244,,244,,,,244,244,,,,244,,244,244,244,244,244,244,244', -',,,,,244,244,244,244,244,244,244,,,244,,,,,,,244,,,244,244,244,244,244', -'244,244,244,,244,244,244,,244,244,,244,244,244,,,,,,,,,,,,,,,,,,,,244', -',,244,,,244,244,,,244,,,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244', -',,,244,244,,,,,,,244,,,244,244,244,,,244,244,245,245,245,,245,,,,245', -'245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245,245,245,245,245', -'245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245,,245,245,245,', -'245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245,245,,,245,,', -',,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245,245,,,,,,,245,', -',245,245,245,,,245,245,246,246,246,,246,,,,246,246,,,,246,,246,246,246', -'246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246', -'246,246,246,246,246,246,246,,246,246,246,,246,246,,246,246,246,,,,,', -',,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246', -'246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246,,,246,246,247', -'247,247,,247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,,247', -'247,247,247,247,247,247,,,247,,,,,,,247,,,247,247,247,247,247,247,247', -'247,,247,247,247,,247,247,,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247', -',,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247,247,247,247,247,247,,,,247', -'247,,,,,,,247,,,247,247,247,,,247,247,248,248,248,,248,,,,248,248,,', -',248,,248,248,248,248,248,248,248,,,,,,248,248,248,248,248,248,248,', -',248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248,248,248,,248,248', -',248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,,,,,248,', -',,,,,,248,,,,,248,248,248,248,248,248,,,,248,248,,,,,,,248,,,248,248', -'248,,,248,248,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249', -'249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249', -'249,249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,', -',,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249', -'249,249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250', -',250,,,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250', -'250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250', -'250,250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250', -',,250,,,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,', -',,,250,,,250,250,250,,,250,250,251,251,251,,251,,,,251,251,,,,251,,251', -'251,251,251,251,251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,', -',251,,,251,251,251,251,251,251,251,251,,251,251,251,,251,251,,251,251', -'251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,251', -',,,,251,251,251,251,251,251,,,,251,251,,,,,,,251,,,251,251,251,,,251', -'251,252,252,252,,252,,,,252,252,,,,252,,252,252,252,252,252,252,252', -',,,,,252,252,252,252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252', -'252,252,252,,252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252', -',,252,,,252,252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252', -',,,252,252,,,,,,,252,,,252,252,252,,,252,252,253,253,253,,253,,,,253', -'253,,,,253,,253,253,253,253,253,253,253,,,,,,253,253,253,253,253,253', -'253,,,253,,,,,,,253,,,253,253,253,253,253,253,253,253,,253,253,253,', -'253,253,,253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,', -',,,253,,,,,,,,253,,,,,253,253,253,253,253,253,,,,253,253,,,,,,,253,', -',253,253,253,,,253,253,254,254,254,,254,,,,254,254,,,,254,,254,254,254', -'254,254,254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,,,254,,,254', -'254,254,254,254,254,254,254,,254,254,254,,254,254,,254,254,254,,,,,', -',,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254', -'254,254,254,254,254,,,,254,254,,,,,,,254,,,254,254,254,,,254,254,255', -'255,255,,255,,,,255,255,,,,255,,255,255,255,255,255,255,255,,,,,,255', -'255,255,255,255,255,255,,,255,,,,,,,255,,,255,255,255,255,255,255,255', -'255,,255,255,255,,255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255', -',,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255', -'255,,,,,,,255,,,255,255,255,,,255,255,256,256,256,,256,,,,256,256,,', -',256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256,256,256,', -',256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256,256,,256,256', -',256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,,256,,,,,,256,', -',,,,,,256,,,,,256,256,256,256,256,256,,,,256,256,,,,,,,256,,,256,256', -'256,,,256,256,258,258,258,,258,,,,258,258,,,,258,,258,258,258,258,258', -'258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258', -'258,258,258,258,258,,258,258,258,,258,258,,258,258,258,,,,,,,,,,,,,', -',,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258,,,,,258,258,258', -'258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258,258,259,259,259', -',259,,,,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259,259,259', -'259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259', -'259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259', -',,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259,,,,259,259,,,', -',,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260,260,,,,260,,260', -'260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,', -',260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260,,260,260', -'260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,260', -',,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,,,260,260,260,,,260', -'260,261,261,261,,261,,,,261,261,,,,261,,261,261,261,261,261,261,261', -',,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261,261,261,261,261', -'261,261,261,,261,261,261,,261,261,,261,261,261,,,,,,,,,,,,,,,,,,,,261', -',,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261,261,261,261,261,261', -',,,261,261,,,,,,,261,,,261,261,261,,,261,261,794,794,794,,794,,,,794', -'794,,,,794,,794,794,794,794,794,794,794,,,,,,794,794,794,794,794,794', -'794,,,794,,,,,,,794,,,794,794,794,794,794,794,794,794,,794,794,794,', -'794,794,,794,794,794,,,,,,,,,,,,,,,,,,,,794,,,794,,,794,794,,,794,,', -',,,794,,,,,,,,794,,,,,794,794,794,794,794,794,,,,794,794,,,,,,,794,', -',794,794,794,,,794,794,793,793,793,,793,,,,793,793,,,,793,,793,793,793', -'793,793,793,793,,,,,,793,793,793,793,793,793,793,,,793,,,,,,,793,,,793', -'793,793,793,793,793,793,793,,793,793,793,,793,793,,793,793,793,,,,,', -',,,,,,,,,,,,,,793,,,793,,,793,793,,,793,,,,,,793,,,,,,,,793,,,,,793', -'793,793,793,793,793,,,,793,793,,,,,,,793,,,793,793,793,,,793,793,268', -'268,268,,268,,,,268,268,,,,268,,268,268,268,268,268,268,268,,,,,,268', -'268,268,268,268,268,268,,,268,,,,,,,268,,,268,268,268,268,268,268,268', -'268,268,268,268,268,,268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268', -',,268,268,,,268,,268,,268,,268,,,,,,,,268,,,,,268,268,268,268,268,268', -',,,268,268,,,,,,,268,,268,268,268,268,,,268,268,792,792,792,,792,,,', -'792,792,,,,792,,792,792,792,792,792,792,792,,,,,,792,792,792,792,792', -'792,792,,,792,,,,,,,792,,,792,792,792,792,792,792,792,792,,792,792,792', -',792,792,,792,792,792,,,,,,,,,,,,,,,,,,,,792,,,792,,,792,792,,,792,', -',,,,792,,,,,,,,792,,,,,792,792,792,792,792,792,,,,792,792,,,,,,,792', -',,792,792,792,,,792,792,274,274,274,,274,,,,274,274,,,,274,,274,274', -'274,274,274,274,274,,,,,,274,274,274,274,274,274,274,,,274,,,,,,,274', -',,274,274,274,274,274,274,274,274,274,274,274,274,,274,274,,274,274', -'274,,,,,,,,,,,,,,,,,,,,274,,,274,,,274,274,,,274,,274,,274,,274,,,,', -',,,274,,,,,274,274,274,274,274,274,,,,274,274,,,,,,,274,,274,274,274', -'274,,,274,274,277,277,277,,277,,,,277,277,,,,277,,277,277,277,277,277', -'277,277,,,,,,277,277,277,277,277,277,277,,,277,,,,,,,277,,,277,277,277', -'277,277,277,277,277,277,277,277,277,,277,277,,277,277,277,,,,,,,,,,', -',,,,,,,,,277,,,277,,,277,277,,,277,,277,,277,,277,,,,,,,,277,,,,,277', -'277,277,277,277,277,,,,277,277,277,,,,,,277,,277,277,277,277,,,277,277', -'791,791,791,,791,,,,791,791,,,,791,,791,791,791,791,791,791,791,,,,', -',791,791,791,791,791,791,791,,,791,,,,,,,791,,,791,791,791,791,791,791', -'791,791,,791,791,791,,791,791,,791,791,791,,,,,,,,,,,,,,,,,,,,791,,', -'791,,,791,791,,,791,,,,,,791,,,,,,,,791,,,,,791,791,791,791,791,791', -',,,791,791,,,,,,,791,,,791,791,791,,,791,791,777,777,777,,777,,,,777', -'777,,,,777,,777,777,777,777,777,777,777,,,,,,777,777,777,777,777,777', -'777,,,777,,,,,,,777,,,777,777,777,777,777,777,777,777,,777,777,777,', -'777,777,,777,777,777,,,,,,,,,,,,,,,,,,,,777,,,777,,,777,777,,,777,,', -',,,777,,,,,,,,777,,,,,777,777,777,777,777,777,,,,777,777,,,,,,,777,', -',777,777,777,,,777,777,775,775,775,,775,,,,775,775,,,,775,,775,775,775', -'775,775,775,775,,,,,,775,775,775,775,775,775,775,,,775,,,,,,,775,,,775', -'775,775,775,775,775,775,775,,775,775,775,,775,775,,775,775,775,,,,,', -',,,,,,,,,,,,,,775,,,775,,,775,775,,,775,,,,,,775,,,,,,,,775,,,,,775', -'775,775,775,775,775,,,,775,775,,,,,,,775,,,775,775,775,,,775,775,284', -'284,284,,284,,,,284,284,,,,284,,284,284,284,284,284,284,284,,,,,,284', -'284,284,284,284,284,284,,,284,,,,,,,284,,,284,284,284,284,284,284,284', -'284,,284,284,284,,284,284,,284,284,284,,,,,,,,,,,,,,,,,,,,284,,,284', -',,284,284,,,284,,,,,,284,,,,,,,,284,,,,,284,284,284,284,284,284,,,,284', -'284,,,,,,,284,,,284,284,284,,,284,284,286,286,286,,286,,,,286,286,,', -',286,,286,286,286,286,286,286,286,,,,,,286,286,286,286,286,286,286,', -',286,,,,,,,286,,,286,286,286,286,286,286,286,286,,286,286,286,,286,286', -',286,286,286,,,,,,,,,,,,,,,,,,,,286,,,286,,,286,286,,,286,,,,,,286,', -',,,,,,286,,,,,286,286,286,286,286,286,,,,286,286,,,,,,,286,,,286,286', -'286,,,286,286,288,288,288,,288,,,,288,288,,,,288,,288,288,288,288,288', -'288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,,,288,,,288,288,288', -'288,288,288,288,288,,288,288,288,,288,288,,288,288,288,,,,,,,,,,,,,', -',,,,,,288,,,288,,,288,288,,,288,,,,,,288,,,,,,,,288,,,,,288,288,288', -'288,288,288,,,,288,288,,,,,,,288,,,288,288,288,,,288,288,291,291,291', -',291,,,,291,291,,,,291,,291,291,291,291,291,291,291,,,,,,291,291,291', -'291,291,291,291,,,291,,,,,,,291,,,291,291,291,291,291,291,291,291,,291', -'291,291,,291,291,,291,291,291,,,,,,,,,,,,,,,,,,,,291,,,291,,,291,291', -',,291,,,,,,291,,,,,,,,291,,,,,291,291,291,291,291,291,,,,291,291,,,', -',,,291,,,291,291,291,,,291,291,297,297,297,297,297,,,,297,297,,,,297', -',297,297,297,297,297,297,297,,,,,,297,297,297,297,297,297,297,,,297', -',,,,,297,297,,297,297,297,297,297,297,297,297,297,,297,297,297,,297', -'297,,297,297,297,,,,,,,,,,,,,,,,,,,,297,,,297,,,297,297,,,297,,297,', -',,297,,,,,,,,297,,,,,297,297,297,297,297,297,,,,297,297,,,,,,,297,,', -'297,297,297,,,297,297,753,753,753,,753,,,,753,753,,,,753,,753,753,753', -'753,753,753,753,,,,,,753,753,753,753,753,753,753,,,753,,,,,,,753,,,753', -'753,753,753,753,753,753,753,753,753,753,753,,753,753,,753,753,753,,', -',,,,,,,,,,,,,,,,,753,,,753,,,753,753,,,753,,753,,753,,753,,,,,,,,753', -',,,,753,753,753,753,753,753,,,,753,753,,,,,,,753,,753,753,753,753,,', -'753,753,747,747,747,,747,,,,747,747,,,,747,,747,747,747,747,747,747', +'337,337,337,337,337,337,337,,337,337,337,,337,337,,,,337,,,,,,,,,,,', +',,,,,,,,337,,,337,,,337,337,,,337,,,,,,,,,,,,,,,,,,,337,337,337,337', +'337,337,,,,337,337,,,,,,,337,,,337,337,337,,,337,337,802,802,802,,802', +',,,802,802,,,,802,,802,802,802,802,802,802,802,,,,,,802,802,802,802', +'802,802,802,,,802,,,,,,,802,,,802,802,802,802,802,802,802,802,,802,802', +'802,,802,802,,802,802,802,,,,,,,,,,,,,,,,,,,,802,,,802,,,802,802,,,802', +',,,,,802,,,,,,,,802,,,,,802,802,802,802,802,802,,,,802,802,,,,,,,802', +',,802,802,802,,,802,802,344,344,344,,344,,,,344,344,,,,344,,344,344', +'344,344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344', +',,344,344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344', +',,,,,,,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344,,,', +',344,344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344,344', +'346,346,346,,346,,,,346,346,,,,346,,346,346,346,346,346,346,346,,,,', +',346,346,346,346,346,346,346,,,346,,,,,,,346,,,346,346,346,346,346,346', +'346,346,,346,346,346,,346,346,,346,346,346,,,,,,,,,,,,,,,,,,,,346,,', +'346,346,,346,346,,,346,,,,,,346,,,,,,,,346,,,,,346,346,346,346,346,346', +',,,346,346,,,,,,,346,,,346,346,346,,,346,346,350,350,350,,350,,,,350', +'350,,,,350,,350,350,350,350,350,350,350,,,,,,350,350,350,350,350,350', +'350,,,350,,,,,,,350,,,350,350,350,350,350,350,350,350,350,350,350,350', +',350,350,,350,350,350,,,,,,,,,,,,,,,,,,,,350,,,350,,,350,350,,,350,', +'350,,,,350,,,,,,,,350,,,,,350,350,350,350,350,350,,,,350,350,,,,,,,350', +',350,350,350,350,,,350,350,351,351,351,,351,,,,351,351,,,,351,,351,351', +'351,351,351,351,351,,,,,,351,351,351,351,351,351,351,,,351,,,,,,,351', +',,351,351,351,351,351,351,351,351,351,351,351,351,,351,351,,351,351', +'351,,,,,,,,,,,,,,,,,,,,351,,,351,,,351,351,,,351,,,,,,351,,,,,,,,351', +',,,,351,351,351,351,351,351,,,,351,351,,,,,,,351,,351,351,351,351,,', +'351,351,358,358,358,,358,,,,358,358,,,,358,,358,358,358,358,358,358', +'358,,,,,,358,358,358,358,358,358,358,,,358,,,,,,,358,,,358,358,358,358', +'358,358,358,358,,358,358,358,,358,358,,358,358,358,,,,,,,,,,,,,,,,,', +',,358,,,358,,,358,358,,,358,,,,,,358,,,,,,,,358,,,,,358,358,358,358', +'358,358,,,,358,358,,,,,,,358,,,358,358,358,,,358,358,780,780,780,,780', +',,,780,780,,,,780,,780,780,780,780,780,780,780,,,,,,780,780,780,780', +'780,780,780,,,780,,,,,,,780,,,780,780,780,780,780,780,780,780,780,780', +'780,780,,780,780,,780,780,780,,,,,,,,,,,,,,,,,,,,780,,,780,,,780,780', +',,780,,780,,780,,780,,,,,,,,780,,,,,780,780,780,780,780,780,,,,780,780', +',,,,,,780,,780,780,780,780,,,780,780,372,372,372,,372,,,,372,372,,,', +'372,,372,372,372,372,372,372,372,,,,,,372,372,372,372,372,372,372,,', +'372,,,,,,,372,,,372,372,372,372,372,372,372,372,,372,372,372,,372,372', +',,,372,,,,,,,,,,,,,,,,,,,,372,,,372,,,372,372,,,372,,,,,,,,,,,,,,,,', +',,372,372,372,372,372,372,,,,372,372,,,,,,,372,,,372,372,372,,,372,372', +'374,374,374,,374,,,,374,374,,,,374,,374,374,374,374,374,374,374,,,,', +',374,374,374,374,374,374,374,,,374,,,,,,,374,,,374,374,374,374,374,374', +'374,374,,374,374,374,,374,374,,,,374,,,,,,,,,,,,,,,,,,,,374,,,374,,', +'374,374,,,374,,,,,,,,,,,,,,,,,,,374,374,374,374,374,374,,,,374,374,', +',,,,,374,,,374,374,374,,,374,374,768,768,768,,768,,,,768,768,,,,768', +',768,768,768,768,768,768,768,,,,,,768,768,768,768,768,768,768,,,768', +',,,,,,768,,,768,768,768,768,768,768,768,768,,768,768,768,,768,768,,768', +'768,768,,,,,,,,,,,,,,,,,,,,768,,,768,,,768,768,,,768,,768,,,,768,,,', +',,,,768,,,,,768,768,768,768,768,768,,,,768,768,,,,,,,768,,,768,768,768', +',,768,768,747,747,747,,747,,,,747,747,,,,747,,747,747,747,747,747,747', '747,,,,,,747,747,747,747,747,747,747,,,747,,,,,,,747,,,747,747,747,747', '747,747,747,747,,747,747,747,,747,747,,747,747,747,,,,,,,,,,,,,,,,,', ',,747,,,747,,,747,747,,,747,,,,,,747,,,,,,,,747,,,,,747,747,747,747', -'747,747,,,,747,747,,,,,,,747,,,747,747,747,,,747,747,303,303,303,,303', -',,,303,303,,,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303', -'303,303,303,,,303,,,,,,,303,,,303,303,303,303,303,303,303,303,,303,303', -'303,,303,303,,,,303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303,,,303,,,', -',,,,,,,,,,,,,,,303,303,303,303,303,303,,,,303,303,,,,303,,,303,,,303', -'303,303,,,303,303,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91', -'91,91,91,91,91,91,91,,,,91,91,91,91,91,91,91,91,91,91,,,,,,91,91,91', -'91,91,91,91,91,91,91,91,91,,91,,,,,,,91,91,,91,91,91,91,91,91,91,,,91', -'91,,,,91,91,91,91,,,,,,,,,,,,,,91,91,,91,91,91,91,91,91,91,91,91,91', -'91,,,91,,,,,,,,,,,,,,,,,,,,91,12,12,12,12,12,12,12,12,12,12,12,12,12', -'12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12,12,12,12,12,,', -',,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12,12,12,12,12', -'12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12,12,12,12,12', -'12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,74,74,74,74,74,74,74,74,74,74', -'74,74,74,74,74,74,74,74,74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74', -'74,74,,,,,,74,74,74,74,74,74,74,74,74,74,74,74,,74,,,,,,,74,74,,74,74', -'74,74,74,74,74,,,74,74,,,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74', -'74,74,74,74,74,74,74,74,,,74,,,,,,,,,,,,,,,,,,,,74,763,763,763,763,763', -'763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763', -'763,763,,,,763,763,763,763,763,763,763,763,763,763,,,,,,763,763,763', -'763,763,763,763,763,763,,,763,,,,,,,,,763,763,,763,763,763,763,763,763', -'763,,,763,763,,,,763,763,763,763,,,,,,,,,,,,,,763,763,,763,763,763,763', -'763,763,763,763,763,763,763,,,763,,,,,,,,,,,,,,,,,,,,763,634,634,634', -'634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634', -'634,634,634,634,,,,634,634,634,634,634,634,634,634,634,634,,,,,,634', -'634,634,634,634,634,634,634,634,,,634,,,,,,,,,634,634,,634,634,634,634', -'634,634,634,,,634,634,,,,634,634,634,634,,,,,,,,,,,,,,634,634,,634,634', -'634,634,634,634,634,634,634,634,634,,,634,634,,,,,,,,,,634,,,,,,,,,634', +'747,747,,,,747,747,,,,,,,747,,,747,747,747,,,747,747,731,731,731,,731', +',,,731,731,,,,731,,731,731,731,731,731,731,731,,,,,,731,731,731,731', +'731,731,731,,,731,,,,,,,731,,,731,731,731,731,731,731,731,731,731,731', +'731,731,,731,731,,731,731,731,,,,,,,,,,,,,,,,,,,,731,,,731,,,731,731', +',,731,,,,,,731,,,,,,,,731,,,,,731,731,731,731,731,731,,,,731,731,,,', +',,,731,,731,731,731,731,,,731,731,728,728,728,,728,,,,728,728,,,,728', +',728,728,728,728,728,728,728,,,,,,728,728,728,728,728,728,728,,,728', +',,,,,,728,,,728,728,728,728,728,728,728,728,728,728,728,728,,728,728', +',728,728,728,,,,,,,,,,,,,,,,,,,,728,,,728,,,728,728,,,728,,728,,,,728', +',,,,,,,728,,,,,728,728,728,728,728,728,,,,728,728,,,,,,,728,,728,728', +'728,728,,,728,728,723,723,723,,723,,,,723,723,,,,723,,723,723,723,723', +'723,723,723,,,,,,723,723,723,723,723,723,723,,,723,,,,,,,723,,,723,723', +'723,723,723,723,723,723,,723,723,723,,723,723,,723,723,723,,,,,,,,,', +',,,,,,,,,,723,,,723,,,723,723,,,723,,723,,,,723,,,,,,,,723,,,,,723,723', +'723,723,723,723,,,,723,723,,,,,,,723,,,723,723,723,,,723,723,718,718', +'718,,718,,,,718,718,,,,718,,718,718,718,718,718,718,718,,,,,,718,718', +'718,718,718,718,718,,,718,,,,,,,718,,,718,718,718,718,718,718,718,718', +',718,718,718,,718,718,,718,718,718,,,,,,,,,,,,,,,,,,,,718,,,718,,,718', +'718,,,718,,,,,,718,,,,,,,,718,,,,,718,718,718,718,718,718,,,,718,718', +',,,,,,718,,,718,718,718,,,718,718,717,717,717,,717,,,,717,717,,,,717', +',717,717,717,717,717,717,717,,,,,,717,717,717,717,717,717,717,,,717', +',,,,,,717,,,717,717,717,717,717,717,717,717,,717,717,717,,717,717,,', +',717,,,,,,,,,,,,,,,,,,,,717,,,717,,,717,717,,,717,,,,,,,,,,,,,,,,,,', +'717,717,717,717,717,717,,,,717,717,,,,,,,717,,,717,717,717,,,717,717', +'706,706,706,,706,,,,706,706,,,,706,,706,706,706,706,706,706,706,,,,', +',706,706,706,706,706,706,706,,,706,,,,,,,706,,,706,706,706,706,706,706', +'706,706,,706,706,706,,706,706,,,,706,,,,,,,,,,,,,,,,,,,,706,,,706,,', +'706,706,,,706,,,,,,,,,,,,,,,,,,,706,706,706,706,706,706,,,,706,706,', +',,,,,706,,,706,706,706,,,706,706,703,703,703,,703,,,,703,703,,,,703', +',703,703,703,703,703,703,703,,,,,,703,703,703,703,703,703,703,,,703', +',,,,,,703,,,703,703,703,703,703,703,703,703,,703,703,703,,703,703,,703', +'703,703,,,,,,,,,,,,,,,,,,,,703,,,703,,,703,703,,,703,,,,,,703,,,,,,', +',703,,,,,703,703,703,703,703,703,,,,703,703,,,,,,,703,,,703,703,703', +',,703,703,700,700,700,,700,,,,700,700,,,,700,,700,700,700,700,700,700', +'700,,,,,,700,700,700,700,700,700,700,,,700,,,,,,,700,,,700,700,700,700', +'700,700,700,700,,700,700,700,,700,700,,700,700,700,,,,,,,,,,,,,,,,,', +',,700,,,700,,,700,700,,,700,,,,,,700,,,,,,,,700,,,,,700,700,700,700', +'700,700,,,,700,700,,,,,,,700,,,700,700,700,,,700,700,432,432,432,,432', +',,,432,432,,,,432,,432,432,432,432,432,432,432,,,,,,432,432,432,432', +'432,432,432,,,432,,,,,,,432,,,432,432,432,432,432,432,432,432,,432,432', +'432,,432,432,,432,432,432,,,,,,,,,,,,,,,,,,,,432,,,432,,,432,432,,,432', +',,,,,432,,,,,,,,432,,,,,432,432,432,432,432,432,,,,432,432,,,,,,,432', +',,432,432,432,,,432,432,676,676,676,,676,,,,676,676,,,,676,,676,676', +'676,676,676,676,676,,,,,,676,676,676,676,676,676,676,,,676,,,,,,,676', +',,676,676,676,676,676,676,676,676,,676,676,676,,676,676,,676,676,676', +',,,,,,,,,,,,,,,,,,,676,,,676,,,676,676,,,676,,,,,,676,,,,,,,,676,,,', +',676,676,676,676,676,676,,,,676,676,,,,,,,676,,,676,676,676,,,676,676', +'675,675,675,,675,,,,675,675,,,,675,,675,675,675,675,675,675,675,,,,', +',675,675,675,675,675,675,675,,,675,,,,,,,675,,,675,675,675,675,675,675', +'675,675,,675,675,675,,675,675,,675,675,675,,,,,,,,,,,,,,,,,,,,675,,', +'675,,,675,675,,,675,,,,,,675,,,,,,,,675,,,,,675,675,675,675,675,675', +',,,675,675,,,,,,,675,,,675,675,675,,,675,675,670,670,670,,670,,,,670', +'670,,,,670,,670,670,670,670,670,670,670,,,,,,670,670,670,670,670,670', +'670,,,670,,,,,,,670,,,670,670,670,670,670,670,670,670,,670,670,670,', +'670,670,,670,670,670,,,,,,,,,,,,,,,,,,,,670,,,670,,,670,670,,,670,,', +',,,670,,,,,,,,670,,,,,670,670,670,670,670,670,,,,670,670,,,,,,,670,', +',670,670,670,,,670,670,669,669,669,,669,,,,669,669,,,,669,,669,669,669', +'669,669,669,669,,,,,,669,669,669,669,669,669,669,,,669,,,,,,,669,,,669', +'669,669,669,669,669,669,669,,669,669,669,,669,669,,669,669,669,,,,,', +',,,,,,,,,,,,,,669,,,669,,,669,669,,,669,,,,,,669,,,,,,,,669,,,,,669', +'669,669,669,669,669,,,,669,669,,,,,,,669,,,669,669,669,,,669,669,668', +'668,668,,668,,,,668,668,,,,668,,668,668,668,668,668,668,668,,,,,,668', +'668,668,668,668,668,668,,,668,,,,,,,668,,,668,668,668,668,668,668,668', +'668,668,668,668,668,,668,668,,668,668,668,,,,,,,,,,,,,,,,,,,,668,,,668', +',,668,668,,,668,,,,668,,668,,,,,,,,668,,,,,668,668,668,668,668,668,', +',,668,668,,,,,,,668,,668,668,668,668,,,668,668,667,667,667,,667,,,,667', +'667,,,,667,,667,667,667,667,667,667,667,,,,,,667,667,667,667,667,667', +'667,,,667,,,,,,,667,,,667,667,667,667,667,667,667,667,667,667,667,667', +',667,667,,667,667,667,,,,,,,,,,,,,,,,,,,,667,,,667,,,667,667,,,667,', +'667,,667,,667,,,,,,,,667,,,,,667,667,667,667,667,667,,,,667,667,,,,', +',,667,,667,667,667,667,,,667,667,664,664,664,,664,,,,664,664,,,,664', +',664,664,664,664,664,664,664,,,,,,664,664,664,664,664,664,664,,,664', +',,,,,,664,,,664,664,664,664,664,664,664,664,,664,664,664,,664,664,,664', +'664,664,,,,,,,,,,,,,,,,,,,,664,,,664,,,664,664,,,664,,,,,,664,,,,,,', +',664,,,,,664,664,664,664,664,664,,,,664,664,,,,,,,664,,,664,664,664', +',,664,664,663,663,663,663,663,,,,663,663,,,,663,,663,663,663,663,663', +'663,663,,,,,,663,663,663,663,663,663,663,,,663,,,,,,663,663,,663,663', +'663,663,663,663,663,663,663,,663,663,663,,663,663,,663,663,663,,,,,', +',,,,,,,,,,,,,,663,,,663,,,663,663,,,663,,663,,,,663,,,,,,,,663,,,,,663', +'663,663,663,663,663,,,,663,663,,,,,,,663,,,663,663,663,,,663,663,476', +'476,476,,476,,,,476,476,,,,476,,476,476,476,476,476,476,476,,,,,,476', +'476,476,476,476,476,476,,,476,,,,,,,476,,,476,476,476,476,476,476,476', +'476,476,476,476,476,,476,476,,476,476,476,,,,,,,,,,,,,,,,,,,,476,,,476', +',,476,476,,,476,,476,,476,,476,,,,,,,,476,,,,,476,476,476,476,476,476', +',,,476,476,,,,,,,476,,476,476,476,476,,,476,476,478,478,478,,478,,,', +'478,478,,,,478,,478,478,478,478,478,478,478,,,,,,478,478,478,478,478', +'478,478,,,478,,,,,,,478,,,478,478,478,478,478,478,478,478,,478,478,478', +',478,478,,478,478,478,,,,,,,,,,,,,,,,,,,,478,,,478,,,478,478,,,478,', +',,,,478,,,,,,,,478,,,,,478,478,478,478,478,478,,,,478,478,,,,,,,478', +',,478,478,478,,,478,478,479,479,479,,479,,,,479,479,,,,479,,479,479', +'479,479,479,479,479,,,,,,479,479,479,479,479,479,479,,,479,,,,,,,479', +',,479,479,479,479,479,479,479,479,,479,479,479,,479,479,,479,479,479', +',,,,,,,,,,,,,,,,,,,479,,,479,,,479,479,,,479,,,,,,479,,,,,,,,479,,,', +',479,479,479,479,479,479,,,,479,479,,,,,,,479,,,479,479,479,,,479,479', +'480,480,480,,480,,,,480,480,,,,480,,480,480,480,480,480,480,480,,,,', +',480,480,480,480,480,480,480,,,480,,,,,,,480,,,480,480,480,480,480,480', +'480,480,,480,480,480,,480,480,,480,480,480,,,,,,,,,,,,,,,,,,,,480,,', +'480,,,480,480,,,480,,,,,,480,,,,,,,,480,,,,,480,480,480,480,480,480', +',,,480,480,,,,,,,480,,,480,480,480,,,480,480,660,660,660,,660,,,,660', +'660,,,,660,,660,660,660,660,660,660,660,,,,,,660,660,660,660,660,660', +'660,,,660,,,,,,,660,,,660,660,660,660,660,660,660,660,660,660,660,660', +',660,660,,660,660,660,,,,,,,,,,,,,,,,,,,,660,,,660,,,660,660,,,660,', +'660,,660,,660,,,,,,,,660,,,,,660,660,660,660,660,660,,,,660,660,,,,', +',,660,,660,660,660,660,,,660,660,659,659,659,,659,,,,659,659,,,,659', +',659,659,659,659,659,659,659,,,,,,659,659,659,659,659,659,659,,,659', +',,,,,,659,,,659,659,659,659,659,659,659,659,,659,659,659,,659,659,,659', +'659,659,,,,,,,,,,,,,,,,,,,,659,,,659,,,659,659,,,659,,,,,,659,,,,,,', +',659,,,,,659,659,659,659,659,659,,,,659,659,,,,,,,659,,,659,659,659', +',,659,659,658,658,658,,658,,,,658,658,,,,658,,658,658,658,658,658,658', +'658,,,,,,658,658,658,658,658,658,658,,,658,,,,,,,658,,,658,658,658,658', +'658,658,658,658,,658,658,658,,658,658,,658,658,658,,,,,,,,,,,,,,,,,', +',,658,,,658,,,658,658,,,658,,658,,,,658,,,,,,,,658,,,,,658,658,658,658', +'658,658,,,,658,658,,,,,,,658,,,658,658,658,,,658,658,629,629,629,,629', +',,,629,629,,,,629,,629,629,629,629,629,629,629,,,,,,629,629,629,629', +'629,629,629,,,629,,,,,,,629,,,629,629,629,629,629,629,629,629,,629,629', +'629,,629,629,,629,629,629,,,,,,,,,,,,,,,,,,,,629,,,629,,,629,629,,,629', +',,,,,629,,,,,,,,629,,,,,629,629,629,629,629,629,,,,629,629,,,,,,,629', +',,629,629,629,,,629,629,623,623,623,,623,,,,623,623,,,,623,,623,623', +'623,623,623,623,623,,,,,,623,623,623,623,623,623,623,,,623,,,,,,,623', +',,623,623,623,623,623,623,623,623,,623,623,623,,623,623,,623,623,623', +',,,,,,,,,,,,,,,,,,,623,,,623,,,623,623,,,623,,,,,,623,,,,,,,,623,,,', +',623,623,623,623,623,623,,,,623,623,,,,,,,623,,,623,623,623,,,623,623', +'611,611,611,,611,,,,611,611,,,,611,,611,611,611,611,611,611,611,,,,', +',611,611,611,611,611,611,611,,,611,,,,,,,611,,,611,611,611,611,611,611', +'611,611,611,611,611,611,,611,611,,611,611,611,,,,,,,,,,,,,,,,,,,,611', +',,611,,,611,611,,,611,,611,,611,,611,,,,,,,,611,,,,,611,611,611,611', +'611,611,,,,611,611,,,,,,,611,,611,611,611,611,,,611,611,588,588,588', +',588,,,,588,588,,,,588,,588,588,588,588,588,588,588,,,,,,588,588,588', +'588,588,588,588,,,588,,,,,,,588,,,588,588,588,588,588,588,588,588,,588', +'588,588,,588,588,,588,588,588,,,,,,,,,,,,,,,,,,,,588,,,588,,,588,588', +',,588,,,,,,588,,,,,,,,588,,,,,588,588,588,588,588,588,,,,588,588,,,', +',,,588,,,588,588,588,,,588,588,554,554,554,,554,,,,554,554,,,,554,,554', +'554,554,554,554,554,554,,,,,,554,554,554,554,554,554,554,,,554,,,,,', +',554,,,554,554,554,554,554,554,554,554,,554,554,554,,554,554,,554,554', +'554,,,,,,,,,,,,,,,,,,,,554,,,554,,,554,554,,,554,,,,,,554,,,,,,,,554', +',,,,554,554,554,554,554,554,,,,554,554,,,,,,,554,,,554,554,554,,,554', +'554,549,549,549,,549,,,,549,549,,,,549,,549,549,549,549,549,549,549', +',,,,,549,549,549,549,549,549,549,,,549,,,,,,,549,,,549,549,549,549,549', +'549,549,549,,549,549,549,,549,549,,549,549,549,,,,,,,,,,,,,,,,,,,,549', +',,549,,,549,549,,,549,,,,,,549,,,,,,,,549,,,,,549,549,549,549,549,549', +',,,549,549,,,,,,,549,,,549,549,549,,,549,549,545,545,545,,545,,,,545', +'545,,,,545,,545,545,545,545,545,545,545,,,,,,545,545,545,545,545,545', +'545,,,545,,,,,,,545,,,545,545,545,545,545,545,545,545,,545,545,545,', +'545,545,,,,545,,,,,,,,,,,,,,,,,,,,545,,,545,,,545,545,,,545,,,,,,,,', +',,,,,,,,,,545,545,545,545,545,545,,,,545,545,,,,,,,545,,,545,545,545', +',,545,545,539,539,539,,539,,,,539,539,,,,539,,539,539,539,539,539,539', +'539,,,,,,539,539,539,539,539,539,539,,,539,,,,,,,539,,,539,539,539,539', +'539,539,539,539,539,539,539,539,,539,539,,539,539,539,,,,,,,,,,,,,,', +',,,,,539,,,539,,,539,539,,,539,,539,,539,,539,,,,,,,,539,,,,,539,539', +'539,539,539,539,,,,539,539,,,,,,,539,,539,539,539,539,,,539,539,519', +'519,519,,519,,,,519,519,,,,519,,519,519,519,519,519,519,519,,,,,,519', +'519,519,519,519,519,519,,,519,,,,,,,519,,,519,519,519,519,519,519,519', +'519,519,519,519,519,,519,519,,519,519,519,,,,,,,,,,,,,,,,,,,,519,,,519', +',,519,519,,,519,,519,,519,,519,,,,,,,,519,,,,,519,519,519,519,519,519', +',,,519,519,,,,,,,519,,519,519,519,519,,,519,519,522,522,522,,522,,,', +'522,522,,,,522,,522,522,522,522,522,522,522,,,,,,522,522,522,522,522', +'522,522,,,522,,,,,,,522,,,522,522,522,522,522,522,522,522,522,522,522', +'522,,522,522,,522,522,522,,,,,,,,,,,,,,,,,,,,522,,,522,,,522,522,,,522', +',,,522,,522,,,,,,,,522,,,,,522,522,522,522,522,522,,,,522,522,,,,,,', +'522,,522,522,522,522,,,522,522,524,524,524,,524,,,,524,524,,,,524,,524', +'524,524,524,524,524,524,,,,,,524,524,524,524,524,524,524,,,524,,,,,', +',524,,,524,524,524,524,524,524,524,524,,524,524,524,,524,524,,524,524', +'524,,,,,,,,,,,,,,,,,,,,524,,,524,,,524,524,,,524,,,,,,524,,,,,,,,524', +',,,,524,524,524,524,524,524,,,,524,524,,,,,,,524,,,524,524,524,,,524', +'524,941,941,941,,941,,,,941,941,,,,941,,941,941,941,941,941,941,941', +',,,,,941,941,941,941,941,941,941,,,941,,,,,,,941,,,941,941,941,941,941', +'941,941,941,,941,941,941,,941,941,,,,941,,,,,,,,,,,,,,,,,,,,941,,,941', +',,941,941,,,941,,,,,,,,,,,,,,,,,,,941,941,941,941,941,941,,,,941,941', +',,,,,,941,,,941,941,941,,,941,941,246,246,246,,246,,,,246,246,,,,246', +',246,246,246,246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246', +',,,,,,246,,,246,246,246,246,246,246,246,246,,246,246,246,,246,246,,246', +'246,246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,', +',246,,,,,246,246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246', +',,246,246,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249,249', +'249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249,249', +'249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,,,,,', +',,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249,249', +'249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250,,250', +',,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250,250', +'250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250,250', +'250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250', +',,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,,,,,250', +',,250,250,250,,,250,250,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75', +'75,75,75,75,75,75,75,75,75,,,,75,75,75,75,75,75,75,75,75,75,,,,,,75', +'75,75,75,75,75,75,75,75,75,75,75,,75,,,,,,,75,75,,75,75,75,75,75,75', +'75,,,75,75,,,,75,75,75,75,,,,,,75,,,,,,,,75,75,,75,75,75,75,75,75,75', +'75,75,75,75,,,75,,,,,,,,,,,,,,,,,,,,75,,,,,75,12,12,12,12,12,12,12,12', +'12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12', +'12,12,12,12,,,,,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12', +'12,12,12,12,12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12', +'12,12,12,12,12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,,,,,12,423,423,423', +'423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423', +'423,423,423,423,,,,423,423,423,423,423,423,423,423,423,423,,,,,,423', +'423,423,423,423,423,423,423,423,,,423,,,,,,,,,423,423,,423,423,423,423', +'423,423,423,,,423,423,,,,423,423,423,423,,,,,,,,,,,,,,423,423,,423,423', +'423,423,423,423,423,423,423,423,423,,,423,423,,,,,,,,,,423,,,,,,,,,423', +',,,,423,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103', +'103,103,103,103,103,103,103,103,103,,,,103,103,103,103,103,103,103,103', +'103,103,,,,,,103,103,103,103,103,103,103,103,103,103,103,103,,103,,', +',,,,103,103,,103,103,103,103,103,103,103,,,103,103,,,,103,103,103,103', +',,,,,,,,,,,,,103,103,,103,103,103,103,103,103,103,103,103,103,103,,', +'103,,,,,,,,,,,,,,,,,,,,103,,,,,103,655,655,655,655,655,655,655,655,655', +'655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,,,,655,655', +'655,655,655,655,655,655,655,655,,,,,,655,655,655,655,655,655,655,655', +'655,,,655,,,,,,,,,655,655,,655,655,655,655,655,655,655,,,655,655,,,', +'655,655,655,655,,,,,,,,,,,,,,655,655,,655,655,655,655,655,655,655,655', +'655,655,655,,,655,655,,,,,,,,,,655,,,,,,,,,655,,,,,655,789,789,789,789', +'789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789', +'789,789,789,,,,789,789,789,789,789,789,789,789,789,789,,,,,,789,789', +'789,789,789,789,789,789,789,,,789,,,,,,,,,789,789,,789,789,789,789,789', +'789,789,,,789,789,,,,789,789,789,789,,,,,,,,,,,,,,789,789,,789,789,789', +'789,789,789,789,789,789,789,789,,,789,,,,,,,,,,,,,,,,,,,,789,,,,,789', '11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11', '11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11', '11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,', ',,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,', -'11,,,,,,,,,11,408,408,408,408,408,408,408,408,408,408,408,408,408,408', -'408,408,408,408,408,408,408,408,408,408,,,,408,408,408,408,408,408,408', -'408,408,408,,,,,,408,408,408,408,408,408,408,408,408,,,408,,,,,,,,,408', -'408,,408,408,408,408,408,408,408,,,408,408,,,,408,408,408,408,,,,,,', -',,,,,,,408,408,,408,408,408,408,408,408,408,408,408,408,408,,,408,408', -',,,487,,,,,,408,487,487,487,,,487,487,487,408,487,,,,,,,,,487,487,,', -',,,,,,,487,487,,487,487,487,487,487,,,,,,,,264,264,,,264,,,,,,,,,264', -'264,,264,264,264,264,264,264,264,,,264,264,487,,,264,264,264,264,487', -',,,,487,487,,,,,,,264,264,,264,264,264,264,264,264,264,264,264,264,264', -'487,487,264,,,,,1017,1017,,,1017,,,487,,,,,487,1017,1017,264,1017,1017', -'1017,1017,1017,1017,1017,,,1017,1017,,,,1017,1017,1017,1017,,,,,,1017', -',,,,,,,1017,1017,,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017', -'1017,,,1017,,,,,453,453,,,453,,,,,,,,,453,453,1017,453,453,453,453,453', -'453,453,,,453,453,,,,453,453,453,453,,,,,,453,,,,,,,,453,453,,453,453', -'453,453,453,453,453,453,453,453,453,,,453,,,,,1016,1016,,,1016,,,,,', -',,,1016,1016,453,1016,1016,1016,1016,1016,1016,1016,,,1016,1016,,,,1016', -'1016,1016,1016,,,,,,1016,,,,,,,,1016,1016,,1016,1016,1016,1016,1016', -'1016,1016,1016,1016,1016,1016,,,1016,,,,,454,454,,,454,,,,,,,,,454,454', -'1016,454,454,454,454,454,454,454,,,454,454,,,,454,454,454,454,,,,,,454', -',,,,,,,454,454,,454,454,454,454,454,454,454,454,454,454,454,,1002,454', -'1002,1002,1002,1002,1002,1000,,1000,1000,1000,1000,1000,,,1002,,,,,454', -',1000,,,,,,,,,,,,,,,1002,,,,,,,1000,,967,967,1002,1002,967,,,1000,1000', -'1000,1000,,,967,967,,967,967,967,967,967,967,967,,,967,967,,,,967,967', -'967,967,,,1002,,,967,,,,1000,,,,967,967,,967,967,967,967,967,967,967', -'967,967,967,967,,,967,,,,,522,522,,,522,,,,,,,,,522,522,967,522,522', -'522,522,522,522,522,,,522,522,,,,522,522,522,522,,,,,,522,,,,,,,,522', -'522,,522,522,522,522,522,522,522,522,522,522,522,,,522,,,,,523,523,', -',523,,,,,,,,,523,523,522,523,523,523,523,523,523,523,,,523,523,,,,523', -'523,523,523,,,,,,523,,,,,,,,523,523,,523,523,523,523,523,523,523,523', -'523,523,523,,950,523,950,950,950,950,950,,,,,,,,,,950,,,,,523,,,,,,', -',,,,,,,,,,950,950,532,532,,,532,,,950,950,950,950,,,532,532,,532,532', -'532,532,532,532,532,,,532,532,,,,532,532,532,532,,,,,,532,,,,950,,,', -'532,532,,532,532,532,532,532,532,532,532,532,532,532,,,532,,,,,533,533', -',,533,,,,,,,,,533,533,532,533,533,533,533,533,533,533,,,533,533,,,,533', -'533,533,533,,,,,,533,,,,,,,,533,533,,533,533,533,533,533,533,533,533', -'533,533,533,,927,533,927,927,927,927,927,925,,925,925,925,925,925,,', -'927,,,,,533,,925,923,,923,923,923,923,923,921,,921,921,921,921,921,927', -',923,,,,,925,,921,,927,927,,,,,,925,925,,,,551,923,551,551,551,551,551', -',921,,,,923,923,,,551,921,921,921,921,898,927,898,898,898,898,898,896', -'925,896,896,896,896,896,,,898,551,,,,,,896,,923,551,551,551,551,,893', -'921,893,893,893,893,893,898,,,,,,,896,,893,,898,898,,,,896,896,896,896', -',,,,551,,,,,,,893,,,,,,,,,893,893,893,893,,898,,213,213,,,213,896,,', -',,,,,213,213,,213,213,213,213,213,213,213,,,213,213,,,893,213,213,213', -'213,,,,,,213,,,,,,,,213,213,,213,213,213,213,213,213,213,213,213,213', -'213,,,213,,,,,214,214,,,214,,,,,,,,,214,214,213,214,214,214,214,214', -'214,214,,,214,214,,,,214,214,214,214,,,,,,214,,,,,,,,214,214,,214,214', -'214,214,214,214,214,214,214,214,214,,,214,,,,,593,593,,,593,,,,,,,,', -'593,593,214,593,593,593,593,593,593,593,,,593,593,,,,593,593,593,593', -',,,,,593,,,,,,,,593,593,,593,593,593,593,593,593,593,593,593,593,593', -',,593,,,,,594,594,,,594,,,,,,,,,594,594,593,594,594,594,594,594,594', -'594,,,594,594,,,,594,594,594,594,,,,,,594,,,,,,,,594,594,,594,594,594', -'594,594,594,594,594,594,594,594,,606,594,606,606,606,606,606,761,,761', -'761,761,761,761,,,606,,,,,594,,761,,,,,719,,719,719,719,719,719,,,,606', -'606,,,,,719,761,,606,606,606,606,,,,761,761,761,761,,,,,,,,,719,,,,', -',,,,752,752,719,719,752,,,,606,,,,,752,752,761,752,752,752,752,752,752', -'752,,,752,752,,,,752,752,752,752,,,719,,,752,,,,,,,,752,752,,752,752', -'752,752,752,752,752,752,752,752,752,,,752,,,,,751,751,,,751,,,,,,,,', -'751,751,752,751,751,751,751,751,751,751,,,751,751,,,,751,751,751,751', -',,,,,751,,,,,,,,751,751,,751,751,751,751,751,751,751,751,751,751,751', -',340,751,340,340,340,340,340,717,,717,717,717,717,717,,,340,,,,,751', -',717,715,,715,715,715,715,715,,,,,,,,340,340,715,,,,,717,,340,340,340', -'340,,,,717,717,717,717,,,,665,715,665,665,665,665,665,,,,715,715,715', -'715,,,665,,,,,,340,,,,,,,717,,,,,,,,,665,,,,,,,,715,665,665,665,665', -',,,,,,,,,,,,,,,,,,,,,,,,665,,,,,,,,665' ] - racc_action_check = arr = ::Array.new(26642, nil) +'11,,779,779,,,779,,,11,,,,,11,779,779,,779,779,779,779,779,779,779,', +',779,779,,,,779,779,779,779,,,,,,779,,,,,,,,779,779,,779,779,779,779', +'779,779,779,779,779,779,779,,,779,,,,,,,,,,230,230,,,230,,,,,,779,,', +'230,230,779,230,230,230,230,230,230,230,,,230,230,,,,230,230,230,230', +',,,,,230,,,,,,,,230,230,,230,230,230,230,230,230,230,230,230,230,230', +',,230,,,,,,,,,,229,229,,,229,,,,,,230,,,229,229,230,229,229,229,229', +'229,229,229,,,229,229,,,,229,229,229,229,,,,,,229,,,,,,,,229,229,,229', +'229,229,229,229,229,229,229,229,229,229,,,229,,,,,,,,,,778,778,,,778', +',,,,,229,,,778,778,229,778,778,778,778,778,778,778,,,778,778,,,,778', +'778,778,778,,,,,,778,,,,,,,,778,778,,778,778,778,778,778,778,778,778', +'778,778,778,,,778,,,,,,,,,,662,662,,,662,,,,,,778,,,662,662,778,662', +'662,662,662,662,662,662,,,662,662,,,,662,662,662,662,,,,,,662,,,,,,', +',662,662,,662,662,662,662,662,662,662,662,662,662,662,,,662,,,,,,,,', +',474,474,,,474,,,,,,662,,,474,474,662,474,474,474,474,474,474,474,,', +'474,474,,,,474,474,474,474,,,,,,474,,,,,,,,474,474,,474,474,474,474', +'474,474,474,474,474,474,474,,,474,,,,,,,,,,475,475,,,475,,,,,,474,,', +'475,475,474,475,475,475,475,475,475,475,,,475,475,,,,475,475,475,475', +',,,,,475,,,,,,,,475,475,,475,475,475,475,475,475,475,475,475,475,475', +',,475,,,,,,,,,,661,661,,,661,,,,,,475,,,661,661,475,661,661,661,661', +'661,661,661,,,661,661,,,,661,661,661,661,,,,,,661,,,,,,,,661,661,,661', +'661,661,661,661,661,661,661,661,661,661,,,661,,,,,,,,,,541,541,,,541', +',,,,,661,,,541,541,661,541,541,541,541,541,541,541,,,541,541,,,,541', +'541,541,541,,,,,,541,,,,,,,,541,541,,541,541,541,541,541,541,541,541', +'541,541,541,,1065,541,1065,1065,1065,1065,1065,,,,,279,279,,,279,1065', +',,,,541,,,279,279,541,279,279,279,279,279,279,279,,,279,279,1065,,,279', +'279,279,279,,,,,1065,1065,,,,,,,,279,279,,279,279,279,279,279,279,279', +'279,279,279,279,,,279,,,,,,,,,1065,551,551,,,551,,,,,,279,,,551,551', +'279,551,551,551,551,551,551,551,,,551,551,,,,551,551,551,551,,,,,,551', +',,,,,,,551,551,,551,551,551,551,551,551,551,551,551,551,551,,,551,,', +',,,,,,,550,550,,,550,,,,,,551,,,550,550,551,550,550,550,550,550,550', +'550,,,550,550,,,,550,550,550,550,,,,,,550,,,,,,,,550,550,,550,550,550', +'550,550,550,550,550,550,550,550,,,550,,,,,,,,,,540,540,,,540,,,,,,550', +',,540,540,550,540,540,540,540,540,540,540,,,540,540,,,,540,540,540,540', +',,,,,540,,,,,,,,540,540,,540,540,540,540,540,540,540,540,540,540,540', +',,540,,,,,,,,,,613,613,,,613,,,,,,540,,,613,613,540,613,613,613,613', +'613,613,613,,,613,613,,,,613,613,613,613,,,,,,613,,,,,,,,613,613,,613', +'613,613,613,613,613,613,613,613,613,613,,,613,,,,,,,,,,612,612,,,612', +',,,,,613,,,612,612,613,612,612,612,612,612,612,612,,,612,612,,,,612', +'612,612,612,,,,,,612,,,,,,,,612,612,,612,612,612,612,612,612,612,612', +'612,612,612,,,612,,,,,,,,,,1037,1037,,,1037,,,,,,612,,,1037,1037,612', +'1037,1037,1037,1037,1037,1037,1037,,,1037,1037,,,,1037,1037,1037,1037', +',,,,,1037,,,,,,,,1037,1037,,1037,1037,1037,1037,1037,1037,1037,1037', +'1037,1037,1037,,,1037,,,,,,,,,,1042,1042,,,1042,,,,,,1037,,,1042,1042', +'1037,1042,1042,1042,1042,1042,1042,1042,,,1042,1042,,,,1042,1042,1042', +'1042,,,,,,1042,,,,,,,,1042,1042,,1042,1042,1042,1042,1042,1042,1042', +'1042,1042,1042,1042,,,1042,745,,745,745,745,745,745,,,1043,1043,,,1043', +',,745,,,1042,,,1043,1043,1042,1043,1043,1043,1043,1043,1043,1043,,,1043', +'1043,,,745,1043,1043,1043,1043,,,,,,1043,745,745,,,,,,1043,1043,,1043', +'1043,1043,1043,1043,1043,1043,1043,1043,1043,1043,,1061,1043,1061,1061', +'1061,1061,1061,,,,,,745,,,,1061,,,,,1043,,,,953,1043,953,953,953,953', +'953,,,,,,,1061,,354,953,354,354,354,354,354,1061,1061,1061,1061,,,,', +'788,354,788,788,788,788,788,,953,,,,,,,,788,,,953,953,,,354,354,,,,1061', +',,,354,354,354,354,,,788,955,,955,955,955,955,955,,788,788,788,788,', +',953,1047,955,1047,1047,1047,1047,1047,,,,,,,,354,988,1047,988,988,988', +'988,988,,955,,,,,,788,,988,,,955,955,,,1047,986,,986,986,986,986,986', +',,,1047,1047,,,988,983,986,983,983,983,983,983,,,,988,988,,,955,831', +'983,831,831,831,831,831,,986,,,,,,1047,,831,986,986,986,986,,,983,,', +',,,988,,,983,983,983,983,,,831,1063,,1063,1063,1063,1063,1063,,831,831', +'831,831,,,986,,1063,,,,,,,,,,,,,983,,,,,,,831,,1063,,,,,,831,,,,,1063', +'1063,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1063' ] + racc_action_check = arr = ::Array.new(26358, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -1863,314 +1863,340 @@ end racc_action_pointer = [ - nil, 1215, 4534, 1119, nil, 644, nil, nil, 6082, 878, - nil, 24807, 24275, 996, nil, 959, 976, 630, 395, 876, - 685, nil, -78, 6362, 2560, 952, nil, 295, nil, 196, - 928, 1185, 6502, 6642, 6782, nil, 5380, 6922, 7062, nil, - 848, 258, 295, 830, 184, 7482, 7622, 7762, 725, 472, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 796, - nil, -76, 7902, nil, -19, nil, 8042, 8182, nil, nil, - 8322, 8462, 757, nil, 24408, nil, nil, nil, nil, nil, - -95, nil, nil, nil, nil, nil, nil, 681, 663, 658, - 638, 24142, nil, nil, nil, nil, nil, nil, 125, nil, - nil, 263, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 9162, nil, nil, nil, nil, 9302, - 9442, 9582, 9722, 9862, 648, nil, 634, nil, nil, nil, + nil, 1201, 3200, 845, nil, 92, nil, nil, 6299, 952, + nil, 24627, 23937, 699, nil, 661, 659, 707, 641, 495, + 496, nil, -68, 6439, 2777, 681, nil, -47, nil, 2, + 1068, 1800, 6579, 6719, 6859, nil, 2354, 6999, 7139, nil, + 577, 432, 494, 604, 181, 7419, 7559, -43, 7699, 478, + 740, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 1668, nil, 7839, nil, nil, -23, nil, 7979, 8119, nil, + nil, 8259, 8399, 470, nil, 23799, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 114, nil, nil, nil, nil, nil, nil, 350, + 316, 314, 285, 24213, nil, nil, nil, nil, nil, nil, + 384, nil, nil, 662, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 8679, nil, nil, nil, + nil, 8819, 8959, 9099, 9239, 9379, 254, nil, 721, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 629, nil, 1996, - 10002, 10142, 10282, 25975, 26043, nil, nil, 10422, 10562, 10702, - 10842, 10982, 11122, nil, nil, 409, 174, 103, 466, -30, - 373, 412, nil, 17982, 1714, 211, 18262, 18402, 18542, 18682, - 18822, 18962, 19102, 19242, 19382, 19522, 19662, 19802, 19942, 20082, - 20222, 20362, 20502, 20642, 20782, 20922, 21062, 5802, 21202, 21342, - 21482, 21622, nil, nil, 25059, nil, nil, 200, 22042, nil, - 158, nil, nil, nil, 22322, nil, nil, 22462, nil, 3406, - nil, 60, -14, nil, 23022, 12, 23162, nil, 23302, nil, - -104, 23442, nil, nil, 412, nil, 891, 23582, 1169, 3970, - 1183, 1210, 1171, 24002, 3124, 611, 597, 567, 1226, 768, - nil, 1140, 1097, -24, nil, nil, nil, 1123, -44, 1026, - 11962, nil, -85, 1079, 735, nil, 1073, nil, 12382, 4252, - nil, 12522, 1048, nil, 290, 324, 1171, 12942, nil, nil, - 26446, 396, 136, 157, 13362, 13502, 497, 1279, 1166, -19, - 34, 536, 1247, 164, 1284, nil, nil, 14482, nil, 14622, - 624, -54, 595, 605, 666, 626, 603, 326, 628, nil, - 181, nil, nil, nil, nil, nil, 696, nil, 595, nil, - 535, nil, 693, 465, nil, 738, 460, nil, 766, -28, - nil, 771, -33, nil, 299, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 5239, 24940, nil, - nil, nil, nil, 867, nil, nil, 895, 16722, 897, nil, - nil, 1855, 902, nil, nil, 913, 927, 506, 504, 1442, - nil, nil, nil, 533, 0, 1045, nil, nil, 1310, 1053, - nil, 3124, nil, 1007, nil, nil, 1573, nil, nil, nil, - nil, 237, nil, 25195, 25331, 5942, 177, 17702, 17562, 17422, - 4111, 4252, 332, 493, 1051, 1005, 997, 991, 5380, 5521, - 5404, 5098, 1001, 1135, 1258, 1392, 5239, 4393, 4534, 4675, - 4816, 971, 1200, 3970, 4957, 3547, 210, 25059, nil, nil, - nil, nil, nil, nil, 252, 274, 926, 917, nil, nil, - 17282, nil, nil, 17142, nil, 17002, nil, 256, nil, 16862, - nil, nil, 16582, 1148, 891, 885, nil, nil, 855, 16442, - 840, 16302, 25508, 25576, 483, 866, nil, 16162, 769, nil, - 16022, 15882, 25678, 25746, 3829, 15742, 875, 868, 526, nil, - nil, 15602, nil, nil, 15462, nil, 747, nil, 389, 769, - 58, 25869, nil, 721, 716, nil, 712, 701, 699, nil, - nil, nil, nil, nil, nil, nil, nil, 677, 892, nil, - nil, 15322, nil, nil, nil, 764, nil, nil, nil, 756, - nil, nil, 723, 5521, 738, nil, 5662, 55, 181, 731, - 694, nil, 15182, 26111, 26179, -5, nil, 340, 232, -21, - nil, 749, nil, 9, 15042, nil, 26241, nil, 14902, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 333, nil, nil, 437, nil, nil, nil, 107, nil, nil, - 105, nil, 114, nil, 24674, nil, 42, 14762, 14342, 372, - 1212, 14202, 14062, 13922, 13782, 1190, nil, nil, nil, 13642, - 13222, 1174, nil, 13082, 12802, nil, 136, 138, 401, 658, - 1117, 1714, 1075, nil, nil, 26507, nil, nil, 1173, -14, - -49, nil, nil, nil, nil, 1013, nil, 1046, 12662, nil, - nil, 12242, nil, 1135, -109, 12102, 1014, nil, 1019, 29, - 30, 1063, 152, 705, 1078, 1066, 11822, 2701, 1142, 258, - 1200, 11682, nil, 1094, 226, nil, nil, nil, 4393, 2278, - 1111, 356, nil, nil, 619, 26470, nil, 26453, nil, 26269, - nil, 11542, nil, 932, nil, 1143, 407, 1148, nil, nil, - nil, nil, 48, nil, 1263, nil, nil, nil, nil, 1269, - nil, 11402, 1159, 163, 31, 194, -1, 23862, nil, 569, - nil, 26384, 26316, 23722, nil, nil, nil, -93, 632, 4675, - 4957, 26248, 269, 24541, 203, 904, 5098, nil, nil, nil, - nil, nil, nil, nil, -27, 22882, 1996, 22742, nil, 88, - nil, 2278, nil, 2983, nil, nil, 3265, nil, 2137, nil, - 3688, 22602, 22182, 21902, 21762, 154, 18122, 182, 184, nil, - 199, 274, 276, nil, 356, 341, 360, 349, 17842, nil, - nil, 1855, nil, nil, nil, 3547, 3688, nil, nil, nil, - 408, 28, nil, nil, 540, nil, 3406, 422, 466, nil, - nil, nil, nil, 452, 570, 473, 490, nil, nil, nil, - 493, 496, nil, 502, 520, nil, 522, nil, nil, 527, - 993, 549, 1194, nil, 730, nil, 11262, 739, 2560, 2419, - nil, 16, 21, 189, 441, 500, nil, 651, 4816, 9022, - nil, -80, 785, 788, 672, nil, nil, nil, nil, nil, - nil, nil, nil, 687, 677, nil, 2842, 8882, 8742, 2419, - 455, nil, nil, 25921, nil, nil, 25897, nil, 25890, nil, - nil, 722, 1178, 8602, 629, 787, 835, 3829, 734, 840, - nil, 3265, nil, nil, 51, 7342, nil, nil, nil, nil, - nil, 25839, nil, 25832, nil, 25815, nil, 25808, nil, nil, - nil, nil, 394, 1276, 754, nil, 53, nil, 877, 879, - 7202, 2137, nil, nil, 887, 183, nil, nil, nil, nil, - 25638, nil, 777, nil, nil, 779, 809, 821, 822, nil, - 823, nil, 227, nil, nil, nil, 486, 25440, nil, nil, - 860, nil, nil, nil, 1573, 54, 80, 303, 927, 118, - nil, 859, 862, 863, 865, 880, 1153, 886, 1060, 4111, - nil, nil, nil, 33, 2983, nil, nil, 2842, 2701, nil, - 25400, nil, 25393, nil, 1373, nil, 1116, nil, nil, nil, - 801, 955, 959, nil, 1044, 6222, 25263, 25127, 134, 859, - nil, nil, nil, nil, 921, 944, 372, nil, nil, nil, - 1074, 1077, 1078, 959, 968, 969, 970, nil, nil, 975, - -9, 52, 124, -8, 980, 987, nil, nil, nil, nil, - 725, nil, nil, nil, nil, 44, nil, 1034, nil ] + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 213, nil, 2213, 9659, 9799, 9939, 10079, 10219, 10359, 24849, + 24776, nil, nil, 10499, 10639, 10779, nil, nil, 579, 264, + 259, 213, 203, 64, 13, nil, 23379, 2918, 0, 23519, + 23659, 10919, 11059, 11199, 11339, 11479, 11619, 11759, 11899, 12039, + 12179, 12319, 12459, 12599, 12739, 12879, 13019, 13159, 13299, 13439, + 13579, nil, nil, nil, nil, 13719, nil, nil, nil, 25360, + nil, nil, -41, 13999, nil, nil, 1224, nil, nil, nil, + 14279, nil, nil, 14419, nil, 2495, nil, 1170, 1169, nil, + 14839, 1207, 14979, nil, nil, 15119, 15259, nil, nil, 509, + nil, nil, 15399, 1207, nil, 1137, 5174, 1146, 1152, 1113, + 15679, 4469, 351, 356, 490, 1165, 772, nil, 1124, 1081, + -19, nil, nil, nil, 1112, 164, 1069, 16659, nil, 429, + 1126, 773, nil, 1118, 16939, nil, 17079, 5597, 1184, 1058, + 17219, 17359, nil, nil, 26046, 396, 148, 90, 17499, 5456, + 4751, 375, 1167, 1047, 28, 21, 424, 1113, -14, 1140, + nil, nil, 17779, nil, 17919, 175, 235, -61, 352, 443, + 448, 470, 527, 531, nil, 575, nil, nil, nil, nil, + nil, 448, nil, 424, nil, 154, nil, 1001, 296, nil, + 992, nil, 991, 160, nil, 980, 125, nil, 180, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 24075, nil, nil, nil, nil, 987, nil, + nil, 969, 19459, 961, nil, nil, 925, nil, 615, 389, + 1006, nil, nil, 1931, nil, nil, nil, nil, nil, 2072, + 920, nil, nil, 916, 910, 427, 171, 1540, nil, nil, + nil, 801, 0, 935, nil, nil, 1408, 1276, nil, nil, + nil, 154, nil, 930, 25068, 25141, 20719, 107, 20859, 20999, + 21139, 3341, 3200, 695, 617, 951, 918, 914, 911, 1358, + 1174, 1161, 4328, 4187, 3905, 3764, 3482, 3059, 948, 1083, + 4046, 3623, 2213, 1227, 851, nil, 1196, nil, nil, nil, + nil, nil, nil, nil, nil, 733, 730, nil, nil, 22819, + nil, nil, 22959, nil, 23099, nil, 164, nil, nil, nil, + 9519, 909, 721, 723, nil, nil, 725, 6159, 729, 22679, + 25579, 25287, 754, 773, nil, 22539, 736, nil, 800, 22399, + 25506, 25433, 960, 2354, 22259, 883, 882, 767, nil, nil, + 118, 568, 801, 786, nil, 165, 813, nil, 1032, nil, + 774, 784, nil, 789, 791, 797, nil, nil, nil, nil, + nil, nil, nil, nil, 786, 933, nil, nil, 22119, nil, + nil, nil, 883, nil, nil, nil, 884, nil, nil, 889, + 4046, 941, nil, 5738, 28, 951, 952, 951, 965, nil, + nil, 21979, 25725, 25652, -19, nil, 353, 259, 527, nil, + 260, nil, 873, 21839, nil, 893, nil, nil, nil, 21699, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 258, nil, nil, 382, nil, nil, nil, 859, nil, + nil, 880, nil, 1931, nil, 24351, nil, 890, 21559, 21419, + 21279, 25214, 24995, 20579, 20439, 341, 934, 20299, 20159, 20019, + 19879, 951, nil, nil, nil, 19739, 19599, 953, nil, nil, + nil, 230, 174, 929, 523, 947, 950, nil, -63, 1052, + -24, nil, 978, nil, 1083, nil, nil, 967, nil, 1009, + 19319, nil, nil, 19179, nil, -95, 19039, 972, nil, 976, + 4, -5, 1016, 29, 804, 1022, 984, 18899, 18759, 1050, + 152, 52, nil, 18619, nil, nil, nil, nil, 18479, nil, + nil, 18339, nil, nil, nil, -10, 1002, 339, nil, nil, + 289, 1471, nil, 1731, nil, 25935, nil, 18199, nil, 628, + nil, 1005, 319, 1023, nil, nil, nil, nil, 738, nil, + 1141, nil, nil, nil, nil, nil, 1148, nil, 18059, 1034, + 33, 57, 159, 160, 3764, nil, 768, nil, 24922, 24703, + 17639, nil, nil, nil, 156, 2495, 4187, 730, 26061, 24489, + 61, 905, 3905, nil, nil, 292, nil, nil, nil, 1077, + nil, 1062, 16799, 1066, 362, 290, 128, 256, nil, 2918, + 16519, nil, 1071, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 16379, 16239, 16099, 15959, 271, 15819, nil, + nil, 26184, nil, 3623, nil, nil, 1117, nil, -54, nil, + nil, nil, nil, 1102, 27, nil, nil, nil, nil, nil, + nil, nil, 4328, nil, 1105, 1152, nil, nil, 584, nil, + 4892, 5033, 1121, 1127, 1125, nil, nil, nil, 1126, 1127, + nil, 1130, 1132, nil, 1139, nil, nil, 1143, 1072, 1141, + 1065, nil, 1262, nil, nil, 15539, nil, 5315, 1282, nil, + nil, 50, -13, 1284, 670, 629, nil, 1171, 2072, 14699, + 394, 1291, nil, 1179, 351, nil, nil, nil, nil, nil, + nil, nil, 1168, nil, nil, 1178, 379, nil, nil, 14559, + 14139, 2636, 1191, 1192, nil, 1194, 1195, 1196, nil, 1220, + -91, -101, 13859, nil, nil, nil, nil, 2777, 3341, nil, + 136, 23239, nil, nil, 115, 236, 868, nil, nil, 487, + nil, 1339, nil, 26031, nil, 26100, nil, nil, nil, nil, + 257, 1504, 186, nil, 49, nil, nil, 6019, 5879, nil, + nil, 372, 426, nil, nil, 396, nil, nil, 317, nil, + -52, nil, nil, 26169, nil, nil, 26154, nil, 26130, nil, + nil, 365, 8539, 718, 443, nil, 492, 4610, 51, 151, + 633, 524, -9, nil, nil, nil, -103, nil, nil, nil, + 484, 486, 490, 508, 514, 1401, 526, 1415, 3482, nil, + 293, nil, nil, 3059, nil, 2636, 534, nil, nil, 536, + 538, 543, 548, nil, 558, nil, 839, 25798, nil, nil, + 689, 7279, 25871, 25944, 47, nil, 769, 26115, nil, nil, + nil, nil, 922, 583, 764, nil, nil, nil, 706, 715, + nil, 26006, nil, 26223, nil, 25349, nil, 1162, nil, nil, + 664, 702, nil, 676, 20, 21, 120, 35, nil, 687, + 692, nil, nil, nil, 698, 704, 706, 707, 8, nil, + 591, nil, nil, nil, nil, 720, nil ] racc_action_default = [ - -1, -628, -627, -628, -2, -614, -4, -5, -628, -8, - -9, -628, -628, -628, -29, -628, -628, -628, -280, -628, - -40, -43, -616, -628, -48, -50, -51, -52, -57, -257, - -257, -257, -294, -333, -334, -69, -627, -73, -81, -83, - -628, -516, -517, -628, -628, -628, -628, -628, -616, -238, - -271, -272, -273, -274, -275, -276, -277, -278, -279, -602, - -282, -285, -627, -292, -302, -405, -628, -628, -307, -310, - -614, -628, -318, -325, -628, -335, -336, -447, -448, -449, - -450, -451, -452, -627, -455, -627, -627, -627, -627, -627, - -627, -627, -492, -498, -500, -501, -502, -503, -600, -505, - -506, -601, -508, -509, -510, -511, -512, -513, -514, -515, - -520, -521, 1059, -3, -615, -623, -624, -625, -7, -628, - -628, -628, -628, -628, -628, -17, -628, -112, -113, -114, - -115, -116, -117, -118, -119, -120, -124, -125, -126, -127, - -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, - -188, -189, -190, -191, -192, -193, -194, -22, -121, -627, - -628, -628, -627, -628, -628, -612, -613, -628, -628, -628, - -628, -628, -616, -617, -47, -628, -516, -517, -628, -280, - -628, -628, -230, -628, -627, -628, -628, -628, -628, -628, - -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, - -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, - -628, -628, -411, -414, -628, -610, -611, -58, -628, -301, - -628, -428, -431, -64, -627, -425, -65, -616, -66, -239, - -252, -627, -627, -256, -628, -262, -628, -627, -492, -593, - -616, -628, -67, -68, -614, -13, -14, -628, -71, -627, - -616, -628, -74, -77, -627, -89, -90, -628, -628, -97, - -294, -297, -616, -418, -333, -334, -337, -426, -628, -79, - -628, -85, -290, -499, -628, -215, -216, -231, -628, -627, - -284, -628, -628, -240, -620, -620, -628, -627, -303, -304, - -548, -49, -628, -628, -628, -628, -614, -628, -615, -516, - -517, -628, -628, -280, -628, -358, -359, -628, -321, -628, - -112, -113, -154, -155, -156, -172, -177, -184, -187, -328, - -628, -516, -517, -588, -589, -453, -628, -476, -628, -478, - -628, -480, -628, -628, -460, -628, -628, -466, -628, -628, - -472, -628, -628, -474, -628, -491, -493, -494, -495, -496, - -6, -626, -23, -24, -25, -26, -27, -627, -628, -19, - -20, -21, -122, -628, -30, -39, -267, -628, -628, -266, - -31, -197, -616, -247, -248, -627, -627, -603, -604, -257, - -423, -605, -606, -604, -603, -257, -422, -424, -605, -606, - -37, -205, -38, -628, -41, -42, -195, -262, -44, -45, - -46, -616, -300, -628, -628, -627, -290, -628, -628, -628, - -206, -207, -208, -209, -210, -211, -212, -213, -217, -218, - -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, - -229, -232, -233, -234, -235, -616, -627, -257, -603, -604, - -54, -59, -258, -419, -627, -627, -616, -616, -296, -253, - -628, -261, -254, -628, -259, -628, -263, -628, -598, -628, - -599, -12, -615, -16, -616, -70, -288, -86, -75, -628, - -616, -627, -628, -628, -96, -628, -499, -628, -82, -87, - -628, -628, -628, -628, -236, -628, -439, -628, -286, -618, - -241, -622, -621, -243, -622, -291, -628, -591, -620, -628, - -628, -548, -408, -587, -587, -531, -533, -533, -533, -547, - -549, -550, -551, -552, -553, -554, -555, -556, -628, -558, - -560, -562, -567, -569, -570, -572, -577, -579, -580, -582, - -583, -584, -628, -627, -349, -350, -627, -628, -628, -628, - -628, -434, -627, -628, -628, -290, -315, -107, -108, -628, - -110, -628, -280, -628, -628, -326, -548, -330, -628, -454, - -477, -482, -483, -485, -456, -479, -457, -481, -458, -459, - -628, -462, -464, -628, -465, -468, -469, -628, -470, -471, - -628, -497, -628, -18, -628, -28, -270, -628, -628, -427, - -628, -249, -251, -628, -628, -60, -245, -246, -420, -628, - -628, -62, -421, -628, -628, -299, -603, -604, -603, -604, - -616, -195, -628, -394, -395, -616, -397, -412, -53, -415, - -627, -429, -432, -244, -295, -627, -260, -264, -628, -594, - -595, -628, -596, -15, -72, -628, -78, -84, -616, -603, - -604, -627, -607, -95, -628, -80, -628, -204, -214, -616, - -627, -627, -283, -616, -620, -293, -592, -406, -627, -627, - -616, -628, -529, -530, -628, -628, -540, -628, -543, -628, - -545, -628, -360, -628, -362, -364, -371, -616, -561, -571, - -581, -585, -627, -351, -627, -308, -352, -353, -311, -628, - -314, -628, -616, -603, -604, -607, -289, -628, -107, -108, - -109, -628, -628, -627, -319, -522, -523, -628, -322, -627, - -627, -548, -628, -628, -616, -628, -627, -461, -463, -467, - -473, -475, -10, -123, -268, -628, -198, -628, -619, -627, - -33, -200, -34, -201, -61, -35, -203, -36, -202, -63, - -196, -628, -628, -628, -628, -427, -628, -587, -587, -376, - -627, -627, -627, -393, -628, -616, -399, -556, -564, -565, - -575, -627, -417, -416, -55, -627, -627, -255, -265, -597, - -76, -427, -88, -298, -627, -356, -627, -440, -627, -441, - -442, -287, -242, -628, -628, -616, -587, -568, -586, -532, - -533, -533, -559, -533, -533, -578, -533, -556, -573, -616, - -628, -369, -628, -557, -628, -354, -628, -628, -627, -627, - -313, -628, -427, -628, -107, -108, -111, -616, -627, -628, - -525, -628, -628, -628, -616, -527, -331, -590, -484, -487, - -488, -489, -490, -628, -269, -32, -199, -250, -628, -237, - -628, -374, -375, -384, -378, -386, -628, -389, -628, -391, - -396, -628, -628, -628, -563, -628, -628, -627, -628, -628, - -11, -627, -446, -357, -628, -628, -444, -409, -410, -407, - -528, -628, -536, -628, -538, -628, -541, -628, -544, -546, - -361, -363, -367, -628, -372, -305, -628, -306, -628, -628, - -628, -627, -316, -427, -628, -628, -323, -327, -329, -526, - -548, -486, -587, -566, -377, -627, -627, -627, -627, -576, - -627, -398, -616, -401, -403, -404, -574, -628, -290, -413, - -628, -430, -433, -445, -627, -516, -517, -628, -628, -280, - -443, -533, -533, -533, -533, -365, -628, -370, -628, -627, - -309, -312, -264, -627, -627, -320, -524, -627, -627, -373, - -628, -381, -628, -383, -628, -387, -628, -390, -392, -400, - -628, -289, -607, -56, -439, -627, -628, -628, -290, -628, - -534, -537, -539, -542, -628, -368, -627, -435, -436, -437, - -628, -628, -628, -627, -627, -627, -627, -402, -438, -616, - -603, -604, -607, -289, -533, -366, -355, -317, -324, -332, - -628, -379, -382, -385, -388, -427, -535, -627, -380 ] + -1, -652, -651, -652, -2, -638, -4, -5, -652, -8, + -9, -652, -652, -652, -35, -652, -652, -39, -652, -652, + -295, -51, -640, -652, -56, -61, -62, -63, -67, -272, + -272, -272, -310, -344, -345, -79, -651, -83, -91, -93, + -652, -539, -540, -652, -652, -652, -652, -231, -652, -640, + -245, -286, -287, -288, -289, -290, -291, -292, -293, -294, + -624, -297, -299, -306, -308, -318, -424, -652, -652, -58, + -58, -638, -652, -328, -335, -652, -346, -347, -349, -350, + -351, -352, -353, -354, -355, -356, -357, -358, -367, -469, + -470, -471, -472, -473, -474, -651, -477, -651, -651, -651, + -487, -651, -651, -651, -515, -521, -523, -524, -525, -526, + -622, -528, -529, -623, -531, -532, -533, -534, -535, -536, + -537, -538, -543, -544, 1097, -3, -639, -647, -648, -649, + -7, -652, -652, -652, -652, -652, -652, -23, -652, -122, + -123, -124, -125, -126, -127, -128, -129, -130, -134, -135, + -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, + -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, + -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, + -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, + -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, + -186, -187, -188, -189, -190, -191, -192, -193, -194, -195, + -196, -197, -198, -199, -200, -201, -202, -203, -204, -205, + -28, -131, -651, -652, -652, -652, -652, -652, -651, -652, + -652, -634, -635, -652, -652, -640, -641, -55, -652, -539, + -540, -652, -295, -652, -652, -237, -652, -651, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -246, -247, -248, -249, -652, -360, -453, -432, -652, + -636, -637, -68, -652, -317, -359, -652, -446, -448, -74, + -651, -443, -75, -640, -76, -252, -267, -651, -651, -271, + -652, -277, -652, -651, -616, -652, -652, -77, -78, -638, + -17, -18, -652, -21, -22, -81, -651, -640, -652, -84, + -87, -651, -99, -100, -652, -652, -107, -310, -313, -640, + -436, -344, -345, -348, -444, -652, -89, -652, -95, -305, + -522, -652, -225, -226, -652, -238, -652, -651, -301, -640, + -651, -651, -319, -320, -571, -57, -652, -652, -652, -651, + -651, -638, -652, -639, -539, -540, -652, -652, -295, -652, + -377, -378, -652, -331, -652, -122, -123, -165, -166, -167, + -183, -188, -195, -198, -338, -652, -539, -540, -611, -612, + -475, -652, -499, -652, -501, -652, -503, -652, -652, -482, + -652, -651, -652, -652, -495, -652, -652, -497, -652, -514, + -516, -517, -518, -519, -6, -650, -29, -30, -31, -32, + -33, -10, -11, -652, -25, -26, -27, -132, -652, -36, + -38, -282, -652, -652, -281, -37, -652, -40, -652, -295, + -48, -50, -206, -257, -277, -52, -53, -41, -207, -257, + -640, -262, -263, -651, -651, -625, -626, -272, -441, -627, + -628, -626, -625, -272, -440, -442, -627, -628, -47, -215, + -54, -640, -316, -652, -652, -652, -651, -305, -652, -652, + -652, -216, -217, -218, -219, -220, -221, -222, -223, -227, + -228, -229, -230, -232, -233, -234, -235, -236, -239, -240, + -241, -242, -640, -250, -652, -454, -272, -625, -626, -65, + -69, -273, -437, -450, -453, -640, -640, -312, -268, -652, + -276, -269, -652, -274, -652, -278, -652, -619, -621, -16, + -639, -20, -640, -80, -303, -96, -85, -652, -640, -651, + -652, -652, -106, -652, -522, -652, -92, -97, -652, -652, + -652, -652, -251, -243, -652, -461, -652, -640, -300, -253, + -644, -644, -652, -652, -614, -644, -652, -425, -571, -428, + -610, -610, -554, -556, -556, -556, -570, -572, -573, -574, + -575, -576, -577, -578, -579, -652, -581, -583, -585, -590, + -592, -593, -595, -600, -602, -603, -605, -606, -607, -652, + -651, -368, -369, -651, -652, -652, -652, -652, -652, -363, + -456, -651, -652, -652, -305, -58, -117, -118, -652, -120, + -652, -295, -651, -652, -336, -549, -341, -632, -633, -652, + -476, -500, -505, -506, -508, -478, -502, -479, -504, -480, + -481, -652, -484, -486, -652, -489, -491, -492, -652, -493, + -494, -652, -520, -651, -24, -652, -34, -285, -652, -652, + -651, -652, -652, -652, -652, -445, -652, -264, -266, -652, + -652, -70, -260, -261, -438, -652, -652, -72, -439, -315, + -642, -625, -626, -625, -626, -640, -652, -431, -651, -64, + -433, -450, -652, -451, -652, -259, -311, -651, -275, -279, + -652, -617, -618, -652, -19, -82, -652, -88, -94, -640, + -625, -626, -651, -629, -105, -652, -90, -652, -652, -224, + -640, -651, -361, -651, -298, -366, -302, -254, -646, -645, + -256, -646, -307, -309, -615, -652, -640, -652, -552, -553, + -652, -652, -563, -652, -566, -652, -568, -652, -379, -652, + -381, -383, -390, -640, -584, -594, -604, -608, -651, -370, + -651, -59, -371, -372, -323, -324, -652, -326, -652, -640, + -625, -626, -629, -304, -651, -117, -118, -119, -652, -652, + -651, -329, -545, -547, -332, -651, -651, -571, -571, -652, + -640, -652, -651, -483, -485, -652, -488, -496, -498, -652, + -133, -283, -652, -640, -625, -626, -626, -625, -49, -258, + -652, -643, -651, -43, -209, -44, -210, -71, -45, -212, + -46, -211, -73, -652, -652, -652, -652, -445, -652, -413, + -414, -640, -416, -651, -435, -434, -652, -447, -651, -449, + -270, -280, -620, -86, -445, -98, -214, -314, -13, -15, + -362, -364, -651, -468, -462, -651, -463, -464, -644, -426, + -651, -651, -418, -640, -610, -591, -609, -555, -556, -556, + -582, -556, -556, -601, -556, -579, -596, -640, -652, -388, + -652, -580, -652, -365, -373, -652, -375, -651, -652, -60, + -325, -652, -445, -652, -117, -118, -121, -640, -651, -652, + -652, -652, -339, -640, -652, -342, -613, -507, -510, -511, + -512, -513, -652, -490, -12, -284, -445, -42, -208, -265, + -652, -244, -610, -610, -395, -651, -651, -651, -412, -652, + -640, -579, -587, -588, -598, -455, -66, -651, -651, -467, + -652, -652, -466, -255, -652, -652, -652, -427, -551, -652, + -559, -652, -561, -652, -564, -652, -567, -569, -380, -382, + -386, -652, -391, -321, -652, -376, -322, -652, -651, -327, + -445, -652, -652, -333, -337, -652, -548, -550, -549, -509, + -652, -393, -394, -403, -397, -405, -652, -408, -652, -410, + -415, -652, -652, -586, -652, -452, -651, -651, -539, -540, + -652, -652, -295, -465, -429, -430, -640, -420, -422, -423, + -556, -556, -556, -556, -384, -652, -389, -652, -651, -279, + -651, -330, -546, -651, -340, -651, -610, -589, -396, -651, + -651, -651, -651, -599, -651, -417, -597, -652, -305, -14, + -461, -651, -652, -652, -305, -419, -652, -652, -557, -560, + -562, -565, -652, -387, -651, -457, -458, -459, -652, -652, + -392, -652, -400, -652, -402, -652, -406, -652, -409, -411, + -304, -629, -460, -640, -625, -626, -629, -304, -421, -556, + -385, -374, -334, -343, -651, -651, -651, -651, -445, -558, + -652, -398, -401, -404, -407, -651, -399 ] clist = [ -'6,422,338,221,700,590,280,280,280,263,583,586,445,133,133,567,130,130', -'369,302,275,528,330,316,316,4,213,502,224,328,559,281,281,281,419,396', -'117,491,323,341,341,760,442,341,552,264,429,435,537,135,135,125,208', -'376,801,676,854,316,676,319,333,334,842,496,540,543,16,113,679,342,343', -'824,16,346,965,639,931,114,934,130,845,377,963,379,381,384,387,390,393', -'379,727,298,341,341,341,341,130,487,722,300,16,117,750,994,959,857,282', -'282,282,679,357,667,29,735,738,267,273,276,29,671,672,118,402,403,404', -'405,868,620,804,615,623,617,347,29,621,378,335,621,603,604,605,394,29', -'29,29,615,29,871,802,997,359,759,712,713,606,278,292,293,763,987,950', -'336,803,634,907,805,670,962,550,707,340,502,408,835,415,486,29,29,16', -'811,29,494,965,452,815,495,280,16,816,1027,1037,741,448,449,450,451', -'676,676,841,828,843,914,375,430,380,383,1,679,959,418,423,386,1025,389', -'931,414,420,418,392,439,686,878,440,444,29,765,567,400,695,29,29,29', -'29,29,453,766,395,9,498,869,842,559,280,9,660,849,356,739,280,207,1045', -'280,840,722,866,710,851,507,910,124,493,515,837,953,608,339,2,281,901', -'546,354,509,423,16,842,754,281,373,706,501,501,567,955,669,845,377,429', -'435,370,316,329,331,703,525,337,814,559,344,16,858,345,859,529,747,538', -',316,275,,,688,,526,795,,,522,341,341,29,29,29,29,,518,117,,29,29,29', -'29,29,29,532,,547,,,,,807,821,282,316,29,316,,587,588,9,1046,282,,842', -'298,691,511,,406,298,593,16,514,16,1028,691,512,520,16,,,768,,,768,', -'956,117,29,957,722,742,722,,29,998,820,29,607,942,567,492,567,16,301', -'862,891,892,,,497,,808,640,981,6,,29,589,29,133,548,655,130,29,784,', -',,647,817,789,,501,501,652,691,646,,280,632,,,,832,920,567,,,29,,29', -'676,430,,,135,445,633,,,559,679,423,29,29,,673,674,439,,,985,722,,874', -'662,,,,,16,,,,684,,647,872,873,,687,1038,1033,663,646,,,,,,,663,663', -',280,,,,,,529,,,,316,,,699,529,,,430,316,,645,722,29,722,423,943,651', -'430,,817,829,,,439,941,,,513,,,,,,439,,,,867,,,,,,,,,999,,,722,,716', -'718,720,,,,,,,29,280,413,807,,,807,,668,675,,16,758,,,,764,974,430,', -'691,,944,,,423,,301,,,,567,,,439,,,,,989,,,813,,,,,,,,704,,,736,736', -',,29,,,567,,808,,,808,29,,808,755,808,133,,,130,559,640,9,,,29,806,16', -'780,782,16,1029,812,,785,787,,301,444,,823,,301,,831,,,529,663,640,', -'316,135,501,773,807,,,822,,,647,316,,652,,,,853,646,,806,1055,29,,,29', -',825,830,418,,29,,,,,876,,,,,,,29,779,1031,1032,29,,341,,,640,,877,', -'280,,,825,,825,,,,,808,,808,861,808,430,808,,,,683,,,863,423,,29,29', -',439,,,29,29,,,29,,,,,130,,,,16,16,,,,501,,,,,885,19,,,806,808,870,19', -',,,875,316,,919,,894,894,894,,,,1039,,,,,,930,,,,,,,19,29,29,,,912,16', -'16,,916,,,341,16,,,,,949,,,,,922,924,341,926,928,,929,,640,691,,,355', -',,,,29,,936,,798,,29,,,,,,29,29,,945,,,16,29,,,16,16,,,,,,,29,,316,16', -',,,736,19,,800,,,,316,946,,19,,,836,,,,,,,,,,,,,,29,16,16,,29,29,,,17', -',,16,,,17,29,,,,,732,,1009,734,,,,,844,225,846,,894,894,894,894,,894', -'225,225,225,,17,307,307,29,,29,29,,16,439,,,16,996,,29,29,,1020,1021', -'1022,1023,,1016,,,280,19,825,,225,225,,,225,351,443,,41,,,,16,430,41', -',,,,,423,,19,,29,,,640,29,439,,825,,,,,,,894,894,894,894,41,305,305', -'16,,,17,,,1056,,225,225,225,225,17,29,799,16,,894,,,16,,,16,16,,,,833', -'834,,,349,,,371,,,,,19,,19,,,,29,19,952,,,798,,,798,,798,,,,838,29,', -'838,,,29,,,29,29,,19,,,41,,,,,,,,,41,,883,29,,,958,,960,,,,,,17,225', -'225,225,,,,,225,225,225,225,225,225,,,,982,,983,,984,,,,17,,,,895,897', -'899,,906,,,,908,909,,,,,,,,,,913,,,,19,,,,,,,225,798,,798,,798,225,798', -',225,,42,,41,,,,42,,,,938,939,,,,,,,17,,17,,,,307,17,1034,41,1035,,1036', -',,,42,306,306,,,,798,307,,,,1044,,,,,17,,225,,,,,,,970,,,,973,,225,225', -',,350,,838,372,,799,,1057,799,601,799,601,,,,,,,19,,,41,,41,993,,,305', -'41,,,,18,,,,,,18,,,,,42,305,1001,1003,1005,1007,,1008,,42,41,416,,,1014', -',17,,,447,,,,18,309,309,,,,1026,,,,,1030,,,,371,,371,,,,,,19,,,19,,', -',,,,,,353,,,,,,225,,,,,799,,799,,799,,799,,,,,1051,1052,1053,1054,,504', -',506,41,508,,,510,,,42,,,,,,18,,,1058,,,,,,18,,,,,,443,,,799,42,17,', -',,,,,307,,225,,,,,,307,,549,,,,,,225,,,,,,,,,,,,,,,,,,,,,,,,,,,19,19', -',,,,,,,,,,42,,42,,,,306,42,,17,41,,17,18,,,,305,225,,,,,306,,305,,,', -',225,,42,,225,636,,,18,19,19,,,,,,19,,,,,,,,,,,,,,372,,372,,,,,,,225', -'225,,,,,225,225,,,225,,41,,,41,,,,,,,19,,,,19,19,,,,,18,,18,,,19,309', -'18,,42,307,,,,,,,677,,,549,307,680,309,,,682,,,,,,18,17,17,,,19,19,', -',,,,,,,19,,,,,,,,,,,677,,602,549,602,,,,,,,,,,225,,,,,,225,,,,305,,17', -'17,19,,728,,19,17,,305,980,,,,,,,,225,,,41,41,,,,18,,,,42,,,,,,19,306', -',,,,,,,306,,,,904,,,17,,,,17,17,,,,,,,,,,17,,19,774,,41,41,677,549,', -',,41,,,,,19,,,,,19,,,19,19,,,,225,,17,17,42,,,42,,,,,17,225,818,,,819', -',,,,,,371,,,41,,,,41,41,,18,,,827,,,,309,41,,,,,966,,309,,17,,,,17,', -'848,,977,,,,,,,,,,,,,,,41,41,,447,,,,,,,41,17,,,,,,,,,,,,,,,,,,,,18', -'306,,18,,,884,,,,,,306,17,371,,,,41,,,,41,,42,42,975,,17,,,,,17,,,17', -'17,,,,,,,,,,,,,,,41,,225,,,,,,,,,,,,,,,,,,,,,42,42,,,,,,42,,,41,,,,', -',,,,,,,,,,41,,309,,,41,,,41,41,,,,309,,,,,549,,,,,,372,18,18,42,,,,42', -'42,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,992,,,42,42,18,18,,,,,882', -'18,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,372,,,,42,,602,,42,18,232,,976', -'18,18,,,,,279,279,279,,,18,,,,,,,,325,326,327,,,,42,,,,,,,,,,,279,,', -',,,,18,18,,,,,,,,,18,,,,,42,,,,,,,,,,,,,,,42,,,,,42,,,42,42,,,,,,602', -',,,18,,,,18,,,,979,,,,,,,,,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,18,,,,,,,,,,,,,,,18,,,,,18,,,18,18,279,421,279,,,,,441,446', -',,,,,,,,,,,,,,232,,,460,461,462,463,464,465,466,467,468,469,470,471', -'472,473,474,475,476,477,478,479,480,481,482,483,484,485,,,,,,,279,,', -',,,279,,,279,,,,,,,279,,279,,279,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,534,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,279,,441,661,421,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279', -',,279,,279,,,,279,,,,,,,,,,,,279,,,,,,,,,697,698,,,,,,,,,,279,,,279', -',,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,776,,,279,279,781,783,,,,,786,788', -',,661,790,,,,,,,,,,,,,,,,,,,,,,,,279,,,279,,,,,,,,,,,,,,,,,,,,279,,', -',,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,279,,,,,,,,,', -',,,,,,,,,,,,279,,886,,,,,,,,,,,,,,781,783,788,786,,889,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,279,886,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,279' ] - racc_goto_table = arr = ::Array.new(3110, nil) +'6,608,234,384,450,296,296,296,229,356,357,4,291,361,352,278,280,29,319', +'318,137,221,521,29,556,142,142,359,360,346,721,410,297,297,297,786,129', +'569,29,600,603,882,434,435,282,289,292,29,29,29,441,29,510,441,355,355', +'701,126,355,441,237,457,463,125,145,145,515,147,147,546,333,333,584', +'416,417,418,419,29,870,317,576,849,29,29,336,504,29,340,863,142,298', +'298,298,392,888,394,396,399,641,404,407,394,129,391,665,333,315,294', +'307,308,447,506,692,873,777,753,468,142,355,355,355,355,1033,698,926', +'833,698,130,636,362,638,738,739,642,1007,727,730,625,962,393,734,29', +'959,636,975,408,29,29,29,29,29,789,978,1009,9,622,761,624,928,423,9', +'430,371,930,220,704,1006,567,859,354,735,938,513,514,838,688,1055,768', +'521,855,940,390,395,929,398,848,644,401,403,406,907,791,792,409,899', +'653,136,1033,868,421,865,296,701,1027,629,428,344,2,562,655,690,458', +'445,446,348,388,748,563,353,1016,691,470,471,433,433,1,451,474,369,781', +'318,279,889,385,1078,626,347,29,29,29,29,29,29,29,467,414,766,349,29', +'29,29,736,685,1009,557,350,296,351,372,898,429,440,29,296,440,701,296', +'623,512,707,440,698,698,1053,896,937,1029,716,9,877,900,959,991,297', +'1023,374,584,420,451,785,836,,870,297,576,520,520,,29,318,604,392,,', +'318,29,457,463,29,543,1080,526,,540,,709,291,,547,873,870,869,694,871', +',,,29,,,550,29,,742,744,746,29,1081,,827,129,298,605,606,795,355,,,559', +'564,560,298,,333,1056,612,1039,,511,532,,530,29,844,538,,536,529,516', +',333,448,712,29,29,29,794,469,544,642,748,,712,879,,,315,769,1025,,', +'315,129,,,,,,,645,,,,,870,333,864,333,561,565,,927,,,,,,,,607,,840,', +'892,,948,,661,,,666,,654,943,,,803,142,843,673,,817,,,712,678,,822,', +'296,,520,520,701,,672,458,916,,584,,584,901,902,531,,,,,,903,904,671', +',451,,145,,677,147,,,686,981,982,441,,,673,467,,29,,457,463,441,441', +',,,923,441,441,,672,584,584,,,748,,748,296,576,576,1072,,,547,,,689', +'458,698,,,547,,,1010,794,866,458,,866,,840,451,945,,,720,856,,,29,,', +',931,,970,813,815,29,467,897,,818,820,,,,1030,,467,1031,,,29,333,,,774', +'968,971,,697,333,,,,,758,296,,760,1060,,,,1014,748,,458,,,,,,,,,,,,', +',,451,784,712,,,,29,790,,29,,783,,469,997,448,924,29,467,950,952,,954', +'956,296,957,762,441,,29,835,,1084,,458,29,,748,1018,748,1026,,6,923', +',,923,,923,451,1057,,,799,,800,666,,584,29,142,,,,,29,29,467,,29,834', +',,,748,29,29,829,547,,666,29,29,,917,673,520,440,678,845,,1058,931,1059', +',931,,440,440,145,,672,147,440,440,,,862,905,,853,,857,,433,,812,,1088', +',,923,,923,,923,,923,,,333,,,,,,,,,,666,333,,,296,,,886,893,886,923', +',458,,,,,,,891,,1048,1049,1050,1051,866,912,,924,451,931,924,,924,666', +',,858,,,29,,,467,,,29,,,,,29,29,,142,,9,,29,,,520,862,,814,816,808,935', +'1073,,819,821,,,,,29,,964,,,,,,,,939,829,,932,1089,,972,,944,,724,,440', +'29,,,,,942,,924,,924,,924,,924,846,,,,,29,,,965,,355,,712,29,29,666', +',,,,,,924,,355,,,,,,,,764,765,,767,,,29,,29,872,,874,,,,,862,,19,29', +'29,,,,19,,995,996,,984,984,984,,,,,,973,,238,,977,,,,,,,238,238,238', +',19,324,324,,,1020,29,29,918,,,,,,,,,,,333,,814,816,821,819,,19,,333', +',,238,238,,1040,238,366,29,,,1045,932,,1042,932,925,,932,853,932,,,', +',,1054,,1022,,,,,,,,,29,,296,,,,886,,,,,,458,333,,984,984,984,984,,984', +'29,,,19,,29,451,29,238,238,238,238,19,,,,472,,467,886,666,41,890,29', +'467,,,41,,,,918,,,,932,,932,,932,,932,,,,,,,,984,984,984,984,,,41,322', +'322,,,984,,,,932,,,,,,,,,,517,,1011,,1012,,1013,41,,,,,,,,,,364,,,386', +',,,533,19,238,438,238,238,438,238,,,,,438,238,238,1032,,1034,985,987', +'989,,,,,,19,,,,431,444,558,,,,,,,,963,,,,,,966,41,,,,969,,,,,41,,,974', +',,238,,,,,,,238,,,238,,,,1079,,,,,,,,,,,,,,1085,19,1086,,1087,19,,,', +'324,19,,,,,,,523,,525,,,527,528,,,324,,,1095,,,1062,1064,1066,1068,19', +'1069,,1021,,,,1024,,,,238,19,19,,,32,41,,,,,32,,,620,,620,679,,,,566', +',,,,32,,,,,41,,,,32,32,32,,32,1091,1092,1093,1094,,,,,,,,1096,,,,,,', +',,,695,696,,,32,,,,,32,32,,,32,,,,705,1082,1083,,,,708,,,,,,,,,,,,41', +',,,41,,657,726,322,41,,,,,,,,,,,,,238,,,322,,,,,,,,32,,41,,,32,32,32', +'32,32,,,,,41,41,,,,,,,,,,,,386,,386,,,,,,,,,,,,,,19,,18,,,,,324,18,238', +',,,,,324,,699,,,566,,702,,238,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,32,32,32', +'32,32,32,32,,,18,,32,32,32,,,,19,,,19,,,,,32,,,238,,,,,754,,,,,,,238', +'847,,,,,238,,,,,,,,,,,,,,,32,,,,,,,32,,19,32,,18,881,,438,238,,,19,', +'18,,,,438,438,,41,32,,438,438,32,,322,,,32,,,,801,322,,,,,,,906,699', +'566,,,,,,,,,,324,,32,,,,,,,,,324,,32,32,32,,,,,,,841,,,842,,,,,,,,,', +',41,,,41,,,,,,854,18,,18,,699,18,,566,,,,18,,,,947,,,,,,,19,876,,18', +',,238,958,,,,19,19,,,,,,19,,,41,444,16,,,,,,16,,41,,976,,,438,,,,,,', +',,,,,,,,,,,,,915,16,,19,,,,32,,,,,18,,,,18,,322,,,18,19,,,,,16,,322', +'19,19,,,,,,370,,,,,,,,,,18,,,,,,,,238,,19,,18,18,32,,,,,,,19,238,32', +',,,,,,,,,,,,,,32,41,,,,,16,,,,,,41,41,,16,,993,,41,,,19,19,,,1000,,', +',,,566,,,,,,,,,,,,,,32,,,32,,,,19,,,,32,,,41,,,,,,,,,32,,,,,,32,,1036', +',41,1019,,19,,,,,41,41,,,,,,,,,,,32,,,16,19,436,32,32,436,19,32,19,', +',436,41,32,32,,,,,32,32,,,41,238,16,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,', +',386,,,,,41,41,,,998,,,,,,,,,,,,,,,,,,,,,,,,16,,,41,16,,,,,16,,,,,,', +',,,,,,,18,,,18,386,32,,,,41,,32,16,,,,32,32,,,,,,32,16,16,,,,,41,,,', +',41,,41,42,,,32,,,42,,,,,,,,,18,,,,,,18,,,,18,32,,,,,18,18,,42,323,323', +'18,18,,,,,,,32,,,,,,,,32,32,,,,,,42,,,,,,,,,,365,,,387,,,,,32,,32,,', +',,,,,,,,32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,32,32,,42,,,18', +',,,,,,,,,,18,18,,,,,,18,,,16,,,,32,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,32', +',,,,18,,,,,,,,20,,,,,,20,,32,,,18,,32,,32,,42,,18,18,,,,16,,,16,,,,32', +',,20,326,326,,,,,,42,,,,18,,,,,,,,,,,18,,,20,,,,,,,,,,368,,,,,,,16,', +',,,,436,,,,16,,,,,,436,436,,18,18,,436,436,,,,,,,42,,,,42,,,,323,42', +',,,,,,,20,,,18,,,,,323,20,,,,,,,,,42,,,,,,,,,,,,42,42,18,,,,,,,,,,,387', +',387,,,,,,,,18,,,,,18,,18,,,,,,,,,,,,,,16,,,,,,,,,,,16,16,,,,,,16,,', +',20,,439,,,439,,,,,,439,,,436,,,,,,,,,,,20,,,,,,,,,,,,16,,,,,,,,,,,', +',,,,,,,16,,,,,,,,16,16,,,,,,,,,,,,,,,,,,,,,,,,,20,16,,,20,,,,326,20', +',,16,,,42,,,,,,,323,,,326,,,,,323,,,,,20,,,,,,,,,,,,20,20,,,16,16,,', +'1003,,,,,621,,621,,,,,,,,,,,,,,,,,,,,16,,,42,,,42,,,,,,,,,,,,,,,,,,', +',,,,16,,,,,,,,,,,,,,,,,,,,,16,,,,,16,42,16,,,,,,,,,42,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,323,,,,,,,,,,,323,,,,,,,,,,,,,,,,20,,,,', +',,326,,,,,,,,326,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,42,42,,,,,,42', +',,,,,,,,,,20,,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,42', +',,,20,,,,42,42,439,,,,20,,,,,,439,439,,,,,439,439,,,245,,,,,42,,,,295', +'295,295,,,,,42,,,,,,342,343,,345,,326,,,,,,,,,,,326,,,,,,,,,,,,387,', +',,,42,42,,,999,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,20,,,,,,,,,,,20', +'20,,,387,,911,20,,42,,,,,,,,,,,,,,,,439,,,,,42,,,,,42,,42,,,,,,,,,,', +'20,,,,,,,,,,,,,,,,,,,20,,,,,,,,20,20,,,,,,,,,,,,,,,,,,295,443,,,449', +'295,,,20,,449,,,,,,,,,20,,,,245,,,481,482,483,484,485,486,487,488,489', +'490,491,492,493,494,495,496,497,498,499,500,501,502,,,,,503,621,,,,', +'20,20,295,,1002,,,,,295,,,295,,,,,,,295,,295,,,295,295,,,,,,20,,,,,', +',,,,,,,,,,,,,,,,,,621,,,,,20,,,552,,553,,,,295,295,,,,,,,,,,,20,,,,', +'20,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',295,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,449,449,449,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,295,,295,,,,,,,,,,,,,,,295', +',,,,,,,,,719,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,,,,,,', +',,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,449,295', +',,,809,,,295,295,449,449,,,,,449,449,,,,,,,,,,,,,,,,,,,,,,,,295,,,295', +',,,,,,,,,,,,,,449,,,,,295,,,,,295,,,295,,,,,,,,,,,,,,,,295,,,,,,,,,', +',,,,,,,,,,,295,,,,,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,449,,', +',,,,,,,,,,449,449,449,449,,921,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,449,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295' ] + racc_goto_table = arr = ::Array.new(3977, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2180,87 +2206,105 @@ end clist = [ -'6,25,89,34,13,95,36,36,36,155,92,92,20,64,64,189,61,61,60,53,74,55,51', -'68,68,2,27,76,22,34,185,71,71,71,30,60,98,42,67,32,32,99,30,32,154,39', -'40,40,10,65,65,17,17,171,144,77,93,68,77,54,6,71,190,25,72,72,23,5,200', -'19,19,14,23,19,150,26,132,8,135,61,195,6,149,6,6,6,6,6,6,6,134,49,32', -'32,32,32,61,40,133,50,23,98,58,110,196,14,73,73,73,200,111,43,44,94', -'94,41,41,41,44,43,43,7,19,19,19,19,112,175,147,176,175,176,5,44,176', -'172,73,176,59,113,59,172,44,44,44,176,44,114,145,115,116,117,139,139', -'118,48,48,48,119,135,120,70,136,66,46,142,45,148,151,152,153,76,33,147', -'31,156,44,44,23,157,44,160,150,51,161,162,36,23,163,164,149,165,32,32', -'32,32,77,77,145,166,145,167,170,74,173,174,1,200,196,71,6,177,135,178', -'132,22,22,71,179,61,55,180,22,22,44,181,189,7,55,44,44,44,44,44,27,182', -'183,9,51,184,190,185,36,9,25,134,21,95,36,18,135,36,188,133,58,154,133', -'171,15,11,74,51,192,193,199,91,3,71,147,88,96,34,6,23,190,97,71,87,72', -'6,6,189,144,75,195,6,40,40,100,68,101,102,103,34,104,43,185,105,23,106', -'107,108,53,109,32,,68,74,,,25,,67,26,,,27,32,32,44,44,44,44,,54,98,', -'44,44,44,44,44,44,27,,6,,,,,189,26,73,68,44,68,,19,19,9,93,73,,190,49', -'40,5,,9,49,27,23,50,23,14,40,8,50,23,,,176,,,176,,145,98,44,145,133', -'25,133,,44,99,55,44,39,94,189,48,189,23,12,26,139,139,,,48,,191,34,145', -'6,,44,5,44,64,73,51,61,44,42,,,,74,76,42,,6,6,74,40,6,,36,2,,,,72,139', -'189,,,44,,44,77,74,,,65,20,17,,,185,200,6,44,44,,51,51,61,,,133,133', -',154,34,,,,,23,,,,51,,74,10,10,,51,13,145,6,6,,,,,,,6,6,,36,,,,,,53', -',,,68,,,32,53,,,74,68,,41,133,44,133,6,26,41,74,,76,30,,,61,92,,,9,', -',,,,61,,,,25,,,,,,,,,139,,,133,,187,187,187,,,,,,,44,36,12,189,,,189', -',41,73,,23,32,,,,32,92,74,,40,,10,,,6,,12,,,,189,,,61,,,,,92,,,89,,', -',,,,,73,,,98,98,,,44,,,189,,191,,,191,44,,191,98,191,64,,,61,185,34', -'9,,,44,34,23,22,22,23,95,155,,22,22,,12,22,,51,,12,,51,,,53,6,34,,68', -'65,6,17,189,,,53,,,74,68,,74,,,,51,6,,34,26,44,,,44,,6,6,71,,44,,,,', -'60,,,,,,,44,73,10,10,44,,32,,,34,,51,,36,,,6,,6,,,,,191,,191,71,191', -'74,191,,,,9,,,19,6,,44,44,,61,,,44,44,,,44,,,,,61,,,,23,23,,,,6,,,,', -'22,29,,,34,191,98,29,,,,98,68,,51,,6,6,6,,,,25,,,,,,51,,,,,,,29,44,44', -',,6,23,23,,6,,,32,23,,,,,51,,,,,187,187,32,187,187,,187,,34,40,,,29', -',,,,44,,19,,138,,44,,,,,,44,44,,19,,,23,44,,,23,23,,,,,,,44,,68,23,', -',,98,29,,143,,,,68,98,,29,,,138,,,,,,,,,,,,,,44,23,23,,44,44,,,24,,', -'23,,,24,44,,,,,12,,34,12,,,,,143,24,143,,6,6,6,6,,6,24,24,24,,24,24', -'24,44,,44,44,,23,61,,,23,98,,44,44,,187,187,187,187,,27,,,36,29,6,,24', -'24,,,24,24,29,,56,,,,23,74,56,,,,,,6,,29,,44,,,34,44,61,,6,,,,,,,6,6', -'6,6,56,56,56,23,,,24,,,187,,24,24,24,24,24,44,140,23,,6,,,23,,,23,23', -',,,12,12,,,56,,,56,,,,,29,,29,,,,44,29,138,,,138,,,138,,138,,,,140,44', -',140,,,44,,,44,44,,29,,,56,,,,,,,,,56,,12,44,,,143,,143,,,,,,24,24,24', -'24,,,,,24,24,24,24,24,24,,,,143,,143,,143,,,,24,,,,141,141,141,,12,', -',,12,12,,,,,,,,,,12,,,,29,,,,,,,24,138,,138,,138,24,138,,24,,57,,56', -',,,57,,,,12,12,,,,,,,24,,24,,,,24,24,143,56,143,,143,,,,57,57,57,,,', -'138,24,,,,143,,,,,24,,24,,,,,,,12,,,,12,,24,24,,,57,,140,57,,140,,143', -'140,24,140,24,,,,,,,29,,,56,,56,12,,,56,56,,,,28,,,,,,28,,,,,57,56,141', -'141,141,141,,141,,57,56,69,,,12,,24,,,69,,,,28,28,28,,,,12,,,,,12,,', -',56,,56,,,,,,29,,,29,,,,,,,,,28,,,,,,24,,,,,140,,140,,140,,140,,,,,141', -'141,141,141,,69,,69,56,69,,,69,,,57,,,,,,28,,,141,,,,,,28,,,,,,29,,', -'140,57,24,,,,,,,24,,24,,,,,,24,,69,,,,,,24,,,,,,,,,,,,,,,,,,,,,,,,,', -',29,29,,,,,,,,,,,57,,57,,,,57,57,,24,56,,24,28,,,,56,24,,,,,57,,56,', -',,,24,,57,,24,69,,,28,29,29,,,,,,29,,,,,,,,,,,,,,57,,57,,,,,,,24,24', -',,,,24,24,,,24,,56,,,56,,,,,,,29,,,,29,29,,,,,28,,28,,,29,28,28,,57', -'24,,,,,,,69,,,69,24,69,28,,,69,,,,,,28,24,24,,,29,29,,,,,,,,,29,,,,', -',,,,,,69,,28,69,28,,,,,,,,,,24,,,,,,24,,,,56,,24,24,29,,69,,29,24,,56', -'29,,,,,,,,24,,,56,56,,,,28,,,,57,,,,,,29,57,,,,,,,,57,,,,24,,,24,,,', -'24,24,,,,,,,,,,24,,29,69,,56,56,69,69,,,,56,,,,,29,,,,,29,,,29,29,,', -',24,,24,24,57,,,57,,,,,24,24,69,,,69,,,,,,,56,,,56,,,,56,56,,28,,,69', -',,,28,56,,,,,24,,28,,24,,,,24,,69,,24,,,,,,,,,,,,,,,56,56,,69,,,,,,', -'56,24,,,,,,,,,,,,,,,,,,,,28,57,,28,,,69,,,,,,57,24,56,,,,56,,,,56,,57', -'57,56,,24,,,,,24,,,24,24,,,,,,,,,,,,,,,56,,24,,,,,,,,,,,,,,,,,,,,,57', -'57,,,,,,57,,,56,,,,,,,,,,,,,,,56,,28,,,56,,,56,56,,,,28,,,,,69,,,,,', -'57,28,28,57,,,,57,57,,,,,,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,69,,,57', -'57,28,28,,,,,28,28,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,,,,57,,28', -',57,28,35,,57,28,28,,,,,35,35,35,,,28,,,,,,,,35,35,35,,,,57,,,,,,,,', -',,35,,,,,,,28,28,,,,,,,,,28,,,,,57,,,,,,,,,,,,,,,57,,,,,57,,,57,57,', -',,,,28,,,,28,,,,28,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,28,,,,,28,,,28,28,35,35,35,,,,,35', -'35,,,,,,,,,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', -'35,35,35,35,35,35,35,35,35,35,,,,,,,35,,,,,,35,,,35,,,,,,,35,,35,,35', -',,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,35,35,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,,,35,,,,,,,,,,,,35,,,,,,,,,35,35', -',,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,35,35,35,35,,,,', -'35,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,35,', -',,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,35,,,,,,,,,,,', -',,,,,,,,,,35,,35,,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] - racc_goto_check = arr = ::Array.new(3110, nil) +'6,115,39,69,35,45,45,45,37,23,23,2,87,23,104,173,37,53,62,14,21,21,89', +'53,12,70,70,41,41,39,15,69,84,84,84,123,120,172,53,108,108,109,28,28', +'50,50,50,53,53,53,24,53,51,24,30,30,221,8,30,24,26,49,49,5,73,73,35', +'74,74,64,79,79,210,23,23,23,23,53,211,59,205,17,53,53,63,174,53,77,164', +'70,86,86,86,6,111,6,6,6,194,6,6,6,120,190,36,79,58,57,57,57,32,49,52', +'216,67,150,32,70,30,30,30,30,217,90,160,162,90,7,195,5,195,155,155,195', +'166,85,85,138,151,191,85,53,148,195,139,191,53,53,53,53,53,140,141,167', +'9,68,42,68,152,31,9,29,25,158,22,20,165,168,169,170,171,18,177,178,180', +'182,183,184,89,185,186,189,192,164,193,16,196,197,198,199,200,201,202', +'203,204,13,11,217,209,10,213,45,221,214,220,14,80,3,83,75,88,87,30,30', +'9,100,149,103,106,151,54,30,30,84,84,1,6,37,117,119,14,48,44,124,166', +'125,126,53,53,53,53,53,53,53,70,7,115,127,53,53,53,172,35,167,128,129', +'45,130,131,132,26,26,53,45,26,221,45,133,87,64,26,90,90,151,67,162,160', +'64,9,150,134,148,164,84,135,136,210,9,6,137,52,,211,84,205,6,6,,53,14', +'23,6,,,14,53,49,49,53,39,151,190,,37,,35,87,,62,216,211,161,174,161', +',,,53,,,37,53,,208,208,208,53,109,,36,120,86,14,14,194,30,,,6,6,84,86', +',79,111,37,17,,57,59,,8,53,36,59,,63,5,57,,79,76,49,53,53,53,195,76', +'77,195,149,,49,149,,,58,35,123,,,58,120,,,,,,,6,,,,,211,79,154,79,86', +'86,,161,,,,,,,,5,,89,,36,,155,,37,,,39,,21,85,,,35,70,64,87,,51,,,49', +'87,,51,,45,,6,6,221,,6,87,36,,210,,210,12,12,9,,,,,,172,172,50,,6,,73', +',50,74,,,39,155,155,24,,,87,70,,53,,49,49,24,24,,,,154,24,24,,6,210', +'210,,,149,,149,45,205,205,15,,,62,,,50,87,90,,,62,,,161,195,156,87,', +'156,,89,6,12,,,30,28,,,53,,,,210,,36,32,32,53,70,35,,32,32,,,,161,,70', +'161,,,53,79,,,41,108,12,,86,79,,,,,14,45,,14,155,,,,149,149,,87,,,,', +',,,,,,,,,,6,30,49,,,,53,30,,53,,6,,76,108,76,156,53,70,208,208,,208', +'208,45,208,120,24,,53,104,,161,,87,53,,149,108,149,154,,6,154,,,154', +',154,6,115,,,2,,21,39,,210,53,70,,,,,53,53,70,,53,173,,,,149,53,53,6', +'62,,39,53,53,,32,87,6,26,87,62,,12,210,12,,210,,26,26,73,,6,74,26,26', +',,39,69,,6,,6,,84,,86,,36,,,154,,154,,154,,154,,,79,,,,,,,,,,39,79,', +',45,,,6,14,6,154,,87,,,,,,,84,,208,208,208,208,156,14,,156,6,210,156', +',156,39,,,86,,,53,,,70,,,53,,,,,53,53,,70,,9,,53,,,6,39,,76,76,9,14', +'35,,76,76,,,,,53,,23,,,,,,,,14,6,,212,208,,23,,14,,102,,26,53,,,,,6', +',156,,156,,156,,156,76,,,,,53,,,14,,30,,49,53,53,39,,,,,,,156,,30,,', +',,,,,102,102,,102,,,53,,53,159,,159,,,,,39,,34,53,53,,,,34,,14,14,,6', +'6,6,,,,,,120,,34,,120,,,,,,,34,34,34,,34,34,34,,,14,53,53,76,,,,,,,', +',,,79,,76,76,76,76,,34,,79,,,34,34,,14,34,34,53,,,39,212,,37,212,159', +',212,6,212,,,,,,14,,120,,,,,,,,,53,,45,,,,6,,,,,,87,79,,6,6,6,6,,6,53', +',,34,,53,6,53,34,34,34,34,34,,,,60,,70,6,39,65,102,53,70,,,65,,,,76', +',,,212,,212,,212,,212,,,,,,,,6,6,6,6,,,65,65,65,,,6,,,,212,,,,,,,,,', +'60,,159,,159,,159,65,,,,,,,,,,65,,,65,,,,60,34,34,34,34,34,34,34,,,', +',34,34,34,159,,159,157,157,157,,,,,,34,,,,82,82,60,,,,,,,,102,,,,,,102', +'65,,,,102,,,,,65,,,102,,,34,,,,,,,34,,,34,,,,159,,,,,,,,,,,,,,159,34', +'159,,159,34,,,,34,34,,,,,,,82,,82,,,82,82,,,34,,,159,,,157,157,157,157', +'34,157,,102,,,,102,,,,34,34,34,,,56,65,,,,,56,,,34,,34,60,,,,82,,,,', +'56,,,,,65,,,,56,56,56,,56,157,157,157,157,,,,,,,,157,,,,,,,,,,60,60', +',,56,,,,,56,56,,,56,,,,60,102,102,,,,60,,,,,,,,,,,,65,,,,65,,82,60,65', +'65,,,,,,,,,,,,,34,,,65,,,,,,,,56,,65,,,56,56,56,56,56,,,,,65,65,,,,', +',,,,,,,65,,65,,,,,,,,,,,,,,34,,33,,,,,34,33,34,,,,,,34,,82,,,82,,82', +',34,,,,,,,,,,,,33,,,,,,,,,,,,,,,,,56,56,56,56,56,56,56,,,33,,56,56,56', +',,,34,,,34,,,,,56,,,34,,,,,82,,,,,,,34,60,,,,,34,,,,,,,,,,,,,,,56,,', +',,,,56,,34,56,,33,60,,34,34,,,34,,33,,,,34,34,,65,56,,34,34,56,,65,', +',56,,,,82,65,,,,,,,60,82,82,,,,,,,,,,34,,56,,,,,,,,,34,,56,56,56,,,', +',,,82,,,82,,,,,,,,,,,65,,,65,,,,,,82,33,,33,,82,33,,82,,,,33,,,,60,', +',,,,,34,82,,33,,,34,60,,,,34,34,,,,,,34,,,65,82,27,,,,,,27,,65,,60,', +',34,,,,,,,,,,,,,,,,,,,,82,27,,34,,,,56,,,,,33,,,,33,,65,,,33,34,,,,', +'27,,65,34,34,,,,,,27,,,,,,,,,,33,,,,,,,,34,,34,,33,33,56,,,,,,,34,34', +'56,,,,,,,,,,,,,,,56,65,,,,,27,,,,,,65,65,,27,,34,,65,,,34,34,,,34,,', +',,,82,,,,,,,,,,,,,,56,,,56,,,,34,,,,56,,,65,,,,,,,,,56,,,,,,56,,34,', +'65,82,,34,,,,,65,65,,,,,,,,,,,56,,,27,34,27,56,56,27,34,56,34,,,27,65', +'56,56,,,,,56,56,,,65,34,27,,,,,,,,,,,,,,,,,,33,,,,,,,,,,,,,,65,,,,,65', +'65,,,65,,,,,,,,,,,,,,,,,,,,,,,,27,,,65,27,,,,,27,,,,,,,,,,,,,,33,,,33', +'65,56,,,,65,,56,27,,,,56,56,,,,,,56,27,27,,,,,65,,,,,65,,65,66,,,56', +',,66,,,,,,,,,33,,,,,,33,,,,33,56,,,,,33,33,,66,66,66,33,33,,,,,,,56', +',,,,,,,56,56,,,,,,66,,,,,,,,,,66,,,66,,,,,56,,56,,,,,,,,,,,56,56,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,56,56,,66,,,33,,,,,,,,,,,33,33,', +',,,,33,,,27,,,,56,,,,,,,,,,,33,,,,,,,,,,,,,,,,,,56,,,,,33,,,,,,,,38', +',,,,,38,,56,,,33,,56,,56,,66,,33,33,,,,27,,,27,,,,56,,,38,38,38,,,,', +',66,,,,33,,,,,,,,,,,33,,,38,,,,,,,,,,38,,,,,,,27,,,,,,27,,,,27,,,,,', +'27,27,,33,33,,27,27,,,,,,,66,,,,66,,,,66,66,,,,,,,,38,,,33,,,,,66,38', +',,,,,,,,66,,,,,,,,,,,,66,66,33,,,,,,,,,,,66,,66,,,,,,,,33,,,,,33,,33', +',,,,,,,,,,,,,27,,,,,,,,,,,27,27,,,,,,27,,,,38,,38,,,38,,,,,,38,,,27', +',,,,,,,,,,38,,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,27,,,,,,,,27,27,,,,,,,', +',,,,,,,,,,,,,,,,,38,27,,,38,,,,38,38,,,27,,,66,,,,,,,66,,,38,,,,,66', +',,,,38,,,,,,,,,,,,38,38,,,27,27,,,27,,,,,38,,38,,,,,,,,,,,,,,,,,,,,27', +',,66,,,66,,,,,,,,,,,,,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,,,27,,,,,27,66', +'27,,,,,,,,,66,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,', +',66,,,,,,,,,,,,,,,,38,,,,,,,38,,,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,,,66', +',,,,,,,,,,66,66,,,,,,66,,,,,,,,,,,38,,,38,,,,,,,,,,,,,,,,,,,,,,,,,,', +'66,,,,,,,,,,,,,,,,,,,66,,,,38,,,,66,66,38,,,,38,,,,,,38,38,,,,,38,38', +',,40,,,,,66,,,,40,40,40,,,,,66,,,,,,40,40,,40,,38,,,,,,,,,,,38,,,,,', +',,,,,,66,,,,,66,66,,,66,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,38,,,,', +',,,,,,38,38,,,66,,38,38,,66,,,,,,,,,,,,,,,,38,,,,,66,,,,,66,,66,,,,', +',,,,,,38,,,,,,,,,,,,,,,,,,,38,,,,,,,,38,38,,,,,,,,,,,,,,,,,,40,40,,', +'40,40,,,38,,40,,,,,,,,,38,,,,40,,,40,40,40,40,40,40,40,40,40,40,40,40', +'40,40,40,40,40,40,40,40,40,40,,,,,40,38,,,,,38,38,40,,38,,,,,40,,,40', +',,,,,,40,,40,,,40,40,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,38,,,,,38,,,40,', +'40,,,,40,40,,,,,,,,,,,38,,,,,38,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,40,,40,40,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,40,', +'40,,,,,,,,,,,,,,,40,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,40,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,40,40,40,,,,40,,,40,40,40,40,,,,,40,40,,,,,,,,,,,,,,,,,,,,,', +',,40,,,40,,,,,,,,,,,,,,,40,,,,,40,,,,,40,,,40,,,,,,,,,,,,,,,,40,,,,', +',,,,,,,,,,,,,,,,40,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,40,', +',,,,,,,,,,,40,40,40,40,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,40,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40' ] + racc_goto_check = arr = ::Array.new(3977, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2270,50 +2314,54 @@ end racc_goto_pointer = [ - nil, 206, 23, 266, nil, 62, -2, 113, 72, 235, - -281, 249, 358, -532, -629, -566, nil, 40, 237, 3, - -206, 175, 5, 64, 927, -211, -347, 9, 1305, 781, - -176, -36, -27, 47, -19, 2094, -26, nil, nil, 18, - -167, 86, -230, -375, 110, -324, -650, nil, 123, 55, - 63, -39, nil, -18, 21, -299, 999, 1204, -497, -219, - -56, 5, nil, nil, 2, 38, -249, -6, -14, 1119, - 99, -1, -270, 74, -10, -204, -255, -445, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 203, -68, -62, - nil, 200, -332, -676, -474, -342, 199, -328, 31, -565, - 214, 230, 230, -246, 231, 229, -436, 231, -437, -293, - -839, 38, -628, -219, -611, -797, 77, -454, -215, -449, - -716, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -774, -470, -478, -774, -503, nil, 196, -401, - 387, 365, -500, 232, -611, -517, nil, -537, -735, -820, - -828, -172, -381, 105, -296, -16, -87, -488, nil, nil, - -90, -487, -87, -484, -804, -400, -502, -627, nil, nil, - 122, -30, 50, 118, 118, -256, -249, 123, 124, 128, - -544, -387, -378, 145, -517, -310, nil, 0, -463, -325, - -653, -263, -449, -627, nil, -637, -792, nil, nil, -110, - -435 ] + nil, 225, 9, 207, nil, 58, -2, 119, 52, 152, + 63, 186, -323, -227, -17, -525, -536, -640, -677, nil, + -365, 9, 152, -58, -174, 90, 37, 1705, -181, -62, + -13, 22, -117, 1440, 910, -224, -346, -11, 2279, -20, + 2935, -42, -448, nil, -529, -27, nil, nil, 204, -168, + 15, -230, -401, 15, -289, nil, 1271, 75, 70, 43, + 814, nil, -19, 46, -268, 1052, 2076, -504, -217, -72, + 14, nil, nil, 53, 56, -218, 144, 43, nil, 33, + 159, nil, 938, -142, 0, -425, 58, -18, -296, -276, + -396, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 140, nil, 289, -134, -51, nil, 152, nil, -317, -717, + nil, -666, nil, nil, nil, -361, nil, 156, nil, -393, + 31, nil, nil, -590, 158, -150, 175, 185, -94, 192, + 193, 185, -522, -106, -504, -689, 211, -335, -247, -758, + -475, -753, nil, nil, nil, nil, nil, nil, -736, -369, + -470, -742, -673, nil, -331, -439, -206, 224, -668, 160, + -707, -420, -563, nil, -648, -780, -812, -793, -187, -567, + 103, -397, -317, -10, -192, nil, nil, -115, -115, nil, + -519, nil, -330, -844, -433, -544, -675, nil, nil, 89, + 8, 42, 84, 85, -300, -265, -215, 87, 87, 87, + -601, -442, -442, 90, -588, -274, nil, nil, -240, -543, + -282, -663, 7, -537, -777, nil, -630, -864, nil, nil, + -185, -466 ] racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 295, 7, 348, 296, - nil, nil, 536, nil, 855, nil, 294, nil, nil, nil, - 14, 15, 21, 231, 324, nil, nil, 752, 229, 230, - nil, nil, 20, nil, 332, 24, 25, 26, 27, nil, - 694, nil, nil, nil, 313, nil, nil, 28, 424, 35, - nil, nil, 37, 40, 39, nil, 226, 227, 600, nil, - 132, 432, 131, 134, 78, 79, nil, 93, 49, 285, - nil, 425, nil, 426, 437, 648, 499, 283, 268, 50, - 51, 52, 53, 54, 55, 56, 57, 58, nil, 269, - 64, nil, nil, nil, nil, nil, nil, nil, 584, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 5, nil, 310, 7, 363, 313, + nil, nil, nil, nil, 555, nil, nil, nil, nil, 309, + 311, nil, nil, nil, 14, 15, 21, 243, nil, nil, + 17, nil, 437, 244, 341, nil, nil, 779, 242, 473, + 24, nil, nil, 358, nil, 25, 26, 27, nil, 715, + nil, nil, nil, 330, nil, 28, 327, 452, 35, nil, + nil, 37, 40, 39, nil, 239, 240, 619, nil, 144, + 460, 143, 146, 90, 91, nil, 442, 105, 47, 50, + 275, 548, 301, nil, 453, nil, 454, 465, 674, 518, + 299, 283, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 61, nil, nil, 284, 65, nil, 67, nil, nil, + 68, 884, 69, 70, 71, nil, 72, nil, 73, nil, + 601, 74, 75, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 724, 566, nil, 725, 954, 797, 554, nil, - 555, nil, nil, 556, nil, 558, 664, nil, nil, nil, - 564, nil, nil, nil, 762, nil, nil, nil, 436, 270, - nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, - 82, nil, nil, nil, nil, nil, 610, nil, nil, nil, - nil, nil, nil, nil, nil, 839, 553, nil, 557, 847, - 569, 571, 572, 809, 575, 576, 810, 579, 582, nil, - 289 ] + nil, nil, 288, 277, 723, 852, 610, 885, 750, 583, + nil, 751, 1028, 922, 571, nil, 572, nil, nil, 573, + nil, 575, nil, 830, nil, nil, nil, 581, nil, nil, + nil, nil, nil, nil, nil, 464, 286, nil, nil, 693, + nil, 505, nil, nil, nil, nil, nil, 89, 92, 94, + nil, nil, nil, nil, nil, 631, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 867, 788, 570, nil, 574, + 875, 586, 588, 589, 933, 592, 593, 934, 596, 599, + nil, 304 ] racc_reduce_table = [ 0, 0, :racc_error, @@ -2324,630 +2372,654 @@ 1, 150, :_reduce_none, 3, 150, :_reduce_6, 2, 150, :_reduce_none, - 1, 153, :_reduce_8, + 1, 153, :_reduce_none, 0, 157, :_reduce_9, - 5, 153, :_reduce_10, - 4, 156, :_reduce_11, - 2, 158, :_reduce_12, - 1, 162, :_reduce_none, - 1, 162, :_reduce_none, - 3, 162, :_reduce_15, - 2, 162, :_reduce_16, - 0, 179, :_reduce_17, - 4, 155, :_reduce_18, - 3, 155, :_reduce_19, - 3, 155, :_reduce_20, - 3, 155, :_reduce_21, - 2, 155, :_reduce_22, - 3, 155, :_reduce_23, - 3, 155, :_reduce_24, + 3, 153, :_reduce_10, + 0, 159, :_reduce_11, + 4, 156, :_reduce_12, + 0, 164, :_reduce_13, + 6, 158, :_reduce_14, + 3, 158, :_reduce_15, + 2, 160, :_reduce_16, + 1, 165, :_reduce_none, + 1, 165, :_reduce_none, + 3, 165, :_reduce_19, + 2, 165, :_reduce_20, + 1, 166, :_reduce_none, + 1, 166, :_reduce_22, + 0, 177, :_reduce_23, + 4, 155, :_reduce_24, 3, 155, :_reduce_25, 3, 155, :_reduce_26, 3, 155, :_reduce_27, - 4, 155, :_reduce_28, - 1, 155, :_reduce_none, + 2, 155, :_reduce_28, + 3, 155, :_reduce_29, 3, 155, :_reduce_30, 3, 155, :_reduce_31, - 6, 155, :_reduce_32, - 5, 155, :_reduce_33, - 5, 155, :_reduce_34, - 5, 155, :_reduce_35, - 5, 155, :_reduce_36, + 3, 155, :_reduce_32, + 3, 155, :_reduce_33, + 4, 155, :_reduce_34, + 1, 155, :_reduce_none, + 3, 155, :_reduce_36, 3, 155, :_reduce_37, 3, 155, :_reduce_38, - 3, 155, :_reduce_39, 1, 155, :_reduce_none, - 3, 166, :_reduce_41, - 3, 166, :_reduce_42, - 1, 178, :_reduce_none, - 3, 178, :_reduce_44, - 3, 178, :_reduce_45, - 3, 178, :_reduce_46, - 2, 178, :_reduce_47, + 3, 170, :_reduce_40, + 3, 170, :_reduce_41, + 6, 170, :_reduce_42, + 5, 170, :_reduce_43, + 5, 170, :_reduce_44, + 5, 170, :_reduce_45, + 5, 170, :_reduce_46, + 3, 170, :_reduce_47, + 1, 178, :_reduce_48, + 3, 178, :_reduce_49, 1, 178, :_reduce_none, - 1, 165, :_reduce_49, - 1, 168, :_reduce_none, - 1, 168, :_reduce_none, - 1, 183, :_reduce_none, - 4, 183, :_reduce_53, - 0, 191, :_reduce_54, - 0, 192, :_reduce_55, - 6, 188, :_reduce_56, - 1, 190, :_reduce_57, - 2, 182, :_reduce_58, - 3, 182, :_reduce_59, - 4, 182, :_reduce_60, - 5, 182, :_reduce_61, - 4, 182, :_reduce_62, - 5, 182, :_reduce_63, - 2, 182, :_reduce_64, - 2, 182, :_reduce_65, - 2, 182, :_reduce_66, - 2, 182, :_reduce_67, - 2, 182, :_reduce_68, + 1, 176, :_reduce_none, + 3, 176, :_reduce_52, + 3, 176, :_reduce_53, + 3, 176, :_reduce_54, + 2, 176, :_reduce_55, + 1, 176, :_reduce_none, + 1, 169, :_reduce_57, + 0, 189, :_reduce_58, + 0, 190, :_reduce_59, + 4, 187, :_reduce_60, + 1, 172, :_reduce_none, + 1, 172, :_reduce_none, + 1, 192, :_reduce_none, + 4, 192, :_reduce_64, + 0, 200, :_reduce_65, + 4, 197, :_reduce_66, + 1, 199, :_reduce_67, + 2, 191, :_reduce_68, + 3, 191, :_reduce_69, + 4, 191, :_reduce_70, + 5, 191, :_reduce_71, + 4, 191, :_reduce_72, + 5, 191, :_reduce_73, + 2, 191, :_reduce_74, + 2, 191, :_reduce_75, + 2, 191, :_reduce_76, + 2, 191, :_reduce_77, + 2, 191, :_reduce_78, + 1, 171, :_reduce_none, + 3, 171, :_reduce_80, + 1, 205, :_reduce_none, + 3, 205, :_reduce_82, + 1, 204, :_reduce_83, + 2, 204, :_reduce_84, + 3, 204, :_reduce_85, + 5, 204, :_reduce_86, + 2, 204, :_reduce_87, + 4, 204, :_reduce_88, + 2, 204, :_reduce_89, + 4, 204, :_reduce_90, + 1, 204, :_reduce_91, + 3, 204, :_reduce_92, + 1, 208, :_reduce_none, + 3, 208, :_reduce_94, + 2, 207, :_reduce_95, + 3, 207, :_reduce_96, + 1, 210, :_reduce_97, + 3, 210, :_reduce_98, + 1, 209, :_reduce_99, + 1, 209, :_reduce_100, + 4, 209, :_reduce_101, + 3, 209, :_reduce_102, + 3, 209, :_reduce_103, + 3, 209, :_reduce_104, + 3, 209, :_reduce_105, + 2, 209, :_reduce_106, + 1, 209, :_reduce_107, + 1, 173, :_reduce_108, + 1, 173, :_reduce_109, + 4, 173, :_reduce_110, + 3, 173, :_reduce_111, + 3, 173, :_reduce_112, + 3, 173, :_reduce_113, + 3, 173, :_reduce_114, + 2, 173, :_reduce_115, + 1, 173, :_reduce_116, + 1, 213, :_reduce_117, + 1, 213, :_reduce_none, + 2, 214, :_reduce_119, + 1, 214, :_reduce_120, + 3, 214, :_reduce_121, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_125, + 1, 215, :_reduce_126, + 1, 218, :_reduce_none, + 1, 218, :_reduce_none, + 1, 167, :_reduce_129, 1, 167, :_reduce_none, - 3, 167, :_reduce_70, - 1, 196, :_reduce_none, - 3, 196, :_reduce_72, - 1, 195, :_reduce_73, - 2, 195, :_reduce_74, - 3, 195, :_reduce_75, - 5, 195, :_reduce_76, - 2, 195, :_reduce_77, - 4, 195, :_reduce_78, - 2, 195, :_reduce_79, - 4, 195, :_reduce_80, - 1, 195, :_reduce_81, - 3, 195, :_reduce_82, - 1, 199, :_reduce_none, - 3, 199, :_reduce_84, - 2, 198, :_reduce_85, - 3, 198, :_reduce_86, - 1, 201, :_reduce_87, - 3, 201, :_reduce_88, - 1, 200, :_reduce_89, - 1, 200, :_reduce_90, - 4, 200, :_reduce_91, - 3, 200, :_reduce_92, - 3, 200, :_reduce_93, - 3, 200, :_reduce_94, - 3, 200, :_reduce_95, - 2, 200, :_reduce_96, - 1, 200, :_reduce_97, - 1, 175, :_reduce_98, - 1, 175, :_reduce_99, - 4, 175, :_reduce_100, - 3, 175, :_reduce_101, - 3, 175, :_reduce_102, - 3, 175, :_reduce_103, - 3, 175, :_reduce_104, - 2, 175, :_reduce_105, - 1, 175, :_reduce_106, - 1, 204, :_reduce_107, - 1, 204, :_reduce_none, - 2, 205, :_reduce_109, - 1, 205, :_reduce_110, - 3, 205, :_reduce_111, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_115, - 1, 206, :_reduce_116, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 163, :_reduce_119, - 1, 163, :_reduce_none, - 1, 164, :_reduce_121, - 0, 212, :_reduce_122, - 4, 164, :_reduce_123, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 3, 181, :_reduce_195, - 5, 181, :_reduce_196, - 3, 181, :_reduce_197, - 5, 181, :_reduce_198, - 6, 181, :_reduce_199, - 5, 181, :_reduce_200, - 5, 181, :_reduce_201, - 5, 181, :_reduce_202, - 5, 181, :_reduce_203, - 4, 181, :_reduce_204, - 3, 181, :_reduce_205, - 3, 181, :_reduce_206, - 3, 181, :_reduce_207, - 3, 181, :_reduce_208, - 3, 181, :_reduce_209, - 3, 181, :_reduce_210, - 3, 181, :_reduce_211, - 3, 181, :_reduce_212, - 3, 181, :_reduce_213, - 4, 181, :_reduce_214, - 2, 181, :_reduce_215, - 2, 181, :_reduce_216, - 3, 181, :_reduce_217, - 3, 181, :_reduce_218, - 3, 181, :_reduce_219, - 3, 181, :_reduce_220, - 3, 181, :_reduce_221, - 3, 181, :_reduce_222, - 3, 181, :_reduce_223, - 3, 181, :_reduce_224, - 3, 181, :_reduce_225, - 3, 181, :_reduce_226, - 3, 181, :_reduce_227, - 3, 181, :_reduce_228, - 3, 181, :_reduce_229, - 2, 181, :_reduce_230, - 2, 181, :_reduce_231, - 3, 181, :_reduce_232, - 3, 181, :_reduce_233, - 3, 181, :_reduce_234, - 3, 181, :_reduce_235, - 3, 181, :_reduce_236, - 6, 181, :_reduce_237, - 1, 181, :_reduce_none, - 1, 215, :_reduce_239, + 1, 168, :_reduce_131, + 0, 221, :_reduce_132, + 4, 168, :_reduce_133, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, 1, 216, :_reduce_none, - 2, 216, :_reduce_241, - 4, 216, :_reduce_242, - 2, 216, :_reduce_243, - 3, 220, :_reduce_244, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 171, :_reduce_247, - 1, 171, :_reduce_248, - 2, 171, :_reduce_249, - 4, 171, :_reduce_250, - 2, 171, :_reduce_251, - 1, 194, :_reduce_252, - 2, 194, :_reduce_253, - 2, 194, :_reduce_254, - 4, 194, :_reduce_255, - 1, 194, :_reduce_256, - 0, 224, :_reduce_257, - 2, 187, :_reduce_258, - 2, 223, :_reduce_259, - 2, 222, :_reduce_260, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 3, 186, :_reduce_206, + 3, 186, :_reduce_207, + 6, 186, :_reduce_208, + 5, 186, :_reduce_209, + 5, 186, :_reduce_210, + 5, 186, :_reduce_211, + 5, 186, :_reduce_212, + 0, 227, :_reduce_213, + 5, 186, :_reduce_214, + 3, 186, :_reduce_215, + 3, 186, :_reduce_216, + 3, 186, :_reduce_217, + 3, 186, :_reduce_218, + 3, 186, :_reduce_219, + 3, 186, :_reduce_220, + 3, 186, :_reduce_221, + 3, 186, :_reduce_222, + 3, 186, :_reduce_223, + 4, 186, :_reduce_224, + 2, 186, :_reduce_225, + 2, 186, :_reduce_226, + 3, 186, :_reduce_227, + 3, 186, :_reduce_228, + 3, 186, :_reduce_229, + 3, 186, :_reduce_230, + 1, 186, :_reduce_none, + 3, 186, :_reduce_232, + 3, 186, :_reduce_233, + 3, 186, :_reduce_234, + 3, 186, :_reduce_235, + 3, 186, :_reduce_236, + 2, 186, :_reduce_237, + 2, 186, :_reduce_238, + 3, 186, :_reduce_239, + 3, 186, :_reduce_240, + 3, 186, :_reduce_241, + 3, 186, :_reduce_242, + 3, 186, :_reduce_243, + 6, 186, :_reduce_244, + 1, 186, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 3, 224, :_reduce_250, + 3, 224, :_reduce_251, + 1, 228, :_reduce_252, + 1, 229, :_reduce_none, + 2, 229, :_reduce_254, + 4, 229, :_reduce_255, + 2, 229, :_reduce_256, 1, 222, :_reduce_none, - 1, 217, :_reduce_262, - 2, 217, :_reduce_263, - 3, 217, :_reduce_264, - 4, 217, :_reduce_265, - 1, 177, :_reduce_266, - 1, 177, :_reduce_267, - 3, 176, :_reduce_268, - 4, 176, :_reduce_269, - 2, 176, :_reduce_270, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_281, - 0, 247, :_reduce_282, - 4, 214, :_reduce_283, - 2, 214, :_reduce_284, - 0, 248, :_reduce_285, - 0, 249, :_reduce_286, - 5, 214, :_reduce_287, - 3, 214, :_reduce_288, - 3, 214, :_reduce_289, - 2, 214, :_reduce_290, - 3, 214, :_reduce_291, - 0, 250, :_reduce_292, - 4, 214, :_reduce_293, - 1, 214, :_reduce_294, - 4, 214, :_reduce_295, - 3, 214, :_reduce_296, - 1, 214, :_reduce_297, - 5, 214, :_reduce_298, - 4, 214, :_reduce_299, - 3, 214, :_reduce_300, - 2, 214, :_reduce_301, - 1, 214, :_reduce_none, - 2, 214, :_reduce_303, - 2, 214, :_reduce_304, - 6, 214, :_reduce_305, - 6, 214, :_reduce_306, - 0, 251, :_reduce_307, - 0, 252, :_reduce_308, - 7, 214, :_reduce_309, - 0, 253, :_reduce_310, - 0, 254, :_reduce_311, - 7, 214, :_reduce_312, - 5, 214, :_reduce_313, - 4, 214, :_reduce_314, - 0, 255, :_reduce_315, - 0, 256, :_reduce_316, - 9, 214, :_reduce_317, - 0, 257, :_reduce_318, - 0, 258, :_reduce_319, - 7, 214, :_reduce_320, - 0, 259, :_reduce_321, - 0, 260, :_reduce_322, - 0, 261, :_reduce_323, - 9, 214, :_reduce_324, - 0, 262, :_reduce_325, - 0, 263, :_reduce_326, - 6, 214, :_reduce_327, - 0, 264, :_reduce_328, - 6, 214, :_reduce_329, - 0, 265, :_reduce_330, - 0, 266, :_reduce_331, - 9, 214, :_reduce_332, - 1, 214, :_reduce_333, - 1, 214, :_reduce_334, - 1, 214, :_reduce_335, - 1, 214, :_reduce_336, - 1, 170, :_reduce_337, + 3, 222, :_reduce_258, + 3, 233, :_reduce_259, + 1, 234, :_reduce_none, + 1, 234, :_reduce_none, + 1, 181, :_reduce_none, + 1, 181, :_reduce_none, + 2, 181, :_reduce_264, + 4, 181, :_reduce_265, + 2, 181, :_reduce_266, + 1, 203, :_reduce_267, + 2, 203, :_reduce_268, + 2, 203, :_reduce_269, + 4, 203, :_reduce_270, + 1, 203, :_reduce_271, + 0, 237, :_reduce_272, + 2, 196, :_reduce_273, + 2, 236, :_reduce_274, + 2, 235, :_reduce_275, + 1, 235, :_reduce_none, + 1, 230, :_reduce_277, + 2, 230, :_reduce_278, + 3, 230, :_reduce_279, + 4, 230, :_reduce_280, + 1, 175, :_reduce_281, + 1, 175, :_reduce_282, + 3, 174, :_reduce_283, + 4, 174, :_reduce_284, + 2, 174, :_reduce_285, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_296, + 0, 272, :_reduce_297, + 4, 225, :_reduce_298, + 0, 273, :_reduce_299, + 3, 225, :_reduce_300, + 0, 274, :_reduce_301, + 4, 225, :_reduce_302, + 3, 225, :_reduce_303, + 3, 225, :_reduce_304, + 2, 225, :_reduce_305, + 0, 275, :_reduce_306, + 4, 225, :_reduce_307, + 0, 276, :_reduce_308, + 4, 225, :_reduce_309, + 1, 225, :_reduce_310, + 4, 225, :_reduce_311, + 3, 225, :_reduce_312, + 1, 225, :_reduce_313, + 5, 225, :_reduce_314, + 4, 225, :_reduce_315, + 3, 225, :_reduce_316, + 2, 225, :_reduce_317, + 1, 225, :_reduce_none, + 2, 225, :_reduce_319, + 2, 225, :_reduce_320, + 6, 225, :_reduce_321, + 6, 225, :_reduce_322, + 4, 225, :_reduce_323, + 4, 225, :_reduce_324, + 5, 225, :_reduce_325, + 4, 225, :_reduce_326, + 6, 225, :_reduce_327, + 0, 277, :_reduce_328, + 0, 278, :_reduce_329, + 7, 225, :_reduce_330, + 0, 279, :_reduce_331, + 0, 280, :_reduce_332, + 0, 281, :_reduce_333, + 9, 225, :_reduce_334, + 0, 282, :_reduce_335, + 0, 283, :_reduce_336, + 6, 225, :_reduce_337, + 0, 284, :_reduce_338, + 0, 285, :_reduce_339, + 7, 225, :_reduce_340, + 0, 286, :_reduce_341, + 0, 287, :_reduce_342, + 9, 225, :_reduce_343, + 1, 225, :_reduce_344, + 1, 225, :_reduce_345, + 1, 225, :_reduce_346, + 1, 225, :_reduce_347, + 1, 180, :_reduce_348, + 1, 247, :_reduce_none, + 1, 253, :_reduce_none, + 1, 256, :_reduce_none, + 1, 258, :_reduce_none, + 1, 259, :_reduce_none, + 1, 260, :_reduce_none, + 1, 262, :_reduce_none, + 1, 264, :_reduce_none, 1, 267, :_reduce_none, 1, 268, :_reduce_none, - 1, 269, :_reduce_none, - 1, 270, :_reduce_none, - 1, 271, :_reduce_none, - 1, 272, :_reduce_none, - 1, 273, :_reduce_none, - 1, 274, :_reduce_none, - 1, 275, :_reduce_none, - 1, 276, :_reduce_none, - 1, 277, :_reduce_none, - 1, 238, :_reduce_none, - 1, 238, :_reduce_none, - 2, 238, :_reduce_none, - 1, 240, :_reduce_none, - 1, 240, :_reduce_none, - 1, 239, :_reduce_none, - 5, 239, :_reduce_355, - 1, 160, :_reduce_none, - 2, 160, :_reduce_357, - 1, 242, :_reduce_none, - 1, 242, :_reduce_359, - 1, 278, :_reduce_none, - 3, 278, :_reduce_361, - 1, 281, :_reduce_362, - 3, 281, :_reduce_363, - 1, 280, :_reduce_364, - 4, 280, :_reduce_365, - 6, 280, :_reduce_366, - 3, 280, :_reduce_367, - 5, 280, :_reduce_368, - 2, 280, :_reduce_369, - 4, 280, :_reduce_370, - 1, 280, :_reduce_371, - 3, 280, :_reduce_372, - 4, 282, :_reduce_373, - 2, 282, :_reduce_374, - 2, 282, :_reduce_375, - 1, 282, :_reduce_376, - 2, 287, :_reduce_377, - 1, 287, :_reduce_none, - 6, 288, :_reduce_379, - 8, 288, :_reduce_380, - 4, 288, :_reduce_381, - 6, 288, :_reduce_382, - 4, 288, :_reduce_383, - 2, 288, :_reduce_384, - 6, 288, :_reduce_385, - 2, 288, :_reduce_386, - 4, 288, :_reduce_387, - 6, 288, :_reduce_388, - 2, 288, :_reduce_389, - 4, 288, :_reduce_390, - 2, 288, :_reduce_391, - 4, 288, :_reduce_392, - 1, 288, :_reduce_393, - 1, 189, :_reduce_394, - 1, 189, :_reduce_none, - 3, 292, :_reduce_396, - 1, 292, :_reduce_397, - 4, 292, :_reduce_398, + 1, 288, :_reduce_none, + 1, 289, :_reduce_none, + 1, 290, :_reduce_none, + 1, 291, :_reduce_none, + 1, 292, :_reduce_none, + 1, 162, :_reduce_none, 1, 293, :_reduce_none, - 4, 293, :_reduce_400, - 1, 294, :_reduce_401, - 3, 294, :_reduce_402, - 1, 295, :_reduce_403, - 1, 295, :_reduce_none, - 0, 299, :_reduce_405, - 3, 237, :_reduce_406, - 4, 297, :_reduce_407, - 1, 297, :_reduce_408, - 3, 298, :_reduce_409, - 3, 298, :_reduce_410, - 0, 302, :_reduce_411, - 0, 303, :_reduce_412, - 6, 301, :_reduce_413, - 2, 184, :_reduce_414, - 4, 184, :_reduce_415, - 5, 184, :_reduce_416, - 5, 184, :_reduce_417, - 0, 305, :_reduce_418, - 3, 236, :_reduce_419, - 4, 236, :_reduce_420, - 4, 236, :_reduce_421, - 3, 236, :_reduce_422, - 3, 236, :_reduce_423, - 3, 236, :_reduce_424, - 2, 236, :_reduce_425, - 1, 236, :_reduce_426, - 4, 236, :_reduce_427, - 0, 306, :_reduce_428, - 0, 307, :_reduce_429, - 6, 235, :_reduce_430, - 0, 308, :_reduce_431, - 0, 309, :_reduce_432, - 6, 235, :_reduce_433, - 0, 311, :_reduce_434, - 6, 241, :_reduce_435, - 1, 310, :_reduce_none, + 1, 248, :_reduce_none, + 1, 202, :_reduce_none, + 1, 254, :_reduce_none, + 1, 254, :_reduce_none, + 2, 254, :_reduce_none, + 1, 188, :_reduce_none, + 1, 188, :_reduce_none, + 1, 255, :_reduce_none, + 5, 255, :_reduce_374, + 1, 257, :_reduce_none, + 2, 257, :_reduce_376, + 1, 263, :_reduce_none, + 1, 263, :_reduce_378, + 1, 294, :_reduce_none, + 3, 294, :_reduce_380, + 1, 297, :_reduce_381, + 3, 297, :_reduce_382, + 1, 296, :_reduce_383, + 4, 296, :_reduce_384, + 6, 296, :_reduce_385, + 3, 296, :_reduce_386, + 5, 296, :_reduce_387, + 2, 296, :_reduce_388, + 4, 296, :_reduce_389, + 1, 296, :_reduce_390, + 3, 296, :_reduce_391, + 4, 298, :_reduce_392, + 2, 298, :_reduce_393, + 2, 298, :_reduce_394, + 1, 298, :_reduce_395, + 2, 303, :_reduce_396, + 1, 303, :_reduce_none, + 6, 304, :_reduce_398, + 8, 304, :_reduce_399, + 4, 304, :_reduce_400, + 6, 304, :_reduce_401, + 4, 304, :_reduce_402, + 2, 304, :_reduce_403, + 6, 304, :_reduce_404, + 2, 304, :_reduce_405, + 4, 304, :_reduce_406, + 6, 304, :_reduce_407, + 2, 304, :_reduce_408, + 4, 304, :_reduce_409, + 2, 304, :_reduce_410, + 4, 304, :_reduce_411, + 1, 304, :_reduce_412, + 1, 308, :_reduce_413, + 1, 308, :_reduce_414, + 3, 309, :_reduce_415, + 1, 309, :_reduce_416, + 4, 309, :_reduce_417, 1, 310, :_reduce_none, - 6, 159, :_reduce_438, - 0, 159, :_reduce_439, - 1, 312, :_reduce_440, + 4, 310, :_reduce_419, + 1, 311, :_reduce_420, + 3, 311, :_reduce_421, + 1, 312, :_reduce_422, 1, 312, :_reduce_none, - 1, 312, :_reduce_none, - 2, 313, :_reduce_443, - 1, 313, :_reduce_none, - 2, 161, :_reduce_445, - 1, 161, :_reduce_none, - 1, 225, :_reduce_447, - 1, 225, :_reduce_448, - 1, 225, :_reduce_none, - 1, 226, :_reduce_450, - 1, 315, :_reduce_451, - 1, 315, :_reduce_none, - 2, 315, :_reduce_453, - 3, 316, :_reduce_454, - 1, 316, :_reduce_455, - 3, 227, :_reduce_456, - 3, 228, :_reduce_457, - 3, 229, :_reduce_458, - 3, 229, :_reduce_459, - 1, 320, :_reduce_460, - 3, 320, :_reduce_461, - 1, 321, :_reduce_none, - 2, 321, :_reduce_463, - 3, 231, :_reduce_464, - 3, 231, :_reduce_465, - 1, 323, :_reduce_466, - 3, 323, :_reduce_467, - 3, 230, :_reduce_468, - 3, 230, :_reduce_469, - 3, 232, :_reduce_470, - 3, 232, :_reduce_471, - 1, 324, :_reduce_472, - 3, 324, :_reduce_473, - 1, 325, :_reduce_474, - 3, 325, :_reduce_475, - 1, 317, :_reduce_476, - 2, 317, :_reduce_477, - 1, 318, :_reduce_478, - 2, 318, :_reduce_479, - 1, 319, :_reduce_480, - 2, 319, :_reduce_481, - 1, 322, :_reduce_482, - 0, 327, :_reduce_483, - 3, 322, :_reduce_484, - 0, 328, :_reduce_485, - 4, 322, :_reduce_486, - 1, 326, :_reduce_487, - 1, 326, :_reduce_488, - 1, 326, :_reduce_489, - 1, 326, :_reduce_none, - 2, 210, :_reduce_491, - 1, 210, :_reduce_492, - 1, 329, :_reduce_none, + 0, 316, :_reduce_424, + 0, 317, :_reduce_425, + 4, 252, :_reduce_426, + 4, 314, :_reduce_427, + 1, 314, :_reduce_428, + 3, 315, :_reduce_429, + 3, 315, :_reduce_430, + 3, 319, :_reduce_431, + 2, 193, :_reduce_432, + 4, 193, :_reduce_433, + 5, 193, :_reduce_434, + 5, 193, :_reduce_435, + 0, 322, :_reduce_436, + 3, 251, :_reduce_437, + 4, 251, :_reduce_438, + 4, 251, :_reduce_439, + 3, 251, :_reduce_440, + 3, 251, :_reduce_441, + 3, 251, :_reduce_442, + 2, 251, :_reduce_443, + 1, 251, :_reduce_444, + 4, 251, :_reduce_445, + 0, 323, :_reduce_446, + 4, 250, :_reduce_447, + 0, 324, :_reduce_448, + 4, 250, :_reduce_449, + 0, 325, :_reduce_450, + 0, 326, :_reduce_451, + 4, 198, :_reduce_452, + 0, 327, :_reduce_453, + 0, 328, :_reduce_454, + 4, 320, :_reduce_455, + 0, 330, :_reduce_456, + 6, 261, :_reduce_457, 1, 329, :_reduce_none, 1, 329, :_reduce_none, - 1, 329, :_reduce_none, - 3, 211, :_reduce_497, - 1, 314, :_reduce_none, - 2, 314, :_reduce_499, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 203, :_reduce_509, - 1, 203, :_reduce_510, - 1, 203, :_reduce_511, - 1, 203, :_reduce_512, - 1, 203, :_reduce_513, - 1, 203, :_reduce_514, - 1, 203, :_reduce_515, - 1, 233, :_reduce_516, - 1, 233, :_reduce_517, - 1, 169, :_reduce_518, - 1, 169, :_reduce_519, - 1, 174, :_reduce_520, - 1, 174, :_reduce_521, - 1, 243, :_reduce_522, - 0, 330, :_reduce_523, - 4, 243, :_reduce_524, - 2, 243, :_reduce_525, - 3, 245, :_reduce_526, - 2, 245, :_reduce_527, - 4, 331, :_reduce_528, - 2, 331, :_reduce_529, - 2, 331, :_reduce_530, + 6, 161, :_reduce_460, + 0, 161, :_reduce_461, + 1, 331, :_reduce_462, 1, 331, :_reduce_none, - 2, 333, :_reduce_532, - 0, 333, :_reduce_533, - 6, 300, :_reduce_534, - 8, 300, :_reduce_535, - 4, 300, :_reduce_536, - 6, 300, :_reduce_537, - 4, 300, :_reduce_538, - 6, 300, :_reduce_539, - 2, 300, :_reduce_540, - 4, 300, :_reduce_541, - 6, 300, :_reduce_542, - 2, 300, :_reduce_543, - 4, 300, :_reduce_544, - 2, 300, :_reduce_545, - 4, 300, :_reduce_546, - 1, 300, :_reduce_547, - 0, 300, :_reduce_548, - 1, 296, :_reduce_549, - 1, 296, :_reduce_550, - 1, 296, :_reduce_551, - 1, 296, :_reduce_552, - 1, 279, :_reduce_none, - 1, 279, :_reduce_554, - 1, 335, :_reduce_none, - 1, 336, :_reduce_none, - 3, 336, :_reduce_557, - 1, 289, :_reduce_558, - 3, 289, :_reduce_559, - 1, 337, :_reduce_none, - 2, 338, :_reduce_561, - 1, 338, :_reduce_562, - 2, 339, :_reduce_563, - 1, 339, :_reduce_564, - 1, 283, :_reduce_none, - 3, 283, :_reduce_566, + 1, 331, :_reduce_none, + 2, 332, :_reduce_465, 1, 332, :_reduce_none, - 3, 332, :_reduce_568, - 1, 340, :_reduce_none, + 2, 163, :_reduce_467, + 1, 163, :_reduce_none, + 1, 238, :_reduce_469, + 1, 238, :_reduce_470, + 1, 238, :_reduce_none, + 1, 239, :_reduce_472, + 1, 334, :_reduce_473, + 1, 334, :_reduce_none, + 2, 334, :_reduce_475, + 3, 335, :_reduce_476, + 1, 335, :_reduce_477, + 3, 240, :_reduce_478, + 3, 241, :_reduce_479, + 3, 242, :_reduce_480, + 3, 242, :_reduce_481, + 1, 339, :_reduce_482, + 3, 339, :_reduce_483, 1, 340, :_reduce_none, - 2, 284, :_reduce_571, - 1, 284, :_reduce_572, - 3, 341, :_reduce_573, - 3, 342, :_reduce_574, - 1, 290, :_reduce_575, - 3, 290, :_reduce_576, - 1, 334, :_reduce_577, - 3, 334, :_reduce_578, - 1, 343, :_reduce_none, - 1, 343, :_reduce_none, - 2, 291, :_reduce_581, - 1, 291, :_reduce_582, - 1, 344, :_reduce_none, - 1, 344, :_reduce_none, - 2, 286, :_reduce_585, - 2, 285, :_reduce_586, - 0, 285, :_reduce_587, - 1, 246, :_reduce_none, - 0, 345, :_reduce_589, - 4, 246, :_reduce_590, - 1, 234, :_reduce_591, - 2, 234, :_reduce_592, - 1, 219, :_reduce_none, - 3, 219, :_reduce_594, - 3, 346, :_reduce_595, - 3, 346, :_reduce_596, - 4, 346, :_reduce_597, - 2, 346, :_reduce_598, - 2, 346, :_reduce_599, - 1, 193, :_reduce_none, - 1, 193, :_reduce_none, - 1, 193, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 304, :_reduce_none, - 1, 304, :_reduce_none, - 1, 304, :_reduce_none, - 1, 185, :_reduce_none, - 1, 185, :_reduce_none, - 1, 173, :_reduce_none, - 1, 173, :_reduce_none, + 2, 340, :_reduce_485, + 3, 244, :_reduce_486, + 0, 343, :_reduce_487, + 4, 244, :_reduce_488, + 1, 342, :_reduce_489, + 3, 342, :_reduce_490, + 3, 243, :_reduce_491, + 3, 243, :_reduce_492, + 3, 245, :_reduce_493, + 3, 245, :_reduce_494, + 1, 344, :_reduce_495, + 3, 344, :_reduce_496, + 1, 345, :_reduce_497, + 3, 345, :_reduce_498, + 1, 336, :_reduce_499, + 2, 336, :_reduce_500, + 1, 337, :_reduce_501, + 2, 337, :_reduce_502, + 1, 338, :_reduce_503, + 2, 338, :_reduce_504, + 1, 341, :_reduce_505, + 0, 347, :_reduce_506, + 3, 341, :_reduce_507, + 0, 348, :_reduce_508, + 4, 341, :_reduce_509, + 1, 346, :_reduce_510, + 1, 346, :_reduce_511, + 1, 346, :_reduce_512, + 1, 346, :_reduce_none, + 2, 219, :_reduce_514, + 1, 219, :_reduce_515, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 3, 220, :_reduce_520, + 1, 333, :_reduce_none, + 2, 333, :_reduce_522, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 212, :_reduce_532, + 1, 212, :_reduce_533, + 1, 212, :_reduce_534, + 1, 212, :_reduce_535, + 1, 212, :_reduce_536, + 1, 212, :_reduce_537, + 1, 212, :_reduce_538, + 1, 246, :_reduce_539, + 1, 246, :_reduce_540, + 1, 179, :_reduce_541, + 1, 179, :_reduce_542, + 1, 184, :_reduce_543, + 1, 184, :_reduce_544, + 0, 350, :_reduce_545, + 4, 265, :_reduce_546, + 1, 265, :_reduce_547, + 3, 269, :_reduce_548, + 0, 352, :_reduce_549, + 3, 269, :_reduce_550, + 4, 351, :_reduce_551, + 2, 351, :_reduce_552, + 2, 351, :_reduce_553, + 1, 351, :_reduce_none, + 2, 354, :_reduce_555, + 0, 354, :_reduce_556, + 6, 318, :_reduce_557, + 8, 318, :_reduce_558, + 4, 318, :_reduce_559, + 6, 318, :_reduce_560, + 4, 318, :_reduce_561, + 6, 318, :_reduce_562, + 2, 318, :_reduce_563, + 4, 318, :_reduce_564, + 6, 318, :_reduce_565, + 2, 318, :_reduce_566, + 4, 318, :_reduce_567, + 2, 318, :_reduce_568, + 4, 318, :_reduce_569, + 1, 318, :_reduce_570, + 0, 318, :_reduce_571, + 1, 313, :_reduce_572, + 1, 313, :_reduce_573, + 1, 313, :_reduce_574, + 1, 313, :_reduce_575, + 1, 295, :_reduce_none, + 1, 295, :_reduce_577, + 1, 356, :_reduce_none, + 1, 357, :_reduce_none, + 3, 357, :_reduce_580, + 1, 305, :_reduce_581, + 3, 305, :_reduce_582, + 1, 358, :_reduce_none, + 2, 359, :_reduce_584, + 1, 359, :_reduce_585, + 2, 360, :_reduce_586, + 1, 360, :_reduce_587, + 1, 299, :_reduce_none, + 3, 299, :_reduce_589, + 1, 353, :_reduce_none, + 3, 353, :_reduce_591, + 1, 361, :_reduce_none, + 1, 361, :_reduce_none, + 2, 300, :_reduce_594, + 1, 300, :_reduce_595, + 3, 362, :_reduce_596, + 3, 363, :_reduce_597, + 1, 306, :_reduce_598, + 3, 306, :_reduce_599, + 1, 355, :_reduce_600, + 3, 355, :_reduce_601, + 1, 364, :_reduce_none, + 1, 364, :_reduce_none, + 2, 307, :_reduce_604, + 1, 307, :_reduce_605, + 1, 365, :_reduce_none, + 1, 365, :_reduce_none, + 2, 302, :_reduce_608, + 2, 301, :_reduce_609, + 0, 301, :_reduce_610, + 1, 270, :_reduce_none, + 0, 366, :_reduce_612, + 4, 270, :_reduce_613, + 1, 249, :_reduce_614, + 2, 249, :_reduce_none, + 1, 232, :_reduce_none, + 3, 232, :_reduce_617, + 3, 367, :_reduce_618, + 2, 367, :_reduce_619, + 4, 367, :_reduce_620, + 2, 367, :_reduce_621, + 1, 201, :_reduce_none, + 1, 201, :_reduce_none, + 1, 201, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 321, :_reduce_none, + 1, 321, :_reduce_none, + 1, 321, :_reduce_none, + 1, 271, :_reduce_none, + 1, 271, :_reduce_none, + 1, 183, :_reduce_none, + 1, 183, :_reduce_none, + 1, 194, :_reduce_none, + 1, 194, :_reduce_none, 0, 151, :_reduce_none, 1, 151, :_reduce_none, - 0, 180, :_reduce_none, - 1, 180, :_reduce_none, - 2, 197, :_reduce_none, - 2, 172, :_reduce_none, - 0, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 244, :_reduce_623, - 1, 244, :_reduce_none, + 0, 185, :_reduce_none, + 1, 185, :_reduce_none, + 2, 206, :_reduce_none, + 2, 182, :_reduce_none, + 0, 231, :_reduce_none, + 1, 231, :_reduce_none, + 1, 231, :_reduce_none, + 1, 266, :_reduce_647, + 1, 266, :_reduce_none, 1, 154, :_reduce_none, - 2, 154, :_reduce_626, - 0, 152, :_reduce_627 ] + 2, 154, :_reduce_650, + 0, 152, :_reduce_651 ] -racc_reduce_n = 628 +racc_reduce_n = 652 -racc_shift_n = 1059 +racc_shift_n = 1097 racc_token_table = { false => 0, @@ -3094,8 +3166,8 @@ :tIMAGINARY => 141, :tLABEL_END => 142, :tLONELY => 143, - :tEQL => 144, - :tLOWEST => 145 } + :tLOWEST => 144, + :tEQL => 145 } racc_nt_base = 146 @@ -3262,8 +3334,8 @@ "tIMAGINARY", "tLABEL_END", "tLONELY", - "tEQL", "tLOWEST", + "tEQL", "$start", "program", "top_compstmt", @@ -3274,44 +3346,53 @@ "top_stmt", "terms", "stmt", - "bodystmt", + "begin_block", "@2", + "bodystmt", + "@3", "compstmt", "opt_rescue", - "opt_else", + "k_else", "opt_ensure", + "@4", "stmts", + "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", + "lhs", + "mrhs", + "mrhs_arg", + "expr", + "@5", + "command_rhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@3", "opt_nl", "arg", + "expr_value_do", + "do", + "@6", + "@7", "command", "block_command", "block_call", - "dot_or_colon", + "call_op2", "operation2", "command_args", "cmd_brace_block", - "opt_block_param", + "brace_body", "fcall", - "@4", - "@5", + "@8", "operation", + "k_return", "call_args", "mlhs_basic", "mlhs_inner", @@ -3330,9 +3411,13 @@ "fsym", "symbol", "dsym", - "@6", + "@9", + "arg_rhs", "simple_numeric", + "rel_expr", "primary", + "relop", + "@10", "arg_value", "aref_args", "args", @@ -3342,7 +3427,7 @@ "opt_paren_args", "opt_block_arg", "block_arg", - "@7", + "@11", "literal", "strings", "xstring", @@ -3352,23 +3437,31 @@ "symbols", "qsymbols", "var_ref", + "k_begin", + "k_end", "assoc_list", "brace_block", "method_call", "lambda", + "k_if", "then", "if_tail", - "do", + "k_unless", + "opt_else", + "k_while", + "k_until", + "k_case", "case_body", + "k_for", "for_var", + "k_class", "superclass", "term", + "k_module", + "k_def", "f_arglist", "singleton", - "@8", - "@9", - "@10", - "@11", + "dot_or_colon", "@12", "@13", "@14", @@ -3385,17 +3478,12 @@ "@25", "@26", "@27", - "k_begin", - "k_if", - "k_unless", - "k_while", - "k_until", - "k_case", - "k_for", - "k_class", - "k_module", - "k_def", - "k_end", + "k_do", + "k_do_block", + "k_rescue", + "k_ensure", + "k_when", + "k_elsif", "f_marg", "f_norm_arg", "f_margs", @@ -3410,6 +3498,7 @@ "f_arg", "f_block_optarg", "f_rest_arg", + "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", @@ -3418,18 +3507,20 @@ "f_larglist", "lambda_body", "@28", + "@29", "f_args", "do_block", - "@29", - "@30", + "do_body", "operation3", + "@30", "@31", "@32", "@33", "@34", "@35", - "cases", "@36", + "cases", + "@37", "exc_list", "exc_var", "numeric", @@ -3442,14 +3533,16 @@ "word", "string_content", "symbol_list", + "@38", "qword_list", "qsym_list", "string_dvar", - "@37", - "@38", - "sym", "@39", + "@40", + "sym", + "@41", "args_tail", + "@42", "f_kwarg", "opt_args_tail", "f_optarg", @@ -3463,7 +3556,7 @@ "f_block_opt", "restarg_mark", "blkarg_mark", - "@40", + "@43", "assoc" ] Racc_debug_parser = false @@ -3473,20 +3566,21 @@ # reduce 0 omitted def _reduce_1(val, _values, result) - self.lexer.lex_state = :expr_beg - + self.lexer.lex_state = EXPR_BEG + result end def _reduce_2(val, _values, result) result = new_compstmt val - + result end def _reduce_3(val, _values, result) - result = val[0] - + stmt, _ = val + result = stmt + result end @@ -3496,22 +3590,13 @@ def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] - + result end # reduce 7 omitted -def _reduce_8(val, _values, result) - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - - result -end +# reduce 8 omitted def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then @@ -3519,239 +3604,275 @@ yyerror "BEGIN in method" end self.env.extend - + result end def _reduce_10(val, _values, result) - result = new_iter s(:preexe), nil, val[3] - + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + result end def _reduce_11(val, _values, result) - result = new_body val - + result = lexer.lineno result end def _reduce_12(val, _values, result) - result = new_compstmt val - + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt + result end -# reduce 13 omitted +def _reduce_13(val, _values, result) + res = _values[-2] + yyerror "else without rescue is useless" unless res -# reduce 14 omitted - -def _reduce_15(val, _values, result) - result = self.block_append val[0], val[2] - result end -def _reduce_16(val, _values, result) - result = val[1] - debug20 2, val, result - +def _reduce_14(val, _values, result) + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + result end -def _reduce_17(val, _values, result) - lexer.lex_state = :expr_fname - result = self.lexer.lineno - +def _reduce_15(val, _values, result) + body, resc, ens = val + + result = new_body [body, resc, nil, ens] + result end -def _reduce_18(val, _values, result) - result = s(:alias, val[1], val[3]).line(val[2]) - +def _reduce_16(val, _values, result) + result = new_compstmt val + result end +# reduce 17 omitted + +# reduce 18 omitted + def _reduce_19(val, _values, result) - result = s(:valias, val[1].to_sym, val[2].to_sym) - + result = self.block_append val[0], val[2] + result end def _reduce_20(val, _values, result) - result = s(:valias, val[1].to_sym, :"$#{val[2]}") - - result -end + result = val[1] + debug20 2, val, result -def _reduce_21(val, _values, result) - yyerror "can't make alias for the number variables" - result end +# reduce 21 omitted + def _reduce_22(val, _values, result) - result = val[1] - + yyerror "BEGIN is permitted only at toplevel" + result end def _reduce_23(val, _values, result) - result = new_if val[2], val[0], nil - + lexer.lex_state = EXPR_FNAME + result end def _reduce_24(val, _values, result) - result = new_if val[2], nil, val[0] - + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line + result end def _reduce_25(val, _values, result) - result = new_while val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line + result end def _reduce_26(val, _values, result) - result = new_until val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line + result end def _reduce_27(val, _values, result) - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) - + yyerror "can't make alias for the number variables" + result end def _reduce_28(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 3 - yyerror "END in method; use at_exit" - end - result = new_iter s(:postexe), 0, val[2] - + result = val[1] + result end -# reduce 29 omitted +def _reduce_29(val, _values, result) + t, _, c = val + result = new_if c, t, nil + + result +end def _reduce_30(val, _values, result) - result = new_masgn val[0], val[2], :wrap - + f, _, c = val + result = new_if c, nil, f + result end def _reduce_31(val, _values, result) - result = new_op_asgn val - + e, _, c = val + result = new_while e, c, true + result end def _reduce_32(val, _values, result) - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - + e, _, c = val + result = new_until e, c, true + result end def _reduce_33(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn - end - result.line = val[0].line - + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody + result end def _reduce_34(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn + (_, line), _, stmt, _ = val + + if (self.in_def || self.in_single > 0) then + debug20 3 + yyerror "END in method; use at_exit" end - result.line = val[0].line - - result -end -def _reduce_35(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result - + result = new_iter s(:postexe).line(line), 0, stmt + result end +# reduce 35 omitted + def _reduce_36(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result - + result = new_masgn val[0], val[2], :wrap + result end def _reduce_37(val, _values, result) - self.backref_assign_error val[0] - + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + result end def _reduce_38(val, _values, result) - result = new_assign val[0], s(:svalue, val[2]) - + result = new_masgn val[0], val[2] + result end -def _reduce_39(val, _values, result) - result = new_masgn val[0], val[2] - +# reduce 39 omitted + +def _reduce_40(val, _values, result) + result = new_assign val[0], val[2] + result end -# reduce 40 omitted - def _reduce_41(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn val + result end def _reduce_42(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn1 val + result end -# reduce 43 omitted +def _reduce_43(val, _values, result) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + + result +end def _reduce_44(val, _values, result) - result = logical_op :and, val[0], val[2] - + result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + result end def _reduce_45(val, _values, result) - result = logical_op :or, val[0], val[2] - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_46(val, _values, result) - result = s(:call, val[2], :"!") - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_47(val, _values, result) - result = s(:call, val[1], :"!") - + self.backref_assign_error val[0] + result end -# reduce 48 omitted +def _reduce_48(val, _values, result) + expr, = val + result = value_expr expr + + result +end def _reduce_49(val, _values, result) - result = value_expr(val[0]) - + expr, (_, line), resbody = val + + expr = value_expr expr + ary = s(:array).line line + result = new_rescue(expr, new_resbody(ary, resbody)) + result end @@ -3759,67 +3880,132 @@ # reduce 51 omitted -# reduce 52 omitted +def _reduce_52(val, _values, result) + lhs, _, rhs = val + result = logical_op :and, lhs, rhs -def _reduce_53(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - result end -def _reduce_54(val, _values, result) - self.env.extend(:dynamic) - result = self.lexer.lineno - +def _reduce_53(val, _values, result) + lhs, _, rhs = val + result = logical_op :or, lhs, rhs + result end -def _reduce_55(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_54(val, _values, result) + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op + result end -def _reduce_56(val, _values, result) - result = new_iter nil, val[2], val[4] - result.line = val[1] +def _reduce_55(val, _values, result) + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y - self.env.unextend - result end +# reduce 56 omitted + def _reduce_57(val, _values, result) - result = new_call nil, val[0].to_sym - + result = value_expr(val[0]) + result end def _reduce_58(val, _values, result) - result = val[0].concat val[1].sexp_body # REFACTOR pattern - + lexer.cond.push true + result end def _reduce_59(val, _values, result) - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] + lexer.cond.pop + + result +end + +def _reduce_60(val, _values, result) + _, expr, _, _ = val + result = expr + + result +end + +# reduce 61 omitted + +# reduce 62 omitted + +# reduce 63 omitted + +def _reduce_64(val, _values, result) + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line + + result +end + +def _reduce_65(val, _values, result) + # self.env.extend(:dynamic) + result = self.lexer.lineno + + result +end + +def _reduce_66(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + # self.env.unextend + + result +end + +def _reduce_67(val, _values, result) + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno + + result +end + +def _reduce_68(val, _values, result) + call, args = val + result = call.concat args.sexp_body + + result +end - result, operation = val[2], result +def _reduce_69(val, _values, result) + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result result.insert 1, operation end - + result end -def _reduce_60(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3], val[1] - +def _reduce_70(val, _values, result) + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop + result end -def _reduce_61(val, _values, result) +def _reduce_71(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] @@ -3827,17 +4013,17 @@ block.insert 1, call result = block - + result end -def _reduce_62(val, _values, result) +def _reduce_72(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_63(val, _values, result) +def _reduce_73(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args @@ -3845,384 +4031,417 @@ block.insert 1, call result = block - + result end -def _reduce_64(val, _values, result) +def _reduce_74(val, _values, result) result = new_super val[1] - + result end -def _reduce_65(val, _values, result) - result = new_yield val[1] - +def _reduce_75(val, _values, result) + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield + result end -def _reduce_66(val, _values, result) +def _reduce_76(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) - + result end -def _reduce_67(val, _values, result) - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) - +def _reduce_77(val, _values, result) + (_, line), args = val + result = s(:break, ret_args(args)).line line + result end -def _reduce_68(val, _values, result) +def _reduce_78(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) - + result end -# reduce 69 omitted +# reduce 79 omitted -def _reduce_70(val, _values, result) +def _reduce_80(val, _values, result) result = val[1] - + result end -# reduce 71 omitted +# reduce 81 omitted + +def _reduce_82(val, _values, result) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l -def _reduce_72(val, _values, result) - result = s(:masgn, s(:array, val[1])) - result end -def _reduce_73(val, _values, result) - result = s(:masgn, val[0]) - +def _reduce_83(val, _values, result) + head, = val + result = s(:masgn, head).line head.line + result end -def _reduce_74(val, _values, result) - result = s(:masgn, val[0] << val[1].compact) - +def _reduce_84(val, _values, result) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line + result end -def _reduce_75(val, _values, result) - result = s(:masgn, val[0] << s(:splat, val[2])) - +def _reduce_85(val, _values, result) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line + result end -def _reduce_76(val, _values, result) +def _reduce_86(val, _values, result) ary1, _, splat, _, ary2 = val - result = list_append ary1, s(:splat, splat) + result = list_append ary1, s(:splat, splat).line(splat.line) result.concat ary2.sexp_body - result = s(:masgn, result) - + result = s(:masgn, result).line result.line + result end -def _reduce_77(val, _values, result) - result = s(:masgn, val[0] << s(:splat)) - +def _reduce_87(val, _values, result) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l + result end -def _reduce_78(val, _values, result) - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - +def _reduce_88(val, _values, result) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end -def _reduce_79(val, _values, result) - result = s(:masgn, s(:array, s(:splat, val[1]))) - +def _reduce_89(val, _values, result) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l + result end -def _reduce_80(val, _values, result) - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - +def _reduce_90(val, _values, result) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end -def _reduce_81(val, _values, result) - result = s(:masgn, s(:array, s(:splat))) - +def _reduce_91(val, _values, result) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l + result end -def _reduce_82(val, _values, result) - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) - +def _reduce_92(val, _values, result) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l + result end -# reduce 83 omitted +# reduce 93 omitted -def _reduce_84(val, _values, result) +def _reduce_94(val, _values, result) result = val[1] - + result end -def _reduce_85(val, _values, result) - result = s(:array, val[0]) - +def _reduce_95(val, _values, result) + lhs, _ = val + result = s(:array, lhs).line lhs.line + result end -def _reduce_86(val, _values, result) +def _reduce_96(val, _values, result) result = val[0] << val[1].compact - + result end -def _reduce_87(val, _values, result) - result = s(:array, val[0]) - +def _reduce_97(val, _values, result) + item, = val + result = s(:array, item).line item.line + result end -def _reduce_88(val, _values, result) +def _reduce_98(val, _values, result) result = list_append val[0], val[2] - + result end -def _reduce_89(val, _values, result) +def _reduce_99(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_90(val, _values, result) +def _reduce_100(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_91(val, _values, result) +def _reduce_101(val, _values, result) result = self.aryset val[0], val[2] - + result end -def _reduce_92(val, _values, result) +def _reduce_102(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end -def _reduce_93(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - +def _reduce_103(val, _values, result) + recv, _, id = val + result = new_attrasgn recv, id + result end -def _reduce_94(val, _values, result) +def _reduce_104(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end -def _reduce_95(val, _values, result) +def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) - + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l + result end -def _reduce_96(val, _values, result) +def _reduce_106(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end - result = s(:const, nil, s(:colon3, val[1].to_sym)) - + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l + result end -def _reduce_97(val, _values, result) +def _reduce_107(val, _values, result) self.backref_assign_error val[0] - + result end -def _reduce_98(val, _values, result) +def _reduce_108(val, _values, result) + line = lexer.lineno result = self.assignable val[0] - + result.line = line + result end -def _reduce_99(val, _values, result) +def _reduce_109(val, _values, result) + line = lexer.lineno result = self.assignable val[0] + result.line = line debug20 9, val, result - + result end -def _reduce_100(val, _values, result) - result = self.aryset val[0], val[2] - +def _reduce_110(val, _values, result) + lhs, _, args, _ = val + result = self.aryset lhs, args + result end -def _reduce_101(val, _values, result) - result = new_attrasgn val[0], val[2], val[1] - +def _reduce_111(val, _values, result) + lhs, op, id = val + result = new_attrasgn lhs, id, op + result end -def _reduce_102(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - +def _reduce_112(val, _values, result) + lhs, _, id = val + result = new_attrasgn lhs, id + result end -def _reduce_103(val, _values, result) +def _reduce_113(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end -def _reduce_104(val, _values, result) +def _reduce_114(val, _values, result) + expr, _, id = val + if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) - + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l + result end -def _reduce_105(val, _values, result) +def _reduce_115(val, _values, result) + _, id = val + if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) - + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l + result end -def _reduce_106(val, _values, result) +def _reduce_116(val, _values, result) self.backref_assign_error val[0] - + result end -def _reduce_107(val, _values, result) +def _reduce_117(val, _values, result) yyerror "class/module name must be CONSTANT" - + result end -# reduce 108 omitted +# reduce 118 omitted + +def _reduce_119(val, _values, result) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno -def _reduce_109(val, _values, result) - result = s(:colon3, val[1].to_sym) - result end -def _reduce_110(val, _values, result) +def _reduce_120(val, _values, result) result = val[0].to_sym - + result end -def _reduce_111(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - +def _reduce_121(val, _values, result) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line + result end -# reduce 112 omitted +# reduce 122 omitted -# reduce 113 omitted +# reduce 123 omitted -# reduce 114 omitted +# reduce 124 omitted -def _reduce_115(val, _values, result) - lexer.lex_state = :expr_end +def _reduce_125(val, _values, result) + lexer.lex_state = EXPR_END result = val[0] - + result end -def _reduce_116(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - +def _reduce_126(val, _values, result) + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym + result end -# reduce 117 omitted +# reduce 127 omitted + +# reduce 128 omitted -# reduce 118 omitted +def _reduce_129(val, _values, result) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno -def _reduce_119(val, _values, result) - result = s(:lit, val[0].to_sym) - result end -# reduce 120 omitted +# reduce 130 omitted -def _reduce_121(val, _values, result) +def _reduce_131(val, _values, result) result = new_undef val[0] - + result end -def _reduce_122(val, _values, result) - lexer.lex_state = :expr_fname - +def _reduce_132(val, _values, result) + lexer.lex_state = EXPR_FNAME + result end -def _reduce_123(val, _values, result) +def _reduce_133(val, _values, result) result = new_undef val[0], val[3] - + result end -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - # reduce 134 omitted # reduce 135 omitted @@ -4345,1280 +4564,1378 @@ # reduce 194 omitted -def _reduce_195(val, _values, result) +# reduce 195 omitted + +# reduce 196 omitted + +# reduce 197 omitted + +# reduce 198 omitted + +# reduce 199 omitted + +# reduce 200 omitted + +# reduce 201 omitted + +# reduce 202 omitted + +# reduce 203 omitted + +# reduce 204 omitted + +# reduce 205 omitted + +def _reduce_206(val, _values, result) result = new_assign val[0], val[2] - - result -end -def _reduce_196(val, _values, result) - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - result end -def _reduce_197(val, _values, result) +def _reduce_207(val, _values, result) result = new_op_asgn val - + result end -def _reduce_198(val, _values, result) - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) - +def _reduce_208(val, _values, result) + result = new_op_asgn1 val + result end -def _reduce_199(val, _values, result) - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - +def _reduce_209(val, _values, result) + result = new_op_asgn2 val + result end -def _reduce_200(val, _values, result) +def _reduce_210(val, _values, result) result = new_op_asgn2 val - + result end -def _reduce_201(val, _values, result) - result = new_op_asgn2 val - +def _reduce_211(val, _values, result) + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line + result end -def _reduce_202(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - +def _reduce_212(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_203(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_213(val, _values, result) + result = self.lexer.lineno + result end -def _reduce_204(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_214(val, _values, result) + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_205(val, _values, result) - self.backref_assign_error val[0] - +def _reduce_215(val, _values, result) + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn + result end -def _reduce_206(val, _values, result) +def _reduce_216(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end - + result end -def _reduce_207(val, _values, result) +def _reduce_217(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end - + result end -def _reduce_208(val, _values, result) +def _reduce_218(val, _values, result) result = new_call val[0], :+, argl(val[2]) - + result end -def _reduce_209(val, _values, result) +def _reduce_219(val, _values, result) result = new_call val[0], :-, argl(val[2]) - + result end -def _reduce_210(val, _values, result) +def _reduce_220(val, _values, result) result = new_call val[0], :*, argl(val[2]) - + result end -def _reduce_211(val, _values, result) +def _reduce_221(val, _values, result) result = new_call val[0], :"/", argl(val[2]) - + result end -def _reduce_212(val, _values, result) +def _reduce_222(val, _values, result) result = new_call val[0], :"%", argl(val[2]) - + result end -def _reduce_213(val, _values, result) +def _reduce_223(val, _values, result) result = new_call val[0], :**, argl(val[2]) - + result end -def _reduce_214(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - +def _reduce_224(val, _values, result) + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + + result end -def _reduce_215(val, _values, result) +def _reduce_225(val, _values, result) result = new_call val[1], :"+@" - + result end -def _reduce_216(val, _values, result) +def _reduce_226(val, _values, result) result = new_call val[1], :"-@" - + result end -def _reduce_217(val, _values, result) +def _reduce_227(val, _values, result) result = new_call val[0], :"|", argl(val[2]) - + result end -def _reduce_218(val, _values, result) +def _reduce_228(val, _values, result) result = new_call val[0], :"^", argl(val[2]) - - result -end -def _reduce_219(val, _values, result) - result = new_call val[0], :"&", argl(val[2]) - result end -def _reduce_220(val, _values, result) - result = new_call val[0], :"<=>", argl(val[2]) - - result -end +def _reduce_229(val, _values, result) + result = new_call val[0], :"&", argl(val[2]) -def _reduce_221(val, _values, result) - result = new_call val[0], :">", argl(val[2]) - result end -def _reduce_222(val, _values, result) - result = new_call val[0], :">=", argl(val[2]) - - result -end +def _reduce_230(val, _values, result) + result = new_call val[0], :"<=>", argl(val[2]) -def _reduce_223(val, _values, result) - result = new_call val[0], :"<", argl(val[2]) - result end -def _reduce_224(val, _values, result) - result = new_call val[0], :"<=", argl(val[2]) - - result -end +# reduce 231 omitted -def _reduce_225(val, _values, result) +def _reduce_232(val, _values, result) result = new_call val[0], :"==", argl(val[2]) - + result end -def _reduce_226(val, _values, result) +def _reduce_233(val, _values, result) result = new_call val[0], :"===", argl(val[2]) - + result end -def _reduce_227(val, _values, result) +def _reduce_234(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) - + result end -def _reduce_228(val, _values, result) - result = new_match val[0], val[2] - +def _reduce_235(val, _values, result) + lhs, _, rhs = val + result = new_match lhs, rhs + result end -def _reduce_229(val, _values, result) - result = s(:not, new_match(val[0], val[2])) - +def _reduce_236(val, _values, result) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line + result end -def _reduce_230(val, _values, result) - result = new_call val[1], :"!" - +def _reduce_237(val, _values, result) + _, arg = val + result = new_call arg, :"!" + result.line arg.line + result end -def _reduce_231(val, _values, result) +def _reduce_238(val, _values, result) result = new_call value_expr(val[1]), :"~" - + result end -def _reduce_232(val, _values, result) +def _reduce_239(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) - + result end -def _reduce_233(val, _values, result) +def _reduce_240(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) - + result end -def _reduce_234(val, _values, result) +def _reduce_241(val, _values, result) result = logical_op :and, val[0], val[2] - + result end -def _reduce_235(val, _values, result) +def _reduce_242(val, _values, result) result = logical_op :or, val[0], val[2] - + result end -def _reduce_236(val, _values, result) - result = s(:defined, val[2]) - +def _reduce_243(val, _values, result) + (_, line), _, arg = val + result = s(:defined, arg).line line + result end -def _reduce_237(val, _values, result) - result = s(:if, val[0], val[2], val[5]) - +def _reduce_244(val, _values, result) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line + result end -# reduce 238 omitted +# reduce 245 omitted -def _reduce_239(val, _values, result) +# reduce 246 omitted + +# reduce 247 omitted + +# reduce 248 omitted + +# reduce 249 omitted + +def _reduce_250(val, _values, result) + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_251(val, _values, result) + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_252(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 240 omitted +# reduce 253 omitted -def _reduce_241(val, _values, result) +def _reduce_254(val, _values, result) result = args [val[0]] - + result end -def _reduce_242(val, _values, result) +def _reduce_255(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_243(val, _values, result) +def _reduce_256(val, _values, result) result = args [array_to_hash(val[0])] - - result -end -def _reduce_244(val, _values, result) - result = val[1] - result end -# reduce 245 omitted +# reduce 257 omitted -# reduce 246 omitted +def _reduce_258(val, _values, result) + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) -def _reduce_247(val, _values, result) - result = val[0] - result end -def _reduce_248(val, _values, result) - result = val[0] - +def _reduce_259(val, _values, result) + _, args, _ = val + result = args + result end -def _reduce_249(val, _values, result) +# reduce 260 omitted + +# reduce 261 omitted + +# reduce 262 omitted + +# reduce 263 omitted + +def _reduce_264(val, _values, result) result = args val - + result end -def _reduce_250(val, _values, result) +def _reduce_265(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_251(val, _values, result) +def _reduce_266(val, _values, result) result = args [array_to_hash(val[0])] - + result end -def _reduce_252(val, _values, result) +def _reduce_267(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val - + result end -def _reduce_253(val, _values, result) +def _reduce_268(val, _values, result) result = call_args val - result = self.arg_blk_pass val[0], val[1] - + result end -def _reduce_254(val, _values, result) - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] - +def _reduce_269(val, _values, result) + result = call_args [array_to_hash(val[0]), val[1]] + result end -def _reduce_255(val, _values, result) - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] - +def _reduce_270(val, _values, result) + result = call_args [val[0], array_to_hash(val[2]), val[3]] + result end -def _reduce_256(val, _values, result) +def _reduce_271(val, _values, result) result = call_args val - + result end -def _reduce_257(val, _values, result) - result = lexer.cmdarg.stack.dup # TODO: smell? +def _reduce_272(val, _values, result) + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true - + lexer.cmdarg.push false if lookahead + result end -def _reduce_258(val, _values, result) - lexer.cmdarg.stack.replace val[0] - result = val[1] - +def _reduce_273(val, _values, result) + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args + result end -def _reduce_259(val, _values, result) - result = s(:block_pass, val[1]) - +def _reduce_274(val, _values, result) + _, arg = val + result = s(:block_pass, arg).line arg.line + result end -def _reduce_260(val, _values, result) +def _reduce_275(val, _values, result) result = val[1] - + result end -# reduce 261 omitted +# reduce 276 omitted + +def _reduce_277(val, _values, result) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno -def _reduce_262(val, _values, result) - result = s(:array, val[0]) - result end -def _reduce_263(val, _values, result) - result = s(:array, s(:splat, val[1])) - +def _reduce_278(val, _values, result) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line + result end -def _reduce_264(val, _values, result) - result = self.list_append val[0], val[2] - +def _reduce_279(val, _values, result) + args, _, id = val + result = self.list_append args, id + result end -def _reduce_265(val, _values, result) - result = self.list_append val[0], s(:splat, val[3]) - +def _reduce_280(val, _values, result) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) + result end -def _reduce_266(val, _values, result) +def _reduce_281(val, _values, result) result = new_masgn_arg val[0] - + result end -def _reduce_267(val, _values, result) +def _reduce_282(val, _values, result) result = new_masgn_arg val[0], :wrap - + result end -def _reduce_268(val, _values, result) +def _reduce_283(val, _values, result) result = val[0] << val[2] - + result end -def _reduce_269(val, _values, result) - result = self.arg_concat val[0], val[3] - +def _reduce_284(val, _values, result) + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat + result end -def _reduce_270(val, _values, result) - result = s(:splat, val[1]) - +def _reduce_285(val, _values, result) + _, arg = val + result = s(:splat, arg).line arg.line + result end -# reduce 271 omitted +# reduce 286 omitted -# reduce 272 omitted +# reduce 287 omitted -# reduce 273 omitted +# reduce 288 omitted -# reduce 274 omitted +# reduce 289 omitted -# reduce 275 omitted +# reduce 290 omitted -# reduce 276 omitted +# reduce 291 omitted -# reduce 277 omitted +# reduce 292 omitted -# reduce 278 omitted +# reduce 293 omitted -# reduce 279 omitted +# reduce 294 omitted -# reduce 280 omitted +# reduce 295 omitted + +def _reduce_296(val, _values, result) + msg, = val + result = new_call nil, msg.to_sym -def _reduce_281(val, _values, result) - result = new_call nil, val[0].to_sym - result end -def _reduce_282(val, _values, result) +def _reduce_297(val, _values, result) + lexer.cmdarg.push false result = self.lexer.lineno - + result end -def _reduce_283(val, _values, result) - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end +def _reduce_298(val, _values, result) + lexer.cmdarg.pop + result = new_begin val - result.line = val[1] - result end -def _reduce_284(val, _values, result) - debug20 13, val, result - +def _reduce_299(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno + result end -def _reduce_285(val, _values, result) - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these - +def _reduce_300(val, _values, result) + _, line, _ = val + result = s(:begin).line line + result end -def _reduce_286(val, _values, result) - lexer.lex_state = :expr_endarg - +def _reduce_301(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result end -def _reduce_287(val, _values, result) - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] - +def _reduce_302(val, _values, result) + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt + result end -def _reduce_288(val, _values, result) - result = val[1] || s(:nil) +def _reduce_303(val, _values, result) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true - + + result +end + +def _reduce_304(val, _values, result) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line + result end -def _reduce_289(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - +def _reduce_305(val, _values, result) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno + result end -def _reduce_290(val, _values, result) - result = s(:colon3, val[1].to_sym) - +def _reduce_306(val, _values, result) + result = lexer.lineno result end -def _reduce_291(val, _values, result) - result = val[1] || s(:array) +def _reduce_307(val, _values, result) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args - + result.line line + result end -def _reduce_292(val, _values, result) +def _reduce_308(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_293(val, _values, result) +def _reduce_309(val, _values, result) result = new_hash val - + result end -def _reduce_294(val, _values, result) - result = s(:return) - +def _reduce_310(val, _values, result) + (_, line), = val + result = s(:return).line line + result end -def _reduce_295(val, _values, result) +def _reduce_311(val, _values, result) result = new_yield val[2] - + result end -def _reduce_296(val, _values, result) +def _reduce_312(val, _values, result) result = new_yield - + result end -def _reduce_297(val, _values, result) +def _reduce_313(val, _values, result) result = new_yield - + result end -def _reduce_298(val, _values, result) - result = s(:defined, val[3]) - +def _reduce_314(val, _values, result) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line + result end -def _reduce_299(val, _values, result) - result = s(:call, val[2], :"!") - +def _reduce_315(val, _values, result) + _, _, lhs, _ = val + result = new_call lhs, :"!" + result end -def _reduce_300(val, _values, result) +def _reduce_316(val, _values, result) debug20 14, val, result - + result end -def _reduce_301(val, _values, result) - oper, iter = val[0], val[1] - call = oper # FIX +def _reduce_317(val, _values, result) + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line - + # FIX: probably not: call.line = iter.line + result end -# reduce 302 omitted +# reduce 318 omitted -def _reduce_303(val, _values, result) +def _reduce_319(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter - + result end -def _reduce_304(val, _values, result) +def _reduce_320(val, _values, result) result = val[1] # TODO: fix lineno - - result -end -def _reduce_305(val, _values, result) - result = new_if val[1], val[3], val[4] - result end -def _reduce_306(val, _values, result) - result = new_if val[1], val[4], val[3] - - result -end +def _reduce_321(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, t, f -def _reduce_307(val, _values, result) - lexer.cond.push true - result end -def _reduce_308(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_322(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, f, t -def _reduce_309(val, _values, result) - result = new_while val[5], val[2], true - result end -def _reduce_310(val, _values, result) - lexer.cond.push true - - result -end +def _reduce_323(val, _values, result) + _, cond, body, _ = val + result = new_while body, cond, true -def _reduce_311(val, _values, result) - lexer.cond.pop - result end -def _reduce_312(val, _values, result) - result = new_until val[5], val[2], true - +def _reduce_324(val, _values, result) + _, cond, body, _ = val + result = new_until body, cond, true + result end -def _reduce_313(val, _values, result) +def _reduce_325(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line - + result end -def _reduce_314(val, _values, result) +def _reduce_326(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line - - result -end -def _reduce_315(val, _values, result) - lexer.cond.push true - result end -def _reduce_316(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_327(val, _values, result) + _, var, _, iter, body, _ = val + result = new_for iter, var, body -def _reduce_317(val, _values, result) - result = new_for val[4], val[1], val[7] - result end -def _reduce_318(val, _values, result) +def _reduce_328(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_319(val, _values, result) +def _reduce_329(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend - + result end -def _reduce_320(val, _values, result) +def _reduce_330(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_321(val, _values, result) +def _reduce_331(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_322(val, _values, result) +def _reduce_332(val, _values, result) result = self.in_def self.in_def = false - + result end -def _reduce_323(val, _values, result) +def _reduce_333(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend - + result end -def _reduce_324(val, _values, result) +def _reduce_334(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_325(val, _values, result) +def _reduce_335(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_326(val, _values, result) +def _reduce_336(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend - + result end -def _reduce_327(val, _values, result) +def _reduce_337(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_328(val, _values, result) - result = [self.in_def, self.lexer.cmdarg.stack.dup] +def _reduce_338(val, _values, result) + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments + result end -def _reduce_329(val, _values, result) - in_def, cmdarg = val[2] +def _reduce_339(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_340(val, _values, result) + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_330(val, _values, result) - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname - +def _reduce_341(val, _values, result) + lexer.lex_state = EXPR_FNAME + result end -def _reduce_331(val, _values, result) - self.in_single += 1 +def _reduce_342(val, _values, result) + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments + result end -def _reduce_332(val, _values, result) - line, cmdarg = val[5] - result = new_defs val - result[3].line line +def _reduce_343(val, _values, result) + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_333(val, _values, result) - result = s(:break) - +def _reduce_344(val, _values, result) + (_, line), = val + result = s(:break).line line + result end -def _reduce_334(val, _values, result) - result = s(:next) - +def _reduce_345(val, _values, result) + (_, line), = val + result = s(:next).line line + result end -def _reduce_335(val, _values, result) - result = s(:redo) - +def _reduce_346(val, _values, result) + (_, line), = val + result = s(:redo).line line + result end -def _reduce_336(val, _values, result) - result = s(:retry) - +def _reduce_347(val, _values, result) + (_, line), = val + result = s(:retry).line line + result end -def _reduce_337(val, _values, result) +def _reduce_348(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 338 omitted +# reduce 349 omitted + +# reduce 350 omitted + +# reduce 351 omitted + +# reduce 352 omitted + +# reduce 353 omitted -# reduce 339 omitted +# reduce 354 omitted -# reduce 340 omitted +# reduce 355 omitted -# reduce 341 omitted +# reduce 356 omitted -# reduce 342 omitted +# reduce 357 omitted -# reduce 343 omitted +# reduce 358 omitted -# reduce 344 omitted +# reduce 359 omitted -# reduce 345 omitted +# reduce 360 omitted -# reduce 346 omitted +# reduce 361 omitted -# reduce 347 omitted +# reduce 362 omitted -# reduce 348 omitted +# reduce 363 omitted -# reduce 349 omitted +# reduce 364 omitted -# reduce 350 omitted +# reduce 365 omitted -# reduce 351 omitted +# reduce 366 omitted -# reduce 352 omitted +# reduce 367 omitted -# reduce 353 omitted +# reduce 368 omitted -# reduce 354 omitted +# reduce 369 omitted + +# reduce 370 omitted + +# reduce 371 omitted + +# reduce 372 omitted + +# reduce 373 omitted + +def _reduce_374(val, _values, result) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line -def _reduce_355(val, _values, result) - result = s(:if, val[1], val[3], val[4]) - result end -# reduce 356 omitted +# reduce 375 omitted -def _reduce_357(val, _values, result) +def _reduce_376(val, _values, result) result = val[1] - + result end -# reduce 358 omitted +# reduce 377 omitted -def _reduce_359(val, _values, result) +def _reduce_378(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK - + result end -# reduce 360 omitted +# reduce 379 omitted -def _reduce_361(val, _values, result) +def _reduce_380(val, _values, result) result = val[1] - + result end -def _reduce_362(val, _values, result) - result = s(:array, val[0]) - +def _reduce_381(val, _values, result) + sym, = val + + result = s(:array, sym).line lexer.lineno + result end -def _reduce_363(val, _values, result) +def _reduce_382(val, _values, result) result = list_append val[0], val[2] - + result end -def _reduce_364(val, _values, result) +def _reduce_383(val, _values, result) args, = val result = block_var args - + result end -def _reduce_365(val, _values, result) +def _reduce_384(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym - + result end -def _reduce_366(val, _values, result) +def _reduce_385(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 - + result end -def _reduce_367(val, _values, result) +def _reduce_386(val, _values, result) args, _, _ = val result = block_var args, :* - + result end -def _reduce_368(val, _values, result) +def _reduce_387(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 - + result end -def _reduce_369(val, _values, result) +def _reduce_388(val, _values, result) _, splat = val result = block_var :"*#{splat}" - + result end -def _reduce_370(val, _values, result) +def _reduce_389(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args - + result end -def _reduce_371(val, _values, result) +def _reduce_390(val, _values, result) result = block_var :* - + result end -def _reduce_372(val, _values, result) +def _reduce_391(val, _values, result) _, _, args = val result = block_var :*, args - + result end -def _reduce_373(val, _values, result) +def _reduce_392(val, _values, result) result = call_args val - + result end -def _reduce_374(val, _values, result) +def _reduce_393(val, _values, result) result = call_args val - + result end -def _reduce_375(val, _values, result) +def _reduce_394(val, _values, result) result = call_args val - + result end -def _reduce_376(val, _values, result) - result = call_args val - +def _reduce_395(val, _values, result) + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line + result end -def _reduce_377(val, _values, result) +def _reduce_396(val, _values, result) result = args val - + result end -# reduce 378 omitted +# reduce 397 omitted -def _reduce_379(val, _values, result) +def _reduce_398(val, _values, result) result = args val - + result end -def _reduce_380(val, _values, result) +def _reduce_399(val, _values, result) result = args val - + result end -def _reduce_381(val, _values, result) +def _reduce_400(val, _values, result) result = args val - + result end -def _reduce_382(val, _values, result) +def _reduce_401(val, _values, result) result = args val - + result end -def _reduce_383(val, _values, result) +def _reduce_402(val, _values, result) result = args val - + result end -def _reduce_384(val, _values, result) - result = args val - +def _reduce_403(val, _values, result) + result = args(val) << nil + result end -def _reduce_385(val, _values, result) +def _reduce_404(val, _values, result) result = args val - + result end -def _reduce_386(val, _values, result) +def _reduce_405(val, _values, result) result = args val - + result end -def _reduce_387(val, _values, result) +def _reduce_406(val, _values, result) result = args val - + result end -def _reduce_388(val, _values, result) +def _reduce_407(val, _values, result) result = args val - + result end -def _reduce_389(val, _values, result) +def _reduce_408(val, _values, result) result = args val - + result end -def _reduce_390(val, _values, result) +def _reduce_409(val, _values, result) result = args val - + result end -def _reduce_391(val, _values, result) +def _reduce_410(val, _values, result) result = args val - + result end -def _reduce_392(val, _values, result) +def _reduce_411(val, _values, result) result = args val - + result end -def _reduce_393(val, _values, result) +def _reduce_412(val, _values, result) result = args val - + result end -def _reduce_394(val, _values, result) - result = 0 +def _reduce_413(val, _values, result) + result = 0 + result +end + +def _reduce_414(val, _values, result) + self.lexer.command_start = true + result end -# reduce 395 omitted - -def _reduce_396(val, _values, result) +def _reduce_415(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -def _reduce_397(val, _values, result) - self.lexer.command_start = true - result = s(:args) - +def _reduce_416(val, _values, result) + result = s(:args).line lexer.lineno + result end -def _reduce_398(val, _values, result) +def _reduce_417(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -# reduce 399 omitted +# reduce 418 omitted -def _reduce_400(val, _values, result) +def _reduce_419(val, _values, result) result = args val - + result end -def _reduce_401(val, _values, result) +def _reduce_420(val, _values, result) result = args val - + result end -def _reduce_402(val, _values, result) +def _reduce_421(val, _values, result) result = args val - + result end -def _reduce_403(val, _values, result) - result = s(:shadow, val[0].to_sym) - +def _reduce_422(val, _values, result) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line + result end -# reduce 404 omitted +# reduce 423 omitted -def _reduce_405(val, _values, result) +def _reduce_424(val, _values, result) self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest - + result end -def _reduce_406(val, _values, result) - lpar, args, body = val +def _reduce_425(val, _values, result) + lexer.cmdarg.push false + + result +end + +def _reduce_426(val, _values, result) + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend - + result.line = line + self.env.unextend # TODO: dynapush & dynapop + result end -def _reduce_407(val, _values, result) +def _reduce_427(val, _values, result) result = args val - + result end -def _reduce_408(val, _values, result) +def _reduce_428(val, _values, result) result = val[0] result = 0 if result == s(:args) - - result -end -def _reduce_409(val, _values, result) - result = val[1] - result end -def _reduce_410(val, _values, result) +def _reduce_429(val, _values, result) result = val[1] - - result -end -def _reduce_411(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - result end -def _reduce_412(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_430(val, _values, result) + result = val[1] + result end -def _reduce_413(val, _values, result) - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] +def _reduce_431(val, _values, result) + (_, line), iter, _ = val + result = iter.line line - self.env.unextend - result end -def _reduce_414(val, _values, result) +def _reduce_432(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); @@ -5628,465 +5945,523 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] - + cmd, blk = val + + result = blk + result.insert 1, cmd + result end -def _reduce_415(val, _values, result) +def _reduce_433(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_416(val, _values, result) +def _reduce_434(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_417(val, _values, result) +def _reduce_435(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_418(val, _values, result) +def _reduce_436(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_419(val, _values, result) - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body - +def _reduce_437(val, _values, result) + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno + result end -def _reduce_420(val, _values, result) +def _reduce_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] - + result end -def _reduce_421(val, _values, result) +def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_422(val, _values, result) +def _reduce_440(val, _values, result) result = new_call val[0], val[2].to_sym - + result end -def _reduce_423(val, _values, result) +def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2], val[1] - + result end -def _reduce_424(val, _values, result) +def _reduce_442(val, _values, result) result = new_call val[0], :call, val[2] - + result end -def _reduce_425(val, _values, result) +def _reduce_443(val, _values, result) result = new_super val[1] - + result end -def _reduce_426(val, _values, result) - result = s(:zsuper) - +def _reduce_444(val, _values, result) + result = s(:zsuper).line lexer.lineno + result end -def _reduce_427(val, _values, result) +def _reduce_445(val, _values, result) result = new_aref val - + result end -def _reduce_428(val, _values, result) +def _reduce_446(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - - result -end -def _reduce_429(val, _values, result) - result = nil # self.env.dynamic.keys - result end -def _reduce_430(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_447(val, _values, result) + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend - + result end -def _reduce_431(val, _values, result) +def _reduce_448(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - + result end -def _reduce_432(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_449(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + result end -def _reduce_433(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_450(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end - result = new_iter nil, args, body - result.line = line +def _reduce_451(val, _values, result) + result = lexer.cmdarg.store(false) + result +end +def _reduce_452(val, _values, result) + line, cmdarg, param, cmpstmt = val + + result = new_brace_body param, cmpstmt, line self.env.unextend - + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + result end -def _reduce_434(val, _values, result) +def _reduce_453(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end + +def _reduce_454(val, _values, result) + lexer.cmdarg.push false + result +end + +def _reduce_455(val, _values, result) + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop + self.env.unextend + + result +end + +def _reduce_456(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_435(val, _values, result) +def _reduce_457(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] - + result end -# reduce 436 omitted +# reduce 458 omitted -# reduce 437 omitted +# reduce 459 omitted -def _reduce_438(val, _values, result) +def _reduce_460(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above - + result end -def _reduce_439(val, _values, result) +def _reduce_461(val, _values, result) result = nil - + result end -def _reduce_440(val, _values, result) - result = s(:array, val[0]) - +def _reduce_462(val, _values, result) + arg, = val + result = s(:array, arg).line arg.line + result end -# reduce 441 omitted +# reduce 463 omitted -# reduce 442 omitted +# reduce 464 omitted -def _reduce_443(val, _values, result) +def _reduce_465(val, _values, result) result = val[1] - + result end -# reduce 444 omitted +# reduce 466 omitted -def _reduce_445(val, _values, result) - _, body = val +def _reduce_467(val, _values, result) + (_, line), body = val + + result = body || s(:nil).line(line) - result = body || s(:nil) - result end -# reduce 446 omitted +# reduce 468 omitted -def _reduce_447(val, _values, result) +def _reduce_469(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -def _reduce_448(val, _values, result) +def _reduce_470(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -# reduce 449 omitted +# reduce 471 omitted + +def _reduce_472(val, _values, result) + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str -def _reduce_450(val, _values, result) - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] - result end -def _reduce_451(val, _values, result) +def _reduce_473(val, _values, result) debug20 23, val, result - + result end -# reduce 452 omitted +# reduce 474 omitted -def _reduce_453(val, _values, result) +def _reduce_475(val, _values, result) result = self.literal_concat val[0], val[1] - + result end -def _reduce_454(val, _values, result) - result = val[1] - +def _reduce_476(val, _values, result) + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str + result end -def _reduce_455(val, _values, result) +def _reduce_477(val, _values, result) result = new_string val - + result end -def _reduce_456(val, _values, result) - result = new_xstring val[1] - +def _reduce_478(val, _values, result) + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? + result end -def _reduce_457(val, _values, result) +def _reduce_479(val, _values, result) result = new_regexp val - + result end -def _reduce_458(val, _values, result) - result = s(:array) - +def _reduce_480(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_459(val, _values, result) +def _reduce_481(val, _values, result) result = val[1] - + result end -def _reduce_460(val, _values, result) +def _reduce_482(val, _values, result) result = new_word_list - + result end -def _reduce_461(val, _values, result) +def _reduce_483(val, _values, result) result = val[0].dup << new_word_list_entry(val) - + result end -# reduce 462 omitted +# reduce 484 omitted -def _reduce_463(val, _values, result) +def _reduce_485(val, _values, result) result = self.literal_concat val[0], val[1] - + + result +end + +def _reduce_486(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_464(val, _values, result) - result = s(:array) - +def _reduce_487(val, _values, result) + result = lexer.lineno result end -def _reduce_465(val, _values, result) - result = val[1] - +def _reduce_488(val, _values, result) + _, line, list, _, = val + list.line = line + result = list + result end -def _reduce_466(val, _values, result) - result = new_symbol_list - +def _reduce_489(val, _values, result) + result = new_symbol_list.line lexer.lineno + result end -def _reduce_467(val, _values, result) - result = val[0].dup << new_symbol_list_entry(val) - +def _reduce_490(val, _values, result) + list, * = val + result = list.dup << new_symbol_list_entry(val) + result end -def _reduce_468(val, _values, result) - result = s(:array) - +def _reduce_491(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_469(val, _values, result) +def _reduce_492(val, _values, result) result = val[1] - + result end -def _reduce_470(val, _values, result) - result = s(:array) - +def _reduce_493(val, _values, result) + result = s(:array).line lexer.lineno # FIX + result end -def _reduce_471(val, _values, result) +def _reduce_494(val, _values, result) result = val[1] - + result end -def _reduce_472(val, _values, result) +def _reduce_495(val, _values, result) result = new_qword_list - + result end -def _reduce_473(val, _values, result) +def _reduce_496(val, _values, result) result = val[0].dup << new_qword_list_entry(val) - + result end -def _reduce_474(val, _values, result) +def _reduce_497(val, _values, result) result = new_qsym_list - + result end -def _reduce_475(val, _values, result) +def _reduce_498(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) - + result end -def _reduce_476(val, _values, result) - result = s(:str, "") - +def _reduce_499(val, _values, result) + result = s(:str, "").line lexer.lineno + result end -def _reduce_477(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_500(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_478(val, _values, result) +def _reduce_501(val, _values, result) result = nil - + result end -def _reduce_479(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_502(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_480(val, _values, result) +def _reduce_503(val, _values, result) result = nil - + result end -def _reduce_481(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_504(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_482(val, _values, result) +def _reduce_505(val, _values, result) result = new_string val - + result end -def _reduce_483(val, _values, result) +def _reduce_506(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? - + lexer.lex_state = EXPR_BEG + result end -def _reduce_484(val, _values, result) - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) - +def _reduce_507(val, _values, result) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line + result end -def _reduce_485(val, _values, result) +def _reduce_508(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value - + lexer.lex_state = EXPR_BEG + result end -def _reduce_486(val, _values, result) - # TODO: tRCURLY -> tSTRING_END +def _reduce_509(val, _values, result) _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -6096,718 +6471,729 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end - + result end -def _reduce_487(val, _values, result) - result = s(:gvar, val[0].to_sym) +def _reduce_510(val, _values, result) + result = s(:gvar, val[0].to_sym).line lexer.lineno result end -def _reduce_488(val, _values, result) - result = s(:ivar, val[0].to_sym) +def _reduce_511(val, _values, result) + result = s(:ivar, val[0].to_sym).line lexer.lineno result end -def _reduce_489(val, _values, result) - result = s(:cvar, val[0].to_sym) +def _reduce_512(val, _values, result) + result = s(:cvar, val[0].to_sym).line lexer.lineno result end -# reduce 490 omitted +# reduce 513 omitted -def _reduce_491(val, _values, result) - lexer.lex_state = :expr_end +def _reduce_514(val, _values, result) + lexer.lex_state = EXPR_END result = val[1].to_sym - + result end -def _reduce_492(val, _values, result) +def _reduce_515(val, _values, result) result = val[0].to_sym - + result end -# reduce 493 omitted +# reduce 516 omitted -# reduce 494 omitted +# reduce 517 omitted -# reduce 495 omitted +# reduce 518 omitted -# reduce 496 omitted +# reduce 519 omitted -def _reduce_497(val, _values, result) - lexer.lex_state = :expr_end - result = val[1] +def _reduce_520(val, _values, result) + _, result, _ = val + + lexer.lex_state = EXPR_END - result ||= s(:str, "") + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end - + result end -# reduce 498 omitted +# reduce 521 omitted -def _reduce_499(val, _values, result) +def _reduce_522(val, _values, result) result = -val[1] # TODO: pt_testcase - + result end -# reduce 500 omitted +# reduce 523 omitted -# reduce 501 omitted +# reduce 524 omitted -# reduce 502 omitted +# reduce 525 omitted -# reduce 503 omitted +# reduce 526 omitted -# reduce 504 omitted +# reduce 527 omitted -# reduce 505 omitted +# reduce 528 omitted -# reduce 506 omitted +# reduce 529 omitted -# reduce 507 omitted +# reduce 530 omitted -# reduce 508 omitted +# reduce 531 omitted -def _reduce_509(val, _values, result) - result = s(:nil) +def _reduce_532(val, _values, result) + result = s(:nil).line lexer.lineno result end -def _reduce_510(val, _values, result) - result = s(:self) +def _reduce_533(val, _values, result) + result = s(:self).line lexer.lineno result end -def _reduce_511(val, _values, result) - result = s(:true) +def _reduce_534(val, _values, result) + result = s(:true).line lexer.lineno result end -def _reduce_512(val, _values, result) - result = s(:false) +def _reduce_535(val, _values, result) + result = s(:false).line lexer.lineno result end -def _reduce_513(val, _values, result) - result = s(:str, self.file) +def _reduce_536(val, _values, result) + result = s(:str, self.file).line lexer.lineno result end -def _reduce_514(val, _values, result) - result = s(:lit, lexer.lineno) +def _reduce_537(val, _values, result) + result = s(:lit, lexer.lineno).line lexer.lineno result end -def _reduce_515(val, _values, result) +def _reduce_538(val, _values, result) + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end - + result end -def _reduce_516(val, _values, result) +def _reduce_539(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_517(val, _values, result) +def _reduce_540(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_518(val, _values, result) +def _reduce_541(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_519(val, _values, result) +def _reduce_542(val, _values, result) result = self.assignable val[0] debug20 29, val, result - - result -end -def _reduce_520(val, _values, result) - result = s(:nth_ref, val[0]) result end -def _reduce_521(val, _values, result) - result = s(:back_ref, val[0]) +def _reduce_543(val, _values, result) + result = s(:nth_ref, val[0]).line lexer.lineno result end -def _reduce_522(val, _values, result) - result = nil - +def _reduce_544(val, _values, result) + result = s(:back_ref, val[0]).line lexer.lineno result end -def _reduce_523(val, _values, result) - lexer.lex_state = :expr_beg - +def _reduce_545(val, _values, result) + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_524(val, _values, result) +def _reduce_546(val, _values, result) result = val[2] - + result end -def _reduce_525(val, _values, result) - yyerrok +def _reduce_547(val, _values, result) result = nil - debug20 30, val, result - + result end -def _reduce_526(val, _values, result) +def _reduce_548(val, _values, result) result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; - + result end -def _reduce_527(val, _values, result) - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true - +def _reduce_549(val, _values, result) + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + + result +end + +def _reduce_550(val, _values, result) + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_528(val, _values, result) +def _reduce_551(val, _values, result) result = args val - + result end -def _reduce_529(val, _values, result) +def _reduce_552(val, _values, result) result = args val - + result end -def _reduce_530(val, _values, result) +def _reduce_553(val, _values, result) result = args val - + result end -# reduce 531 omitted +# reduce 554 omitted -def _reduce_532(val, _values, result) +def _reduce_555(val, _values, result) result = val[1] - + result end -def _reduce_533(val, _values, result) +def _reduce_556(val, _values, result) result = nil - + result end -def _reduce_534(val, _values, result) +def _reduce_557(val, _values, result) result = args val - + result end -def _reduce_535(val, _values, result) +def _reduce_558(val, _values, result) result = args val - + result end -def _reduce_536(val, _values, result) +def _reduce_559(val, _values, result) result = args val - + result end -def _reduce_537(val, _values, result) +def _reduce_560(val, _values, result) result = args val - + result end -def _reduce_538(val, _values, result) +def _reduce_561(val, _values, result) result = args val - + result end -def _reduce_539(val, _values, result) +def _reduce_562(val, _values, result) result = args val - + result end -def _reduce_540(val, _values, result) +def _reduce_563(val, _values, result) result = args val - + result end -def _reduce_541(val, _values, result) +def _reduce_564(val, _values, result) result = args val - + result end -def _reduce_542(val, _values, result) +def _reduce_565(val, _values, result) result = args val - + result end -def _reduce_543(val, _values, result) +def _reduce_566(val, _values, result) result = args val - + result end -def _reduce_544(val, _values, result) +def _reduce_567(val, _values, result) result = args val - + result end -def _reduce_545(val, _values, result) +def _reduce_568(val, _values, result) result = args val - + result end -def _reduce_546(val, _values, result) +def _reduce_569(val, _values, result) result = args val - + result end -def _reduce_547(val, _values, result) +def _reduce_570(val, _values, result) result = args val - + result end -def _reduce_548(val, _values, result) +def _reduce_571(val, _values, result) result = args val - + result end -def _reduce_549(val, _values, result) +def _reduce_572(val, _values, result) yyerror "formal argument cannot be a constant" - + result end -def _reduce_550(val, _values, result) +def _reduce_573(val, _values, result) yyerror "formal argument cannot be an instance variable" - + result end -def _reduce_551(val, _values, result) +def _reduce_574(val, _values, result) yyerror "formal argument cannot be a global variable" - + result end -def _reduce_552(val, _values, result) +def _reduce_575(val, _values, result) yyerror "formal argument cannot be a class variable" - + result end -# reduce 553 omitted +# reduce 576 omitted -def _reduce_554(val, _values, result) +def _reduce_577(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier - + result end -# reduce 555 omitted +# reduce 578 omitted -# reduce 556 omitted +# reduce 579 omitted -def _reduce_557(val, _values, result) +def _reduce_580(val, _values, result) result = val[1] - + result end -def _reduce_558(val, _values, result) - case val[0] +def _reduce_581(val, _values, result) + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end - + result end -def _reduce_559(val, _values, result) +def _reduce_582(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item - + result end -# reduce 560 omitted +# reduce 583 omitted + +def _reduce_584(val, _values, result) + # TODO: new_kw_arg + (label, line), arg = val -def _reduce_561(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) - + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line + result end -def _reduce_562(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_585(val, _values, result) + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line - result = s(:array, s(:kwarg, identifier)) - result end -def _reduce_563(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_586(val, _values, result) + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id, expr).line(line)).line line - result = s(:array, s(:kwarg, identifier, val[1])) - result end -def _reduce_564(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_587(val, _values, result) + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line - result = s(:array, s(:kwarg, identifier)) - result end -# reduce 565 omitted +# reduce 588 omitted -def _reduce_566(val, _values, result) +def _reduce_589(val, _values, result) list, _, item = val result = list << item.last - + result end -# reduce 567 omitted +# reduce 590 omitted -def _reduce_568(val, _values, result) +def _reduce_591(val, _values, result) result = args val - + result end -# reduce 569 omitted +# reduce 592 omitted + +# reduce 593 omitted -# reduce 570 omitted +def _reduce_594(val, _values, result) + name = val[1].to_sym + self.assignable name + result = :"**#{name}" -def _reduce_571(val, _values, result) - result = :"**#{val[1]}" - result end -def _reduce_572(val, _values, result) +def _reduce_595(val, _values, result) result = :"**" - + result end -def _reduce_573(val, _values, result) +def _reduce_596(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names - + result end -def _reduce_574(val, _values, result) +def _reduce_597(val, _values, result) result = self.assignable val[0], val[2] - + result end -def _reduce_575(val, _values, result) - result = s(:block, val[0]) - +def _reduce_598(val, _values, result) + optblk, = val + result = s(:block, optblk).line optblk.line + result end -def _reduce_576(val, _values, result) - result = val[0] - result << val[2] - +def _reduce_599(val, _values, result) + optarg, _, optblk = val + result = optarg + result << optblk + result end -def _reduce_577(val, _values, result) - result = s(:block, val[0]) - +def _reduce_600(val, _values, result) + opt, = val + result = s(:block, opt).line opt.line + result end -def _reduce_578(val, _values, result) +def _reduce_601(val, _values, result) result = self.block_append val[0], val[2] - + result end -# reduce 579 omitted +# reduce 602 omitted -# reduce 580 omitted +# reduce 603 omitted -def _reduce_581(val, _values, result) +def _reduce_604(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" - + result end -def _reduce_582(val, _values, result) +def _reduce_605(val, _values, result) name = :"*" self.env[name] = :lvar result = name - + result end -# reduce 583 omitted +# reduce 606 omitted -# reduce 584 omitted +# reduce 607 omitted -def _reduce_585(val, _values, result) +def _reduce_608(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym - + result end -def _reduce_586(val, _values, result) +def _reduce_609(val, _values, result) result = val[1] - + result end -def _reduce_587(val, _values, result) +def _reduce_610(val, _values, result) result = nil - + result end -# reduce 588 omitted +# reduce 611 omitted + +def _reduce_612(val, _values, result) + lexer.lex_state = EXPR_BEG -def _reduce_589(val, _values, result) - lexer.lex_state = :expr_beg - result end -def _reduce_590(val, _values, result) +def _reduce_613(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit - - result -end -def _reduce_591(val, _values, result) - result = s(:array) - result end -def _reduce_592(val, _values, result) - result = val[0] - +def _reduce_614(val, _values, result) + result = s(:array).line lexer.lineno + result end -# reduce 593 omitted +# reduce 615 omitted -def _reduce_594(val, _values, result) +# reduce 616 omitted + +def _reduce_617(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash - + result end -def _reduce_595(val, _values, result) - result = s(:array, val[0], val[2]) - +def _reduce_618(val, _values, result) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line + result end -def _reduce_596(val, _values, result) - result = s(:array, s(:lit, val[0][0].to_sym), val.last) - +def _reduce_619(val, _values, result) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line + result end -def _reduce_597(val, _values, result) +def _reduce_620(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym - result = s(:array, sym, value) - - result -end + result = s(:array, sym, value).line sym.line -def _reduce_598(val, _values, result) - raise "not yet: #{val.inspect}" - # result = s(:array, s(:lit, val[1].to_sym), val[1]) - result end -def _reduce_599(val, _values, result) - result = s(:array, s(:kwsplat, val[1])) - +def _reduce_621(val, _values, result) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line + result end -# reduce 600 omitted +# reduce 622 omitted -# reduce 601 omitted +# reduce 623 omitted -# reduce 602 omitted +# reduce 624 omitted -# reduce 603 omitted +# reduce 625 omitted -# reduce 604 omitted +# reduce 626 omitted -# reduce 605 omitted +# reduce 627 omitted -# reduce 606 omitted +# reduce 628 omitted -# reduce 607 omitted +# reduce 629 omitted -# reduce 608 omitted +# reduce 630 omitted -# reduce 609 omitted +# reduce 631 omitted -# reduce 610 omitted +# reduce 632 omitted -# reduce 611 omitted +# reduce 633 omitted -# reduce 612 omitted +# reduce 634 omitted -# reduce 613 omitted +# reduce 635 omitted -# reduce 614 omitted +# reduce 636 omitted -# reduce 615 omitted +# reduce 637 omitted -# reduce 616 omitted +# reduce 638 omitted -# reduce 617 omitted +# reduce 639 omitted -# reduce 618 omitted +# reduce 640 omitted -# reduce 619 omitted +# reduce 641 omitted -# reduce 620 omitted +# reduce 642 omitted -# reduce 621 omitted +# reduce 643 omitted -# reduce 622 omitted +# reduce 644 omitted -def _reduce_623(val, _values, result) - yyerrok +# reduce 645 omitted + +# reduce 646 omitted + +def _reduce_647(val, _values, result) + yyerrok result end -# reduce 624 omitted +# reduce 648 omitted -# reduce 625 omitted +# reduce 649 omitted -def _reduce_626(val, _values, result) - yyerrok +def _reduce_650(val, _values, result) + yyerrok result end -def _reduce_627(val, _values, result) - result = nil; +def _reduce_651(val, _values, result) + result = nil; result end diff -Nru ruby-ruby-parser-3.11.0/lib/ruby24_parser.y ruby-ruby-parser-3.15.1/lib/ruby24_parser.y --- ruby-ruby-parser-3.11.0/lib/ruby24_parser.y 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby24_parser.y 2021-01-18 16:48:25.000000000 +0000 @@ -23,35 +23,35 @@ tLABEL_END tLONELY -prechigh - right tBANG tTILDE tUPLUS - right tPOW - right tUMINUS_NUM tUMINUS - left tSTAR2 tDIVIDE tPERCENT - left tPLUS tMINUS - left tLSHFT tRSHFT - left tAMPER2 - left tPIPE tCARET - left tGT tGEQ tLT tLEQ - nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH - left tANDOP - left tOROP - nonassoc tDOT2 tDOT3 - right tEH tCOLON - left kRESCUE_MOD - right tEQL tOP_ASGN - nonassoc kDEFINED - right kNOT - left kOR kAND - nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD - nonassoc tLBRACE_ARG - nonassoc tLOWEST preclow + nonassoc tLOWEST + nonassoc tLBRACE_ARG + nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD + left kOR kAND + right kNOT + nonassoc kDEFINED + right tEQL tOP_ASGN + left kRESCUE_MOD + right tEH tCOLON + nonassoc tDOT2 tDOT3 + left tOROP + left tANDOP + nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH + left tGT tGEQ tLT tLEQ + left tPIPE tCARET + left tAMPER2 + left tLSHFT tRSHFT + left tPLUS tMINUS + left tSTAR2 tDIVIDE tPERCENT # TODO: tSTAR2 -> tMULT + right tUMINUS_NUM tUMINUS + right tPOW + right tBANG tTILDE tUPLUS +prechigh rule program: { - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG } top_compstmt { @@ -60,7 +60,8 @@ top_compstmt: top_stmts opt_terms { - result = val[0] + stmt, _ = val + result = stmt } top_stmts: none @@ -72,14 +73,6 @@ | error top_stmt top_stmt: stmt - { - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - } | klBEGIN { if (self.in_def || self.in_single > 0) then @@ -88,14 +81,40 @@ end self.env.extend } - tLCURLY top_compstmt tRCURLY + begin_block { - result = new_iter s(:preexe), nil, val[3] + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + } + + begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY + { + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt } - bodystmt: compstmt opt_rescue opt_else opt_ensure + bodystmt: compstmt opt_rescue k_else { - result = new_body val + res = _values[-2] + yyerror "else without rescue is useless" unless res + } + compstmt + opt_ensure + { + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + } + | compstmt opt_rescue opt_ensure + { + body, resc, ens = val + + result = new_body [body, resc, nil, ens] } compstmt: stmts opt_terms @@ -104,8 +123,8 @@ } stmts: none - | stmt - | stmts terms stmt + | stmt_or_begin # TODO: newline_node ? + | stmts terms stmt_or_begin { result = self.block_append val[0], val[2] } @@ -115,22 +134,30 @@ debug20 2, val, result } + stmt_or_begin: stmt + | klBEGIN + { + yyerror "BEGIN is permitted only at toplevel" + } + stmt: kALIAS fitem { - lexer.lex_state = :expr_fname - result = self.lexer.lineno + lexer.lex_state = EXPR_FNAME } fitem { - result = s(:alias, val[1], val[3]).line(val[2]) + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line } | kALIAS tGVAR tGVAR { - result = s(:valias, val[1].to_sym, val[2].to_sym) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line } | kALIAS tGVAR tBACK_REF { - result = s(:valias, val[1].to_sym, :"$#{val[2]}") + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line } | kALIAS tGVAR tNTH_REF { @@ -142,54 +169,84 @@ } | stmt kIF_MOD expr_value { - result = new_if val[2], val[0], nil + t, _, c = val + result = new_if c, t, nil } | stmt kUNLESS_MOD expr_value { - result = new_if val[2], nil, val[0] + f, _, c = val + result = new_if c, nil, f } | stmt kWHILE_MOD expr_value { - result = new_while val[0], val[2], true + e, _, c = val + result = new_while e, c, true } | stmt kUNTIL_MOD expr_value { - result = new_until val[0], val[2], true + e, _, c = val + result = new_until e, c, true } | stmt kRESCUE_MOD stmt { - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody } | klEND tLCURLY compstmt tRCURLY { + (_, line), _, stmt, _ = val + if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end - result = new_iter s(:postexe), 0, val[2] + + result = new_iter s(:postexe).line(line), 0, stmt } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } - | var_lhs tOP_ASGN command_call + | lhs tEQL mrhs + { + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + } + | mlhs tEQL mrhs_arg + { + result = new_masgn val[0], val[2] + } + | expr + + command_asgn: lhs tEQL command_rhs + { + result = new_assign val[0], val[2] + } + # | lhs tEQL command_asgn + # { + # result = new_assign val[0], val[2] + # } + | var_lhs tOP_ASGN command_rhs { result = new_op_asgn val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn1 val } - | primary_value call_op tIDENTIFIER tOP_ASGN command_call + | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } - | primary_value call_op tCONSTANT tOP_ASGN command_call + | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' @@ -197,55 +254,61 @@ end result.line = val[0].line } - | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call + | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | backref tOP_ASGN command_call + | backref tOP_ASGN command_rhs { self.backref_assign_error val[0] } - | lhs tEQL mrhs - { - result = new_assign val[0], s(:svalue, val[2]) - } - | mlhs tEQL mrhs_arg - { - result = new_masgn val[0], val[2] - } - | expr - command_asgn: lhs tEQL command_call + command_rhs: command_call =tOP_ASGN { - result = new_assign val[0], val[2] + expr, = val + result = value_expr expr } - | lhs tEQL command_asgn + | command_call kRESCUE_MOD stmt { - result = new_assign val[0], val[2] + expr, (_, line), resbody = val + + expr = value_expr expr + ary = s(:array).line line + result = new_rescue(expr, new_resbody(ary, resbody)) } + | command_asgn expr: command_call | expr kAND expr { - result = logical_op :and, val[0], val[2] + lhs, _, rhs = val + result = logical_op :and, lhs, rhs } | expr kOR expr { - result = logical_op :or, val[0], val[2] + lhs, _, rhs = val + result = logical_op :or, lhs, rhs } | kNOT opt_nl expr { - result = s(:call, val[2], :"!") + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op } | tBANG command_call { - result = s(:call, val[1], :"!") + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y } | arg @@ -254,54 +317,71 @@ result = value_expr(val[0]) } + expr_value_do: { + lexer.cond.push true + } + expr_value do + { + lexer.cond.pop + } + { + _, expr, _, _ = val + result = expr + } + command_call: command | block_command block_command: block_call - | block_call dot_or_colon operation2 command_args + | block_call call_op2 operation2 command_args { - result = new_call val[0], val[2].to_sym, val[3] + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line } cmd_brace_block: tLBRACE_ARG { - self.env.extend(:dynamic) + # self.env.extend(:dynamic) result = self.lexer.lineno } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY + brace_body tRCURLY { - result = new_iter nil, val[2], val[4] - result.line = val[1] + _, line, body, _ = val - self.env.unextend + result = body + result.line = line + + # self.env.unextend } fcall: operation { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno } command: fcall command_args =tLOWEST { - result = val[0].concat val[1].sexp_body # REFACTOR pattern + call, args = val + result = call.concat args.sexp_body } | fcall command_args cmd_brace_block { - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block - result, operation = val[2], result + result, operation = block, result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { - result = new_call val[0], val[2].to_sym, val[3], val[1] + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop } | primary_value call_op operation2 command_args cmd_brace_block { @@ -333,17 +413,19 @@ } | kYIELD command_args { - result = new_yield val[1] + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield } - | kRETURN call_args + | k_return call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) + (_, line), args = val + result = s(:break, ret_args(args)).line line } | kNEXT call_args { @@ -360,56 +442,79 @@ mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { - result = s(:masgn, s(:array, val[1])) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l } mlhs_basic: mlhs_head { - result = s(:masgn, val[0]) + head, = val + result = s(:masgn, head).line head.line } | mlhs_head mlhs_item { - result = s(:masgn, val[0] << val[1].compact) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line } | mlhs_head tSTAR mlhs_node { - result = s(:masgn, val[0] << s(:splat, val[2])) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val - result = list_append ary1, s(:splat, splat) + result = list_append ary1, s(:splat, splat).line(splat.line) result.concat ary2.sexp_body - result = s(:masgn, result) + result = s(:masgn, result).line result.line } | mlhs_head tSTAR { - result = s(:masgn, val[0] << s(:splat)) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l } | mlhs_head tSTAR tCOMMA mlhs_post { - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR mlhs_node { - result = s(:masgn, s(:array, s(:splat, val[1]))) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l } | tSTAR mlhs_node tCOMMA mlhs_post { - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR { - result = s(:masgn, s(:array, s(:splat))) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l } | tSTAR tCOMMA mlhs_post { - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l } mlhs_item: mlhs_node @@ -420,7 +525,8 @@ mlhs_head: mlhs_item tCOMMA { - result = s(:array, val[0]) + lhs, _ = val + result = s(:array, lhs).line lhs.line } | mlhs_head mlhs_item tCOMMA { @@ -429,7 +535,8 @@ mlhs_post: mlhs_item { - result = s(:array, val[0]) + item, = val + result = s(:array, item).line item.line } | mlhs_post tCOMMA mlhs_item { @@ -454,7 +561,8 @@ } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + recv, _, id = val + result = new_attrasgn recv, id } | primary_value call_op tCONSTANT { @@ -467,7 +575,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l } | tCOLON3 tCONSTANT { @@ -476,7 +587,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, nil, s(:colon3, val[1].to_sym)) + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -485,24 +599,31 @@ lhs: user_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line } | keyword_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { - result = self.aryset val[0], val[2] + lhs, _, args, _ = val + result = self.aryset lhs, args } | primary_value call_op tIDENTIFIER # REFACTOR { - result = new_attrasgn val[0], val[2], val[1] + lhs, op, id = val + result = new_attrasgn lhs, id, op } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + lhs, _, id = val + result = new_attrasgn lhs, id } | primary_value call_op tCONSTANT # REFACTOR? { @@ -510,21 +631,27 @@ } | primary_value tCOLON2 tCONSTANT { + expr, _, id = val + if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l } | tCOLON3 tCONSTANT { + _, id = val + if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -539,7 +666,8 @@ cpath: tCOLON3 cname { - result = s(:colon3, val[1].to_sym) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno } | cname { @@ -547,27 +675,32 @@ } | primary_value tCOLON2 cname { - result = s(:colon2, val[0], val[2].to_sym) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line } fname: tIDENTIFIER | tCONSTANT | tFID | op { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[0] } | reswords { - lexer.lex_state = :expr_end - result = val[0] + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym } fsym: fname | symbol fitem: fsym { - result = s(:lit, val[0].to_sym) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno } | dsym @@ -578,7 +711,7 @@ | undef_list tCOMMA { - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fitem { @@ -590,6 +723,8 @@ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 + # TODO: tUBANG dead? + | tUBANG reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE @@ -601,68 +736,72 @@ | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL - arg: lhs tEQL arg + arg: lhs tEQL arg_rhs { result = new_assign val[0], val[2] } - | lhs tEQL arg kRESCUE_MOD arg - { - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - } - | var_lhs tOP_ASGN arg + | var_lhs tOP_ASGN arg_rhs { result = new_op_asgn val } - | var_lhs tOP_ASGN arg kRESCUE_MOD arg + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) + result = new_op_asgn1 val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg + | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn2 val } - | primary_value call_op tIDENTIFIER tOP_ASGN arg + | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = new_op_asgn2 val } - | primary_value call_op tCONSTANT tOP_ASGN arg + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { - result = new_op_asgn2 val + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg + | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] } - | primary_value tCOLON2 tCONSTANT tOP_ASGN arg + | tCOLON3 tCONSTANT { - yyerror "constant re-assignment" + result = self.lexer.lineno } - | tCOLON3 tCONSTANT tOP_ASGN arg + tOP_ASGN arg_rhs { - yyerror "constant re-assignment" + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] } - | backref tOP_ASGN arg + | backref tOP_ASGN arg_rhs { - self.backref_assign_error val[0] + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end } | arg tPLUS arg @@ -691,7 +830,9 @@ } | tUMINUS_NUM simple_numeric tPOW arg { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + } | tUPLUS arg { @@ -717,22 +858,7 @@ { result = new_call val[0], :"<=>", argl(val[2]) } - | arg tGT arg - { - result = new_call val[0], :">", argl(val[2]) - } - | arg tGEQ arg - { - result = new_call val[0], :">=", argl(val[2]) - } - | arg tLT arg - { - result = new_call val[0], :"<", argl(val[2]) - } - | arg tLEQ arg - { - result = new_call val[0], :"<=", argl(val[2]) - } + | rel_expr =tCMP | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) @@ -747,15 +873,19 @@ } | arg tMATCH arg { - result = new_match val[0], val[2] + lhs, _, rhs = val + result = new_match lhs, rhs } | arg tNMATCH arg { - result = s(:not, new_match(val[0], val[2])) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line } | tBANG arg { - result = new_call val[1], :"!" + _, arg = val + result = new_call arg, :"!" + result.line arg.line } | tTILDE arg { @@ -783,14 +913,33 @@ } | kDEFINED opt_nl arg { - result = s(:defined, val[2]) + (_, line), _, arg = val + result = s(:defined, arg).line line } | arg tEH arg opt_nl tCOLON arg { - result = s(:if, val[0], val[2], val[5]) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line } | primary + relop: tGT + | tLT + | tGEQ + | tLEQ + + rel_expr: arg relop arg =tGT + { + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + } + | rel_expr relop arg =tGT + { + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + } + arg_value: arg { result = value_expr(val[0]) @@ -810,22 +959,28 @@ result = args [array_to_hash(val[0])] } + arg_rhs: arg =tOP_ASGN + | arg kRESCUE_MOD arg + { + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + } + paren_args: tLPAREN2 opt_call_args rparen { - result = val[1] + _, args, _ = val + result = args } opt_paren_args: none | paren_args opt_call_args: none - { - result = val[0] - } | call_args - { - result = val[0] - } | args tCOMMA { result = args val @@ -847,17 +1002,14 @@ | args opt_block_arg { result = call_args val - result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] + result = call_args [array_to_hash(val[0]), val[1]] } | args tCOMMA assocs opt_block_arg { - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] + result = call_args [val[0], array_to_hash(val[2]), val[3]] } | block_arg { @@ -865,18 +1017,45 @@ } command_args: { - result = lexer.cmdarg.stack.dup # TODO: smell? + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead } call_args { - lexer.cmdarg.stack.replace val[0] - result = val[1] + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args } block_arg: tAMPER arg_value { - result = s(:block_pass, val[1]) + _, arg = val + result = s(:block_pass, arg).line arg.line } opt_block_arg: tCOMMA block_arg @@ -887,19 +1066,27 @@ args: arg_value { - result = s(:array, val[0]) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno } | tSTAR arg_value { - result = s(:array, s(:splat, val[1])) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line } | args tCOMMA arg_value { - result = self.list_append val[0], val[2] + args, _, id = val + result = self.list_append args, id } | args tCOMMA tSTAR arg_value { - result = self.list_append val[0], s(:splat, val[3]) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) } mrhs_arg: mrhs @@ -917,11 +1104,14 @@ } | args tCOMMA tSTAR arg_value { - result = self.arg_concat val[0], val[3] + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat } | tSTAR arg_value { - result = s(:splat, val[1]) + _, arg = val + result = s(:splat, arg).line arg.line } primary: literal @@ -936,58 +1126,65 @@ | backref | tFID { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call nil, msg.to_sym } - | kBEGIN + | k_begin { + lexer.cmdarg.push false result = self.lexer.lineno } - bodystmt kEND + bodystmt k_end { - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] + lexer.cmdarg.pop + result = new_begin val } - | tLPAREN_ARG rparen + | tLPAREN_ARG { - debug20 13, val, result + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno } - | tLPAREN_ARG + rparen { - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these + _, line, _ = val + result = s(:begin).line line } - expr + | tLPAREN_ARG + stmt { - lexer.lex_state = :expr_endarg + lexer.lex_state = EXPR_ENDARG } rparen { - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt } | tLPAREN compstmt tRPAREN { - result = val[1] || s(:nil) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true } | primary_value tCOLON2 tCONSTANT { - result = s(:colon2, val[0], val[2].to_sym) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line } | tCOLON3 tCONSTANT { - result = s(:colon3, val[1].to_sym) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno } - | tLBRACK aref_args tRBRACK + | tLBRACK { result = lexer.lineno } aref_args tRBRACK { - result = val[1] || s(:array) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args + result.line line } | tLBRACE { @@ -997,9 +1194,10 @@ { result = new_hash val } - | kRETURN + | k_return { - result = s(:return) + (_, line), = val + result = s(:return).line line } | kYIELD tLPAREN2 call_args rparen { @@ -1015,11 +1213,14 @@ } | kDEFINED opt_nl tLPAREN2 expr rparen { - result = s(:defined, val[3]) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line } | kNOT tLPAREN2 expr rparen { - result = s(:call, val[2], :"!") + _, _, lhs, _ = val + result = new_call lhs, :"!" } | kNOT tLPAREN2 rparen { @@ -1027,11 +1228,11 @@ } | fcall brace_block { - oper, iter = val[0], val[1] - call = oper # FIX + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line + # FIX: probably not: call.line = iter.line } | method_call | method_call brace_block @@ -1045,61 +1246,42 @@ { result = val[1] # TODO: fix lineno } - | kIF expr_value then compstmt if_tail kEND - { - result = new_if val[1], val[3], val[4] - } - | kUNLESS expr_value then compstmt opt_else kEND - { - result = new_if val[1], val[4], val[3] - } - | kWHILE - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_if expr_value then compstmt if_tail k_end { - result = new_while val[5], val[2], true + _, c, _, t, f, _ = val + result = new_if c, t, f } - | kUNTIL + | k_unless expr_value then compstmt opt_else k_end { - lexer.cond.push true + _, c, _, t, f, _ = val + result = new_if c, f, t } - expr_value do + | k_while expr_value_do compstmt k_end { - lexer.cond.pop + _, cond, body, _ = val + result = new_while body, cond, true } - compstmt kEND + | k_until expr_value_do compstmt k_end { - result = new_until val[5], val[2], true + _, cond, body, _ = val + result = new_until body, cond, true } - | kCASE expr_value opt_terms case_body kEND + | k_case expr_value opt_terms case_body k_end { (_, line), expr, _, body, _ = val result = new_case expr, body, line } - | kCASE opt_terms case_body kEND + | k_case opt_terms case_body k_end { (_, line), _, body, _ = val result = new_case nil, body, line } - | kFOR for_var kIN - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_for for_var kIN expr_value_do compstmt k_end { - result = new_for val[4], val[1], val[7] + _, var, _, iter, body, _ = val + result = new_for iter, var, body } - | kCLASS + | k_class { result = self.lexer.lineno } @@ -1111,13 +1293,13 @@ end self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kCLASS tLSHFT + | k_class tLSHFT { result = self.lexer.lineno } @@ -1132,13 +1314,13 @@ self.in_single = 0 self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kMODULE + | k_module { result = self.lexer.lineno } @@ -1150,74 +1332,90 @@ self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kDEF fname + | k_def fname { - result = [self.in_def, self.lexer.cmdarg.stack.dup] + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt { result = lexer.lineno } k_end { - in_def, cmdarg = val[2] + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body } - | kDEF singleton dot_or_colon + | k_def singleton dot_or_colon { - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fname { - self.in_single += 1 + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt k_end { - line, cmdarg = val[5] - result = new_defs val - result[3].line line + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body } | kBREAK { - result = s(:break) + (_, line), = val + result = s(:break).line line } | kNEXT { - result = s(:next) + (_, line), = val + result = s(:next).line line } | kREDO { - result = s(:redo) + (_, line), = val + result = s(:redo).line line } | kRETRY { - result = s(:retry) + (_, line), = val + result = s(:retry).line line } primary_value: primary @@ -1236,7 +1434,15 @@ k_class: kCLASS k_module: kMODULE k_def: kDEF + k_do: kDO + k_do_block: kDO_BLOCK + k_rescue: kRESCUE + k_ensure: kENSURE + k_when: kWHEN + k_else: kELSE + k_elsif: kELSIF k_end: kEND + k_return: kRETURN then: term | kTHEN @@ -1246,9 +1452,11 @@ | kDO_COND if_tail: opt_else - | kELSIF expr_value then compstmt if_tail + | k_elsif expr_value then compstmt if_tail { - result = s(:if, val[1], val[3], val[4]) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line } opt_else: none @@ -1271,7 +1479,9 @@ f_marg_list: f_marg { - result = s(:array, val[0]) + sym, = val + + result = s(:array, sym).line lexer.lineno } | f_marg_list tCOMMA f_marg { @@ -1345,7 +1555,9 @@ } | f_block_arg { - result = call_args val + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line } opt_block_args_tail: tCOMMA block_args_tail @@ -1376,7 +1588,7 @@ } | f_arg tCOMMA { - result = args val + result = args(val) << nil } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { @@ -1417,18 +1629,22 @@ opt_block_param: none { result = 0 } | block_param_def + { + self.lexer.command_start = true + } block_param_def: tPIPE opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } | tOROP { - self.lexer.command_start = true - result = s(:args) + result = s(:args).line lexer.lineno } | tPIPE block_param opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } @@ -1449,26 +1665,33 @@ bvar: tIDENTIFIER { - result = s(:shadow, val[0].to_sym) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line } | f_bad_arg lambda: { self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } - f_larglist lambda_body + f_larglist + { + lexer.cmdarg.push false + } + lambda_body { - lpar, args, body = val + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend + result.line = line + self.env.unextend # TODO: dynapush & dynapop } f_larglist: tLPAREN2 f_args opt_bv_decl rparen @@ -1485,28 +1708,15 @@ { result = val[1] } - | kDO_LAMBDA compstmt kEND + | kDO_LAMBDA bodystmt kEND { result = val[1] } - do_block: kDO_BLOCK - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt kEND + do_block: k_do_block do_body kEND { - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] - - self.env.unextend + (_, line), iter, _ = val + result = iter.line line } block_call: command do_block @@ -1520,14 +1730,16 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] + cmd, blk = val + + result = blk + result.insert 1, cmd } - | block_call dot_or_colon operation2 opt_paren_args + | block_call call_op2 operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } - | block_call dot_or_colon operation2 opt_paren_args brace_block + | block_call call_op2 operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val @@ -1536,7 +1748,7 @@ result = iter2 } - | block_call dot_or_colon operation2 command_args do_block + | block_call call_op2 operation2 command_args do_block { iter1, _, name, args, iter2 = val @@ -1552,8 +1764,10 @@ } paren_args { - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno } | primary_value call_op operation2 opt_paren_args { @@ -1581,7 +1795,7 @@ } | kSUPER { - result = s(:zsuper) + result = s(:zsuper).line lexer.lineno } | primary_value tLBRACK2 opt_call_args rbracket { @@ -1593,39 +1807,55 @@ self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + brace_body tRCURLY { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - _, line, args, _, body, _ = val + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend } - | kDO + | k_do { self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + do_body kEND { - result = nil # self.env.dynamic.keys + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend } - compstmt kEND + + brace_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { result = lexer.cmdarg.store(false) } + opt_block_param compstmt { - _, line, args, _, body, _ = val + line, cmdarg, param, cmpstmt = val - result = new_iter nil, args, body - result.line = line + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + } + do_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { lexer.cmdarg.push false } + opt_block_param + compstmt + { + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop self.env.unextend } - case_body: kWHEN + case_body: k_when { result = self.lexer.lineno } @@ -1638,12 +1868,12 @@ cases: opt_else | case_body - opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue + opt_rescue: k_rescue exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) @@ -1656,7 +1886,8 @@ exc_list: arg_value { - result = s(:array, val[0]) + arg, = val + result = s(:array, arg).line arg.line } | mrhs | none @@ -1667,28 +1898,33 @@ } | none - opt_ensure: kENSURE compstmt + opt_ensure: k_ensure compstmt { - _, body = val + (_, line), body = val - result = body || s(:nil) + result = body || s(:nil).line(line) } | none literal: numeric { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | symbol { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | dsym strings: string { - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str } string: tCHAR @@ -1703,7 +1939,11 @@ string1: tSTRING_BEG string_contents tSTRING_END { - result = val[1] + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str } | tSTRING { @@ -1712,7 +1952,8 @@ xstring: tXSTRING_BEG xstring_contents tSTRING_END { - result = new_xstring val[1] + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? } regexp: tREGEXP_BEG regexp_contents tREGEXP_END @@ -1722,7 +1963,7 @@ words: tWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tWORDS_BEG word_list tSTRING_END { @@ -1746,25 +1987,28 @@ symbols: tSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } - | tSYMBOLS_BEG symbol_list tSTRING_END + | tSYMBOLS_BEG { result = lexer.lineno } symbol_list tSTRING_END { - result = val[1] + _, line, list, _, = val + list.line = line + result = list } symbol_list: none { - result = new_symbol_list + result = new_symbol_list.line lexer.lineno } | symbol_list word tSPACE { - result = val[0].dup << new_symbol_list_entry(val) + list, * = val + result = list.dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tQWORDS_BEG qword_list tSTRING_END { @@ -1773,7 +2017,7 @@ qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno # FIX } | tQSYMBOLS_BEG qsym_list tSTRING_END { @@ -1800,11 +2044,12 @@ string_contents: none { - result = s(:str, "") + result = s(:str, "").line lexer.lineno } | string_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } xstring_contents: none @@ -1813,7 +2058,8 @@ } | xstring_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } regexp_contents: none @@ -1822,7 +2068,8 @@ } | regexp_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } string_content: tSTRING_CONTENT @@ -1834,42 +2081,46 @@ result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? + lexer.lex_state = EXPR_BEG } string_dvar { - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value + lexer.lex_state = EXPR_BEG } - compstmt tRCURLY + compstmt + tSTRING_DEND { - # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -1879,24 +2130,24 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end } - string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } - | tIVAR { result = s(:ivar, val[0].to_sym) } - | tCVAR { result = s(:cvar, val[0].to_sym) } + string_dvar: tGVAR { result = s(:gvar, val[0].to_sym).line lexer.lineno } + | tIVAR { result = s(:ivar, val[0].to_sym).line lexer.lineno } + | tCVAR { result = s(:cvar, val[0].to_sym).line lexer.lineno } | backref symbol: tSYMBEG sym { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[1].to_sym } | tSYMBOL @@ -1908,18 +2159,19 @@ dsym: tSYMBEG xstring_contents tSTRING_END { - lexer.lex_state = :expr_end - result = val[1] + _, result, _ = val - result ||= s(:str, "") + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end @@ -1942,19 +2194,20 @@ | tCONSTANT | tCVAR -keyword_variable: kNIL { result = s(:nil) } - | kSELF { result = s(:self) } - | kTRUE { result = s(:true) } - | kFALSE { result = s(:false) } - | k__FILE__ { result = s(:str, self.file) } - | k__LINE__ { result = s(:lit, lexer.lineno) } +keyword_variable: kNIL { result = s(:nil).line lexer.lineno } + | kSELF { result = s(:self).line lexer.lineno } + | kTRUE { result = s(:true).line lexer.lineno } + | kFALSE { result = s(:false).line lexer.lineno } + | k__FILE__ { result = s(:str, self.file).line lexer.lineno } + | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno } | k__ENCODING__ { + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end } @@ -1979,43 +2232,42 @@ debug20 29, val, result } - backref: tNTH_REF { result = s(:nth_ref, val[0]) } - | tBACK_REF { result = s(:back_ref, val[0]) } + backref: tNTH_REF { result = s(:nth_ref, val[0]).line lexer.lineno } + | tBACK_REF { result = s(:back_ref, val[0]).line lexer.lineno } - superclass: term - { - result = nil - } - | tLT + superclass: tLT { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG + lexer.command_start = true } expr_value term { result = val[2] } - | error term + | none { - yyerrok result = nil - debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; } - | f_args term - { - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true + | { + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + } + f_args term + { + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg @@ -2138,12 +2390,13 @@ f_arg: f_arg_item { - case val[0] + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" @@ -2156,7 +2409,7 @@ if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item @@ -2166,38 +2419,42 @@ f_kw: f_label arg_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? + # TODO: new_kw_arg + (label, line), arg = val + identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line } | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } f_block_kw: f_label primary_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + result = s(:array, s(:kwarg, id, expr).line(line)).line line } | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } f_block_kwarg: f_block_kw @@ -2218,7 +2475,9 @@ f_kwrest: kwrest_mark tIDENTIFIER { - result = :"**#{val[1]}" + name = val[1].to_sym + self.assignable name + result = :"**#{name}" } | kwrest_mark { @@ -2238,17 +2497,20 @@ f_block_optarg: f_block_opt { - result = s(:block, val[0]) + optblk, = val + result = s(:block, optblk).line optblk.line } | f_block_optarg tCOMMA f_block_opt { - result = val[0] - result << val[2] + optarg, _, optblk = val + result = optarg + result << optblk } f_optarg: f_opt { - result = s(:block, val[0]) + opt, = val + result = s(:block, opt).line opt.line } | f_optarg tCOMMA f_opt { @@ -2293,7 +2555,7 @@ singleton: var_ref | tLPAREN2 { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG } expr rparen { @@ -2302,14 +2564,11 @@ result.sexp_type == :lit } - assoc_list: none # [!nil] + assoc_list: none { - result = s(:array) - } - | assocs trailer # [!nil] - { - result = val[0] + result = s(:array).line lexer.lineno } + | assocs trailer assocs: assoc | assocs tCOMMA assoc @@ -2323,26 +2582,27 @@ assoc: arg_value tASSOC arg_value { - result = s(:array, val[0], val[2]) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line } - | tLABEL opt_nl arg_value + | tLABEL arg_value { - result = s(:array, s(:lit, val[0][0].to_sym), val.last) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line } | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym - result = s(:array, sym, value) - } - | tSYMBOL arg_value - { - raise "not yet: #{val.inspect}" - # result = s(:array, s(:lit, val[1].to_sym), val[1]) + result = s(:array, sym, value).line sym.line } | tDSTAR arg_value { - result = s(:array, s(:kwsplat, val[1])) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line } operation: tIDENTIFIER | tCONSTANT | tFID @@ -2350,7 +2610,11 @@ operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT - | tLONELY + | tLONELY # TODO: rename tANDDOT? + + call_op2: call_op + | tCOLON2 + opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN @@ -2370,6 +2634,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: diff -Nru ruby-ruby-parser-3.11.0/lib/ruby25_parser.rb ruby-ruby-parser-3.15.1/lib/ruby25_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby25_parser.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby25_parser.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,7 +1,7 @@ # # DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.4.14 -# from Racc grammer file "". +# This file is automatically generated by Racc 1.5.0 +# from Racc grammar file "". # require 'racc/parser.rb' @@ -10,6 +10,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: @@ -19,888 +20,899 @@ ##### State transition tables begin ### clist = [ -'-607,272,530,-101,-104,-98,272,-607,-607,-607,757,272,222,-607,-607', -'-616,-607,94,95,-105,-84,83,223,-104,-507,-607,666,630,585,84,748,-507', -'627,116,749,-70,-607,-607,115,-607,-607,-607,-607,-607,-96,-100,116', -'826,223,591,223,115,-91,-92,-94,-103,-100,457,-99,-105,665,856,826,585', -'-103,585,-98,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607', -'-607,-607,-607,737,-604,-607,-607,-607,709,650,271,-604,629,-607,-99', -'271,-607,626,96,97,271,-607,505,-607,-264,-607,-607,-607,-607,-607,-607', -'-607,-89,-607,-607,-607,-106,503,756,-101,-104,-91,-92,-94,-101,-104', -'-96,-504,-607,-607,-95,-93,-106,-607,-504,-504,-504,116,-102,-504,-504', -'-504,115,-504,116,-607,-102,940,-105,115,585,-504,-91,-504,-504,-504', -'-91,-92,-94,-91,-92,-94,-94,-504,-504,-90,-504,-504,-504,-504,-504,585', -'-100,-263,-91,-92,-94,-100,-93,116,-103,116,-98,116,115,-103,115,-98', -'115,-101,-106,500,-519,708,-504,-504,-504,-504,-504,-504,-504,-504,-504', -'-504,-504,-504,-504,-504,-99,737,-504,-504,-504,-99,-504,-504,-603,737', -'-504,887,-102,-504,-504,272,-504,791,-504,792,-504,772,-504,-504,-504', -'-504,-504,-504,-504,771,-504,770,-504,219,220,888,-603,-93,-106,94,95', -'-99,274,-106,-102,-504,-504,-504,-504,-102,-504,-601,-504,265,-105,-518', -'116,-507,530,-105,266,115,-504,-504,-507,-507,-507,219,220,-507,-507', -'-507,-93,-507,-101,-93,-103,116,-603,666,-418,-507,115,-507,-507,-507', -'-92,-97,219,220,-93,490,-100,-507,-507,222,-507,-507,-507,-507,-507', -'116,271,116,-507,890,115,714,115,116,611,-507,-98,665,115,-105,-601', -'-93,96,97,-507,666,893,223,-507,-507,-507,-507,-507,-507,-507,-507,-507', -'-507,-507,-507,-507,-507,-601,-518,-507,-507,-507,666,-507,-507,542', -'223,-507,544,1010,-507,-507,611,-507,665,-507,223,-507,-600,-507,-507', -'-507,-507,-507,-507,-507,265,-507,-507,-507,613,612,609,266,215,-519', -'665,223,856,826,-89,1017,-507,-507,-507,-507,611,-507,116,-507,1015', -'681,243,115,-607,-98,896,-510,898,-507,-507,-607,-607,-607,-510,570', -'-607,-607,-607,542,-607,-504,541,613,612,631,573,-90,-504,-607,-607', -'-607,-607,-600,240,219,220,-504,242,241,-607,-607,-99,-607,-607,-607', -'-607,-607,565,216,562,561,560,542,563,-600,544,613,612,581,580,565,777', -'562,561,560,767,563,900,-607,223,-607,-607,-607,-607,-607,-607,-607', -'-607,-607,-607,-607,-607,-607,-607,217,-504,-607,-607,-607,215,793,-607', -'574,902,-607,903,454,-607,-607,611,-607,459,-607,-91,-607,455,-607,-607', -'-607,-607,-607,-607,-607,570,-607,-607,-607,542,-100,458,544,-607,611', -'456,573,986,-97,611,-607,-607,-607,-607,-607,-603,-607,-289,-607,-607', -'852,696,116,-106,-289,-289,-289,115,-607,-102,-289,-289,911,-289,-337', -'-262,216,-607,915,581,580,-337,613,612,243,-290,219,220,215,917,-337', -'769,-290,-289,-289,967,-289,-289,-289,-289,-289,-290,-289,918,753,613', -'612,624,-607,-289,613,612,619,574,-604,644,240,643,-289,611,242,241', -'616,223,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', -'-289,-289,215,-337,-289,-289,-289,714,649,594,921,116,-289,923,-290', -'-289,115,216,592,925,-289,-94,-289,-92,-289,-289,-289,-289,-289,-289', -'-289,-289,-289,215,-289,-290,-103,927,-101,927,523,223,-290,611,613', -'612,-289,-289,-289,521,-95,-290,-289,-289,-289,-289,219,220,-289,-289', -'-289,-514,-289,-517,-289,-104,933,216,-514,-509,-517,-513,-289,-289', -'-289,409,-509,-516,-513,-517,411,410,-289,-289,-516,-289,-289,-289,-289', -'-289,-504,740,-512,-516,-511,215,215,-504,216,-512,-290,-511,967,214', -'613,612,614,581,580,219,220,753,212,-289,-289,-289,-289,-289,-289,-289', -'-289,-289,-289,-289,-289,-289,-289,935,-517,-289,-289,-289,-515,794', -'-289,591,937,-289,733,-515,-289,-289,-516,-289,611,-289,412,-289,407', -'-289,-289,-289,-289,-289,-289,-289,391,-289,116,-289,216,216,731,115', -'565,223,562,561,560,570,563,-289,-289,-289,-289,-289,388,-289,-289,-289', -'573,385,947,-604,-281,948,223,-289,951,-289,-104,-281,-281,-281,-265', -'730,-281,-281,-281,382,-281,215,568,729,618,613,612,609,533,721,-281', -'-281,-281,581,580,215,719,455,717,961,-281,-281,751,-281,-281,-281,-281', -'-281,358,715,968,753,969,714,-280,971,-289,972,711,223,964,-280,562', -'561,560,505,563,574,705,622,-280,-281,-281,-281,-281,-281,-281,-281', -'-281,-281,-281,-281,-281,-281,-281,702,216,-281,-281,-281,701,988,-281', -'322,990,-281,991,625,-281,-281,216,-281,628,-281,995,-281,696,-281,-281', -'-281,-281,-281,-281,-281,714,-281,1000,-281,565,-280,562,561,560,570', -'563,119,120,121,122,123,-281,-281,-281,-281,573,-281,-426,-281,119,120', -'121,122,123,-426,-426,-426,1002,-281,-426,-426,-426,565,-426,562,561', -'560,568,563,1004,1006,1006,-426,-426,-426,535,879,880,581,580,881,110', -'111,-426,-426,223,-426,-426,-426,-426,-426,565,1013,562,561,560,321', -'563,262,635,723,1018,565,685,562,561,560,1019,563,726,927,927,574,927', -'-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426', -'1024,723,-426,-426,-426,-84,988,-426,223,274,-426,218,723,-426,-426', -'-262,-426,637,-426,223,-426,726,-426,-426,-426,-426,-426,-426,-426,243', -'-426,-426,-426,641,223,565,-604,562,561,560,-603,563,701,223,-609,-426', -'-426,642,-426,243,-426,-609,-609,-609,211,243,-609,-609,-609,243,-609', -'240,-426,243,988,242,241,238,239,-609,-609,-609,-609,723,1047,257,258', -'1048,1049,1050,-609,-609,932,-609,-609,-609,-609,-609,1006,1006,1006', -'240,223,246,210,242,241,238,239,209,927,244,565,245,562,561,560,988', -'563,243,112,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609', -'-609,-609,505,274,-609,-609,-609,539,243,-609,503,696,-609,223,531,-609', -'-609,723,-609,653,-609,274,-609,527,-609,-609,-609,-609,-609,-609,-609', -'1006,-609,-609,-609,565,274,562,561,560,570,563,119,120,121,122,123', -'-609,-609,-609,-609,573,-609,-297,-609,119,120,121,122,123,-297,-297', -'-297,696,-609,-297,-297,-297,262,-297,243,796,565,568,562,561,560,243', -'563,-297,-297,274,826,3,581,580,257,258,223,-297,-297,223,-297,-297', -'-297,-297,-297,964,277,562,561,560,240,563,246,223,242,241,238,239,723', -'223,244,565,245,562,561,560,574,563,-297,-297,-297,-297,-297,-297,-297', -'-297,-297,-297,-297,-297,-297,-297,545,243,-297,-297,-297,490,850,-297', -'223,277,-297,826,860,-297,-297,524,-297,723,-297,223,-297,490,-297,-297', -'-297,-297,-297,-297,-297,591,-297,401,-297,240,517,516,595,242,241,238', -'239,778,596,223,-608,-297,-297,-69,-297,,-297,-608,-608,-608,,,-608', -'-608,-608,243,-608,565,-297,562,561,560,,563,,-608,-608,-608,-608,,', -'257,258,,,,-608,-608,,-608,-608,-608,-608,-608,,,,240,,246,,242,241', -'238,239,723,,244,,245,,,,,,,,-608,-608,-608,-608,-608,-608,-608,-608', -'-608,-608,-608,-608,-608,-608,,,-608,-608,-608,,,-608,,,-608,,,-608', -'-608,,-608,,-608,,-608,,-608,-608,-608,-608,-608,-608,-608,,-608,-608', -'-608,565,,562,561,560,570,563,,,,,,-608,-608,-608,-608,573,-608,-627', -'-608,,,,,,-627,-627,-627,,-608,-627,-627,-627,,-627,243,,,568,,,,,-627', -'-627,-627,,,,581,580,257,258,,-627,-627,,-627,-627,-627,-627,-627,,', -',,,240,,246,,242,241,238,239,,,244,,245,,,,574,,-627,-627,-627,-627', -'-627,-627,-627,-627,-627,-627,-627,-627,-627,-627,,,-627,-627,-627,', -',-627,,274,-627,,,-627,-627,,-627,,-627,,-627,,-627,-627,-627,-627,-627', -'-627,-627,,-627,-627,-627,,,,,,,,,,,,,-627,-627,,-627,,-627,297,72,73', -'74,12,60,,,,66,67,-627,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,654,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,-239,,,65', -',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,654,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', -'251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', -',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', -'92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,638,11', -'48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', -'247,252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36', -',,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91', -'83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74', -'12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94', -'95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,', -'257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248', -'244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96', -'97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255', -'256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', -'238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65', -',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', -'251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', -',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', -'92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', -',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', -',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247', -'252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61', -'62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83', -'85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', -'258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', -'297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', -'88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', -'259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', -'47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', -',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', -'253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', -',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', -'86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60', -',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', -',22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', -'258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', -'297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', -'88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', -'259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', -'47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', -',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', -'253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', -',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', -'86,87,89,,,,84,92,223,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', -'60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', -'258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', -'297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', -'104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', -',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', -'88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', -',,255,256,,,,,,257,258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241', -'238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', -'251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62,,,63,,38,240', -',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', -'69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', -'253,254,249,251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62', -',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', -',,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,', -',36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,8,72,73,74', -'12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257', -'258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', -'23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', -'72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,', -',,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250', -'248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628', -'-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', -'239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', -',,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259', -',255,256,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', -'238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628', -'249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', -'47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,8,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628', -'-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38', -'240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11', -'48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', -',,,,,,,,,,,,,,,257,258,,43,,,299,,243,61,62,,,63,,38,240,,246,47,242', -'241,238,239,257,258,,23,,,,,91,83,85,86,87,89,,,240,84,92,,242,241,238', -'239,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69', -'71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,,,,,,,,,', -',,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239', -',,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', -'72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,', -'47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', -'102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', -'63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', -',291,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', -',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', -'89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', -',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', -'48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', -',,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,', -',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94', -'95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47', -',,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,', -',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', -'30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', -'102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', -'63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', -',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,', -',304,,,61,62,,,63,,303,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,', -',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308', -',,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,320', -',,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,678,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,', -',,,978,,,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,', -',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,116,,,,,115,65,,,81,88,90,,', -'96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,352,,,36,,,61,62,,,63,', -'38,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,', -'96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -'290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62', -',,63,,,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', -',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', -'36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,401,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', -',,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', -',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', -'92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', -'34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', -'89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', -',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', -'48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', -'86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', -',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', -',,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,', -',,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', -',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,223,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', -',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', -'85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', -'67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,', -'235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', -',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417', -',,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', -'102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,535,,61,62', -',,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', -',32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', -'310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', -'62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', -',228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,', -',84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,', -'68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,', -'108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,', -',,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46', -'44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,', -',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', -'74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284', -',47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88', -'90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', -'310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', -'62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', -'100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', -',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', -'100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', -',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,775,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,', -',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34', -'75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', -'65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', -',,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288', -',,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', -'314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287', -'85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', -',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,,,47,,,,,', -',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', -'47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', -',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', -',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61', -'62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', -'90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,', -'32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99', -'101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62', -',,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,401,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,,,,,91,287', -'85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', -',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284,,47,,', -',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234', -',,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', -',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', -',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', -'47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', -'66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', -'46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', -',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', -'60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', -'105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', -'94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', -',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', -'47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', -'317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', -',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', -',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', -'311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', -',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', -',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', -'88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', -',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', -'99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', -'61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', -',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', -'76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', -'59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', -',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', -',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91', -'287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60', -',,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', -'106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', -',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', -'111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', -',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,223,,,,,,65,,291', -'81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', -',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', -'76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', -'100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', -',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', -',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', -'75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', -'98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', -',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', -',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', -'315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', -'109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', -',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', -',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', -'71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', -'107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', -',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', -',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', -'69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', -',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', -',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', -'87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', -'70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', -',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', -',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', -'83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,', -',,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,', -'22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', -'45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23', -',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', -',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', -',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', -',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', -',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', -'97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', -'103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', -',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', -',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', -'72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', -'104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,,102', -'110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,234,,,61,62,,,63,,,,', -',,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,519,,,65,,,81,88,90,,,96', -'97,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205,206', -'185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190', -',,,,,171,178,169,170,166,167,168,127,129,398,397,128,,399,,,,,,,161', -'162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,', -',,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,', -',,,,,,,,,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', -'180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', -'199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', -',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', -'150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', -'204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', -'197,367,366,368,365,172,191,190,,,,,,171,178,169,170,362,363,364,360', -'129,100,99,361,,102,,,,,,,161,162,,157,139,140,141,148,145,147,,,142', -'143,,,,163,164,149,150,,,,,,374,,,,,,,,154,153,,138,160,156,155,151', -'152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200', -'173,193,183,182,203,204,198,181,180,175,201,205,206,185,174,188,192', -'194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178', -'169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148', -'145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187', -'177,200,173,193,183,182,203,204,198,181,180,175,201,205,206,185,174', -'188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,', -'171,178,169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138', -'160,156,155,151,152,146,144,136,159,137,,,165,91,,,,,,,,,,92,,,,,,,', -',158,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205', -'206,185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191', -'190,,,,,,171,178,169,170,166,167,168,127,129,126,,128,,,,,,,,,161,162', -',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,', -',,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,91,,,', -',,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', -'180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', -'199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', -',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', -'150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', -',,165,91,,,,-627,,,,,,92,-627,-627,-627,,,-627,-627,-627,158,-627,,', -',,,,,,-627,-627,,,,,,,,,,-627,-627,,-627,-627,-627,-627,-627,,,,,,,', -'488,431,,,489,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143', -'-627,,,163,164,149,150,-627,,,,,274,-627,,,,,,,154,153,,138,160,156', -'155,151,152,146,144,136,159,137,-627,-627,165,,,,,1042,438,,,1043,,', -'-627,,,,,-627,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,,,,,656,431,,,657,,,,,,,,,161,162,158,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', -',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,1040,431,,,1041', -',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', -'149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', -'159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139,140,141', -'148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153,,138', -'160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570,563', -'565,,562,561,560,570,563,,,573,,,,,158,,573,,,,,,,,,,,,,,,568,,,,,,', -'568,,1012,438,581,580,1011,,,578,577,581,580,,,161,162,,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,574,,,274,,,,574,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,689,431,', -',690,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,,,,,692,438,,,693,,,,,,,,,161,162,158,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', -',138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570', -'563,,,,,,,,,,573,,,,,158,,,,,,,,,,,,,,,,,568,761,656,431,,,657,,,578', -'577,581,580,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,574,,,,154,153,,138,160,156,155,151,152,146', -'144,136,159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139', -'140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', -'570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', -'570,563,565,,562,561,560,570,563,568,,573,,,,,568,,573,,581,580,,,,', -',581,580,,,,565,568,562,561,560,570,563,,568,,,,581,580,,,573,578,577', -'581,580,565,574,562,561,560,570,563,565,574,562,561,560,570,563,,,573', -'568,,,,,,573,,574,578,577,581,580,,565,574,562,561,560,570,563,568,', -',,,,,568,,573,,581,580,,,,578,577,581,580,,,,,574,,,,,,,568,,,,,,,,', -'578,577,581,580,,574,,427,431,,,428,574,,,,,,,,161,162,,157,139,140', -'141,148,145,147,,,142,143,,,574,163,164,149,150,,,,,,274,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,434,438,', -',433,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', -'136,159,137,,,165,,,,,743,431,,,744,,,,,,,,,161,162,158,157,139,140', -'141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', -',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,745,438,,,746', -',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', -'149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', -'159,137,,565,165,562,561,560,570,563,565,,562,561,560,570,563,,,573', -',,,,158,,573,,,,,565,,562,561,560,570,563,,,,568,761,,,,,573,568,,578', -'577,581,580,,,,578,577,581,580,,,,,,,,,568,,,,,,,,,488,431,581,580,489', -',,,574,,,,,161,162,574,157,139,140,141,148,145,147,,,142,143,,,,163', -'164,149,150,,,574,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146', -'144,136,159,137,,,165,,,,,864,438,,,865,,,,,,,,,161,162,158,157,139', -'140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', -'153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', -'570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', -'570,563,,,,,,,,568,551,573,,,,,568,,578,577,581,580,,,,578,577,581,580', -',,,565,568,562,561,560,570,563,,,,578,577,581,580,,,573,,,,,,574,,,', -',,,574,,,,,,,,,568,,,,,,,,574,578,577,581,580,,,,,,,,,,,,,,,,,,,,,,', -',,223,,,,,,,,574' ] - racc_action_table = arr = ::Array.new(26642, nil) +'-629,285,285,-116,587,-115,285,-629,-629,-629,-116,-110,832,-629,-629', +'590,-629,-537,861,-104,-110,832,235,236,-537,-629,1046,285,-102,273', +'274,231,-111,-113,-94,236,-629,-629,281,-629,-629,-629,-629,-629,992', +'-109,831,-114,598,597,-80,-101,-108,-103,763,831,509,-111,236,-115,850', +'602,602,-108,272,271,851,-629,-629,-629,-629,-629,-629,-629,-629,-629', +'-629,-629,-629,-629,-629,-113,591,-629,-629,-629,-104,676,287,287,235', +'-629,-436,287,-629,-102,232,225,226,-629,480,-629,602,-629,-629,-629', +'-629,-629,-629,-629,-106,-629,-629,-629,287,-107,-101,-116,-101,-625', +'-103,-104,-116,860,-104,-626,-629,-629,-304,-103,-102,-629,-112,-102', +'-110,-304,-304,-304,-629,-110,-104,-304,-304,-629,-304,-112,-111,-113', +'602,-102,-100,-111,-113,-101,128,-103,-101,-99,-103,127,602,-114,-102', +'-109,-304,-304,-114,-304,-304,-304,-304,-304,-101,-115,-103,128,128', +'-108,-115,967,127,127,-108,-112,-114,651,-104,236,225,226,225,226,225', +'226,-213,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304', +'-304,-304,479,-625,-304,-304,-304,632,675,128,637,128,-304,648,127,-304', +'127,632,106,107,-304,1004,-304,95,-304,-304,-304,-304,-304,-304,-304', +'96,-304,632,-304,106,107,729,1005,-112,728,650,-625,-626,-112,-115,-527', +'-304,-304,-629,-304,670,-304,-527,824,128,-629,-629,-629,-304,127,477', +'-629,-629,-304,-629,-114,128,634,633,-109,236,127,236,-629,-109,647', +'-623,634,633,630,-103,-105,478,729,-629,-629,731,-629,-629,-629,-629', +'-629,-104,634,633,652,108,109,703,887,582,609,579,578,577,-530,580,1017', +'-113,823,632,-113,-530,108,109,-629,-629,-629,-629,-629,-629,-629,-629', +'-629,-629,-629,-629,-629,-629,-530,231,-629,-629,-629,427,676,-530,778', +'-542,-629,-116,-623,-629,-541,632,-530,780,-629,632,-629,920,-629,-629', +'-629,-629,-629,-629,-629,422,-629,-629,-629,582,-623,579,578,577,-111', +'580,670,-622,634,633,725,-629,-629,-527,-629,1015,-629,793,598,597,-527', +'-527,-527,-629,587,-527,-527,-527,-629,-527,-112,-530,232,-109,725,590', +'787,-527,-108,-527,-527,-527,634,633,405,-110,634,633,640,-527,-527', +'913,-527,-527,-527,-527,-527,810,-539,-536,-527,225,226,-540,-113,-539', +'-536,-527,598,597,-540,632,-622,402,-539,400,-527,880,669,-540,-527', +'-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-527,-622', +'810,-527,-527,-527,-101,-527,-527,591,1035,-527,233,128,-527,-527,397', +'-527,127,-527,632,-527,-110,-527,-527,-527,-527,-527,-527,-527,-539', +'-527,-527,-527,1038,-540,850,128,231,634,633,796,127,-111,632,613,-527', +'-527,-527,-527,669,-527,-213,-527,611,-541,128,-538,-527,-304,-110,127', +'-535,-527,-538,-527,-304,-304,-304,-535,-116,-304,-304,-304,582,-304', +'579,578,577,587,580,634,633,635,-532,-304,-304,-304,128,373,590,-532', +'-102,127,-106,-304,-304,-99,-304,-304,-304,-304,-304,232,231,634,633', +'630,-111,231,-115,541,585,-108,775,1044,230,-542,776,233,539,595,594', +'598,597,228,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304', +'-304,-304,236,-533,-304,-304,-304,-534,826,-304,-533,1047,-304,955,-534', +'-304,-304,955,-304,591,-304,-100,-304,-107,-304,-304,-304,-304,-304', +'-304,-304,232,-304,128,-304,955,232,-109,127,-116,582,1052,579,578,577', +'587,580,-304,-304,-304,-304,627,-304,1017,-304,231,590,339,628,-304', +'-530,740,475,1061,-304,1063,-114,-530,-530,-530,1065,476,-530,-530,-530', +'1067,-530,582,585,579,578,577,256,580,-530,1067,-530,-530,-530,598,597', +'231,729,-629,722,731,-530,-530,662,-530,-530,-530,-530,-530,338,-304', +'276,660,729,231,1017,731,-304,725,253,749,1043,-626,255,254,232,-304', +'725,591,752,1041,227,-530,-530,-530,-530,-530,-530,-530,-530,-530,-530', +'-530,-530,-530,-530,225,226,-530,-530,-530,-629,-530,-530,883,887,-530', +'-626,-629,-530,-530,232,-530,-625,-530,256,-530,-629,-530,-530,-530', +'-530,-530,-530,-530,-304,-530,424,-530,232,883,887,426,425,582,-629', +'579,578,577,587,580,-530,-530,-530,-530,-625,-530,253,-530,231,590,255', +'254,-530,-304,236,1037,224,-530,223,-530,-304,-304,-304,222,780,-629', +'-304,-304,955,-304,-348,585,1008,1017,579,578,577,-348,580,1090,595', +'594,598,597,-305,1067,-348,1067,1067,-304,-304,-305,-304,-304,-304,-304', +'-304,124,-305,236,-305,1067,-295,231,-94,-305,706,236,236,-295,551,236', +'687,232,-305,554,591,717,-295,476,-304,-304,-304,-304,-304,-304,-304', +'-304,-304,-304,-304,-304,-304,-304,-304,-348,-304,-304,-304,718,675', +'-304,722,725,-304,236,-626,-304,732,-305,-304,733,-304,524,-304,737', +'-304,-304,-304,-304,-304,-304,-304,-305,-304,740,-304,-295,232,231,741', +'1008,743,579,578,577,1037,580,745,-304,-304,-629,-105,747,-304,780,755', +'756,-629,-629,-629,-304,757,-629,-629,-629,-304,-629,-114,-304,131,132', +'133,134,135,759,-629,-629,-629,-629,908,909,725,725,910,122,123,-629', +'-629,609,-629,-629,-629,-629,-629,582,725,579,578,577,256,580,782,256', +'232,787,582,256,579,578,577,797,580,131,132,133,134,135,-629,-629,-629', +'-629,-629,-629,-629,-629,-629,-629,-629,-629,-629,-629,798,749,-629', +'-629,-629,256,825,-629,256,-278,-629,680,749,-629,-629,290,-629,256', +'-629,811,-629,752,-629,-629,-629,-629,-629,-629,-629,668,-629,-629,-629', +'266,267,667,236,253,509,663,509,255,254,251,252,-629,-629,-629,-629', +'253,-629,259,-629,255,254,251,252,-629,-444,257,659,258,-629,236,-112', +'-444,-444,-444,828,276,-444,-444,-444,582,-444,579,578,577,587,580,658', +'837,839,-444,-444,-444,522,524,-277,590,656,717,236,649,-444,-444,290', +'-444,-444,-444,-444,-444,290,717,646,643,582,256,579,578,577,585,580', +'582,639,579,578,577,236,580,595,594,598,597,878,-444,-444,-444,-444', +'-444,-444,-444,-444,-444,-444,-444,-444,-444,-444,236,256,-444,-444', +'-444,749,887,-444,725,290,-444,236,749,-444,-444,615,-444,591,-444,614', +'-444,960,-444,-444,-444,-444,-444,-444,-444,415,-444,-444,-444,253,609', +'236,256,255,254,251,252,914,-279,236,549,-444,-444,-651,-444,545,-444', +'919,3,290,-651,-651,-651,-444,236,-651,-651,-651,-444,-651,582,293,579', +'578,577,587,580,542,-651,-651,131,132,133,134,135,256,590,936,717,-651', +'-651,-277,-651,-651,-651,-651,-651,941,256,535,534,266,267,131,132,133', +'134,135,585,946,236,740,949,951,266,267,953,253,955,598,597,255,254', +'251,252,955,236,961,725,236,253,-651,259,-631,255,254,251,252,-651,-79', +'-631,-631,-631,290,-651,-631,-631,-631,725,-631,725,256,524,591,236', +'522,519,725,-631,-631,-631,-631,236,979,-280,-651,-651,266,267,-631', +'-631,290,-631,-631,-631,-631,-631,980,740,-651,983,986,988,253,-651', +'259,990,255,254,251,252,-651,,257,,258,-651,,,,-631,-631,-631,-631,-631', +'-631,-631,-631,-631,-631,-631,-631,-631,-631,,,-631,-631,-631,,,-631', +',,-631,,,-631,-631,,-631,,-631,,-631,,-631,-631,-631,-631,-631,-631', +'-631,,-631,-631,-631,582,,579,578,577,587,580,,,,,,-631,-631,-631,-631', +'590,-631,-630,-631,,,,,-631,-630,-630,-630,,-631,-630,-630,-630,,-630', +'256,,,585,,,,,-630,-630,-630,-630,,,598,597,266,267,,-630,-630,,-630', +'-630,-630,-630,-630,582,,579,578,577,253,580,259,,255,254,251,252,,582', +',579,578,577,,580,591,,-630,-630,-630,-630,-630,-630,-630,-630,-630', +'-630,-630,-630,-630,-630,,749,-630,-630,-630,,,-630,,,-630,,,-630,-630', +'749,-630,,-630,,-630,,-630,-630,-630,-630,-630,-630,-630,,-630,-630', +'-630,582,,579,578,577,587,580,,,,,,-630,-630,-630,-630,590,-630,-651', +'-630,,,,,-630,-651,-651,-651,,-630,-651,-651,-651,582,-651,579,578,577', +'585,580,,,,-651,-651,-651,,595,594,598,597,,,,-651,-651,,-651,-651,-651', +'-651,-651,,,,,,,,,,749,,,,,,,,,,,,591,,-651,-651,-651,-651,-651,-651', +'-651,-651,-651,-651,-651,-651,-651,-651,,,-651,-651,-651,,,-651,,290', +'-651,,,-651,-651,,-651,,-651,,-651,,-651,-651,-651,-651,-651,-651,-651', +',-651,-651,-651,,,,,,,,,,,,,-651,-651,-296,-651,,-651,,,,-296,-296,-296', +'-651,,-296,-296,-296,-651,-296,,,,,,,,,,-296,-296,-296,,,,,,,,-296,-296', +',-296,-296,-296,-296,-296,,,,,,,,,,,,,,,,,,,,,,,,-296,-296,-296,-296', +'-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,,,-296,-296,-296,', +',-296,,,-296,,,-296,-296,,-296,,-296,,-296,,-296,-296,-296,-296,-296', +'-296,-296,,-296,,-296,582,,579,578,577,587,580,,,,,,-296,-296,-296,-296', +'590,-296,-313,-296,,,,,-296,-313,-313,-313,,-296,-313,-313,-313,,-313', +',,,585,,,,,,-313,-313,,595,594,598,597,,,,-313,-313,,-313,-313,-313', +'-313,-313,,,,,,,,,,,,,,,,,,,,,,591,,-313,-313,-313,-313,-313,-313,-313', +'-313,-313,-313,-313,-313,-313,-313,,,-313,-313,-313,,,-313,,293,-313', +',,-313,-313,,-313,,-313,,-313,,-313,-313,-313,-313,-313,-313,-313,,-313', +',-313,,,,,,,,,,,,,-313,-313,,-313,,-313,8,85,86,87,12,78,-313,,,79,80', +'-313,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,', +',,,664,11,49,10,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,', +',266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271', +'257,23,258,,,,103,95,97,98,99,101,,,,96,104,,270,,-252,,,66,,,93,100', +'102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,664,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263', +'273,274,268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38', +'253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101', +',,,96,104,,270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266', +'267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257', +'23,258,,,,103,95,97,98,99,101,,,,96,104,236,270,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,249,250,,,266,267,,43,,,316,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266', +'267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257', +'23,258,,,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102,,,108', +'109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273,274', +'268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259', +'48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104', +',270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +'256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102,,,108,109', +'312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,256,260,261,262,263,273,274,268,269', +'264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255', +'254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,270', +',,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256', +'-652,-652,-652,-652,273,274,,,-652,-652,,,,,,266,267,,43,,,36,,,62,63', +',,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,8,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,11,49,10,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,256,260,261,262,263,273,274,268,269,264,265,,-652,-652', +',,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272', +'271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,-652,-652,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,256,-652,-652,-652,-652,273,274,,,-652,-652,,,,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,256,260,261,262,263,273,274,268,,264,265', +',,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272', +'271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,-652,-652,-652,-652', +'273,274,,,-652,-652,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259', +'48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256', +'-652,-652,-652,-652,273,274,,,-652,-652,,,,,,266,267,,43,,,36,,,62,63', +',,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,', +'106,107,,45,46,44,256,260,261,262,263,273,274,,,264,265,,,,,,266,267', +',43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23', +'258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109', +'312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,256,-652,-652,-652,-652,273,274,,,-652', +'-652,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251', +'252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256,-652,-652,-652', +'-652,273,274,,,-652,-652,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,43,,,316,,,62,63,,,64,,38,,,,48,,,,,,,,23,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,', +'38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43', +',,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'316,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,700,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,', +',,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331', +'332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,', +',,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302', +',300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,', +',49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334', +'116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,320', +',,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,247,,,62,63', +',,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,337,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,', +'247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,', +',,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,', +',83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,', +',,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,128,,,,,127,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,367,,,36,,,62,63', +',,64,,38,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77', +',,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,994,,,247', +',,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,415,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,', +',83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,', +',,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,', +',62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,415,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,432,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,432,,', +',48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,', +',,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,', +',,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +'236,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,', +'335,,,,,,,,,,,,,,,,,,,,994,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48', +',,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,', +',49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,236,,,,,,66,,306,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +'305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,', +',,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,247,,,62,63,,,64,,,,,,,,,,', +',,,,,,,,103,95,97,98,99,101,,,,96,104,,,,537,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325', +',,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,554,,62,63,,,64', +',,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,', +'247,,,62,63,,,64,,302,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96', +'104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49', +',,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305', +'114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,', +',,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120', +'119,121,616,60,112,111,617,,114,122,123,,106,107,,,,335,,,,,,,,,,,,', +',,,,,,,618,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'329,,,120,119,121,616,60,112,111,617,,114,122,123,,106,107,,,,335,,', +',,,,,,,,,,,,,,,,,618,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,,,48,,,,,', +',,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,', +',,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334', +'116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',432,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77', +',,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,', +',,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,', +',,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104', +',,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,', +',,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,300,,48,,,,,,,,246,,,,,103', +'303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62', +'63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,', +'66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99', +'101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,802', +',,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325', +',,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,300,,48', +',,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104', +',,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,', +'335,,,,,,,,,,,,,,,,,,,,1001,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,189,200,190,213,186,206,196,195', +'216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208', +'215,210,382,381,383,380,185,204,203,,,,,,184,191,182,183,377,378,379', +'375,141,112,111,376,,114,,,,,,,173,174,,169,151,152,153,160,157,159', +',,154,155,,,,175,176,161,162,,,,,,389,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,,,,,,,,170,,,,,178,189', +'200,190,213,186,206,196,195,216,217,211,194,193,188,214,218,219,198', +'187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203,', +',,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169,151', +'152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165', +',150,172,168,167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,,104', +',,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211,194', +'193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209,202', +'212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140,', +',,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161', +'162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,103,,,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196', +'195,216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192', +',,,208,215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179', +'180,181,139,141,412,411,140,,413,,,,,,,173,174,,169,151,152,153,160', +'157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,,,,,,,,170,,,,,178', +'189,200,190,213,186,206,196,195,216,217,211,194,193,188,214,218,219', +'198,187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203', +',,,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,', +'104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211', +'194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209', +'202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140', +',,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161', +'162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,,,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195', +'216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208', +'215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181', +'139,141,138,,140,,,,,,,,,173,174,,169,151,152,153,160,157,159,,,154', +'155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,103,,,,,,,,,,104,,507,459,,,508,,,170,,,,', +'178,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,462,466,,,461,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,455,459,,,456', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,894,466,,,895,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,', +',807,466,,,806,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,', +'154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,681,459,,,682,,,,,,170,,', +'173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,683,466,,,684,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,804,459,,,805', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,713,466,,,714,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,582,177,579,578', +'577,587,580,,,,,507,459,,,508,590,,,,,170,,,173,174,178,169,151,152', +'153,160,157,159,,,154,155,585,,,175,176,161,162,,,,,598,597,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,591,683', +'466,,,684,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,,,,,,,,,,681,459,,,682,,,,,,170,,,173,174', +'178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290', +',,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,', +',,,,,,,710,459,,,711,,,,,,170,,,173,174,178,169,151,152,153,160,157', +'159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,,,,,,,,,,772,466,,,773,,,,,,170', +',,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,770,459,,,771,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,1071,466,,,1070', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,1074,459,,,1075,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,582,,579', +'578,577,587,580,,,1076,466,,,1077,,,590,,,170,,,173,174,178,169,151', +'152,153,160,157,159,,,154,155,,,585,175,176,161,162,,,,,,290,598,597', +',,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,582,177,579', +'578,577,587,580,,,,,,591,,,,590,,,,,170,,,,582,178,579,578,577,587,580', +',,,,,,585,,582,590,579,578,577,587,580,595,594,598,597,,,,,582,590,579', +'578,577,587,580,,585,,,,,,,,590,,,598,597,,,585,568,,,,591,,,,595,594', +'598,597,,,585,582,,579,578,577,587,580,,595,594,598,597,,,591,582,590', +'579,578,577,587,580,,,,,,,,591,582,590,579,578,577,587,580,,585,,,,', +',591,,590,,,598,597,,,585,582,,579,578,577,587,580,,,,598,597,,,585', +'582,590,579,578,577,587,580,,,,598,597,,,591,582,590,579,578,577,587', +'580,,585,,,,,,591,,590,595,594,598,597,,,585,,,,,,591,,,595,594,598', +'597,,,585,582,,579,578,577,587,580,,595,594,598,597,,,591,,590,,,,,', +',,,,,,,591,,,,,,,236,,585,,,,,,591,,,,,598,597,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,591' ] + racc_action_table = arr = ::Array.new(26358, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -910,950 +922,938 @@ end clist = [ -'434,313,322,1040,1043,349,64,434,434,434,603,669,22,434,434,61,434,318', -'318,595,684,80,290,746,361,434,670,392,861,80,599,361,389,757,599,684', -'434,434,757,434,434,434,434,434,322,862,871,993,22,993,61,871,821,689', -'690,744,1055,229,350,322,670,732,732,914,1041,936,975,434,434,434,434', -'434,434,434,434,434,434,434,434,434,434,587,1043,434,434,434,550,434', -'313,746,392,434,976,64,434,389,318,318,669,434,285,434,774,434,434,434', -'434,434,434,434,349,434,434,434,229,282,603,1040,1043,821,689,690,1040', -'1043,595,98,434,434,746,434,979,434,98,98,98,603,1042,98,98,98,603,98', -'861,434,434,861,1018,861,342,98,862,98,98,98,821,689,690,821,689,690', -'744,98,98,350,98,98,98,98,98,343,1055,636,821,689,690,1055,692,914,1041', -'936,975,587,914,1041,936,975,587,743,353,281,227,550,98,98,98,98,98', -'98,98,98,98,98,98,98,98,98,976,588,98,98,98,976,98,98,1042,863,98,779', -'745,98,98,29,98,656,98,657,98,632,98,98,98,98,98,98,98,630,98,627,98', -'764,764,795,692,692,979,44,44,227,270,979,1042,98,98,98,98,1042,98,598', -'98,370,1018,226,342,101,456,1018,370,342,98,98,101,101,101,451,451,101', -'101,101,692,101,656,692,657,343,745,486,29,101,343,101,101,101,743,353', -'699,699,692,267,795,101,101,235,101,101,101,101,101,588,29,945,598,797', -'588,798,945,863,507,598,226,486,863,456,598,745,44,44,598,494,800,764', -'101,101,101,101,101,101,101,101,101,101,101,101,101,101,598,41,101,101', -'101,495,101,101,704,962,101,704,962,101,101,394,101,494,101,451,101', -'597,101,101,101,101,101,101,101,27,101,598,101,507,507,507,27,977,42', -'495,699,1026,1026,41,977,101,101,101,101,620,101,762,101,977,507,462', -'762,658,41,801,367,802,101,101,658,658,658,367,711,658,658,658,334,658', -'597,334,394,394,394,711,42,597,658,658,658,658,597,462,341,341,597,462', -'462,658,658,42,658,658,658,658,658,932,977,932,932,932,335,932,597,335', -'620,620,711,711,726,639,726,726,726,620,726,804,864,805,658,658,658', -'658,658,658,658,658,658,658,658,658,658,658,18,597,658,658,658,225,658', -'658,711,806,658,807,225,658,658,623,658,231,658,639,658,225,658,658', -'658,658,658,658,658,890,658,658,658,548,639,230,548,864,386,228,890', -'932,18,383,864,658,658,658,658,864,658,433,658,864,726,820,294,18,433', -'433,433,294,658,658,433,433,824,433,49,827,225,864,828,890,890,49,623', -'623,463,524,538,538,966,833,49,623,524,433,433,966,433,433,433,433,433', -'524,865,834,966,386,386,386,864,865,383,383,383,890,865,428,463,427', -'865,380,463,463,380,835,433,433,433,433,433,433,433,433,433,433,433', -'433,433,433,351,49,433,433,433,836,433,351,840,346,433,841,524,433,346', -'966,351,843,433,428,433,427,433,433,433,433,433,433,433,865,433,307', -'433,749,428,844,427,846,307,849,749,378,380,380,659,433,433,307,433', -'749,433,659,659,659,758,758,659,659,659,362,659,306,433,433,851,351', -'362,366,306,363,659,659,659,126,366,305,363,306,126,126,659,659,305', -'659,659,659,659,659,360,590,365,305,368,904,17,360,307,365,749,368,904', -'17,378,378,378,714,714,20,20,904,17,659,659,659,659,659,659,659,659', -'659,659,659,659,659,659,854,306,659,659,659,364,659,659,589,857,659', -'584,364,659,659,305,659,376,659,207,659,124,659,659,659,659,659,659', -'659,90,659,5,659,904,17,582,5,1050,867,1050,1050,1050,1050,1050,693', -'659,659,659,659,89,659,693,659,1050,88,872,693,59,873,874,693,883,659', -'659,59,59,59,884,579,59,59,59,87,59,324,1050,575,382,376,376,376,324', -'567,59,59,59,1050,1050,601,558,324,557,901,59,59,601,59,59,59,59,59', -'72,556,905,601,906,554,309,908,693,909,553,48,1010,309,1010,1010,1010', -'549,1010,1050,546,385,309,59,59,59,59,59,59,59,59,59,59,59,59,59,59', -'537,324,59,59,59,536,934,59,43,938,59,939,388,59,59,601,59,391,59,944', -'59,528,59,59,59,59,59,59,59,952,59,955,59,1019,309,1019,1019,1019,1019', -'1019,9,9,9,9,9,59,59,59,59,1019,59,30,59,296,296,296,296,296,30,30,30', -'956,59,30,30,30,568,30,568,568,568,1019,568,957,958,960,30,30,30,525', -'765,765,1019,1019,765,765,765,30,30,520,30,30,30,30,30,1024,970,1024', -'1024,1024,40,1024,25,413,568,978,723,518,723,723,723,981,723,568,982', -'983,1019,984,30,30,30,30,30,30,30,30,30,30,30,30,30,30,985,1024,30,30', -'30,515,987,30,514,30,30,19,723,30,30,416,30,418,30,422,30,723,30,30', -'30,30,30,30,30,481,30,30,30,425,497,850,1011,850,850,850,1012,850,1014', -'496,439,30,30,426,30,467,30,439,439,439,16,466,439,439,439,472,439,481', -'30,465,1025,481,481,481,481,439,439,439,439,850,1030,472,472,1031,1032', -'1033,439,439,850,439,439,439,439,439,1034,1035,1036,472,1039,472,15', -'472,472,472,472,13,1044,472,988,472,988,988,988,1045,988,464,3,439,439', -'439,439,439,439,439,439,439,439,439,439,439,439,677,435,439,439,439', -'332,326,439,675,686,439,688,323,439,439,988,439,443,439,691,439,319', -'439,439,439,439,439,439,439,1057,439,439,439,1006,694,1006,1006,1006', -'1006,1006,683,683,683,683,683,439,439,439,439,1006,439,31,439,513,513', -'513,513,513,31,31,31,695,439,31,31,31,668,31,473,662,986,1006,986,986', -'986,698,986,31,31,317,700,1,1006,1006,473,473,703,31,31,312,31,31,31', -'31,31,902,311,902,902,902,473,902,473,710,473,473,473,473,986,660,473', -'852,473,852,852,852,1006,852,31,31,31,31,31,31,31,31,31,31,31,31,31', -'31,336,482,31,31,31,651,725,31,727,31,31,734,739,31,31,308,31,852,31', -'742,31,645,31,31,31,31,31,31,31,347,31,348,31,482,302,301,352,482,482', -'482,482,640,354,300,438,31,31,298,31,,31,438,438,438,,,438,438,438,474', -'438,933,31,933,933,933,,933,,438,438,438,438,,,474,474,,,,438,438,,438', -'438,438,438,438,,,,474,,474,,474,474,474,474,933,,474,,474,,,,,,,,438', -'438,438,438,438,438,438,438,438,438,438,438,438,438,,,438,438,438,,', -'438,,,438,,,438,438,,438,,438,,438,,438,438,438,438,438,438,438,,438', -'438,438,1004,,1004,1004,1004,1004,1004,,,,,,438,438,438,438,1004,438', -'429,438,,,,,,429,429,429,,438,429,429,429,,429,475,,,1004,,,,,429,429', -'429,,,,1004,1004,475,475,,429,429,,429,429,429,429,429,,,,,,475,,475', -',475,475,475,475,,,475,,475,,,,1004,,429,429,429,429,429,429,429,429', -'429,429,429,429,429,429,,,429,429,429,,,429,,429,429,,,429,429,,429', -',429,,429,,429,429,429,429,429,429,429,,429,429,429,,,,,,,,,,,,,429', -'429,,429,,429,974,974,974,974,974,974,,,,974,974,429,,,974,,974,974', -'974,974,974,974,974,,,,,,974,974,974,974,974,974,974,,,974,,,,,446,974', -'974,,974,974,974,974,974,974,974,974,974,,974,974,974,,974,974,,974', -'974,974,446,446,446,446,446,446,446,446,446,446,446,,446,446,,,446,446', -',974,,,974,,,974,974,,,974,,974,446,,446,974,446,446,446,446,446,446', -'446,974,446,,,,974,974,974,974,974,974,,,,974,974,,446,,446,,,974,,', -'974,974,974,,,974,974,234,234,234,234,234,234,,,,234,234,,,,234,,234', -'234,234,234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,661', -'234,234,,234,234,234,234,234,234,234,234,234,,234,234,234,,234,234,', -'234,234,234,661,661,661,661,661,661,661,661,661,661,661,,661,661,,,661', -'661,,234,,,234,,,234,234,,,234,,234,661,,661,234,661,661,661,661,661', -'661,661,234,661,,,,234,234,234,234,234,234,,,,234,234,,661,,,,,234,', -',234,234,234,,,234,234,811,811,811,811,811,811,,,,811,811,,,,811,,811', -'811,811,811,811,811,811,,,,,,811,811,811,811,811,811,811,,,811,,,,,421', -'811,811,,811,811,811,811,811,811,811,811,811,,811,811,811,,811,811,', -'811,811,811,421,421,421,421,421,421,421,421,421,421,421,,421,421,,,421', -'421,,811,,,811,,,811,811,,,811,,811,421,,421,811,421,421,421,421,421', -'421,421,811,421,,,,811,811,811,811,811,811,,,,811,811,,421,,,,,811,', -',811,811,811,,,811,811,209,209,209,209,209,209,,,,209,209,,,,209,,209', -'209,209,209,209,209,209,,,,,,209,209,209,209,209,209,209,,,209,,,,,', -'209,209,,209,209,209,209,209,209,209,209,209,,209,209,209,,209,209,', -'209,209,209,776,776,776,776,776,776,776,776,776,776,776,,776,776,,,776', -'776,,209,,,209,,,209,209,,,209,,209,776,,776,209,776,776,776,776,776', -'776,776,209,776,,,,209,209,209,209,209,209,,,,209,209,,776,,,,,209,', -',209,209,209,,,209,209,941,941,941,941,941,941,,,,941,941,,,,941,,941', -'941,941,941,941,941,941,,,,,,941,941,941,941,941,941,941,,,941,,,,,', -'941,941,,941,941,941,941,941,941,941,941,941,,941,941,941,,941,941,', -'941,941,941,788,788,788,788,788,788,788,788,788,788,788,,788,788,,,788', -'788,,941,,,941,,,941,941,,,941,,941,788,,788,941,788,788,788,788,788', -'788,788,941,788,,,,941,941,941,941,941,941,,,,941,941,,788,,,,,941,', -',941,941,941,,,941,941,709,709,709,709,709,709,,,,709,709,,,,709,,709', -'709,709,709,709,709,709,,,,,,709,709,709,709,709,709,709,,,709,,,,,', -'709,709,,709,709,709,709,709,709,709,709,709,,709,709,709,,709,709,', -'709,709,709,781,781,781,781,781,781,781,781,781,781,781,,781,781,,,781', -'781,,709,,,709,,,709,709,,,709,,709,781,,781,709,781,781,781,781,781', -'781,781,709,781,,,,709,709,709,709,709,709,,,,709,709,,781,,,,,709,', -',709,709,709,,,709,709,859,859,859,859,859,859,,,,859,859,,,,859,,859', -'859,859,859,859,859,859,,,,,,859,859,859,859,859,859,859,,,859,,,,,', -'859,859,,859,859,859,859,859,859,859,859,859,,859,859,859,,859,859,', -'859,859,859,889,889,889,889,889,889,889,889,889,889,889,,889,889,,,889', -'889,,859,,,859,,,859,859,,,859,,859,889,,889,859,889,889,889,889,889', -'889,889,859,889,,,,859,859,859,859,859,859,,,,859,859,,889,,,,,859,', -',859,859,859,,,859,859,858,858,858,858,858,858,,,,858,858,,,,858,,858', -'858,858,858,858,858,858,,,,,,858,858,858,858,858,858,858,,,858,,,,,', -'858,858,,858,858,858,858,858,858,858,858,858,,858,858,858,,858,858,', -'858,858,858,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,858,,,858', -',,858,858,,,858,,858,24,,24,858,24,24,24,24,24,24,24,858,24,,,,858,858', -'858,858,858,858,,,,858,858,,24,,,,,858,,,858,858,858,,,858,858,998,998', -'998,998,998,998,,,,998,998,,,,998,,998,998,998,998,998,998,998,,,,,', -'998,998,998,998,998,998,998,,,998,,,,,,998,998,,998,998,998,998,998', -'998,998,998,998,,998,998,998,,998,998,,998,998,998,697,697,697,697,697', -'697,697,697,697,697,697,,697,697,,,697,697,,998,,,998,,,998,998,,,998', -',998,697,,697,998,697,697,697,697,697,697,697,998,697,,,,998,998,998', -'998,998,998,,,,998,998,,697,,,,,998,,,998,998,998,,,998,998,997,997', -'997,997,997,997,,,,997,997,,,,997,,997,997,997,997,997,997,997,,,,,', -'997,997,997,997,997,997,997,,,997,,,,,,997,997,,997,997,997,997,997', -'997,997,997,997,,997,997,997,,997,997,,997,997,997,886,886,886,886,886', -'886,886,886,886,886,886,,886,886,,,886,886,,997,,,997,,,997,997,,,997', -',997,886,,886,997,886,886,886,886,886,886,886,997,886,,,,997,997,997', -'997,997,997,,,,997,997,,886,,,,,997,,,997,997,997,,,997,997,994,994', -'994,994,994,994,,,,994,994,,,,994,,994,994,994,994,994,994,994,,,,,', -'994,994,994,994,994,994,994,,,994,,,,,,994,994,,994,994,994,994,994', -'994,994,994,994,,994,994,994,,994,994,,994,994,994,783,783,783,783,783', -'783,783,783,783,783,783,,783,783,,,783,783,,994,,,994,,,994,994,,,994', -',994,783,,783,994,783,783,783,783,783,783,783,994,783,,,,994,994,994', -'994,994,994,,,,994,994,,783,,,,,994,,,994,994,994,,,994,994,304,304', -'304,304,304,304,,,,304,304,,,,304,,304,304,304,304,304,304,304,,,,,', -'304,304,304,304,304,304,304,,,304,,,,,,304,304,,304,304,304,304,304', -'304,304,304,304,,304,304,304,,304,304,,304,304,304,441,441,441,441,441', -'441,441,441,441,441,441,,441,441,,,441,441,,304,,,304,,,304,304,,,304', -',304,441,,441,304,441,441,441,441,441,441,441,304,441,,,,304,304,304', -'304,304,304,,,,304,304,,441,,,,,304,,,304,304,304,,,304,304,911,911', -'911,911,911,911,,,,911,911,,,,911,,911,911,911,911,911,911,911,,,,,', -'911,911,911,911,911,911,911,,,911,,,,,,911,911,,911,911,911,911,911', -'911,911,911,911,,911,911,911,,911,911,,911,911,911,786,786,786,786,786', -'786,786,786,786,786,786,,786,786,,,786,786,,911,,,911,,,911,911,,,911', -',911,786,,786,911,786,786,786,786,786,786,786,911,786,,,,911,911,911', -'911,911,911,,,,911,911,,786,,,,,911,,,911,911,911,,,911,911,826,826', -'826,826,826,826,,,,826,826,,,,826,,826,826,826,826,826,826,826,,,,,', -'826,826,826,826,826,826,826,,,826,,,,,,826,826,,826,826,826,826,826', -'826,826,826,826,,826,826,826,,826,826,,826,826,826,279,279,279,279,279', -'279,279,279,279,279,279,,279,279,,,279,279,,826,,,826,,,826,826,,,826', -',826,279,,279,826,279,279,279,279,279,279,279,826,279,,,,826,826,826', -'826,826,826,,,,826,826,,279,,,,,826,,,826,826,826,,,826,826,815,815', -'815,815,815,815,,,,815,815,,,,815,,815,815,815,815,815,815,815,,,,,', -'815,815,815,815,815,815,815,,,815,,,,,,815,815,,815,815,815,815,815', -'815,815,815,815,,815,815,815,,815,815,,815,815,815,485,485,485,485,485', -'485,485,485,485,485,485,,485,485,,,485,485,,815,,,815,,,815,815,,,815', -',815,485,,485,815,485,485,485,485,485,485,485,815,485,,,,815,815,815', -'815,815,815,,,,815,815,485,485,,,,,815,,,815,815,815,,,815,815,816,816', -'816,816,816,816,,,,816,816,,,,816,,816,816,816,816,816,816,816,,,,,', -'816,816,816,816,816,816,816,,,816,,,,,,816,816,,816,816,816,816,816', -'816,816,816,816,,816,816,816,,816,816,,816,816,816,790,790,790,790,790', -'790,790,790,790,790,790,,790,790,,,790,790,,816,,,816,,,816,816,,,816', -',816,790,,790,816,790,790,790,790,790,790,790,816,790,,,,816,816,816', -'816,816,816,,,,816,816,,790,,,,,816,,,816,816,816,,,816,816,907,907', -'907,907,907,907,,,,907,907,,,,907,,907,907,907,907,907,907,907,,,,,', -'907,907,907,907,907,907,907,,,907,,,,,,907,907,,907,907,907,907,907', -'907,907,907,907,,907,907,907,,907,907,,907,907,907,534,534,534,534,534', -'534,534,534,534,534,534,,534,534,,,534,534,,907,,,907,,,907,907,,,907', -',907,534,,534,907,534,534,534,534,534,534,534,907,534,,,,907,907,907', -'907,907,907,,,,907,907,,534,,,,,907,,,907,907,907,,,907,907,299,299', -'299,299,299,299,,,,299,299,,,,299,,299,299,299,299,299,299,299,,,,,', -'299,299,299,299,299,299,299,,,299,,,,,,299,299,,299,299,299,299,299', -'299,299,299,299,,299,299,299,,299,299,,299,299,299,483,483,483,483,483', -'483,483,,,483,483,,,,,,483,483,,299,,,299,,,299,299,,,299,,299,483,', -'483,299,483,483,483,483,483,483,483,299,483,,,,299,299,299,299,299,299', -',,,299,299,,,,,,,299,,,299,299,299,,,299,299,989,989,989,989,989,989', -',,,989,989,,,,989,,989,989,989,989,989,989,989,,,,,,989,989,989,989', -'989,989,989,,,989,,,,,,989,989,,989,989,989,989,989,989,989,989,989', -',989,989,989,,989,989,,989,989,989,460,460,460,460,460,460,460,460,460', -'460,460,,460,460,,,460,460,,989,,,989,,,989,989,,,989,,989,460,,460', -'989,460,460,460,460,460,460,460,989,460,,,,989,989,989,989,989,989,', -',,989,989,,,,,,,989,,,989,989,989,,,989,989,329,329,329,329,329,329', -',,,329,329,,,,329,,329,329,329,329,329,329,329,,,,,,329,329,329,329', -'329,329,329,,,329,,,,,,329,329,,329,329,329,329,329,329,329,329,329', -',329,329,329,,329,329,,329,329,329,461,461,461,461,461,461,461,461,461', -'461,461,,461,461,,,461,461,,329,,,329,,,329,329,,,329,,329,461,,461', -'329,461,461,461,461,461,461,461,329,461,,,,329,329,329,329,329,329,', -',,329,329,,,,,,,329,,,329,329,329,,,329,329,708,708,708,708,708,708', -',,,708,708,,,,708,,708,708,708,708,708,708,708,,,,,,708,708,708,708', -'708,708,708,,,708,,,,,,708,708,,708,708,708,708,708,708,708,708,708', -',708,708,708,,708,708,,708,708,708,477,477,477,477,477,477,477,,,477', -'477,,,,,,477,477,,708,,,708,,,708,708,,,708,,708,477,,477,708,477,477', -'477,477,477,477,477,708,477,,,,708,708,708,708,708,708,,,,708,708,,', -',,,,708,,,708,708,708,,,708,708,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2', -'2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,,2', -'2,2,478,478,478,478,478,478,478,,,478,478,,,,,,478,478,,2,,,2,,,2,2', -',,2,,2,478,,478,2,478,478,478,478,478,478,478,2,478,,,,2,2,2,2,2,2,', -',,2,2,,,,,,,2,,,2,2,2,,,2,2,759,759,759,759,759,759,,,,759,759,,,,759', -',759,759,759,759,759,759,759,,,,,,759,759,759,759,759,759,759,,,759', -',,,,,759,759,,759,759,759,759,759,759,759,759,759,,759,759,759,,759', -'759,,759,759,759,479,479,479,479,479,479,479,,,479,479,,,,,,479,479', -',759,,,759,,,759,759,,,759,,759,479,,479,759,479,479,479,479,479,479', -'479,759,479,,,,759,759,759,759,759,759,,,,759,759,,,,,,,759,,,759,759', -'759,,,759,759,868,868,868,868,868,868,,,,868,868,,,,868,,868,868,868', -'868,868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,868,868', -',868,868,868,868,868,868,868,868,868,,868,868,868,,868,868,,868,868', -'868,480,480,480,480,480,480,480,,,480,480,,,,,,480,480,,868,,,868,,', -'868,868,,,868,,868,480,,480,868,480,480,480,480,480,480,480,868,480', -',,,868,868,868,868,868,868,,,,868,868,,,,,,,868,,,868,868,868,,,868', -'868,760,760,760,760,760,760,,,,760,760,,,,760,,760,760,760,760,760,760', -'760,,,,,,760,760,760,760,760,760,760,,,760,,,,,,760,760,,760,760,760', -'760,760,760,760,760,760,,760,760,760,,760,760,,760,760,760,484,484,484', -'484,484,484,484,484,,484,484,,,,,,484,484,,760,,,760,,,760,760,,,760', -',760,484,,484,760,484,484,484,484,484,484,484,760,484,,,,760,760,760', -'760,760,760,,,,760,760,,,,,,,760,,,760,760,760,,,760,760,766,766,766', -'766,766,766,,,,766,766,,,,766,,766,766,766,766,766,766,766,,,,,,766', -'766,766,766,766,766,766,,,766,,,,,,766,766,,766,766,766,766,766,766', -'766,766,766,,766,766,766,,766,766,,766,766,766,471,471,471,471,471,471', -'471,,,471,471,,,,,,471,471,,766,,,766,,,766,766,,,766,,766,471,,471', -'766,471,471,471,471,471,471,471,766,471,,,,766,766,766,766,766,766,', -',,766,766,,,,,,,766,,,766,766,766,,,766,766,407,407,407,407,407,407', -',,,407,407,,,,407,,407,407,407,407,407,407,407,,,,,,407,407,407,407', -'407,407,407,,,407,,,,,,407,407,407,407,407,407,407,407,407,407,407,407', -',407,407,407,,407,407,,407,407,407,476,476,476,476,476,476,476,,,476', -'476,,,,,,476,476,,407,,,407,,,407,407,,,407,,407,476,,476,407,476,476', -'476,476,476,476,476,407,476,,,,407,407,407,407,407,407,,,,407,407,,', -',,,,407,,,407,407,407,,,407,407,36,36,36,36,36,36,,,,36,36,,,,36,,36', -'36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36,,36,36,36', -'36,36,36,36,36,36,,36,36,36,,36,36,,36,36,36,468,,,,,,,,,,,,,,,,468', -'468,,36,,,36,,470,36,36,,,36,,36,468,,468,36,468,468,468,468,470,470', -',36,,,,,36,36,36,36,36,36,,,470,36,36,,470,470,470,470,,36,,,36,36,36', -',,36,36,583,583,583,583,583,583,,,,583,583,,,,583,,583,583,583,583,583', -'583,583,,,,,,583,583,583,583,583,583,583,,,583,,,,,,583,583,,583,583', -'583,583,583,583,583,583,583,,583,583,583,,583,583,,583,583,583,469,', -',,,,,,,,,,,,,,469,469,,583,,,583,,,583,583,,,583,,583,469,,469,583,469', -'469,469,469,,,,583,,,,,583,583,583,583,583,583,,,,583,583,,,,,,,583', -',,583,583,583,,,583,583,586,586,586,586,586,586,,,,586,586,,,,586,,586', -'586,586,586,586,586,586,,,,,,586,586,586,586,586,586,586,,,586,,,,,', -'586,586,,586,586,586,586,586,586,586,586,586,,586,586,586,,586,586,', -'586,586,586,,,,,,,,,,,,,,,,,,,,586,,,586,,,586,586,,,586,,586,,,,586', -',,,,,,,586,,,,,586,586,586,586,586,586,,,,586,586,,,,,,,586,,,586,586', -'586,,,586,586,257,257,257,,257,,,,257,257,,,,257,,257,257,257,257,257', -'257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257,257', -'257,257,257,257,257,,257,257,257,,257,257,,257,257,257,,,,,,,,,,,,,', -',,,,,,257,,,257,,,257,257,,,257,,,,,,257,,,,,,,,257,,,,,257,257,257', -'257,257,257,,,,257,257,,,,,,,257,,,257,257,257,,,257,257,455,455,455', -',455,,,,455,455,,,,455,,455,455,455,455,455,455,455,,,,,,455,455,455', -'455,455,455,455,,,455,,,,,,,455,,,455,455,455,455,455,455,455,455,455', -'455,455,455,,455,455,,455,455,455,,,,,,,,,,,,,,,,,,,,455,,,455,,,455', -'455,,,455,,455,,455,,455,,,,,,,,455,,,,,455,455,455,455,455,455,,,,455', -'455,,,,,,,455,,455,455,455,455,,,455,455,8,8,8,8,8,,,,8,8,,,,8,,8,8', -'8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8', -',8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,', -'8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,1015,1015,1015,,1015,,,,1015', -'1015,,,,1015,,1015,1015,1015,1015,1015,1015,1015,,,,,,1015,1015,1015', -'1015,1015,1015,1015,,,1015,,,,,,,1015,,,1015,1015,1015,1015,1015,1015', -'1015,1015,1015,1015,1015,1015,,1015,1015,,1015,1015,1015,,,,,,,,,,,', -',,,,,,,,1015,,,1015,,,1015,1015,,,1015,,1015,,1015,,1015,,,,,,,,1015', -',,,,1015,1015,1015,1015,1015,1015,,,,1015,1015,,,,,,,1015,,1015,1015', -'1015,1015,,,1015,1015,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23,23,23', -'23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23,23,23', -',23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23,,,23,', -',,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,,,23,23,23', -',,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32', -'32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,', -'32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32', -',,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32,,,32', -'32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33', -'33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,,33,33', -',33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33,,,,,,', -',33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33,33,34', -'34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34', -'34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,,34,34', -'34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,,,34,,,', -',34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37,37,37,', -'37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,', -'37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,', -',,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37', -'37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,,38', -',38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38', -'38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38', -',,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,,,38', -',,38,38,38,,,38,38,940,940,940,,940,,,,940,940,,,,940,,940,940,940,940', -'940,940,940,,,,,,940,940,940,940,940,940,940,,,940,,,,,,,940,,,940,940', -'940,940,940,940,940,940,,940,940,940,,940,940,,940,940,940,,,,,,,,,', -',,,,,,,,,,940,,,940,,,940,940,,,940,,940,,,,940,,,,,,,,940,,,,,940,940', -'940,940,940,940,,,,940,940,,,,,,,940,,,940,940,940,,,940,940,915,915', -'915,,915,,,,915,915,,,,915,,915,915,915,915,915,915,915,,,,,,915,915', -'915,915,915,915,915,,,915,,,,,,,915,,,915,915,915,915,915,915,915,915', -',915,915,915,,915,915,,,,915,,,,,,,,,,,,,,,,,,,,915,,,915,,,915,915', -',,915,,,,,,,,,,,,,,,,,,,915,915,915,915,915,915,,,,915,915,,,,,,,915', -',,915,915,915,,,915,915,45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45', -'45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45', -'45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45', -',,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45', -',,45,45,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46', -'46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46', -'46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,', -'46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,47,47', -'47,,47,,,,47,47,,,,47,,47,47,47,47,47,47,47,,,,,,47,47,47,47,47,47,47', -',,47,,,,,,,47,,,47,47,47,47,47,47,47,47,,47,47,47,,47,47,,47,47,47,', -',,,,,,,,,,,,,,,,,,47,,,47,,,47,47,,,47,,,,,,47,,,,,,,,47,,,,,47,47,47', -'47,47,47,,,,47,47,,,,,,,47,,,47,47,47,,,47,47,62,62,62,,62,,,,62,62', -',,,62,,62,62,62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62', -',,62,62,62,62,62,62,62,62,62,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,', -',,,,,,62,,,62,,,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62', -',,,62,62,,,,,,,62,,62,62,62,62,,,62,62,66,66,66,,66,,,,66,66,,,,66,', -'66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66', -'66,66,66,66,66,66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,,,,,,66,', -',66,,,66,66,,,66,,,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,,66,66,,', -',,,,66,,,66,66,66,,,66,66,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67', -'67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67', -'67,,67,67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67', -',,,,,67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67', -',,67,67,70,70,70,,70,,,,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70', -'70,70,70,70,70,,,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70', -'70,,70,70,70,,,,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,70,,,,,,,', -'70,,,,,70,70,70,70,70,70,,,,70,70,70,,,,,70,70,,,70,70,70,,,70,70,71', -'71,71,,71,,,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71', -'71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,,,71,,', -',,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,71,,,,,,,,,,,,,,,,,71,71,71,71', -'71,71,,,,71,71,,,,,,,71,,,71,71,71,,,71,71,903,903,903,,903,,,,903,903', -',,,903,,903,903,903,903,903,903,903,,,,,,903,903,903,903,903,903,903', -',,903,,,,,,,903,,,903,903,903,903,903,903,903,903,,903,903,903,,903', -'903,,,,903,,,,,,,,,,,,,,,,,,,,903,,,903,,,903,903,,,903,,,,,,,,,,,,', -',,,,,,903,903,903,903,903,903,,,,903,903,,,,,,,903,,,903,903,903,,,903', -'903,888,888,888,,888,,,,888,888,,,,888,,888,888,888,888,888,888,888', -',,,,,888,888,888,888,888,888,888,,,888,,,,,,,888,,,888,888,888,888,888', -'888,888,888,,888,888,888,,888,888,,888,888,888,,,,,,,,,,,,,,,,,,,,888', -',,888,,,888,888,,,888,,,,,,888,,,,,,,,888,,,,,888,888,888,888,888,888', -',,,888,888,,,,,,,888,,,888,888,888,,,888,888,887,887,887,,887,,,,887', -'887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887,887,887,887,887', -'887,,,887,,,,,,,887,,,887,887,887,887,887,887,887,887,887,887,887,887', -',887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887,,,887,887,,,887,', -',,887,,887,,,,,,,,887,,,,,887,887,887,887,887,887,,,,887,887,,,,,,,887', -',887,887,887,887,,,887,887,869,869,869,,869,,,,869,869,,,,869,,869,869', -'869,869,869,869,869,,,,,,869,869,869,869,869,869,869,,,869,,,,,,,869', -',,869,869,869,869,869,869,869,869,,869,869,869,,869,869,,869,869,869', -',,,,,,,,,,,,,,,,,,,869,,,869,,,869,869,,,869,,,,,,869,,,,,,,,869,,,', -',869,869,869,869,869,869,,,,869,869,,,,,,,869,,,869,869,869,,,869,869', -'114,114,114,114,114,,,,114,114,,,,114,,114,114,114,114,114,114,114,', -',,,,114,114,114,114,114,114,114,,,114,,,,,,114,114,114,114,114,114,114', -'114,114,114,114,114,,114,114,114,,114,114,,114,114,114,,,,,,,,,,,,,', -',,,,,,114,,,114,,,114,114,,,114,,114,,,,114,,,,,,,,114,,,,,114,114,114', -'114,114,114,,,,114,114,,,,,,114,114,,,114,114,114,,,114,114,119,119', -'119,,119,,,,119,119,,,,119,,119,119,119,119,119,119,119,,,,,,119,119', -'119,119,119,119,119,,,119,,,,,,,119,,,119,119,119,119,119,119,119,119', -',119,119,119,,119,119,,119,119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119', -'119,,,119,,,,,,119,,,,,,,,119,,,,,119,119,119,119,119,119,,,,119,119', -',,,,,,119,,,119,119,119,,,119,119,120,120,120,,120,,,,120,120,,,,120', -',120,120,120,120,120,120,120,,,,,,120,120,120,120,120,120,120,,,120', -',,,,,,120,,,120,120,120,120,120,120,120,120,,120,120,120,,120,120,,120', -'120,120,,,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120,,,,,,', -',120,,,,,120,120,120,120,120,120,,,,120,120,,,,,,,120,,,120,120,120', -',,120,120,121,121,121,,121,,,,121,121,,,,121,,121,121,121,121,121,121', -'121,,,,,,121,121,121,121,121,121,121,,,121,,,,,,,121,,,121,121,121,121', -'121,121,121,121,,121,121,121,,121,121,,121,121,121,,,,,,,,,,,,,,,,,', -',,121,,,121,,,121,121,,,121,,,,,,121,,,,,,,,121,,,,,121,121,121,121', -'121,121,,,,121,121,,,,,,,121,,,121,121,121,,,121,121,122,122,122,,122', -',,,122,122,,,,122,,122,122,122,122,122,122,122,,,,,,122,122,122,122', -'122,122,122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122,,122,122', -'122,,122,122,,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122', -',,,,,122,,,,,,,,122,,,,,122,122,122,122,122,122,,,,122,122,,,,,,,122', -',,122,122,122,,,122,122,123,123,123,123,123,,,,123,123,,,,123,,123,123', -'123,123,123,123,123,,,,,,123,123,123,123,123,123,123,,,123,,,,,,123', -'123,,123,123,123,123,123,123,123,123,123,,123,123,123,,123,123,,123', -'123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123,,,123,,123,,,,123,,,', -',,,,123,,,,,123,123,123,123,123,123,,,,123,123,,,,,,,123,,,123,123,123', -',,123,123,210,210,210,,210,,,,210,210,,,,210,,210,210,210,210,210,210', -'210,,,,,,210,210,210,210,210,210,210,,,210,,,,,,,210,,,210,210,210,210', -'210,210,210,210,,210,210,210,,210,210,,210,210,210,,,,,,,,,,,,,,,,,', -',,210,,,210,,,210,210,,,210,,210,,,,210,,,,,,,,210,,,,,210,210,210,210', -'210,210,,,,210,210,,,,,,,210,,,210,210,210,,,210,210,211,211,211,,211', -',,,211,211,,,,211,,211,211,211,211,211,211,211,,,,,,211,211,211,211', -'211,211,211,,,211,,,,,,,211,,,211,211,211,211,211,211,211,211,,211,211', -'211,,211,211,,211,211,211,,,,,,,,,,,,,,,,,,,,211,,,211,,,211,211,,,211', -',,,,,211,,,,,,,,211,,,,,211,211,211,211,211,211,,,,211,211,,,,,,,211', -',,211,211,211,,,211,211,212,212,212,,212,,,,212,212,,,,212,,212,212', -'212,212,212,212,212,,,,,,212,212,212,212,212,212,212,,,212,,,,,,,212', -',,212,212,212,212,212,212,212,212,212,212,212,212,,212,212,,212,212', -'212,,,,,,,,,,,,,,,,,,,,212,,,212,,,212,212,,,212,,212,,212,,212,,,,', -',,,212,,,,,212,212,212,212,212,212,,,,212,212,,,,,,,212,,212,212,212', -'212,,,212,212,217,217,217,,217,,,,217,217,,,,217,,217,217,217,217,217', -'217,217,,,,,,217,217,217,217,217,217,217,,,217,,,,,,,217,,,217,217,217', -'217,217,217,217,217,,217,217,217,,217,217,,217,217,217,,,,,,,,,,,,,', -',,,,,,217,,,217,,,217,217,,,217,,,,,,217,,,,,,,,217,,,,,217,217,217', -'217,217,217,,,,217,217,,,,,,,217,,,217,217,217,,,217,217,218,218,218', -',218,,,,218,218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218,218', -'218,218,218,218,,,218,,,,,,,218,,,218,218,218,218,218,218,218,218,,218', -'218,218,,218,218,,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,,,218,218', -',,218,,218,,,,218,,,,,,,,218,,,,,218,218,218,218,218,218,,,,218,218', -',,,,,,218,,,218,218,218,,,218,218,219,219,219,,219,,,,219,219,,,,219', -',219,219,219,219,219,219,219,,,,,,219,219,219,219,219,219,219,,,219', -',,,,,,219,,,219,219,219,219,219,219,219,219,,219,219,219,,219,219,,219', -'219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219,,,,,,219,,,,,,', -',219,,,,,219,219,219,219,219,219,,,,219,219,,,,,,,219,,,219,219,219', -',,219,219,220,220,220,,220,,,,220,220,,,,220,,220,220,220,220,220,220', -'220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220,220', -'220,220,220,220,,220,220,220,,220,220,,220,220,220,,,,,,,,,,,,,,,,,', -',,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,220,,,,,220,220,220,220', -'220,220,,,,220,220,,,,,,,220,,,220,220,220,,,220,220,221,221,221,,221', -',,,221,221,,,,221,,221,221,221,221,221,221,221,,,,,,221,221,221,221', -'221,221,221,,,221,,,,,,,221,,,221,221,221,221,221,221,221,221,,221,221', -'221,,221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221', -',,,,,221,,,,,,,,221,,,,,221,221,221,221,221,221,,,,221,221,,,,,,,221', -',,221,221,221,,,221,221,222,222,222,,222,,,,222,222,,,,222,,222,222', -'222,222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,,222', -',,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222,222', -',,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222,,,,,,222,,,,,,,,222,,,', -',222,222,222,222,222,222,,,,222,222,222,,,,,,222,,,222,222,222,,,222', -'222,856,856,856,,856,,,,856,856,,,,856,,856,856,856,856,856,856,856', -',,,,,856,856,856,856,856,856,856,,,856,,,,,,,856,,,856,856,856,856,856', -'856,856,856,,856,856,856,,856,856,,856,856,856,,,,,,,,,,,,,,,,,,,,856', -',,856,,,856,856,,,856,,,,,,856,,,,,,,,856,,,,,856,856,856,856,856,856', -',,,856,856,,,,,,,856,,,856,856,856,,,856,856,741,741,741,,741,,,,741', -'741,,,,741,,741,741,741,741,741,741,741,,,,,,741,741,741,741,741,741', -'741,,,741,,,,,,,741,,,741,741,741,741,741,741,741,741,,741,741,741,', -'741,741,,741,741,741,,,,,,,,,,,,,,,,,,,,741,,,741,,,741,741,,,741,,741', -',,,741,,,,,,,,741,,,,,741,741,741,741,741,741,,,,741,741,,,,,,,741,', -',741,741,741,,,741,741,721,721,721,,721,,,,721,721,,,,721,,721,721,721', -'721,721,721,721,,,,,,721,721,721,721,721,721,721,,,721,,,,,,,721,,,721', -'721,721,721,721,721,721,721,,721,721,721,,721,721,,721,721,721,,,,,', -',,,,,,,,,,,,,,721,,,721,,,721,721,,,721,,,,,,721,,,,,,,,721,,,,,721', -'721,721,721,721,721,,,,721,721,,,,,,,721,,,721,721,721,,,721,721,701', -'701,701,,701,,,,701,701,,,,701,,701,701,701,701,701,701,701,,,,,,701', -'701,701,701,701,701,701,,,701,,,,,,,701,,,701,701,701,701,701,701,701', -'701,,701,701,701,,701,701,,701,701,701,,,,,,,,,,,,,,,,,,,,701,,,701', -',,701,701,,,701,,701,,,,701,,,,,,,,701,,,,,701,701,701,701,701,701,', -',,701,701,,,,,,,701,,,701,701,701,,,701,701,696,696,696,,696,,,,696', -'696,,,,696,,696,696,696,696,696,696,696,,,,,,696,696,696,696,696,696', -'696,,,696,,,,,,,696,,,696,696,696,696,696,696,696,696,,696,696,696,', -'696,696,,,,696,,,,,,,,,,,,,,,,,,,,696,,,696,,,696,696,,,696,,,,,,,,', -',,,,,,,,,,696,696,696,696,696,696,,,,696,696,,,,,,,696,,,696,696,696', -',,696,696,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320', +'462,690,65,1002,980,614,330,462,462,462,368,892,688,462,462,980,462', +'377,735,711,1088,838,22,1006,377,462,1006,29,710,47,47,27,1074,1075', +'705,930,462,462,27,462,462,462,462,462,931,365,688,1077,980,980,705', +'844,364,713,604,838,282,770,22,1044,721,964,891,998,47,47,721,462,462', +'462,462,462,462,462,462,462,462,462,462,462,462,771,980,462,462,462', +'711,462,690,65,248,462,29,330,462,710,27,790,790,462,244,462,357,462', +'462,462,462,462,462,462,614,462,462,462,29,368,892,1002,844,713,713', +'711,1002,735,711,1077,462,462,806,462,710,462,1076,710,1088,806,806', +'806,462,1088,711,806,806,462,806,462,1074,1075,940,710,365,1074,1075', +'844,604,713,844,364,713,604,356,1077,770,999,806,806,1077,806,806,806', +'806,806,844,1044,713,964,891,998,1044,891,964,891,998,772,773,406,771', +'790,720,720,471,471,784,784,477,806,806,806,806,806,806,806,806,806', +'806,806,806,806,806,243,1076,806,806,806,395,806,357,395,5,806,403,357', +'806,5,526,335,335,806,944,806,92,806,806,806,806,806,806,806,92,806', +'408,806,44,44,560,945,1076,560,406,772,773,1076,477,375,806,806,807', +'806,456,806,375,682,940,807,807,807,806,940,241,807,807,806,807,806', +'356,395,395,999,720,356,471,807,999,403,617,526,526,526,772,773,242', +'565,807,807,565,807,807,807,807,807,456,408,408,408,335,335,526,1020', +'960,1020,960,960,960,376,960,962,456,681,641,682,376,44,44,807,807,807', +'807,807,807,807,807,807,807,807,807,807,807,617,620,807,807,807,220', +'807,617,620,240,807,242,617,807,239,795,617,620,807,398,807,827,807', +'807,807,807,807,807,807,136,807,807,807,752,617,752,752,752,681,752', +'805,616,641,641,971,807,807,110,807,960,807,641,740,740,110,110,110', +'807,737,110,110,110,807,110,807,617,620,240,975,737,978,110,239,110', +'110,110,795,795,102,827,398,398,398,110,110,795,110,110,110,110,110', +'665,322,378,616,355,355,323,805,322,378,616,737,737,323,644,616,101', +'322,100,616,752,804,323,110,110,110,110,110,110,110,110,110,110,110', +'110,110,110,616,916,110,110,110,665,110,110,737,991,110,439,904,110', +'110,99,110,904,110,393,110,665,110,110,110,110,110,110,110,322,110,616', +'110,994,323,996,361,366,644,644,644,361,804,391,366,110,110,110,110', +'455,110,339,110,366,41,900,379,110,684,916,900,380,110,379,110,684,684', +'684,380,439,684,684,684,949,684,949,949,949,949,949,393,393,393,381', +'684,684,684,972,73,949,381,455,972,339,684,684,41,684,684,684,684,684', +'366,324,391,391,391,455,19,339,324,949,41,618,1001,19,42,618,20,324', +'949,949,949,949,19,684,684,684,684,684,684,684,684,684,684,684,684,684', +'684,49,382,684,684,684,383,684,684,382,1010,684,1011,383,684,684,1012', +'684,949,684,42,684,20,684,684,684,684,684,684,684,324,684,309,684,1013', +'19,42,309,20,1090,1014,1090,1090,1090,1090,1090,684,684,684,684,385', +'684,1016,684,238,1090,43,385,684,113,1026,238,1029,684,1030,684,113', +'113,113,1031,238,113,113,113,1032,113,749,1090,749,749,749,484,749,113', +'1034,113,113,113,1090,1090,438,561,894,1040,561,113,113,438,113,113', +'113,113,113,40,895,25,438,858,1000,1053,858,895,1058,484,749,1000,895', +'484,484,238,895,1059,1090,749,1000,18,113,113,113,113,113,113,113,113', +'113,113,113,113,113,113,17,17,113,113,113,894,113,113,758,758,113,1070', +'894,113,113,438,113,894,113,483,113,894,113,113,113,113,113,113,113', +'895,113,138,113,1000,1054,1054,138,138,787,894,787,787,787,787,787,113', +'113,113,113,1071,113,483,113,993,787,483,483,113,461,1073,993,16,113', +'15,113,461,461,461,13,993,894,461,461,1079,461,50,787,1046,1080,1046', +'1046,1046,50,1046,1084,787,787,787,787,542,1085,50,1086,1087,461,461', +'542,461,461,461,461,461,3,776,532,542,1095,326,341,533,776,536,538,516', +'326,341,515,504,993,776,543,787,546,326,341,461,461,461,461,461,461', +'461,461,461,461,461,461,461,461,714,50,461,461,461,548,461,714,555,556', +'461,557,714,461,562,542,714,563,461,566,461,570,461,461,461,461,461', +'461,461,776,461,571,461,326,341,1036,573,946,574,946,946,946,1036,946', +'575,461,461,683,461,584,461,1036,592,596,683,683,683,461,599,683,683', +'683,461,683,461,714,531,531,531,531,531,601,683,683,683,683,791,791', +'605,606,791,791,791,683,683,607,683,683,683,683,683,1052,608,1052,1052', +'1052,488,1052,622,487,1036,625,585,486,585,585,585,648,585,9,9,9,9,9', +'683,683,683,683,683,683,683,683,683,683,683,683,683,683,651,1052,683', +'683,683,498,683,683,485,657,683,473,585,683,683,463,683,552,683,666', +'683,585,683,683,683,683,683,683,683,454,683,683,683,552,552,453,450', +'498,671,440,677,498,498,498,498,683,683,683,683,552,683,552,683,552', +'552,552,552,683,30,552,436,552,683,685,683,30,30,30,686,689,30,30,30', +'568,30,568,568,568,568,568,433,692,694,30,30,30,697,699,431,568,428', +'707,709,405,30,30,712,30,30,30,30,30,715,716,402,400,880,719,880,880', +'880,568,880,878,397,878,878,878,736,878,568,568,568,568,751,30,30,30', +'30,30,30,30,30,30,30,30,30,30,30,753,499,30,30,30,880,760,30,766,30', +'30,769,878,30,30,369,30,568,30,367,30,878,30,30,30,30,30,30,30,363,30', +'30,30,499,362,349,343,499,499,499,499,799,801,803,340,30,30,506,30,336', +'30,812,1,334,506,506,506,30,329,506,506,506,30,506,1067,328,1067,1067', +'1067,1067,1067,325,506,506,348,348,348,348,348,491,1067,836,843,506', +'506,854,506,506,506,506,506,855,490,319,318,491,491,313,313,313,313', +'313,1067,862,863,864,868,869,490,490,871,491,872,1067,1067,491,491,491', +'491,874,877,879,882,317,490,506,490,467,490,490,490,490,506,315,467', +'467,467,506,506,467,467,467,888,467,893,503,301,1067,897,298,297,901', +'467,467,467,467,903,912,915,506,506,503,503,467,467,286,467,467,467', +'467,467,922,923,506,925,926,927,503,506,503,929,503,503,503,503,506', +',503,,503,506,,,,467,467,467,467,467,467,467,467,467,467,467,467,467', +'467,,,467,467,467,,,467,,,467,,,467,467,,467,,467,,467,,467,467,467', +'467,467,467,467,,467,467,467,951,,951,951,951,951,951,,,,,,467,467,467', +'467,951,467,466,467,,,,,467,466,466,466,,467,466,466,466,,466,489,,', +'951,,,,,466,466,466,466,,,951,951,489,489,,466,466,,466,466,466,466', +'466,1015,,1015,1015,1015,489,1015,489,,489,489,489,489,,1017,,1017,1017', +'1017,,1017,951,,466,466,466,466,466,466,466,466,466,466,466,466,466', +'466,,1015,466,466,466,,,466,,,466,,,466,466,1017,466,,466,,466,,466', +'466,466,466,466,466,466,,466,466,466,741,,741,741,741,741,741,,,,,,466', +'466,466,466,741,466,457,466,,,,,466,457,457,457,,466,457,457,457,961', +'457,961,961,961,741,961,,,,457,457,457,,741,741,741,741,,,,457,457,', +'457,457,457,457,457,,,,,,,,,,961,,,,,,,,,,,,741,,457,457,457,457,457', +'457,457,457,457,457,457,457,457,457,,,457,457,457,,,457,,457,457,,,457', +'457,,457,,457,,457,,457,457,457,457,457,457,457,,457,457,457,,,,,,,', +',,,,,457,457,60,457,,457,,,,60,60,60,457,,60,60,60,457,60,,,,,,,,,,60', +'60,60,,,,,,,,60,60,,60,60,60,60,60,,,,,,,,,,,,,,,,,,,,,,,,60,60,60,60', +'60,60,60,60,60,60,60,60,60,60,,,60,60,60,,,60,,,60,,,60,60,,60,,60,', +'60,,60,60,60,60,60,60,60,,60,,60,743,,743,743,743,743,743,,,,,,60,60', +'60,60,743,60,31,60,,,,,60,31,31,31,,60,31,31,31,,31,,,,743,,,,,,31,31', +',743,743,743,743,,,,31,31,,31,31,31,31,31,,,,,,,,,,,,,,,,,,,,,,743,', +'31,31,31,31,31,31,31,31,31,31,31,31,31,31,,,31,31,31,,,31,,31,31,,,31', +'31,,31,,31,,31,,31,31,31,31,31,31,31,,31,,31,,,,,,,,,,,,,31,31,,31,', +'31,653,653,653,653,653,653,31,,,653,653,31,,,653,,653,653,653,653,653', +'653,653,,,,,,653,653,653,653,653,653,653,,,653,,,,,443,653,653,653,653', +'653,653,653,653,653,653,653,653,,653,653,653,,653,653,,653,653,653,443', +'443,443,443,443,443,443,443,443,443,443,,443,443,,,443,443,,653,,,653', +',,653,653,,,653,,653,443,,443,653,443,443,443,443,443,443,443,653,443', +',,,653,653,653,653,653,653,,,,653,653,,443,,443,,,653,,,653,653,653', +',,653,653,898,898,898,898,898,898,,,,898,898,,,,898,,898,898,898,898', +'898,898,898,,,,,,898,898,898,898,898,898,898,,,898,,,,,449,898,898,898', +'898,898,898,898,898,898,898,898,898,,898,898,898,,898,898,,898,898,898', +'449,449,449,449,449,449,449,449,449,449,449,,449,449,,,449,449,,898', +',,898,,,898,898,,,898,,898,449,,449,898,449,449,449,449,449,449,449', +'898,449,,,,898,898,898,898,898,898,,,,898,898,,449,,,,,898,,,898,898', +'898,,,898,898,222,222,222,222,222,222,,,,222,222,,,,222,,222,222,222', +'222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,222,222', +'222,222,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222', +'222,502,502,502,502,502,502,502,502,502,502,502,,502,502,,,502,502,', +'222,,,222,,,222,222,,,222,,222,502,,502,222,502,502,502,502,502,502', +'502,222,502,,,,222,222,222,222,222,222,,,,222,222,502,502,,,,,222,,', +'222,222,222,,,222,222,36,36,36,36,36,36,,,,36,36,,,,36,,36,36,36,36', +'36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36,36,36,36,36,36,36', +'36,36,36,36,,36,36,36,,36,36,,36,36,36,553,553,553,553,553,553,553,553', +'553,553,553,,553,553,,,553,553,,36,,,36,,,36,36,,,36,,36,553,,553,36', +'553,553,553,553,553,553,553,36,553,,,,36,36,36,36,36,36,,,,36,36,,553', +',,,,36,,,36,36,36,,,36,36,785,785,785,785,785,785,,,,785,785,,,,785', +',785,785,785,785,785,785,785,,,,,,785,785,785,785,785,785,785,,,785', +',,,,,785,785,785,785,785,785,785,785,785,785,785,785,,785,785,785,,785', +'785,,785,785,785,295,295,295,295,295,295,295,295,295,295,295,,295,295', +',,295,295,,785,,,785,,,785,785,,,785,,785,295,,295,785,295,295,295,295', +'295,295,295,785,295,,,,785,785,785,785,785,785,,,,785,785,,295,,,,,785', +',,785,785,785,,,785,785,1025,1025,1025,1025,1025,1025,,,,1025,1025,', +',,1025,,1025,1025,1025,1025,1025,1025,1025,,,,,,1025,1025,1025,1025', +'1025,1025,1025,,,1025,,,,,,1025,1025,1025,1025,1025,1025,1025,1025,1025', +'1025,1025,1025,,1025,1025,1025,,1025,1025,,1025,1025,1025,921,921,921', +'921,921,921,921,921,921,921,921,,921,921,,,921,921,,1025,,,1025,,,1025', +'1025,,,1025,,1025,921,,921,1025,921,921,921,921,921,921,921,1025,921', +',,,1025,1025,1025,1025,1025,1025,,,,1025,1025,,921,,,,,1025,,,1025,1025', +'1025,,,1025,1025,937,937,937,937,937,937,,,,937,937,,,,937,,937,937', +'937,937,937,937,937,,,,,,937,937,937,937,937,937,937,,,937,,,,,,937', +'937,937,937,937,937,937,937,937,937,937,937,,937,937,937,,937,937,,937', +'937,937,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,937,,,937,', +',937,937,,,937,,937,24,,24,937,24,24,24,24,24,24,24,937,24,,,,937,937', +'937,937,937,937,,,,937,937,,24,,,,,937,,,937,937,937,,,937,937,247,247', +'247,247,247,247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,', +'247,247,247,247,247,247,247,,,247,,,,,,247,247,247,247,247,247,247,247', +'247,247,247,247,,247,247,247,,247,247,,247,247,247,809,809,809,809,809', +'809,809,809,809,809,809,,809,809,,,809,809,,247,,,247,,,247,247,,,247', +',247,809,,809,247,809,809,809,809,809,809,809,247,809,,,,247,247,247', +'247,247,247,,,,247,247,,809,,,,,247,,,247,247,247,,,247,247,1023,1023', +'1023,1023,1023,1023,,,,1023,1023,,,,1023,,1023,1023,1023,1023,1023,1023', +'1023,,,,,,1023,1023,1023,1023,1023,1023,1023,,,1023,,,,,,1023,1023,1023', +'1023,1023,1023,1023,1023,1023,1023,1023,1023,,1023,1023,1023,,1023,1023', +',1023,1023,1023,497,497,497,497,497,497,497,,,497,497,,,,,,497,497,', +'1023,,,1023,,,1023,1023,,,1023,,1023,497,,497,1023,497,497,497,497,497', +'497,497,1023,497,,,,1023,1023,1023,1023,1023,1023,,,,1023,1023,,,,,', +',1023,,,1023,1023,1023,,,1023,1023,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2', +'2,2,2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2', +'2,,2,2,2,482,482,482,482,482,482,482,482,482,482,482,,482,482,,,482', +'482,,2,,,2,,,2,2,,,2,,2,482,,482,2,482,482,482,482,482,482,482,2,482', +',,,2,2,2,2,2,2,,,,2,2,,,,,,,2,,,2,2,2,,,2,2,938,938,938,938,938,938', +',,,938,938,,,,938,,938,938,938,938,938,938,938,,,,,,938,938,938,938', +'938,938,938,,,938,,,,,,938,938,938,938,938,938,938,938,938,938,938,938', +',938,938,938,,938,938,,938,938,938,481,481,481,481,481,481,481,481,481', +'481,481,,481,481,,,481,481,,938,,,938,,,938,938,,,938,,938,481,,481', +'938,481,481,481,481,481,481,481,938,481,,,,938,938,938,938,938,938,', +',,938,938,,,,,,,938,,,938,938,938,,,938,938,1018,1018,1018,1018,1018', +'1018,,,,1018,1018,,,,1018,,1018,1018,1018,1018,1018,1018,1018,,,,,,1018', +'1018,1018,1018,1018,1018,1018,,,1018,,,,,,1018,1018,1018,1018,1018,1018', +'1018,1018,1018,1018,1018,1018,,1018,1018,1018,,1018,1018,,1018,1018', +'1018,496,496,496,496,496,496,496,,,496,496,,,,,,496,496,,1018,,,1018', +',,1018,1018,,,1018,,1018,496,,496,1018,496,496,496,496,496,496,496,1018', +'496,,,,1018,1018,1018,1018,1018,1018,,,,1018,1018,,,,,,,1018,,,1018', +'1018,1018,,,1018,1018,833,833,833,833,833,833,,,,833,833,,,,833,,833', +'833,833,833,833,833,833,,,,,,833,833,833,833,833,833,833,,,833,,,,,', +'833,833,833,833,833,833,833,833,833,833,833,833,,833,833,833,,833,833', +',833,833,833,501,501,501,501,501,501,501,501,,501,501,,,,,,501,501,', +'833,,,833,,,833,833,,,833,,833,501,,501,833,501,501,501,501,501,501', +'501,833,501,,,,833,833,833,833,833,833,,,,833,833,,,,,,,833,,,833,833', +'833,,,833,833,774,774,774,774,774,774,,,,774,774,,,,774,,774,774,774', +'774,774,774,774,,,,,,774,774,774,774,774,774,774,,,774,,,,,,774,774', +'774,774,774,774,774,774,774,774,774,774,,774,774,774,,774,774,,774,774', +'774,495,495,495,495,495,495,495,,,495,495,,,,,,495,495,,774,,,774,,', +'774,774,,,774,,774,495,,495,774,495,495,495,495,495,495,495,774,495', +',,,774,774,774,774,774,774,,,,774,774,,,,,,,774,,,774,774,774,,,774', +'774,792,792,792,792,792,792,,,,792,792,,,,792,,792,792,792,792,792,792', +'792,,,,,,792,792,792,792,792,792,792,,,792,,,,,,792,792,792,792,792', +'792,792,792,792,792,792,792,,792,792,792,,792,792,,792,792,792,494,494', +'494,494,494,494,494,,,494,494,,,,,,494,494,,792,,,792,,,792,792,,,792', +',792,494,,494,792,494,494,494,494,494,494,494,792,494,,,,792,792,792', +'792,792,792,,,,792,792,,,,,,,792,,,792,792,792,,,792,792,600,600,600', +'600,600,600,,,,600,600,,,,600,,600,600,600,600,600,600,600,,,,,,600', +'600,600,600,600,600,600,,,600,,,,,,600,600,600,600,600,600,600,600,600', +'600,600,600,,600,600,600,,600,600,,600,600,600,500,500,500,500,500,500', +'500,,,500,500,,,,,,500,500,,600,,,600,,,600,600,,,600,,600,500,,500', +'600,500,500,500,500,500,500,500,600,500,,,,600,600,600,600,600,600,', +',,600,600,,,,,,,600,,,600,600,600,,,600,600,786,786,786,786,786,786', +',,,786,786,,,,786,,786,786,786,786,786,786,786,,,,,,786,786,786,786', +'786,786,786,,,786,,,,,,786,786,786,786,786,786,786,786,786,786,786,786', +',786,786,786,,786,786,,786,786,786,493,493,493,493,493,493,493,,,493', +'493,,,,,,493,493,,786,,,786,,,786,786,,,786,,786,493,,493,786,493,493', +'493,493,493,493,493,786,493,,,,786,786,786,786,786,786,,,,786,786,,', +',,,,786,,,786,786,786,,,786,786,852,852,852,852,852,852,,,,852,852,', +',,852,,852,852,852,852,852,852,852,,,,,,852,852,852,852,852,852,852', +',,852,,,,,,852,852,852,852,852,852,852,852,852,852,852,852,,852,852', +'852,,852,852,,852,852,852,492,492,492,492,492,492,492,,,492,492,,,,', +',492,492,,852,,,852,,,852,852,,,852,,852,492,,492,852,492,492,492,492', +'492,492,492,852,492,,,,852,852,852,852,852,852,,,,852,852,,,,,,,852', +',,852,852,852,,,852,852,321,321,321,321,321,321,,,,321,321,,,,321,,321', +'321,321,321,321,321,321,,,,,,321,321,321,321,321,321,321,,,321,,,,,', +'321,321,321,321,321,321,321,321,321,321,321,321,,321,321,321,,321,321', +',321,321,321,,,,,,,,,,,,,,,,,,,,321,,,321,,,321,321,,,321,,321,,,,321', +',,,,,,,321,,,,,321,321,321,321,321,321,,,,321,321,,,,,,,321,,,321,321', +'321,,,321,321,997,997,997,997,997,997,,,,997,997,,,,997,,997,997,997', +'997,997,997,997,,,,,,997,997,997,997,997,997,997,,,997,,,,,,997,997', +'997,997,997,997,997,997,997,997,997,997,,997,997,997,,997,997,,997,997', +'997,,,,,,,,,,,,,,,,,,,,997,,,997,,,997,997,,,997,,997,,,,997,,,,,,,', +'997,,,,,997,997,997,997,997,997,,,,997,997,,,,,,,997,,,997,997,997,', +',997,997,360,360,360,360,360,360,,,,360,360,,,,360,,360,360,360,360', +'360,360,360,,,,,,360,360,360,360,360,360,360,,,360,,,,,,360,360,360', +'360,360,360,360,360,360,360,360,360,,360,360,360,,360,360,,360,360,360', +',,,,,,,,,,,,,,,,,,,360,,,360,,,360,360,,,360,,360,,,,360,,,,,,,,360', +',,,,360,360,360,360,360,360,,,,360,360,,,,,,,360,,,360,360,360,,,360', +'360,860,860,860,860,860,860,,,,860,860,,,,860,,860,860,860,860,860,860', +'860,,,,,,860,860,860,860,860,860,860,,,860,,,,,,860,860,860,860,860', +'860,860,860,860,860,860,860,,860,860,860,,860,860,,860,860,860,,,,,', +',,,,,,,,,,,,,,860,,,860,,,860,860,,,860,,860,,,,860,,,,,,,,860,,,,,860', +'860,860,860,860,860,,,,860,860,,,,,,,860,,,860,860,860,,,860,860,861', +'861,861,861,861,861,,,,861,861,,,,861,,861,861,861,861,861,861,861,', +',,,,861,861,861,861,861,861,861,,,861,,,,,,861,861,861,861,861,861,861', +'861,861,861,861,861,,861,861,861,,861,861,,861,861,861,,,,,,,,,,,,,', +',,,,,,861,,,861,,,861,861,,,861,,861,,,,861,,,,,,,,861,,,,,861,861,861', +'861,861,861,,,,861,861,,,,,,,861,,,861,861,861,,,861,861,316,316,316', +'316,316,316,,,,316,316,,,,316,,316,316,316,316,316,316,316,,,,,,316', +'316,316,316,316,316,316,,,316,,,,,,316,316,316,316,316,316,316,316,316', +'316,316,316,,316,316,316,,316,316,,316,316,316,,,,,,,,,,,,,,,,,,,,316', +',,316,,,316,316,,,316,,316,,,,316,,,,,,,,316,,,,,316,316,316,316,316', +'316,,,,316,316,,,,,,,316,,,316,316,316,,,316,316,887,887,887,887,887', +'887,,,,887,887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887,887', +'887,887,887,887,,,887,,,,,,887,887,887,887,887,887,887,887,887,887,887', +'887,,887,887,887,,887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887', +',,887,887,,,887,,887,,,,887,,,,,,,,887,,,,,887,887,887,887,887,887,', +',,887,887,,,,,,,887,,,887,887,887,,,887,887,359,359,359,359,359,359', +',,,359,359,,,,359,,359,359,359,359,359,359,359,,,,,,359,359,359,359', +'359,359,359,,,359,,,,,,359,359,359,359,359,359,359,359,359,359,359,359', +',359,359,359,,359,359,,359,359,359,,,,,,,,,,,,,,,,,,,,359,,,359,,,359', +'359,,,359,,359,,,,359,,,,,,,,359,,,,,359,359,359,359,359,359,,,,359', +'359,,,,,,,359,,,359,359,359,,,359,359,347,347,347,347,347,347,,,,347', +'347,,,,347,,347,347,347,347,347,347,347,,,,,,347,347,347,347,347,347', +'347,,,347,,,,,,347,347,347,347,347,347,347,347,347,347,347,347,,347', +'347,347,,347,347,,347,347,347,,,,,,,,,,,,,,,,,,,,347,,,347,,,347,347', +',,347,,347,,,,347,,,,,,,,347,,,,,347,347,347,347,347,347,,,,347,347', +',,,,,,347,,,347,347,347,,,347,347,603,603,603,603,603,603,,,,603,603', +',,,603,,603,603,603,603,603,603,603,,,,,,603,603,603,603,603,603,603', +',,603,,,,,,603,603,603,603,603,603,603,603,603,603,603,603,,603,603', +'603,,603,603,,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603,603,,,603', +',603,,,,603,,,,,,,,603,,,,,603,603,603,603,603,603,,,,603,603,,,,,,', +'603,,,603,603,603,,,603,603,968,968,968,968,968,968,,,,968,968,,,,968', +',968,968,968,968,968,968,968,,,,,,968,968,968,968,968,968,968,,,968', +',,,,,968,968,968,968,968,968,968,968,968,968,968,968,,968,968,968,,968', +'968,,968,968,968,,,,,,,,,,,,,,,,,,,,968,,,968,,,968,968,,,968,,968,', +',,968,,,,,,,,968,,,,,968,968,968,968,968,968,,,,968,968,,,,,,,968,,', +'968,968,968,,,968,968,967,967,967,,967,,,,967,967,,,,967,,967,967,967', +'967,967,967,967,,,,,,967,967,967,967,967,967,967,,,967,,,,,,,967,,,967', +'967,967,967,967,967,967,967,,967,967,967,,967,967,,967,967,967,,,,,', +',,,,,,,,,,,,,,967,,,967,,,967,967,,,967,,967,,,,967,,,,,,,,967,,,,,967', +'967,967,967,967,967,,,,967,967,,,,,,,967,,,967,967,967,,,967,967,537', +'537,537,,537,,,,537,537,,,,537,,537,537,537,537,537,537,537,,,,,,537', +'537,537,537,537,537,537,,,537,,,,,,,537,,,537,537,537,537,537,537,537', +'537,,537,537,537,,537,537,,,,537,,,,,,,,,,,,,,,,,,,,537,,,537,,,537', +'537,,,537,,,,,,,,,,,,,,,,,,,537,537,537,537,537,537,,,,537,537,,,,,', +',537,,,537,537,537,,,537,537,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,', +',,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8,,8,8,,8,8,8', +',,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8,8,8,8', +',,,8,8,,,,,,,8,,,8,8,8,,,8,8,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23', +'23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23', +'23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23', +',,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,,,23', +'23,23,,,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,', +',32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32', +'32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,', +'32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32', +',,32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33', +'33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,', +'33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33', +',,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33', +'33,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34', +'34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34', +',34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,', +',34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37', +'37,37,,37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37', +'37,,,37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,', +',,,,,,,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37', +'37,37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,', +'38,,38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38', +'38,38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,', +'38,,,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,', +',38,,,38,38,38,,,38,38,1041,1041,1041,,1041,,,,1041,1041,,,,1041,,1041', +'1041,1041,1041,1041,1041,1041,,,,,,1041,1041,1041,1041,1041,1041,1041', +',,1041,,,,,,,1041,,,1041,1041,1041,1041,1041,1041,1041,1041,1041,1041', +'1041,1041,,1041,1041,,1041,1041,1041,,,,,,,,,,,,,,,,,,,,1041,,,1041', +',,1041,1041,,,1041,,1041,,1041,,1041,,,,,,,,1041,,,,,1041,1041,1041', +'1041,1041,1041,,,,1041,1041,,,,,,,1041,,1041,1041,1041,1041,,,1041,1041', +'45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45,45,45,,,,,,45,45,45,45,45', +'45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45,45,,45,45,45,,45,45,,45,45', +'45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45,,,,,,45,,,,,,,,45,,,,,45', +'45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45,,,45,45,46,46,46,,46,,,', +'46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46,46,46,46,46,46,,,46,,,', +',,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46,46,,46,46,46,,,,,,,,,', +',,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,,46,,,,,46,46,46,46,46', +'46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,48,48,48,,48,,,,48,48,,,,48', +',48,48,48,48,48,48,48,,,,,,48,48,48,48,48,48,48,,,48,,,,,,,48,,,48,48', +'48,48,48,48,48,48,,48,48,48,,48,48,,48,48,48,,,,,,,,,,,,,,,,,,,,48,', +',48,,,48,48,,,48,,,,,,48,,,,,,,,48,,,,,48,48,48,48,48,48,,,,48,48,,', +',,,,48,,,48,48,48,,,48,48,62,62,62,62,62,,,,62,62,,,,62,,62,62,62,62', +'62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,62,62,,62,62,62,62,62,62', +'62,62,62,,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62,,,62', +'62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,,,,62', +',,62,62,62,,,62,62,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67', +',,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67', +'67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,', +'67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,,,67', +'67,68,68,68,,68,,,,68,68,,,,68,,68,68,68,68,68,68,68,,,,,,68,68,68,68', +'68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68,68,68,,68,68,68,,68,68,,68', +'68,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68,,,,,,68,,,,,,,,68,,,,', +'68,68,68,68,68,68,,,,68,68,,,,,,,68,,,68,68,68,,,68,68,71,71,71,,71', +',,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71', +',,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,71,71,71,,,,,,', +',,,,,,,,,,,,,71,,,71,,,71,71,,,71,,,,,,71,,,,,,,,71,,,,,71,71,71,71', +'71,71,,,,71,71,71,,,,,71,71,,,71,71,71,,,71,71,72,72,72,,72,,,,72,72', +',,,72,,72,72,72,72,72,72,72,,,,,,72,72,72,72,72,72,72,,,72,,,,,,,72', +',,72,72,72,72,72,72,72,72,,72,72,72,,72,72,,,,72,,,,,,,,,,,,,,,,,,,', +'72,,,72,,,72,72,,,72,,72,,,,,,,,,,,,,,,,,72,72,72,72,72,72,,,,72,72', +',,,,,,72,,,72,72,72,,,72,72,992,992,992,,992,,,,992,992,,,,992,,992', +'992,992,992,992,992,992,,,,,,992,992,992,992,992,992,992,,,992,,,,,', +',992,,,992,992,992,992,992,992,992,992,,992,992,992,,992,992,,,,992', +',,,,,,,,,,,,,,,,,,,992,,,992,,,992,992,,,992,,,,,,,,,,,,,,,,,,,992,992', +'992,992,992,992,,,,992,992,,,,,,,992,,,992,992,992,,,992,992,126,126', +'126,126,126,,,,126,126,,,,126,,126,126,126,126,126,126,126,,,,,,126', +'126,126,126,126,126,126,,,126,,,,,,126,126,126,126,126,126,126,126,126', +'126,126,126,,126,126,126,,126,126,,126,126,126,,,,,,,,,,,,,,,,,,,,126', +',,126,,,126,126,,,126,,126,,,,126,,,,,,,,126,,,,,126,126,126,126,126', +'126,,,,126,126,,,,,,126,126,,,126,126,126,,,126,126,131,131,131,,131', +',,,131,131,,,,131,,131,131,131,131,131,131,131,,,,,,131,131,131,131', +'131,131,131,,,131,,,,,,,131,,,131,131,131,131,131,131,131,131,,131,131', +'131,,131,131,,131,131,131,,,,,,,,,,,,,,,,,,,,131,,,131,,,131,131,,,131', +',,,,,131,,,,,,,,131,,,,,131,131,131,131,131,131,,,,131,131,,,,,,,131', +',,131,131,131,,,131,131,132,132,132,,132,,,,132,132,,,,132,,132,132', +'132,132,132,132,132,,,,,,132,132,132,132,132,132,132,,,132,,,,,,,132', +',,132,132,132,132,132,132,132,132,,132,132,132,,132,132,,132,132,132', +',,,,,,,,,,,,,,,,,,,132,,,132,,,132,132,,,132,,,,,,132,,,,,,,,132,,,', +',132,132,132,132,132,132,,,,132,132,,,,,,,132,,,132,132,132,,,132,132', +'133,133,133,,133,,,,133,133,,,,133,,133,133,133,133,133,133,133,,,,', +',133,133,133,133,133,133,133,,,133,,,,,,,133,,,133,133,133,133,133,133', +'133,133,,133,133,133,,133,133,,133,133,133,,,,,,,,,,,,,,,,,,,,133,,', +'133,,,133,133,,,133,,,,,,133,,,,,,,,133,,,,,133,133,133,133,133,133', +',,,133,133,,,,,,,133,,,133,133,133,,,133,133,134,134,134,,134,,,,134', +'134,,,,134,,134,134,134,134,134,134,134,,,,,,134,134,134,134,134,134', +'134,,,134,,,,,,,134,,,134,134,134,134,134,134,134,134,,134,134,134,', +'134,134,,134,134,134,,,,,,,,,,,,,,,,,,,,134,,,134,,,134,134,,,134,,', +',,,134,,,,,,,,134,,,,,134,134,134,134,134,134,,,,134,134,,,,,,,134,', +',134,134,134,,,134,134,135,135,135,135,135,,,,135,135,,,,135,,135,135', +'135,135,135,135,135,,,,,,135,135,135,135,135,135,135,,,135,,,,,,135', +'135,,135,135,135,135,135,135,135,135,135,,135,135,135,,135,135,,135', +'135,135,,,,,,,,,,,,,,,,,,,,135,,,135,,,135,135,,,135,,135,,,,135,,,', +',,,,135,,,,,135,135,135,135,135,135,,,,135,135,,,,,,,135,,,135,135,135', +',,135,135,530,530,530,530,530,,,,530,530,,,,530,,530,530,530,530,530', +'530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,,530,530,530,530', +'530,530,530,530,530,530,530,530,,530,530,530,,530,530,,530,530,530,', +',,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,530,,,,530,,,,,,,,530,', +',,,530,530,530,530,530,530,,,,530,530,,,,,,530,530,,,530,530,530,,,530', +'530,223,223,223,,223,,,,223,223,,,,223,,223,223,223,223,223,223,223', +',,,,,223,223,223,223,223,223,223,,,223,,,,,,,223,,,223,223,223,223,223', +'223,223,223,,223,223,223,,223,223,,223,223,223,,,,,,,,,,,,,,,,,,,,223', +',,223,,,223,223,,,223,,223,,,,223,,,,,,,,223,,,,,223,223,223,223,223', +'223,,,,223,223,,,,,,,223,,,223,223,223,,,223,223,224,224,224,,224,,', +',224,224,,,,224,,224,224,224,224,224,224,224,,,,,,224,224,224,224,224', +'224,224,,,224,,,,,,,224,,,224,224,224,224,224,224,224,224,,224,224,224', +',224,224,,224,224,224,,,,,,,,,,,,,,,,,,,,224,,,224,,,224,224,,,224,', +'224,,,,224,,,,,,,,224,,,,,224,224,224,224,224,224,,,,224,224,,,,,,,224', +',,224,224,224,,,224,224,225,225,225,,225,,,,225,225,,,,225,,225,225', +'225,225,225,225,225,,,,,,225,225,225,225,225,225,225,,,225,,,,,,,225', +',,225,225,225,225,225,225,225,225,,225,225,225,,225,225,,225,225,225', +',,,,,,,,,,,,,,,,,,,225,,,225,,,225,225,,,225,,,,,,225,,,,,,,,225,,,', +',225,225,225,225,225,225,,,,225,225,,,,,,,225,,,225,225,225,,,225,225', +'226,226,226,,226,,,,226,226,,,,226,,226,226,226,226,226,226,226,,,,', +',226,226,226,226,226,226,226,,,226,,,,,,,226,,,226,226,226,226,226,226', +'226,226,,226,226,226,,226,226,,226,226,226,,,,,,,,,,,,,,,,,,,,226,,', +'226,,,226,226,,,226,,,,,,226,,,,,,,,226,,,,,226,226,226,226,226,226', +',,,226,226,,,,,,,226,,,226,226,226,,,226,226,227,227,227,,227,,,,227', +'227,,,,227,,227,227,227,227,227,227,227,,,,,,227,227,227,227,227,227', +'227,,,227,,,,,,,227,,,227,227,227,227,227,227,227,227,,227,227,227,', +'227,227,,227,227,227,,,,,,,,,,,,,,,,,,,,227,,,227,,,227,227,,,227,,', +',,,227,,,,,,,,227,,,,,227,227,227,227,227,227,,,,227,227,,,,,,,227,', +',227,227,227,,,227,227,228,228,228,,228,,,,228,228,,,,228,,228,228,228', +'228,228,228,228,,,,,,228,228,228,228,228,228,228,,,228,,,,,,,228,,,228', +'228,228,228,228,228,228,228,228,228,228,228,,228,228,,228,228,228,,', +',,,,,,,,,,,,,,,,,228,,,228,,,228,228,,,228,,228,,228,,228,,,,,,,,228', +',,,,228,228,228,228,228,228,,,,228,228,,,,,,,228,,228,228,228,228,,', +'228,228,233,233,233,,233,,,,233,233,,,,233,,233,233,233,233,233,233', +'233,,,,,,233,233,233,233,233,233,233,,,233,,,,,,,233,,,233,233,233,233', +'233,233,233,233,,233,233,233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,', +',,233,,,233,,,233,233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233', +'233,233,,,,233,233,,,,,,,233,,,233,233,233,,,233,233,234,234,234,,234', +',,,234,234,,,,234,,234,234,234,234,234,234,234,,,,,,234,234,234,234', +'234,234,234,,,234,,,,,,,234,,,234,234,234,234,234,234,234,234,,234,234', +'234,,234,234,,234,234,234,,,,,,,,,,,,,,,,,,,,234,,,234,,,234,234,,,234', +',,,,,234,,,,,,,,234,,,,,234,234,234,234,234,234,,,,234,234,,,,,,,234', +',,234,234,234,,,234,234,235,235,235,,235,,,,235,235,,,,235,,235,235', +'235,235,235,235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,,,235', +',,235,235,235,235,235,235,235,235,,235,235,235,,235,235,,235,235,235', +',,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,,,235,,,', +',235,235,235,235,235,235,,,,235,235,235,,,,,,235,,,235,235,235,,,235', +'235,251,251,251,,251,,,,251,251,,,,251,,251,251,251,251,251,251,251', +',,,,,251,251,251,251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251', +'251,251,251,,251,251,251,,251,251,,251,251,251,,,,,,,,,,,,,,,,,,,,251', +',,251,,,251,251,,,251,,,,,,251,,,,,,,,251,,,,,251,251,251,251,251,251', +',,,251,251,,,,,,,251,,,251,251,251,,,251,251,252,252,252,,252,,,,252', +'252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252,252,252', +'252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,252,252,', +'252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,', +',,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252,252,,,,,,,252,', +',252,252,252,,,252,252,253,253,253,,253,,,,253,253,,,,253,,253,253,253', +'253,253,253,253,,,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253', +'253,253,253,253,253,253,253,,253,253,253,,253,253,,253,253,253,,,,,', +',,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,,,253', +'253,253,253,253,253,,,,253,253,,,,,,,253,,,253,253,253,,,253,253,254', +'254,254,,254,,,,254,254,,,,254,,254,254,254,254,254,254,254,,,,,,254', +'254,254,254,254,254,254,,,254,,,,,,,254,,,254,254,254,254,254,254,254', +'254,,254,254,254,,254,254,,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254', +',,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254', +'254,,,,,,,254,,,254,254,254,,,254,254,255,255,255,,255,,,,255,255,,', +',255,,255,255,255,255,255,255,255,,,,,,255,255,255,255,255,255,255,', +',255,,,,,,,255,,,255,255,255,255,255,255,255,255,,255,255,255,,255,255', +',255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,,,,,255,', +',,,,,,255,,,,,255,255,255,255,255,255,,,,255,255,,,,,,,255,,,255,255', +'255,,,255,255,256,256,256,,256,,,,256,256,,,,256,,256,256,256,256,256', +'256,256,,,,,,256,256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256', +'256,256,256,256,256,,256,256,256,,256,256,,256,256,256,,,,,,,,,,,,,', +',,,,,,256,,,256,,,256,256,,,256,,,,,,256,,,,,,,,256,,,,,256,256,256', +'256,256,256,,,,256,256,,,,,,,256,,,256,256,256,,,256,256,257,257,257', +',257,,,,257,257,,,,257,,257,257,257,257,257,257,257,,,,,,257,257,257', +'257,257,257,257,,,257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257', +'257,257,,257,257,,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257', +',,257,,,,,,257,,,,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,,,', +',,,257,,,257,257,257,,,257,257,258,258,258,,258,,,,258,258,,,,258,,258', +'258,258,258,258,258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,', +',258,,,258,258,258,258,258,258,258,258,,258,258,258,,258,258,,258,258', +'258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258', +',,,,258,258,258,258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258', +'258,259,259,259,,259,,,,259,259,,,,259,,259,259,259,259,259,259,259', +',,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259', +'259,259,259,,259,259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259', +',,259,,,259,259,,,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259', +',,,259,259,,,,,,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260', +'260,,,,260,,260,260,260,260,260,260,260,,,,,,260,260,260,260,260,260', +'260,,,260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260,260,260,', +'260,260,,260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,', +',,,260,,,,,,,,260,,,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,', +',260,260,260,,,260,260,261,261,261,,261,,,,261,261,,,,261,,261,261,261', +'261,261,261,261,,,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261', +'261,261,261,261,261,261,261,,261,261,261,,261,261,,261,261,261,,,,,', +',,,,,,,,,,,,,,261,,,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261', +'261,261,261,261,261,,,,261,261,,,,,,,261,,,261,261,261,,,261,261,262', +'262,262,,262,,,,262,262,,,,262,,262,262,262,262,262,262,262,,,,,,262', +'262,262,262,262,262,262,,,262,,,,,,,262,,,262,262,262,262,262,262,262', +'262,,262,262,262,,262,262,,262,262,262,,,,,,,,,,,,,,,,,,,,262,,,262', +',,262,262,,,262,,,,,,262,,,,,,,,262,,,,,262,262,262,262,262,262,,,,262', +'262,,,,,,,262,,,262,262,262,,,262,262,263,263,263,,263,,,,263,263,,', +',263,,263,263,263,263,263,263,263,,,,,,263,263,263,263,263,263,263,', +',263,,,,,,,263,,,263,263,263,263,263,263,263,263,,263,263,263,,263,263', +',263,263,263,,,,,,,,,,,,,,,,,,,,263,,,263,,,263,263,,,263,,,,,,263,', +',,,,,,263,,,,,263,263,263,263,263,263,,,,263,263,,,,,,,263,,,263,263', +'263,,,263,263,264,264,264,,264,,,,264,264,,,,264,,264,264,264,264,264', +'264,264,,,,,,264,264,264,264,264,264,264,,,264,,,,,,,264,,,264,264,264', +'264,264,264,264,264,,264,264,264,,264,264,,264,264,264,,,,,,,,,,,,,', +',,,,,,264,,,264,,,264,264,,,264,,,,,,264,,,,,,,,264,,,,,264,264,264', +'264,264,264,,,,264,264,,,,,,,264,,,264,264,264,,,264,264,265,265,265', +',265,,,,265,265,,,,265,,265,265,265,265,265,265,265,,,,,,265,265,265', +'265,265,265,265,,,265,,,,,,,265,,,265,265,265,265,265,265,265,265,,265', +'265,265,,265,265,,265,265,265,,,,,,,,,,,,,,,,,,,,265,,,265,,,265,265', +',,265,,,,,,265,,,,,,,,265,,,,,265,265,265,265,265,265,,,,265,265,,,', +',,,265,,,265,265,265,,,265,265,266,266,266,,266,,,,266,266,,,,266,,266', +'266,266,266,266,266,266,,,,,,266,266,266,266,266,266,266,,,266,,,,,', +',266,,,266,266,266,266,266,266,266,266,,266,266,266,,266,266,,266,266', +'266,,,,,,,,,,,,,,,,,,,,266,,,266,,,266,266,,,266,,,,,,266,,,,,,,,266', +',,,,266,266,266,266,266,266,,,,266,266,,,,,,,266,,,266,266,266,,,266', +'266,267,267,267,,267,,,,267,267,,,,267,,267,267,267,267,267,267,267', +',,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267,267,267,267,267', +'267,267,267,,267,267,267,,267,267,,267,267,267,,,,,,,,,,,,,,,,,,,,267', +',,267,,,267,267,,,267,,,,,,267,,,,,,,,267,,,,,267,267,267,267,267,267', +',,,267,267,,,,,,,267,,,267,267,267,,,267,267,268,268,268,,268,,,,268', +'268,,,,268,,268,268,268,268,268,268,268,,,,,,268,268,268,268,268,268', +'268,,,268,,,,,,,268,,,268,268,268,268,268,268,268,268,,268,268,268,', +'268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268,,,268,268,,,268,,', +',,,268,,,,,,,,268,,,,,268,268,268,268,268,268,,,,268,268,,,,,,,268,', +',268,268,268,,,268,268,269,269,269,,269,,,,269,269,,,,269,,269,269,269', +'269,269,269,269,,,,,,269,269,269,269,269,269,269,,,269,,,,,,,269,,,269', +'269,269,269,269,269,269,269,,269,269,269,,269,269,,269,269,269,,,,,', +',,,,,,,,,,,,,,269,,,269,,,269,269,,,269,,,,,,269,,,,,,,,269,,,,,269', +'269,269,269,269,269,,,,269,269,,,,,,,269,,,269,269,269,,,269,269,270', +'270,270,,270,,,,270,270,,,,270,,270,270,270,270,270,270,270,,,,,,270', +'270,270,270,270,270,270,,,270,,,,,,,270,,,270,270,270,270,270,270,270', +'270,,270,270,270,,270,270,,270,270,270,,,,,,,,,,,,,,,,,,,,270,,,270', +',,270,270,,,270,,,,,,270,,,,,,,,270,,,,,270,270,270,270,270,270,,,,270', +'270,,,,,,,270,,,270,270,270,,,270,270,275,275,275,,275,,,,275,275,,', +',275,,275,275,275,275,275,275,275,,,,,,275,275,275,275,275,275,275,', +',275,,,,,,,275,,,275,275,275,275,275,275,275,275,,275,275,275,,275,275', +',275,275,275,,,,,,,,,,,,,,,,,,,,275,,,275,,,275,275,,,275,,,,,,275,', +',,,,,,275,,,,,275,275,275,275,275,275,,,,275,275,,,,,,,275,,,275,275', +'275,,,275,275,932,932,932,,932,,,,932,932,,,,932,,932,932,932,932,932', +'932,932,,,,,,932,932,932,932,932,932,932,,,932,,,,,,,932,,,932,932,932', +'932,932,932,932,932,,932,932,932,,932,932,,,,932,,,,,,,,,,,,,,,,,,,', +'932,,,932,,,932,932,,,932,,,,,,,,,,,,,,,,,,,932,932,932,932,932,932', +',,,932,932,,,,,,,932,,,932,932,932,,,932,932,283,283,283,,283,,,,283', +'283,,,,283,,283,283,283,283,283,283,283,,,,,,283,283,283,283,283,283', +'283,,,283,,,,,,,283,,,283,283,283,283,283,283,283,283,283,283,283,283', +',283,283,,283,283,283,,,,,,,,,,,,,,,,,,,,283,,,283,,,283,283,,,283,', +'283,,283,,283,,,,,,,,283,,,,,283,283,283,283,283,283,,,,283,283,,,,', +',,283,,283,283,283,283,,,283,283,920,920,920,,920,,,,920,920,,,,920', +',920,920,920,920,920,920,920,,,,,,920,920,920,920,920,920,920,,,920', +',,,,,,920,,,920,920,920,920,920,920,920,920,,920,920,920,,920,920,,920', +'920,920,,,,,,,,,,,,,,,,,,,,920,,,920,,,920,920,,,920,,,,,,920,,,,,,', +',920,,,,,920,920,920,920,920,920,,,,920,920,,,,,,,920,,,920,920,920', +',,920,920,290,290,290,,290,,,,290,290,,,,290,,290,290,290,290,290,290', +'290,,,,,,290,290,290,290,290,290,290,,,290,,,,,,,290,,,290,290,290,290', +'290,290,290,290,290,290,290,290,,290,290,,290,290,290,,,,,,,,,,,,,,', +',,,,,290,,,290,,,290,290,,,290,,290,,290,,290,,,,,,,,290,,,,,290,290', +'290,290,290,290,,,,290,290,,,,,,,290,,290,290,290,290,,,290,290,293', +'293,293,,293,,,,293,293,,,,293,,293,293,293,293,293,293,293,,,,,,293', +'293,293,293,293,293,293,,,293,,,,,,,293,,,293,293,293,293,293,293,293', +'293,293,293,293,293,,293,293,,293,293,293,,,,,,,,,,,,,,,,,,,,293,,,293', +',,293,293,,,293,,293,,293,,293,,,,,,,,293,,,,,293,293,293,293,293,293', +',,,293,293,293,,,,,,293,,293,293,293,293,,,293,293,919,919,919,,919', +',,,919,919,,,,919,,919,919,919,919,919,919,919,,,,,,919,919,919,919', +'919,919,919,,,919,,,,,,,919,,,919,919,919,919,919,919,919,919,919,919', +'919,919,,919,919,,919,919,919,,,,,,,,,,,,,,,,,,,,919,,,919,,,919,919', +',,919,,,,919,,919,,,,,,,,919,,,,,919,919,919,919,919,919,,,,919,919', +',,,,,,919,,919,919,919,919,,,919,919,899,899,899,,899,,,,899,899,,,', +'899,,899,899,899,899,899,899,899,,,,,,899,899,899,899,899,899,899,,', +'899,,,,,,,899,,,899,899,899,899,899,899,899,899,,899,899,899,,899,899', +',899,899,899,,,,,,,,,,,,,,,,,,,,899,,,899,,,899,899,,,899,,,,,,899,', +',,,,,,899,,,,,899,899,899,899,899,899,,,,899,899,,,,,,,899,,,899,899', +'899,,,899,899,300,300,300,,300,,,,300,300,,,,300,,300,300,300,300,300', +'300,300,,,,,,300,300,300,300,300,300,300,,,300,,,,,,,300,,,300,300,300', +'300,300,300,300,300,,300,300,300,,300,300,,300,300,300,,,,,,,,,,,,,', +',,,,,,300,,,300,,,300,300,,,300,,,,,,300,,,,,,,,300,,,,,300,300,300', +'300,300,300,,,,300,300,,,,,,,300,,,300,300,300,,,300,300,302,302,302', +',302,,,,302,302,,,,302,,302,302,302,302,302,302,302,,,,,,302,302,302', +'302,302,302,302,,,302,,,,,,,302,,,302,302,302,302,302,302,302,302,,302', +'302,302,,302,302,,302,302,302,,,,,,,,,,,,,,,,,,,,302,,,302,,,302,302', +',,302,,,,,,302,,,,,,,,302,,,,,302,302,302,302,302,302,,,,302,302,,,', +',,,302,,,302,302,302,,,302,302,305,305,305,,305,,,,305,305,,,,305,,305', +'305,305,305,305,305,305,,,,,,305,305,305,305,305,305,305,,,305,,,,,', +',305,,,305,305,305,305,305,305,305,305,,305,305,305,,305,305,,305,305', +'305,,,,,,,,,,,,,,,,,,,,305,,,305,,,305,305,,,305,,,,,,305,,,,,,,,305', +',,,,305,305,305,305,305,305,,,,305,305,,,,,,,305,,,305,305,305,,,305', +'305,306,306,306,,306,,,,306,306,,,,306,,306,306,306,306,306,306,306', +',,,,,306,306,306,306,306,306,306,,,306,,,,,,,306,,,306,306,306,306,306', +'306,306,306,,306,306,306,,306,306,,306,306,306,,,,,,,,,,,,,,,,,,,,306', +',,306,,,306,306,,,306,,,,,,306,,,,,,,,306,,,,,306,306,306,306,306,306', +',,,306,306,,,,,,,306,,,306,306,306,,,306,306,312,312,312,312,312,,,', +'312,312,,,,312,,312,312,312,312,312,312,312,,,,,,312,312,312,312,312', +'312,312,,,312,,,,,,312,312,,312,312,312,312,312,312,312,312,312,,312', +'312,312,,312,312,,312,312,312,,,,,,,,,,,,,,,,,,,,312,,,312,,,312,312', +',,312,,312,,,,312,,,,,,,,312,,,,,312,312,312,312,312,312,,,,312,312', +',,,,,,312,,,312,312,312,,,312,312,885,885,885,,885,,,,885,885,,,,885', +',885,885,885,885,885,885,885,,,,,,885,885,885,885,885,885,885,,,885', +',,,,,,885,,,885,885,885,885,885,885,885,885,,885,885,885,,885,885,,885', +'885,885,,,,,,,,,,,,,,,,,,,,885,,,885,,,885,885,,,885,,,,,,885,,,,,,', +',885,,,,,885,885,885,885,885,885,,,,885,885,,,,,,,885,,,885,885,885', +',,885,885,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320', '320,,,,,,320,320,320,320,320,320,320,,,320,,,,,,,320,,,320,320,320,320', '320,320,320,320,,320,320,320,,320,320,,,,320,,,,,,,,,,,,,,,,,,,,320', ',,320,,,320,320,,,320,,,,,,,,,,,,,,,,,,,320,320,320,320,320,320,,,,320', -'320,,,,,,,320,,,320,320,320,,,320,320,685,685,685,,685,,,,685,685,,', -',685,,685,685,685,685,685,685,685,,,,,,685,685,685,685,685,685,685,', -',685,,,,,,,685,,,685,685,685,685,685,685,685,685,,685,685,685,,685,685', -',,,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685,685,,,685,,,,,,,,,,,,,,,,', -',,685,685,685,685,685,685,,,,685,685,,,,,,,685,,,685,685,685,,,685,685', -'681,681,681,,681,,,,681,681,,,,681,,681,681,681,681,681,681,681,,,,', -',681,681,681,681,681,681,681,,,681,,,,,,,681,,,681,681,681,681,681,681', -'681,681,,681,681,681,,681,681,,681,681,681,,,,,,,,,,,,,,,,,,,,681,,', -'681,,,681,681,,,681,,,,,,681,,,,,,,,681,,,,,681,681,681,681,681,681', -',,,681,681,,,,,,,681,,,681,681,681,,,681,681,328,328,328,,328,,,,328', -'328,,,,328,,328,328,328,328,328,328,328,,,,,,328,328,328,328,328,328', -'328,,,328,,,,,,,328,,,328,328,328,328,328,328,328,328,,328,328,328,', -'328,328,,328,328,328,,,,,,,,,,,,,,,,,,,,328,,,328,328,,328,328,,,328', -',,,,,328,,,,,,,,328,,,,,328,328,328,328,328,328,,,,328,328,,,,,,,328', -',,328,328,328,,,328,328,331,331,331,,331,,,,331,331,,,,331,,331,331', -'331,331,331,331,331,,,,,,331,331,331,331,331,331,331,,,331,,,,,,,331', -',,331,331,331,331,331,331,331,331,,331,331,331,,331,331,,331,331,331', -',,,,,,,,,,,,,,,,,,,331,,,331,,,331,331,,,331,,,,,,331,,,,,,,,331,,,', -',331,331,331,331,331,331,,,,331,331,,,,,,,331,,,331,331,331,,,331,331', -'678,678,678,,678,,,,678,678,,,,678,,678,678,678,678,678,678,678,,,,', -',678,678,678,678,678,678,678,,,678,,,,,,,678,,,678,678,678,678,678,678', -'678,678,,678,678,678,,678,678,,678,678,678,,,,,,,,,,,,,,,,,,,,678,,', -'678,,,678,678,,,678,,,,,,678,,,,,,,,678,,,,,678,678,678,678,678,678', -',,,678,678,,,,,,,678,,,678,678,678,,,678,678,654,654,654,,654,,,,654', -'654,,,,654,,654,654,654,654,654,654,654,,,,,,654,654,654,654,654,654', -'654,,,654,,,,,,,654,,,654,654,654,654,654,654,654,654,,654,654,654,', -'654,654,,654,654,654,,,,,,,,,,,,,,,,,,,,654,,,654,,,654,654,,,654,,', -',,,654,,,,,,,,654,,,,,654,654,654,654,654,654,,,,654,654,,,,,,,654,', -',654,654,654,,,654,654,337,337,337,,337,,,,337,337,,,,337,,337,337,337', +'320,,,,320,,,320,,,320,320,320,,,320,320,828,828,828,,828,,,,828,828', +',,,828,,828,828,828,828,828,828,828,,,,,,828,828,828,828,828,828,828', +',,828,,,,,,,828,,,828,828,828,828,828,828,828,828,,828,828,828,,828', +'828,,828,828,828,,,,,,,,,,,,,,,,,,,,828,,,828,,,828,828,,,828,,,,,,828', +',,,,,,,828,,,,,828,828,828,828,828,828,,,,828,828,,,,,,,828,,,828,828', +'828,,,828,828,826,826,826,,826,,,,826,826,,,,826,,826,826,826,826,826', +'826,826,,,,,,826,826,826,826,826,826,826,,,826,,,,,,,826,,,826,826,826', +'826,826,826,826,826,,826,826,826,,826,826,,826,826,826,,,,,,,,,,,,,', +',,,,,,826,,,826,,,826,826,,,826,,,,,,826,,,,,,,,826,,,,,826,826,826', +'826,826,826,,,,826,826,,,,,,,826,,,826,826,826,,,826,826,825,825,825', +',825,,,,825,825,,,,825,,825,825,825,825,825,825,825,,,,,,825,825,825', +'825,825,825,825,,,825,,,,,,,825,,,825,825,825,825,825,825,825,825,,825', +'825,825,,825,825,,825,825,825,,,,,,,,,,,,,,,,,,,,825,,,825,,,825,825', +',,825,,,,,,825,,,,,,,,825,,,,,825,825,825,825,825,825,,,,825,825,,,', +',,,825,,,825,825,825,,,825,825,824,824,824,,824,,,,824,824,,,,824,,824', +'824,824,824,824,824,824,,,,,,824,824,824,824,824,824,824,,,824,,,,,', +',824,,,824,824,824,824,824,824,824,824,,824,824,824,,824,824,,824,824', +'824,,,,,,,,,,,,,,,,,,,,824,,,824,,,824,824,,,824,,,,,,824,,,,,,,,824', +',,,,824,824,824,824,824,824,,,,824,824,,,,,,,824,,,824,824,824,,,824', +'824,823,823,823,,823,,,,823,823,,,,823,,823,823,823,823,823,823,823', +',,,,,823,823,823,823,823,823,823,,,823,,,,,,,823,,,823,823,823,823,823', +'823,823,823,,823,823,823,,823,823,,823,823,823,,,,,,,,,,,,,,,,,,,,823', +',,823,,,823,823,,,823,,,,,,823,,,,,,,,823,,,,,823,823,823,823,823,823', +',,,823,823,,,,,,,823,,,823,823,823,,,823,823,810,810,810,,810,,,,810', +'810,,,,810,,810,810,810,810,810,810,810,,,,,,810,810,810,810,810,810', +'810,,,810,,,,,,,810,,,810,810,810,810,810,810,810,810,,810,810,810,', +'810,810,,810,810,810,,,,,,,,,,,,,,,,,,,,810,,,810,,,810,810,,,810,,', +',,,810,,,,,,,,810,,,,,810,810,810,810,810,810,,,,810,810,,,,,,,810,', +',810,810,810,,,810,810,337,337,337,,337,,,,337,337,,,,337,,337,337,337', '337,337,337,337,,,,,,337,337,337,337,337,337,337,,,337,,,,,,,337,,,337', -'337,337,337,337,337,337,337,337,337,337,337,,337,337,,337,337,337,,', -',,,,,,,,,,,,,,,,,337,,,337,,,337,337,,,337,,,,,,337,,,,,,,,337,,,,,337', -'337,337,337,337,337,,,,337,337,,,,,,,337,,337,337,337,337,,,337,337', -'653,653,653,,653,,,,653,653,,,,653,,653,653,653,653,653,653,653,,,,', -',653,653,653,653,653,653,653,,,653,,,,,,,653,,,653,653,653,653,653,653', -'653,653,,653,653,653,,653,653,,653,653,653,,,,,,,,,,,,,,,,,,,,653,,', -'653,,,653,653,,,653,,,,,,653,,,,,,,,653,,,,,653,653,653,653,653,653', -',,,653,653,,,,,,,653,,,653,653,653,,,653,653,650,650,650,,650,,,,650', -'650,,,,650,,650,650,650,650,650,650,650,,,,,,650,650,650,650,650,650', -'650,,,650,,,,,,,650,,,650,650,650,650,650,650,650,650,,650,650,650,', -'650,650,,650,650,650,,,,,,,,,,,,,,,,,,,,650,,,650,,,650,650,,,650,,', -',,,650,,,,,,,,650,,,,,650,650,650,650,650,650,,,,650,650,,,,,,,650,', -',650,650,650,,,650,650,344,344,344,,344,,,,344,344,,,,344,,344,344,344', -'344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344,,,344', -'344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344,,,,,', -',,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344,,,,,344', -'344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344,344,345', -'345,345,,345,,,,345,345,,,,345,,345,345,345,345,345,345,345,,,,,,345', -'345,345,345,345,345,345,,,345,,,,,,,345,,,345,345,345,345,345,345,345', -'345,,345,345,345,,345,345,,345,345,345,,,,,,,,,,,,,,,,,,,,345,,,345', -',,345,345,,,345,,,,,,345,,,,,,,,345,,,,,345,345,345,345,345,345,,,,345', -'345,,,,,,,345,,,345,345,345,,,345,345,649,649,649,,649,,,,649,649,,', -',649,,649,649,649,649,649,649,649,,,,,,649,649,649,649,649,649,649,', -',649,,,,,,,649,,,649,649,649,649,649,649,649,649,,649,649,649,,649,649', -',649,649,649,,,,,,,,,,,,,,,,,,,,649,,,649,,,649,649,,,649,,,,,,649,', -',,,,,,649,,,,,649,649,649,649,649,649,,,,649,649,,,,,,,649,,,649,649', -'649,,,649,649,644,644,644,,644,,,,644,644,,,,644,,644,644,644,644,644', -'644,644,,,,,,644,644,644,644,644,644,644,,,644,,,,,,,644,,,644,644,644', -'644,644,644,644,644,,644,644,644,,644,644,,644,644,644,,,,,,,,,,,,,', -',,,,,,644,,,644,,,644,644,,,644,,,,,,644,,,,,,,,644,,,,,644,644,644', -'644,644,644,,,,644,644,,,,,,,644,,,644,644,644,,,644,644,643,643,643', -',643,,,,643,643,,,,643,,643,643,643,643,643,643,643,,,,,,643,643,643', -'643,643,643,643,,,643,,,,,,,643,,,643,643,643,643,643,643,643,643,,643', -'643,643,,643,643,,643,643,643,,,,,,,,,,,,,,,,,,,,643,,,643,,,643,643', -',,643,,,,,,643,,,,,,,,643,,,,,643,643,643,643,643,643,,,,643,643,,,', -',,,643,,,643,643,643,,,643,643,642,642,642,,642,,,,642,642,,,,642,,642', -'642,642,642,642,642,642,,,,,,642,642,642,642,642,642,642,,,642,,,,,', -',642,,,642,642,642,642,642,642,642,642,642,642,642,642,,642,642,,642', -'642,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642,,,642,,,,642,,642,,,', -',,,,642,,,,,642,642,642,642,642,642,,,,642,642,,,,,,,642,,642,642,642', -'642,,,642,642,641,641,641,,641,,,,641,641,,,,641,,641,641,641,641,641', -'641,641,,,,,,641,641,641,641,641,641,641,,,641,,,,,,,641,,,641,641,641', -'641,641,641,641,641,641,641,641,641,,641,641,,641,641,641,,,,,,,,,,', -',,,,,,,,,641,,,641,,,641,641,,,641,,641,,641,,641,,,,,,,,641,,,,,641', -'641,641,641,641,641,,,,641,641,,,,,,,641,,641,641,641,641,,,641,641', -'638,638,638,,638,,,,638,638,,,,638,,638,638,638,638,638,638,638,,,,', -',638,638,638,638,638,638,638,,,638,,,,,,,638,,,638,638,638,638,638,638', -'638,638,,638,638,638,,638,638,,638,638,638,,,,,,,,,,,,,,,,,,,,638,,', -'638,,,638,638,,,638,,,,,,638,,,,,,,,638,,,,,638,638,638,638,638,638', -',,,638,638,,,,,,,638,,,638,638,638,,,638,638,357,357,357,,357,,,,357', -'357,,,,357,,357,357,357,357,357,357,357,,,,,,357,357,357,357,357,357', -'357,,,357,,,,,,,357,,,357,357,357,357,357,357,357,357,,357,357,357,', -'357,357,,,,357,,,,,,,,,,,,,,,,,,,,357,,,357,,,357,357,,,357,,,,,,,,', -',,,,,,,,,,357,357,357,357,357,357,,,,357,357,,,,,,,357,,,357,357,357', -',,357,357,359,359,359,,359,,,,359,359,,,,359,,359,359,359,359,359,359', -'359,,,,,,359,359,359,359,359,359,359,,,359,,,,,,,359,,,359,359,359,359', -'359,359,359,359,,359,359,359,,359,359,,,,359,,,,,,,,,,,,,,,,,,,,359', -',,359,,,359,359,,,359,,,,,,,,,,,,,,,,,,,359,359,359,359,359,359,,,,359', -'359,,,,,,,359,,,359,359,359,,,359,359,637,637,637,,637,,,,637,637,,', -',637,,637,637,637,637,637,637,637,,,,,,637,637,637,637,637,637,637,', -',637,,,,,,,637,,,637,637,637,637,637,637,637,637,,637,637,637,,637,637', -',637,637,637,,,,,,,,,,,,,,,,,,,,637,,,637,,,637,637,,,637,,637,,,,637', -',,,,,,,637,,,,,637,637,637,637,637,637,,,,637,637,,,,,,,637,,,637,637', -'637,,,637,637,608,608,608,,608,,,,608,608,,,,608,,608,608,608,608,608', -'608,608,,,,,,608,608,608,608,608,608,608,,,608,,,,,,,608,,,608,608,608', -'608,608,608,608,608,,608,608,608,,608,608,,608,608,608,,,,,,,,,,,,,', -',,,,,,608,,,608,,,608,608,,,608,,,,,,608,,,,,,,,608,,,,,608,608,608', -'608,608,608,,,,608,608,,,,,,,608,,,608,608,608,,,608,608,604,604,604', -',604,,,,604,604,,,,604,,604,604,604,604,604,604,604,,,,,,604,604,604', -'604,604,604,604,,,604,,,,,,,604,,,604,604,604,604,604,604,604,604,,604', -'604,604,,604,604,,604,604,604,,,,,,,,,,,,,,,,,,,,604,,,604,,,604,604', -',,604,,,,,,604,,,,,,,,604,,,,,604,604,604,604,604,604,,,,604,604,,,', -',,,604,,,604,604,604,,,604,604,592,592,592,,592,,,,592,592,,,,592,,592', -'592,592,592,592,592,592,,,,,,592,592,592,592,592,592,592,,,592,,,,,', -',592,,,592,592,592,592,592,592,592,592,592,592,592,592,,592,592,,592', -'592,592,,,,,,,,,,,,,,,,,,,,592,,,592,,,592,592,,,592,,592,,592,,592', -',,,,,,,592,,,,,592,592,592,592,592,592,,,,592,592,,,,,,,592,,592,592', -'592,592,,,592,592,571,571,571,,571,,,,571,571,,,,571,,571,571,571,571', -'571,571,571,,,,,,571,571,571,571,571,571,571,,,571,,,,,,,571,,,571,571', -'571,571,571,571,571,571,,571,571,571,,571,571,,571,571,571,,,,,,,,,', -',,,,,,,,,,571,,,571,,,571,571,,,571,,,,,,571,,,,,,,,571,,,,,571,571', -'571,571,571,571,,,,571,571,,,,,,,571,,,571,571,571,,,571,571,544,544', -'544,,544,,,,544,544,,,,544,,544,544,544,544,544,544,544,,,,,,544,544', -'544,544,544,544,544,,,544,,,,,,,544,,,544,544,544,544,544,544,544,544', -'544,544,544,544,,544,544,,544,544,544,,,,,,,,,,,,,,,,,,,,544,,,544,', -',544,544,,,544,,,,,,544,,,,,,,,544,,,,,544,544,544,544,544,544,,,,544', -'544,,,,,,,544,,544,544,544,544,,,544,544,541,541,541,,541,,,,541,541', -',,,541,,541,541,541,541,541,541,541,,,,,,541,541,541,541,541,541,541', -',,541,,,,,,,541,,,541,541,541,541,541,541,541,541,541,541,541,541,,541', -'541,,541,541,541,,,,,,,,,,,,,,,,,,,,541,,,541,,,541,541,,,541,,541,', -',,541,,,,,,,,541,,,,,541,541,541,541,541,541,,,,541,541,,,,,,,541,,541', -'541,541,541,,,541,541,535,535,535,,535,,,,535,535,,,,535,,535,535,535', -'535,535,535,535,,,,,,535,535,535,535,535,535,535,,,535,,,,,,,535,,,535', -'535,535,535,535,535,535,535,,535,535,535,,535,535,,535,535,535,,,,,', -',,,,,,,,,,,,,,535,,,535,,,535,535,,,535,,,,,,535,,,,,,,,535,,,,,535', -'535,535,535,535,535,,,,535,535,,,,,,,535,,,535,535,535,,,535,535,531', -'531,531,,531,,,,531,531,,,,531,,531,531,531,531,531,531,531,,,,,,531', -'531,531,531,531,531,531,,,531,,,,,,,531,,,531,531,531,531,531,531,531', -'531,,531,531,531,,531,531,,531,531,531,,,,,,,,,,,,,,,,,,,,531,,,531', -',,531,531,,,531,,,,,,531,,,,,,,,531,,,,,531,531,531,531,531,531,,,,531', -'531,,,,,,,531,,,531,531,531,,,531,531,530,530,530,,530,,,,530,530,,', -',530,,530,530,530,530,530,530,530,,,,,,530,530,530,530,530,530,530,', -',530,,,,,,,530,,,530,530,530,530,530,530,530,530,,530,530,530,,530,530', -',530,530,530,,,,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,,,,,530,', -',,,,,,530,,,,,530,530,530,530,530,530,,,,530,530,,,,,,,530,,,530,530', -'530,,,530,530,527,527,527,,527,,,,527,527,,,,527,,527,527,527,527,527', -'527,527,,,,,,527,527,527,527,527,527,527,,,527,,,,,,,527,,,527,527,527', -'527,527,527,527,527,,527,527,527,,527,527,,,,527,,,,,,,,,,,,,,,,,,,', -'527,,,527,,,527,527,,,527,,,,,,,,,,,,,,,,,,,527,527,527,527,527,527', -',,,527,527,,,,,,,527,,,527,527,527,,,527,527,521,521,521,,521,,,,521', -'521,,,,521,,521,521,521,521,521,521,521,,,,,,521,521,521,521,521,521', -'521,,,521,,,,,,,521,,,521,521,521,521,521,521,521,521,521,521,521,521', -',521,521,,521,521,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,', -'521,,521,,521,,,,,,,,521,,,,,521,521,521,521,521,521,,,,521,521,,,,', -',,521,,521,521,521,521,,,521,521,519,519,519,,519,,,,519,519,,,,519', -',519,519,519,519,519,519,519,,,,,,519,519,519,519,519,519,519,,,519', -',,,,,,519,,,519,519,519,519,519,519,519,519,,519,519,519,,519,519,,', -',519,,,,,,,,,,,,,,,,,,,,519,,,519,,,519,519,,,519,,,,,,,,,,,,,,,,,,', -'519,519,519,519,519,519,,,,519,519,,,,,,,519,,,519,519,519,,,519,519', -'512,512,512,512,512,,,,512,512,,,,512,,512,512,512,512,512,512,512,', -',,,,512,512,512,512,512,512,512,,,512,,,,,,512,512,,512,512,512,512', -'512,512,512,512,512,,512,512,512,,512,512,,512,512,512,,,,,,,,,,,,,', -',,,,,,512,,,512,,,512,512,,,512,,512,,,,512,,,,,,,,512,,,,,512,512,512', -'512,512,512,,,,512,512,,,,,,512,512,,,512,512,512,,,512,512,417,417', -'417,,417,,,,417,417,,,,417,,417,417,417,417,417,417,417,,,,,,417,417', -'417,417,417,417,417,,,417,,,,,,,417,,,417,417,417,417,417,417,417,417', -',417,417,417,,417,417,,417,417,417,,,,,,,,,,,,,,,,,,,,417,,,417,,,417', -'417,,,417,,,,,,417,,,,,,,,417,,,,,417,417,417,417,417,417,,,,417,417', -',,,,,,417,,,417,417,417,,,417,417,509,509,509,,509,,,,509,509,,,,509', -',509,509,509,509,509,509,509,,,,,,509,509,509,509,509,509,509,,,509', -',,,,,,509,,,509,509,509,509,509,509,509,509,,509,509,509,,509,509,,509', -'509,509,,,,,,,,,,,,,,,,,,,,509,,,509,,,509,509,,,509,,,,,,509,,,,,,', -',509,,,,,509,509,509,509,509,509,,,,509,509,,,,,,,509,,,509,509,509', -',,509,509,505,505,505,,505,,,,505,505,,,,505,,505,505,505,505,505,505', -'505,,,,,,505,505,505,505,505,505,505,,,505,,,,,,,505,,,505,505,505,505', -'505,505,505,505,,505,505,505,,505,505,,505,505,505,,,,,,,,,,,,,,,,,', -',,505,,,505,,,505,505,,,505,,,,,,505,,,,,,,,505,,,,,505,505,505,505', -'505,505,,,,505,505,,,,,,,505,,,505,505,505,,,505,505,503,503,503,,503', -',,,503,503,,,,503,,503,503,503,503,503,503,503,,,,,,503,503,503,503', -'503,503,503,,,503,,,,,,,503,,,503,503,503,503,503,503,503,503,503,503', -'503,503,,503,503,,503,503,503,,,,,,,,,,,,,,,,,,,,503,,,503,,,503,503', -',,503,,,,503,,503,,,,,,,,503,,,,,503,503,503,503,503,503,,,,503,503', -',,,,,,503,,503,503,503,503,,,503,503,500,500,500,,500,,,,500,500,,,', -'500,,500,500,500,500,500,500,500,,,,,,500,500,500,500,500,500,500,,', -'500,,,,,,,500,,,500,500,500,500,500,500,500,500,500,500,500,500,,500', -'500,,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500,,,500,500,,,500,,500,', -'500,,500,,,,,,,,500,,,,,500,500,500,500,500,500,,,,500,500,,,,,,,500', -',500,500,500,500,,,500,500,459,459,459,,459,,,,459,459,,,,459,,459,459', -'459,459,459,459,459,,,,,,459,459,459,459,459,459,459,,,459,,,,,,,459', -',,459,459,459,459,459,459,459,459,,459,459,459,,459,459,,459,459,459', -',,,,,,,,,,,,,,,,,,,459,,,459,,,459,459,,,459,,,,,,459,,,,,,,,459,,,', -',459,459,459,459,459,459,,,,459,459,,,,,,,459,,,459,459,459,,,459,459', -'458,458,458,,458,,,,458,458,,,,458,,458,458,458,458,458,458,458,,,,', -',458,458,458,458,458,458,458,,,458,,,,,,,458,,,458,458,458,458,458,458', -'458,458,,458,458,458,,458,458,,458,458,458,,,,,,,,,,,,,,,,,,,,458,,', -'458,,,458,458,,,458,,,,,,458,,,,,,,,458,,,,,458,458,458,458,458,458', -',,,458,458,,,,,,,458,,,458,458,458,,,458,458,457,457,457,,457,,,,457', -'457,,,,457,,457,457,457,457,457,457,457,,,,,,457,457,457,457,457,457', -'457,,,457,,,,,,,457,,,457,457,457,457,457,457,457,457,,457,457,457,', -'457,457,,457,457,457,,,,,,,,,,,,,,,,,,,,457,,,457,,,457,457,,,457,,', -',,,457,,,,,,,,457,,,,,457,457,457,457,457,457,,,,457,457,,,,,,,457,', -',457,457,457,,,457,457,808,808,808,,808,,,,808,808,,,,808,,808,808,808', -'808,808,808,808,,,,,,808,808,808,808,808,808,808,,,808,,,,,,,808,,,808', -'808,808,808,808,808,808,808,,808,808,808,,808,808,,,,808,,,,,,,,,,,', -',,,,,,,,808,,,808,,,808,808,,,808,,,,,,,,,,,,,,,,,,,808,808,808,808', -'808,808,,,,808,808,,,,,,,808,,,808,808,808,,,808,808,233,233,233,,233', -',,,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233,233,233', -'233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233,,233,233', -'233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233', -',,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233,,,,,,,233', -',,233,233,233,,,233,233,796,796,796,,796,,,,796,796,,,,796,,796,796', -'796,796,796,796,796,,,,,,796,796,796,796,796,796,796,,,796,,,,,,,796', -',,796,796,796,796,796,796,796,796,,796,796,796,,796,796,,796,796,796', -',,,,,,,,,,,,,,,,,,,796,,,796,,,796,796,,,796,,,,,,796,,,,,,,,796,,,', -',796,796,796,796,796,796,,,,796,796,,,,,,,796,,,796,796,796,,,796,796', -'236,236,236,,236,,,,236,236,,,,236,,236,236,236,236,236,236,236,,,,', -',236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236,236,236,236', -'236,236,,236,236,236,,236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236,,', -'236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236,236,236,236', -',,,236,236,,,,,,,236,,,236,236,236,,,236,236,237,237,237,,237,,,,237', -'237,,,,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237,237', -'237,,,237,,,,,,,237,,,237,237,237,237,237,237,237,237,,237,237,237,', -'237,237,,237,237,237,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,237,,,237,,', -',,,237,,,,,,,,237,,,,,237,237,237,237,237,237,,,,237,237,,,,,,,237,', -',237,237,237,,,237,237,238,238,238,,238,,,,238,238,,,,238,,238,238,238', -'238,238,238,238,,,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238', -'238,238,238,238,238,238,238,,238,238,238,,238,238,,238,238,238,,,,,', -',,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,,,,,238,,,,,,,,238,,,,,238', -'238,238,238,238,238,,,,238,238,,,,,,,238,,,238,238,238,,,238,238,239', -'239,239,,239,,,,239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239', -'239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239', -'239,,239,239,239,,239,239,,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239', -',,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239,239,239,239,239,239,,,,239', -'239,,,,,,,239,,,239,239,239,,,239,239,240,240,240,,240,,,,240,240,,', -',240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240,240,240,', -',240,,,,,,,240,,,240,240,240,240,240,240,240,240,,240,240,240,,240,240', -',240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,240,,,240,,,,,,240,', -',,,,,,240,,,,,240,240,240,240,240,240,,,,240,240,,,,,,,240,,,240,240', -'240,,,240,240,241,241,241,,241,,,,241,241,,,,241,,241,241,241,241,241', -'241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241', -'241,241,241,241,241,,241,241,241,,241,241,,241,241,241,,,,,,,,,,,,,', -',,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,,,241,241,241', -'241,241,241,,,,241,241,,,,,,,241,,,241,241,241,,,241,241,242,242,242', -',242,,,,242,242,,,,242,,242,242,242,242,242,242,242,,,,,,242,242,242', -'242,242,242,242,,,242,,,,,,,242,,,242,242,242,242,242,242,242,242,,242', -'242,242,,242,242,,242,242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242', -',,242,,,,,,242,,,,,,,,242,,,,,242,242,242,242,242,242,,,,242,242,,,', -',,,242,,,242,242,242,,,242,242,243,243,243,,243,,,,243,243,,,,243,,243', -'243,243,243,243,243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,', -',243,,,243,243,243,243,243,243,243,243,,243,243,243,,243,243,,243,243', -'243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243,,,243,,,,,,243,,,,,,,,243', -',,,,243,243,243,243,243,243,,,,243,243,,,,,,,243,,,243,243,243,,,243', -'243,244,244,244,,244,,,,244,244,,,,244,,244,244,244,244,244,244,244', -',,,,,244,244,244,244,244,244,244,,,244,,,,,,,244,,,244,244,244,244,244', -'244,244,244,,244,244,244,,244,244,,244,244,244,,,,,,,,,,,,,,,,,,,,244', -',,244,,,244,244,,,244,,,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244', -',,,244,244,,,,,,,244,,,244,244,244,,,244,244,245,245,245,,245,,,,245', -'245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245,245,245,245,245', -'245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245,,245,245,245,', -'245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245,245,,,245,,', -',,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245,245,,,,,,,245,', -',245,245,245,,,245,245,246,246,246,,246,,,,246,246,,,,246,,246,246,246', -'246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246', -'246,246,246,246,246,246,246,,246,246,246,,246,246,,246,246,246,,,,,', -',,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246', -'246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246,,,246,246,247', -'247,247,,247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,,247', -'247,247,247,247,247,247,,,247,,,,,,,247,,,247,247,247,247,247,247,247', -'247,,247,247,247,,247,247,,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247', -',,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247,247,247,247,247,247,,,,247', -'247,,,,,,,247,,,247,247,247,,,247,247,248,248,248,,248,,,,248,248,,', -',248,,248,248,248,248,248,248,248,,,,,,248,248,248,248,248,248,248,', -',248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248,248,248,,248,248', -',248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,,,,,248,', -',,,,,,248,,,,,248,248,248,248,248,248,,,,248,248,,,,,,,248,,,248,248', -'248,,,248,248,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249', -'249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249', -'249,249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,', -',,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249', -'249,249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250', -',250,,,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250', -'250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250', -'250,250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250', -',,250,,,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,', -',,,250,,,250,250,250,,,250,250,251,251,251,,251,,,,251,251,,,,251,,251', -'251,251,251,251,251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,', -',251,,,251,251,251,251,251,251,251,251,,251,251,251,,251,251,,251,251', -'251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,251', -',,,,251,251,251,251,251,251,,,,251,251,,,,,,,251,,,251,251,251,,,251', -'251,252,252,252,,252,,,,252,252,,,,252,,252,252,252,252,252,252,252', -',,,,,252,252,252,252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252', -'252,252,252,,252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252', -',,252,,,252,252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252', -',,,252,252,,,,,,,252,,,252,252,252,,,252,252,253,253,253,,253,,,,253', -'253,,,,253,,253,253,253,253,253,253,253,,,,,,253,253,253,253,253,253', -'253,,,253,,,,,,,253,,,253,253,253,253,253,253,253,253,,253,253,253,', -'253,253,,253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,', -',,,253,,,,,,,,253,,,,,253,253,253,253,253,253,,,,253,253,,,,,,,253,', -',253,253,253,,,253,253,254,254,254,,254,,,,254,254,,,,254,,254,254,254', -'254,254,254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,,,254,,,254', -'254,254,254,254,254,254,254,,254,254,254,,254,254,,254,254,254,,,,,', -',,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254', -'254,254,254,254,254,,,,254,254,,,,,,,254,,,254,254,254,,,254,254,255', -'255,255,,255,,,,255,255,,,,255,,255,255,255,255,255,255,255,,,,,,255', -'255,255,255,255,255,255,,,255,,,,,,,255,,,255,255,255,255,255,255,255', -'255,,255,255,255,,255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255', -',,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255', -'255,,,,,,,255,,,255,255,255,,,255,255,256,256,256,,256,,,,256,256,,', -',256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256,256,256,', -',256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256,256,,256,256', -',256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,,256,,,,,,256,', -',,,,,,256,,,,,256,256,256,256,256,256,,,,256,256,,,,,,,256,,,256,256', -'256,,,256,256,258,258,258,,258,,,,258,258,,,,258,,258,258,258,258,258', -'258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258', -'258,258,258,258,258,,258,258,258,,258,258,,258,258,258,,,,,,,,,,,,,', -',,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258,,,,,258,258,258', -'258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258,258,259,259,259', -',259,,,,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259,259,259', -'259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259', -'259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259', -',,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259,,,,259,259,,,', -',,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260,260,,,,260,,260', -'260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,', -',260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260,,260,260', -'260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,260', -',,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,,,260,260,260,,,260', -'260,261,261,261,,261,,,,261,261,,,,261,,261,261,261,261,261,261,261', -',,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261,261,261,261,261', -'261,261,261,,261,261,261,,261,261,,261,261,261,,,,,,,,,,,,,,,,,,,,261', -',,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261,261,261,261,261,261', -',,,261,261,,,,,,,261,,,261,261,261,,,261,261,794,794,794,,794,,,,794', -'794,,,,794,,794,794,794,794,794,794,794,,,,,,794,794,794,794,794,794', -'794,,,794,,,,,,,794,,,794,794,794,794,794,794,794,794,,794,794,794,', -'794,794,,794,794,794,,,,,,,,,,,,,,,,,,,,794,,,794,,,794,794,,,794,,', -',,,794,,,,,,,,794,,,,,794,794,794,794,794,794,,,,794,794,,,,,,,794,', -',794,794,794,,,794,794,793,793,793,,793,,,,793,793,,,,793,,793,793,793', -'793,793,793,793,,,,,,793,793,793,793,793,793,793,,,793,,,,,,,793,,,793', -'793,793,793,793,793,793,793,,793,793,793,,793,793,,793,793,793,,,,,', -',,,,,,,,,,,,,,793,,,793,,,793,793,,,793,,,,,,793,,,,,,,,793,,,,,793', -'793,793,793,793,793,,,,793,793,,,,,,,793,,,793,793,793,,,793,793,268', -'268,268,,268,,,,268,268,,,,268,,268,268,268,268,268,268,268,,,,,,268', -'268,268,268,268,268,268,,,268,,,,,,,268,,,268,268,268,268,268,268,268', -'268,268,268,268,268,,268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268', -',,268,268,,,268,,268,,268,,268,,,,,,,,268,,,,,268,268,268,268,268,268', -',,,268,268,,,,,,,268,,268,268,268,268,,,268,268,792,792,792,,792,,,', -'792,792,,,,792,,792,792,792,792,792,792,792,,,,,,792,792,792,792,792', -'792,792,,,792,,,,,,,792,,,792,792,792,792,792,792,792,792,,792,792,792', -',792,792,,792,792,792,,,,,,,,,,,,,,,,,,,,792,,,792,,,792,792,,,792,', -',,,,792,,,,,,,,792,,,,,792,792,792,792,792,792,,,,792,792,,,,,,,792', -',,792,792,792,,,792,792,274,274,274,,274,,,,274,274,,,,274,,274,274', -'274,274,274,274,274,,,,,,274,274,274,274,274,274,274,,,274,,,,,,,274', -',,274,274,274,274,274,274,274,274,274,274,274,274,,274,274,,274,274', -'274,,,,,,,,,,,,,,,,,,,,274,,,274,,,274,274,,,274,,274,,274,,274,,,,', -',,,274,,,,,274,274,274,274,274,274,,,,274,274,,,,,,,274,,274,274,274', -'274,,,274,274,277,277,277,,277,,,,277,277,,,,277,,277,277,277,277,277', -'277,277,,,,,,277,277,277,277,277,277,277,,,277,,,,,,,277,,,277,277,277', -'277,277,277,277,277,277,277,277,277,,277,277,,277,277,277,,,,,,,,,,', -',,,,,,,,,277,,,277,,,277,277,,,277,,277,,277,,277,,,,,,,,277,,,,,277', -'277,277,277,277,277,,,,277,277,277,,,,,,277,,277,277,277,277,,,277,277', -'791,791,791,,791,,,,791,791,,,,791,,791,791,791,791,791,791,791,,,,', -',791,791,791,791,791,791,791,,,791,,,,,,,791,,,791,791,791,791,791,791', -'791,791,,791,791,791,,791,791,,791,791,791,,,,,,,,,,,,,,,,,,,,791,,', -'791,,,791,791,,,791,,,,,,791,,,,,,,,791,,,,,791,791,791,791,791,791', -',,,791,791,,,,,,,791,,,791,791,791,,,791,791,777,777,777,,777,,,,777', -'777,,,,777,,777,777,777,777,777,777,777,,,,,,777,777,777,777,777,777', -'777,,,777,,,,,,,777,,,777,777,777,777,777,777,777,777,,777,777,777,', -'777,777,,777,777,777,,,,,,,,,,,,,,,,,,,,777,,,777,,,777,777,,,777,,', -',,,777,,,,,,,,777,,,,,777,777,777,777,777,777,,,,777,777,,,,,,,777,', -',777,777,777,,,777,777,775,775,775,,775,,,,775,775,,,,775,,775,775,775', -'775,775,775,775,,,,,,775,775,775,775,775,775,775,,,775,,,,,,,775,,,775', -'775,775,775,775,775,775,775,,775,775,775,,775,775,,775,775,775,,,,,', -',,,,,,,,,,,,,,775,,,775,,,775,775,,,775,,,,,,775,,,,,,,,775,,,,,775', -'775,775,775,775,775,,,,775,775,,,,,,,775,,,775,775,775,,,775,775,284', -'284,284,,284,,,,284,284,,,,284,,284,284,284,284,284,284,284,,,,,,284', -'284,284,284,284,284,284,,,284,,,,,,,284,,,284,284,284,284,284,284,284', -'284,,284,284,284,,284,284,,284,284,284,,,,,,,,,,,,,,,,,,,,284,,,284', -',,284,284,,,284,,,,,,284,,,,,,,,284,,,,,284,284,284,284,284,284,,,,284', -'284,,,,,,,284,,,284,284,284,,,284,284,286,286,286,,286,,,,286,286,,', -',286,,286,286,286,286,286,286,286,,,,,,286,286,286,286,286,286,286,', -',286,,,,,,,286,,,286,286,286,286,286,286,286,286,,286,286,286,,286,286', -',286,286,286,,,,,,,,,,,,,,,,,,,,286,,,286,,,286,286,,,286,,,,,,286,', -',,,,,,286,,,,,286,286,286,286,286,286,,,,286,286,,,,,,,286,,,286,286', -'286,,,286,286,288,288,288,,288,,,,288,288,,,,288,,288,288,288,288,288', -'288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,,,288,,,288,288,288', -'288,288,288,288,288,,288,288,288,,288,288,,288,288,288,,,,,,,,,,,,,', -',,,,,,288,,,288,,,288,288,,,288,,,,,,288,,,,,,,,288,,,,,288,288,288', -'288,288,288,,,,288,288,,,,,,,288,,,288,288,288,,,288,288,291,291,291', -',291,,,,291,291,,,,291,,291,291,291,291,291,291,291,,,,,,291,291,291', -'291,291,291,291,,,291,,,,,,,291,,,291,291,291,291,291,291,291,291,,291', -'291,291,,291,291,,291,291,291,,,,,,,,,,,,,,,,,,,,291,,,291,,,291,291', -',,291,,,,,,291,,,,,,,,291,,,,,291,291,291,291,291,291,,,,291,291,,,', -',,,291,,,291,291,291,,,291,291,297,297,297,297,297,,,,297,297,,,,297', -',297,297,297,297,297,297,297,,,,,,297,297,297,297,297,297,297,,,297', -',,,,,297,297,,297,297,297,297,297,297,297,297,297,,297,297,297,,297', -'297,,297,297,297,,,,,,,,,,,,,,,,,,,,297,,,297,,,297,297,,,297,,297,', -',,297,,,,,,,,297,,,,,297,297,297,297,297,297,,,,297,297,,,,,,,297,,', -'297,297,297,,,297,297,753,753,753,,753,,,,753,753,,,,753,,753,753,753', -'753,753,753,753,,,,,,753,753,753,753,753,753,753,,,753,,,,,,,753,,,753', -'753,753,753,753,753,753,753,753,753,753,753,,753,753,,753,753,753,,', -',,,,,,,,,,,,,,,,,753,,,753,,,753,753,,,753,,753,,753,,753,,,,,,,,753', -',,,,753,753,753,753,753,753,,,,753,753,,,,,,,753,,753,753,753,753,,', -'753,753,747,747,747,,747,,,,747,747,,,,747,,747,747,747,747,747,747', +'337,337,337,337,337,337,337,,337,337,337,,337,337,,,,337,,,,,,,,,,,', +',,,,,,,,337,,,337,,,337,337,,,337,,,,,,,,,,,,,,,,,,,337,337,337,337', +'337,337,,,,337,337,,,,,,,337,,,337,337,337,,,337,337,802,802,802,,802', +',,,802,802,,,,802,,802,802,802,802,802,802,802,,,,,,802,802,802,802', +'802,802,802,,,802,,,,,,,802,,,802,802,802,802,802,802,802,802,,802,802', +'802,,802,802,,802,802,802,,,,,,,,,,,,,,,,,,,,802,,,802,,,802,802,,,802', +',,,,,802,,,,,,,,802,,,,,802,802,802,802,802,802,,,,802,802,,,,,,,802', +',,802,802,802,,,802,802,344,344,344,,344,,,,344,344,,,,344,,344,344', +'344,344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344', +',,344,344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344', +',,,,,,,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344,,,', +',344,344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344,344', +'346,346,346,,346,,,,346,346,,,,346,,346,346,346,346,346,346,346,,,,', +',346,346,346,346,346,346,346,,,346,,,,,,,346,,,346,346,346,346,346,346', +'346,346,,346,346,346,,346,346,,346,346,346,,,,,,,,,,,,,,,,,,,,346,,', +'346,346,,346,346,,,346,,,,,,346,,,,,,,,346,,,,,346,346,346,346,346,346', +',,,346,346,,,,,,,346,,,346,346,346,,,346,346,350,350,350,,350,,,,350', +'350,,,,350,,350,350,350,350,350,350,350,,,,,,350,350,350,350,350,350', +'350,,,350,,,,,,,350,,,350,350,350,350,350,350,350,350,350,350,350,350', +',350,350,,350,350,350,,,,,,,,,,,,,,,,,,,,350,,,350,,,350,350,,,350,', +'350,,,,350,,,,,,,,350,,,,,350,350,350,350,350,350,,,,350,350,,,,,,,350', +',350,350,350,350,,,350,350,351,351,351,,351,,,,351,351,,,,351,,351,351', +'351,351,351,351,351,,,,,,351,351,351,351,351,351,351,,,351,,,,,,,351', +',,351,351,351,351,351,351,351,351,351,351,351,351,,351,351,,351,351', +'351,,,,,,,,,,,,,,,,,,,,351,,,351,,,351,351,,,351,,,,,,351,,,,,,,,351', +',,,,351,351,351,351,351,351,,,,351,351,,,,,,,351,,351,351,351,351,,', +'351,351,358,358,358,,358,,,,358,358,,,,358,,358,358,358,358,358,358', +'358,,,,,,358,358,358,358,358,358,358,,,358,,,,,,,358,,,358,358,358,358', +'358,358,358,358,,358,358,358,,358,358,,358,358,358,,,,,,,,,,,,,,,,,', +',,358,,,358,,,358,358,,,358,,,,,,358,,,,,,,,358,,,,,358,358,358,358', +'358,358,,,,358,358,,,,,,,358,,,358,358,358,,,358,358,780,780,780,,780', +',,,780,780,,,,780,,780,780,780,780,780,780,780,,,,,,780,780,780,780', +'780,780,780,,,780,,,,,,,780,,,780,780,780,780,780,780,780,780,780,780', +'780,780,,780,780,,780,780,780,,,,,,,,,,,,,,,,,,,,780,,,780,,,780,780', +',,780,,780,,780,,780,,,,,,,,780,,,,,780,780,780,780,780,780,,,,780,780', +',,,,,,780,,780,780,780,780,,,780,780,372,372,372,,372,,,,372,372,,,', +'372,,372,372,372,372,372,372,372,,,,,,372,372,372,372,372,372,372,,', +'372,,,,,,,372,,,372,372,372,372,372,372,372,372,,372,372,372,,372,372', +',,,372,,,,,,,,,,,,,,,,,,,,372,,,372,,,372,372,,,372,,,,,,,,,,,,,,,,', +',,372,372,372,372,372,372,,,,372,372,,,,,,,372,,,372,372,372,,,372,372', +'374,374,374,,374,,,,374,374,,,,374,,374,374,374,374,374,374,374,,,,', +',374,374,374,374,374,374,374,,,374,,,,,,,374,,,374,374,374,374,374,374', +'374,374,,374,374,374,,374,374,,,,374,,,,,,,,,,,,,,,,,,,,374,,,374,,', +'374,374,,,374,,,,,,,,,,,,,,,,,,,374,374,374,374,374,374,,,,374,374,', +',,,,,374,,,374,374,374,,,374,374,768,768,768,,768,,,,768,768,,,,768', +',768,768,768,768,768,768,768,,,,,,768,768,768,768,768,768,768,,,768', +',,,,,,768,,,768,768,768,768,768,768,768,768,,768,768,768,,768,768,,768', +'768,768,,,,,,,,,,,,,,,,,,,,768,,,768,,,768,768,,,768,,768,,,,768,,,', +',,,,768,,,,,768,768,768,768,768,768,,,,768,768,,,,,,,768,,,768,768,768', +',,768,768,747,747,747,,747,,,,747,747,,,,747,,747,747,747,747,747,747', '747,,,,,,747,747,747,747,747,747,747,,,747,,,,,,,747,,,747,747,747,747', '747,747,747,747,,747,747,747,,747,747,,747,747,747,,,,,,,,,,,,,,,,,', ',,747,,,747,,,747,747,,,747,,,,,,747,,,,,,,,747,,,,,747,747,747,747', -'747,747,,,,747,747,,,,,,,747,,,747,747,747,,,747,747,303,303,303,,303', -',,,303,303,,,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303', -'303,303,303,,,303,,,,,,,303,,,303,303,303,303,303,303,303,303,,303,303', -'303,,303,303,,,,303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303,,,303,,,', -',,,,,,,,,,,,,,,303,303,303,303,303,303,,,,303,303,,,,303,,,303,,,303', -'303,303,,,303,303,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91', -'91,91,91,91,91,91,91,,,,91,91,91,91,91,91,91,91,91,91,,,,,,91,91,91', -'91,91,91,91,91,91,91,91,91,,91,,,,,,,91,91,,91,91,91,91,91,91,91,,,91', -'91,,,,91,91,91,91,,,,,,,,,,,,,,91,91,,91,91,91,91,91,91,91,91,91,91', -'91,,,91,,,,,,,,,,,,,,,,,,,,91,12,12,12,12,12,12,12,12,12,12,12,12,12', -'12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12,12,12,12,12,,', -',,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12,12,12,12,12', -'12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12,12,12,12,12', -'12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,74,74,74,74,74,74,74,74,74,74', -'74,74,74,74,74,74,74,74,74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74', -'74,74,,,,,,74,74,74,74,74,74,74,74,74,74,74,74,,74,,,,,,,74,74,,74,74', -'74,74,74,74,74,,,74,74,,,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74', -'74,74,74,74,74,74,74,74,,,74,,,,,,,,,,,,,,,,,,,,74,763,763,763,763,763', -'763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763', -'763,763,,,,763,763,763,763,763,763,763,763,763,763,,,,,,763,763,763', -'763,763,763,763,763,763,,,763,,,,,,,,,763,763,,763,763,763,763,763,763', -'763,,,763,763,,,,763,763,763,763,,,,,,,,,,,,,,763,763,,763,763,763,763', -'763,763,763,763,763,763,763,,,763,,,,,,,,,,,,,,,,,,,,763,634,634,634', -'634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634', -'634,634,634,634,,,,634,634,634,634,634,634,634,634,634,634,,,,,,634', -'634,634,634,634,634,634,634,634,,,634,,,,,,,,,634,634,,634,634,634,634', -'634,634,634,,,634,634,,,,634,634,634,634,,,,,,,,,,,,,,634,634,,634,634', -'634,634,634,634,634,634,634,634,634,,,634,634,,,,,,,,,,634,,,,,,,,,634', +'747,747,,,,747,747,,,,,,,747,,,747,747,747,,,747,747,731,731,731,,731', +',,,731,731,,,,731,,731,731,731,731,731,731,731,,,,,,731,731,731,731', +'731,731,731,,,731,,,,,,,731,,,731,731,731,731,731,731,731,731,731,731', +'731,731,,731,731,,731,731,731,,,,,,,,,,,,,,,,,,,,731,,,731,,,731,731', +',,731,,,,,,731,,,,,,,,731,,,,,731,731,731,731,731,731,,,,731,731,,,', +',,,731,,731,731,731,731,,,731,731,728,728,728,,728,,,,728,728,,,,728', +',728,728,728,728,728,728,728,,,,,,728,728,728,728,728,728,728,,,728', +',,,,,,728,,,728,728,728,728,728,728,728,728,728,728,728,728,,728,728', +',728,728,728,,,,,,,,,,,,,,,,,,,,728,,,728,,,728,728,,,728,,728,,,,728', +',,,,,,,728,,,,,728,728,728,728,728,728,,,,728,728,,,,,,,728,,728,728', +'728,728,,,728,728,723,723,723,,723,,,,723,723,,,,723,,723,723,723,723', +'723,723,723,,,,,,723,723,723,723,723,723,723,,,723,,,,,,,723,,,723,723', +'723,723,723,723,723,723,,723,723,723,,723,723,,723,723,723,,,,,,,,,', +',,,,,,,,,,723,,,723,,,723,723,,,723,,723,,,,723,,,,,,,,723,,,,,723,723', +'723,723,723,723,,,,723,723,,,,,,,723,,,723,723,723,,,723,723,718,718', +'718,,718,,,,718,718,,,,718,,718,718,718,718,718,718,718,,,,,,718,718', +'718,718,718,718,718,,,718,,,,,,,718,,,718,718,718,718,718,718,718,718', +',718,718,718,,718,718,,718,718,718,,,,,,,,,,,,,,,,,,,,718,,,718,,,718', +'718,,,718,,,,,,718,,,,,,,,718,,,,,718,718,718,718,718,718,,,,718,718', +',,,,,,718,,,718,718,718,,,718,718,717,717,717,,717,,,,717,717,,,,717', +',717,717,717,717,717,717,717,,,,,,717,717,717,717,717,717,717,,,717', +',,,,,,717,,,717,717,717,717,717,717,717,717,,717,717,717,,717,717,,', +',717,,,,,,,,,,,,,,,,,,,,717,,,717,,,717,717,,,717,,,,,,,,,,,,,,,,,,', +'717,717,717,717,717,717,,,,717,717,,,,,,,717,,,717,717,717,,,717,717', +'706,706,706,,706,,,,706,706,,,,706,,706,706,706,706,706,706,706,,,,', +',706,706,706,706,706,706,706,,,706,,,,,,,706,,,706,706,706,706,706,706', +'706,706,,706,706,706,,706,706,,,,706,,,,,,,,,,,,,,,,,,,,706,,,706,,', +'706,706,,,706,,,,,,,,,,,,,,,,,,,706,706,706,706,706,706,,,,706,706,', +',,,,,706,,,706,706,706,,,706,706,703,703,703,,703,,,,703,703,,,,703', +',703,703,703,703,703,703,703,,,,,,703,703,703,703,703,703,703,,,703', +',,,,,,703,,,703,703,703,703,703,703,703,703,,703,703,703,,703,703,,703', +'703,703,,,,,,,,,,,,,,,,,,,,703,,,703,,,703,703,,,703,,,,,,703,,,,,,', +',703,,,,,703,703,703,703,703,703,,,,703,703,,,,,,,703,,,703,703,703', +',,703,703,700,700,700,,700,,,,700,700,,,,700,,700,700,700,700,700,700', +'700,,,,,,700,700,700,700,700,700,700,,,700,,,,,,,700,,,700,700,700,700', +'700,700,700,700,,700,700,700,,700,700,,700,700,700,,,,,,,,,,,,,,,,,', +',,700,,,700,,,700,700,,,700,,,,,,700,,,,,,,,700,,,,,700,700,700,700', +'700,700,,,,700,700,,,,,,,700,,,700,700,700,,,700,700,432,432,432,,432', +',,,432,432,,,,432,,432,432,432,432,432,432,432,,,,,,432,432,432,432', +'432,432,432,,,432,,,,,,,432,,,432,432,432,432,432,432,432,432,,432,432', +'432,,432,432,,432,432,432,,,,,,,,,,,,,,,,,,,,432,,,432,,,432,432,,,432', +',,,,,432,,,,,,,,432,,,,,432,432,432,432,432,432,,,,432,432,,,,,,,432', +',,432,432,432,,,432,432,676,676,676,,676,,,,676,676,,,,676,,676,676', +'676,676,676,676,676,,,,,,676,676,676,676,676,676,676,,,676,,,,,,,676', +',,676,676,676,676,676,676,676,676,,676,676,676,,676,676,,676,676,676', +',,,,,,,,,,,,,,,,,,,676,,,676,,,676,676,,,676,,,,,,676,,,,,,,,676,,,', +',676,676,676,676,676,676,,,,676,676,,,,,,,676,,,676,676,676,,,676,676', +'675,675,675,,675,,,,675,675,,,,675,,675,675,675,675,675,675,675,,,,', +',675,675,675,675,675,675,675,,,675,,,,,,,675,,,675,675,675,675,675,675', +'675,675,,675,675,675,,675,675,,675,675,675,,,,,,,,,,,,,,,,,,,,675,,', +'675,,,675,675,,,675,,,,,,675,,,,,,,,675,,,,,675,675,675,675,675,675', +',,,675,675,,,,,,,675,,,675,675,675,,,675,675,670,670,670,,670,,,,670', +'670,,,,670,,670,670,670,670,670,670,670,,,,,,670,670,670,670,670,670', +'670,,,670,,,,,,,670,,,670,670,670,670,670,670,670,670,,670,670,670,', +'670,670,,670,670,670,,,,,,,,,,,,,,,,,,,,670,,,670,,,670,670,,,670,,', +',,,670,,,,,,,,670,,,,,670,670,670,670,670,670,,,,670,670,,,,,,,670,', +',670,670,670,,,670,670,669,669,669,,669,,,,669,669,,,,669,,669,669,669', +'669,669,669,669,,,,,,669,669,669,669,669,669,669,,,669,,,,,,,669,,,669', +'669,669,669,669,669,669,669,,669,669,669,,669,669,,669,669,669,,,,,', +',,,,,,,,,,,,,,669,,,669,,,669,669,,,669,,,,,,669,,,,,,,,669,,,,,669', +'669,669,669,669,669,,,,669,669,,,,,,,669,,,669,669,669,,,669,669,668', +'668,668,,668,,,,668,668,,,,668,,668,668,668,668,668,668,668,,,,,,668', +'668,668,668,668,668,668,,,668,,,,,,,668,,,668,668,668,668,668,668,668', +'668,668,668,668,668,,668,668,,668,668,668,,,,,,,,,,,,,,,,,,,,668,,,668', +',,668,668,,,668,,,,668,,668,,,,,,,,668,,,,,668,668,668,668,668,668,', +',,668,668,,,,,,,668,,668,668,668,668,,,668,668,667,667,667,,667,,,,667', +'667,,,,667,,667,667,667,667,667,667,667,,,,,,667,667,667,667,667,667', +'667,,,667,,,,,,,667,,,667,667,667,667,667,667,667,667,667,667,667,667', +',667,667,,667,667,667,,,,,,,,,,,,,,,,,,,,667,,,667,,,667,667,,,667,', +'667,,667,,667,,,,,,,,667,,,,,667,667,667,667,667,667,,,,667,667,,,,', +',,667,,667,667,667,667,,,667,667,664,664,664,,664,,,,664,664,,,,664', +',664,664,664,664,664,664,664,,,,,,664,664,664,664,664,664,664,,,664', +',,,,,,664,,,664,664,664,664,664,664,664,664,,664,664,664,,664,664,,664', +'664,664,,,,,,,,,,,,,,,,,,,,664,,,664,,,664,664,,,664,,,,,,664,,,,,,', +',664,,,,,664,664,664,664,664,664,,,,664,664,,,,,,,664,,,664,664,664', +',,664,664,663,663,663,663,663,,,,663,663,,,,663,,663,663,663,663,663', +'663,663,,,,,,663,663,663,663,663,663,663,,,663,,,,,,663,663,,663,663', +'663,663,663,663,663,663,663,,663,663,663,,663,663,,663,663,663,,,,,', +',,,,,,,,,,,,,,663,,,663,,,663,663,,,663,,663,,,,663,,,,,,,,663,,,,,663', +'663,663,663,663,663,,,,663,663,,,,,,,663,,,663,663,663,,,663,663,476', +'476,476,,476,,,,476,476,,,,476,,476,476,476,476,476,476,476,,,,,,476', +'476,476,476,476,476,476,,,476,,,,,,,476,,,476,476,476,476,476,476,476', +'476,476,476,476,476,,476,476,,476,476,476,,,,,,,,,,,,,,,,,,,,476,,,476', +',,476,476,,,476,,476,,476,,476,,,,,,,,476,,,,,476,476,476,476,476,476', +',,,476,476,,,,,,,476,,476,476,476,476,,,476,476,478,478,478,,478,,,', +'478,478,,,,478,,478,478,478,478,478,478,478,,,,,,478,478,478,478,478', +'478,478,,,478,,,,,,,478,,,478,478,478,478,478,478,478,478,,478,478,478', +',478,478,,478,478,478,,,,,,,,,,,,,,,,,,,,478,,,478,,,478,478,,,478,', +',,,,478,,,,,,,,478,,,,,478,478,478,478,478,478,,,,478,478,,,,,,,478', +',,478,478,478,,,478,478,479,479,479,,479,,,,479,479,,,,479,,479,479', +'479,479,479,479,479,,,,,,479,479,479,479,479,479,479,,,479,,,,,,,479', +',,479,479,479,479,479,479,479,479,,479,479,479,,479,479,,479,479,479', +',,,,,,,,,,,,,,,,,,,479,,,479,,,479,479,,,479,,,,,,479,,,,,,,,479,,,', +',479,479,479,479,479,479,,,,479,479,,,,,,,479,,,479,479,479,,,479,479', +'480,480,480,,480,,,,480,480,,,,480,,480,480,480,480,480,480,480,,,,', +',480,480,480,480,480,480,480,,,480,,,,,,,480,,,480,480,480,480,480,480', +'480,480,,480,480,480,,480,480,,480,480,480,,,,,,,,,,,,,,,,,,,,480,,', +'480,,,480,480,,,480,,,,,,480,,,,,,,,480,,,,,480,480,480,480,480,480', +',,,480,480,,,,,,,480,,,480,480,480,,,480,480,660,660,660,,660,,,,660', +'660,,,,660,,660,660,660,660,660,660,660,,,,,,660,660,660,660,660,660', +'660,,,660,,,,,,,660,,,660,660,660,660,660,660,660,660,660,660,660,660', +',660,660,,660,660,660,,,,,,,,,,,,,,,,,,,,660,,,660,,,660,660,,,660,', +'660,,660,,660,,,,,,,,660,,,,,660,660,660,660,660,660,,,,660,660,,,,', +',,660,,660,660,660,660,,,660,660,659,659,659,,659,,,,659,659,,,,659', +',659,659,659,659,659,659,659,,,,,,659,659,659,659,659,659,659,,,659', +',,,,,,659,,,659,659,659,659,659,659,659,659,,659,659,659,,659,659,,659', +'659,659,,,,,,,,,,,,,,,,,,,,659,,,659,,,659,659,,,659,,,,,,659,,,,,,', +',659,,,,,659,659,659,659,659,659,,,,659,659,,,,,,,659,,,659,659,659', +',,659,659,658,658,658,,658,,,,658,658,,,,658,,658,658,658,658,658,658', +'658,,,,,,658,658,658,658,658,658,658,,,658,,,,,,,658,,,658,658,658,658', +'658,658,658,658,,658,658,658,,658,658,,658,658,658,,,,,,,,,,,,,,,,,', +',,658,,,658,,,658,658,,,658,,658,,,,658,,,,,,,,658,,,,,658,658,658,658', +'658,658,,,,658,658,,,,,,,658,,,658,658,658,,,658,658,629,629,629,,629', +',,,629,629,,,,629,,629,629,629,629,629,629,629,,,,,,629,629,629,629', +'629,629,629,,,629,,,,,,,629,,,629,629,629,629,629,629,629,629,,629,629', +'629,,629,629,,629,629,629,,,,,,,,,,,,,,,,,,,,629,,,629,,,629,629,,,629', +',,,,,629,,,,,,,,629,,,,,629,629,629,629,629,629,,,,629,629,,,,,,,629', +',,629,629,629,,,629,629,623,623,623,,623,,,,623,623,,,,623,,623,623', +'623,623,623,623,623,,,,,,623,623,623,623,623,623,623,,,623,,,,,,,623', +',,623,623,623,623,623,623,623,623,,623,623,623,,623,623,,623,623,623', +',,,,,,,,,,,,,,,,,,,623,,,623,,,623,623,,,623,,,,,,623,,,,,,,,623,,,', +',623,623,623,623,623,623,,,,623,623,,,,,,,623,,,623,623,623,,,623,623', +'611,611,611,,611,,,,611,611,,,,611,,611,611,611,611,611,611,611,,,,', +',611,611,611,611,611,611,611,,,611,,,,,,,611,,,611,611,611,611,611,611', +'611,611,611,611,611,611,,611,611,,611,611,611,,,,,,,,,,,,,,,,,,,,611', +',,611,,,611,611,,,611,,611,,611,,611,,,,,,,,611,,,,,611,611,611,611', +'611,611,,,,611,611,,,,,,,611,,611,611,611,611,,,611,611,588,588,588', +',588,,,,588,588,,,,588,,588,588,588,588,588,588,588,,,,,,588,588,588', +'588,588,588,588,,,588,,,,,,,588,,,588,588,588,588,588,588,588,588,,588', +'588,588,,588,588,,588,588,588,,,,,,,,,,,,,,,,,,,,588,,,588,,,588,588', +',,588,,,,,,588,,,,,,,,588,,,,,588,588,588,588,588,588,,,,588,588,,,', +',,,588,,,588,588,588,,,588,588,554,554,554,,554,,,,554,554,,,,554,,554', +'554,554,554,554,554,554,,,,,,554,554,554,554,554,554,554,,,554,,,,,', +',554,,,554,554,554,554,554,554,554,554,,554,554,554,,554,554,,554,554', +'554,,,,,,,,,,,,,,,,,,,,554,,,554,,,554,554,,,554,,,,,,554,,,,,,,,554', +',,,,554,554,554,554,554,554,,,,554,554,,,,,,,554,,,554,554,554,,,554', +'554,549,549,549,,549,,,,549,549,,,,549,,549,549,549,549,549,549,549', +',,,,,549,549,549,549,549,549,549,,,549,,,,,,,549,,,549,549,549,549,549', +'549,549,549,,549,549,549,,549,549,,549,549,549,,,,,,,,,,,,,,,,,,,,549', +',,549,,,549,549,,,549,,,,,,549,,,,,,,,549,,,,,549,549,549,549,549,549', +',,,549,549,,,,,,,549,,,549,549,549,,,549,549,545,545,545,,545,,,,545', +'545,,,,545,,545,545,545,545,545,545,545,,,,,,545,545,545,545,545,545', +'545,,,545,,,,,,,545,,,545,545,545,545,545,545,545,545,,545,545,545,', +'545,545,,,,545,,,,,,,,,,,,,,,,,,,,545,,,545,,,545,545,,,545,,,,,,,,', +',,,,,,,,,,545,545,545,545,545,545,,,,545,545,,,,,,,545,,,545,545,545', +',,545,545,539,539,539,,539,,,,539,539,,,,539,,539,539,539,539,539,539', +'539,,,,,,539,539,539,539,539,539,539,,,539,,,,,,,539,,,539,539,539,539', +'539,539,539,539,539,539,539,539,,539,539,,539,539,539,,,,,,,,,,,,,,', +',,,,,539,,,539,,,539,539,,,539,,539,,539,,539,,,,,,,,539,,,,,539,539', +'539,539,539,539,,,,539,539,,,,,,,539,,539,539,539,539,,,539,539,519', +'519,519,,519,,,,519,519,,,,519,,519,519,519,519,519,519,519,,,,,,519', +'519,519,519,519,519,519,,,519,,,,,,,519,,,519,519,519,519,519,519,519', +'519,519,519,519,519,,519,519,,519,519,519,,,,,,,,,,,,,,,,,,,,519,,,519', +',,519,519,,,519,,519,,519,,519,,,,,,,,519,,,,,519,519,519,519,519,519', +',,,519,519,,,,,,,519,,519,519,519,519,,,519,519,522,522,522,,522,,,', +'522,522,,,,522,,522,522,522,522,522,522,522,,,,,,522,522,522,522,522', +'522,522,,,522,,,,,,,522,,,522,522,522,522,522,522,522,522,522,522,522', +'522,,522,522,,522,522,522,,,,,,,,,,,,,,,,,,,,522,,,522,,,522,522,,,522', +',,,522,,522,,,,,,,,522,,,,,522,522,522,522,522,522,,,,522,522,,,,,,', +'522,,522,522,522,522,,,522,522,524,524,524,,524,,,,524,524,,,,524,,524', +'524,524,524,524,524,524,,,,,,524,524,524,524,524,524,524,,,524,,,,,', +',524,,,524,524,524,524,524,524,524,524,,524,524,524,,524,524,,524,524', +'524,,,,,,,,,,,,,,,,,,,,524,,,524,,,524,524,,,524,,,,,,524,,,,,,,,524', +',,,,524,524,524,524,524,524,,,,524,524,,,,,,,524,,,524,524,524,,,524', +'524,941,941,941,,941,,,,941,941,,,,941,,941,941,941,941,941,941,941', +',,,,,941,941,941,941,941,941,941,,,941,,,,,,,941,,,941,941,941,941,941', +'941,941,941,,941,941,941,,941,941,,,,941,,,,,,,,,,,,,,,,,,,,941,,,941', +',,941,941,,,941,,,,,,,,,,,,,,,,,,,941,941,941,941,941,941,,,,941,941', +',,,,,,941,,,941,941,941,,,941,941,246,246,246,,246,,,,246,246,,,,246', +',246,246,246,246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246', +',,,,,,246,,,246,246,246,246,246,246,246,246,,246,246,246,,246,246,,246', +'246,246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,', +',246,,,,,246,246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246', +',,246,246,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249,249', +'249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249,249', +'249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,,,,,', +',,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249,249', +'249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250,,250', +',,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250,250', +'250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250,250', +'250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250', +',,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,,,,,250', +',,250,250,250,,,250,250,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75', +'75,75,75,75,75,75,75,75,75,,,,75,75,75,75,75,75,75,75,75,75,,,,,,75', +'75,75,75,75,75,75,75,75,75,75,75,,75,,,,,,,75,75,,75,75,75,75,75,75', +'75,,,75,75,,,,75,75,75,75,,,,,,75,,,,,,,,75,75,,75,75,75,75,75,75,75', +'75,75,75,75,,,75,,,,,,,,,,,,,,,,,,,,75,,,,,75,12,12,12,12,12,12,12,12', +'12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12', +'12,12,12,12,,,,,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12', +'12,12,12,12,12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12', +'12,12,12,12,12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,,,,,12,423,423,423', +'423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423', +'423,423,423,423,,,,423,423,423,423,423,423,423,423,423,423,,,,,,423', +'423,423,423,423,423,423,423,423,,,423,,,,,,,,,423,423,,423,423,423,423', +'423,423,423,,,423,423,,,,423,423,423,423,,,,,,,,,,,,,,423,423,,423,423', +'423,423,423,423,423,423,423,423,423,,,423,423,,,,,,,,,,423,,,,,,,,,423', +',,,,423,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103', +'103,103,103,103,103,103,103,103,103,,,,103,103,103,103,103,103,103,103', +'103,103,,,,,,103,103,103,103,103,103,103,103,103,103,103,103,,103,,', +',,,,103,103,,103,103,103,103,103,103,103,,,103,103,,,,103,103,103,103', +',,,,,,,,,,,,,103,103,,103,103,103,103,103,103,103,103,103,103,103,,', +'103,,,,,,,,,,,,,,,,,,,,103,,,,,103,655,655,655,655,655,655,655,655,655', +'655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,,,,655,655', +'655,655,655,655,655,655,655,655,,,,,,655,655,655,655,655,655,655,655', +'655,,,655,,,,,,,,,655,655,,655,655,655,655,655,655,655,,,655,655,,,', +'655,655,655,655,,,,,,,,,,,,,,655,655,,655,655,655,655,655,655,655,655', +'655,655,655,,,655,655,,,,,,,,,,655,,,,,,,,,655,,,,,655,789,789,789,789', +'789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789', +'789,789,789,,,,789,789,789,789,789,789,789,789,789,789,,,,,,789,789', +'789,789,789,789,789,789,789,,,789,,,,,,,,,789,789,,789,789,789,789,789', +'789,789,,,789,789,,,,789,789,789,789,,,,,,,,,,,,,,789,789,,789,789,789', +'789,789,789,789,789,789,789,789,,,789,,,,,,,,,,,,,,,,,,,,789,,,,,789', '11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11', '11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11', '11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,', ',,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,', -'11,,,,,,,,,11,408,408,408,408,408,408,408,408,408,408,408,408,408,408', -'408,408,408,408,408,408,408,408,408,408,,,,408,408,408,408,408,408,408', -'408,408,408,,,,,,408,408,408,408,408,408,408,408,408,,,408,,,,,,,,,408', -'408,,408,408,408,408,408,408,408,,,408,408,,,,408,408,408,408,,,,,,', -',,,,,,,408,408,,408,408,408,408,408,408,408,408,408,408,408,,,408,408', -',,,487,,,,,,408,487,487,487,,,487,487,487,408,487,,,,,,,,,487,487,,', -',,,,,,,487,487,,487,487,487,487,487,,,,,,,,264,264,,,264,,,,,,,,,264', -'264,,264,264,264,264,264,264,264,,,264,264,487,,,264,264,264,264,487', -',,,,487,487,,,,,,,264,264,,264,264,264,264,264,264,264,264,264,264,264', -'487,487,264,,,,,1017,1017,,,1017,,,487,,,,,487,1017,1017,264,1017,1017', -'1017,1017,1017,1017,1017,,,1017,1017,,,,1017,1017,1017,1017,,,,,,1017', -',,,,,,,1017,1017,,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017', -'1017,,,1017,,,,,453,453,,,453,,,,,,,,,453,453,1017,453,453,453,453,453', -'453,453,,,453,453,,,,453,453,453,453,,,,,,453,,,,,,,,453,453,,453,453', -'453,453,453,453,453,453,453,453,453,,,453,,,,,1016,1016,,,1016,,,,,', -',,,1016,1016,453,1016,1016,1016,1016,1016,1016,1016,,,1016,1016,,,,1016', -'1016,1016,1016,,,,,,1016,,,,,,,,1016,1016,,1016,1016,1016,1016,1016', -'1016,1016,1016,1016,1016,1016,,,1016,,,,,454,454,,,454,,,,,,,,,454,454', -'1016,454,454,454,454,454,454,454,,,454,454,,,,454,454,454,454,,,,,,454', -',,,,,,,454,454,,454,454,454,454,454,454,454,454,454,454,454,,1002,454', -'1002,1002,1002,1002,1002,1000,,1000,1000,1000,1000,1000,,,1002,,,,,454', -',1000,,,,,,,,,,,,,,,1002,,,,,,,1000,,967,967,1002,1002,967,,,1000,1000', -'1000,1000,,,967,967,,967,967,967,967,967,967,967,,,967,967,,,,967,967', -'967,967,,,1002,,,967,,,,1000,,,,967,967,,967,967,967,967,967,967,967', -'967,967,967,967,,,967,,,,,522,522,,,522,,,,,,,,,522,522,967,522,522', -'522,522,522,522,522,,,522,522,,,,522,522,522,522,,,,,,522,,,,,,,,522', -'522,,522,522,522,522,522,522,522,522,522,522,522,,,522,,,,,523,523,', -',523,,,,,,,,,523,523,522,523,523,523,523,523,523,523,,,523,523,,,,523', -'523,523,523,,,,,,523,,,,,,,,523,523,,523,523,523,523,523,523,523,523', -'523,523,523,,950,523,950,950,950,950,950,,,,,,,,,,950,,,,,523,,,,,,', -',,,,,,,,,,950,950,532,532,,,532,,,950,950,950,950,,,532,532,,532,532', -'532,532,532,532,532,,,532,532,,,,532,532,532,532,,,,,,532,,,,950,,,', -'532,532,,532,532,532,532,532,532,532,532,532,532,532,,,532,,,,,533,533', -',,533,,,,,,,,,533,533,532,533,533,533,533,533,533,533,,,533,533,,,,533', -'533,533,533,,,,,,533,,,,,,,,533,533,,533,533,533,533,533,533,533,533', -'533,533,533,,927,533,927,927,927,927,927,925,,925,925,925,925,925,,', -'927,,,,,533,,925,923,,923,923,923,923,923,921,,921,921,921,921,921,927', -',923,,,,,925,,921,,927,927,,,,,,925,925,,,,551,923,551,551,551,551,551', -',921,,,,923,923,,,551,921,921,921,921,898,927,898,898,898,898,898,896', -'925,896,896,896,896,896,,,898,551,,,,,,896,,923,551,551,551,551,,893', -'921,893,893,893,893,893,898,,,,,,,896,,893,,898,898,,,,896,896,896,896', -',,,,551,,,,,,,893,,,,,,,,,893,893,893,893,,898,,213,213,,,213,896,,', -',,,,,213,213,,213,213,213,213,213,213,213,,,213,213,,,893,213,213,213', -'213,,,,,,213,,,,,,,,213,213,,213,213,213,213,213,213,213,213,213,213', -'213,,,213,,,,,214,214,,,214,,,,,,,,,214,214,213,214,214,214,214,214', -'214,214,,,214,214,,,,214,214,214,214,,,,,,214,,,,,,,,214,214,,214,214', -'214,214,214,214,214,214,214,214,214,,,214,,,,,593,593,,,593,,,,,,,,', -'593,593,214,593,593,593,593,593,593,593,,,593,593,,,,593,593,593,593', -',,,,,593,,,,,,,,593,593,,593,593,593,593,593,593,593,593,593,593,593', -',,593,,,,,594,594,,,594,,,,,,,,,594,594,593,594,594,594,594,594,594', -'594,,,594,594,,,,594,594,594,594,,,,,,594,,,,,,,,594,594,,594,594,594', -'594,594,594,594,594,594,594,594,,606,594,606,606,606,606,606,761,,761', -'761,761,761,761,,,606,,,,,594,,761,,,,,719,,719,719,719,719,719,,,,606', -'606,,,,,719,761,,606,606,606,606,,,,761,761,761,761,,,,,,,,,719,,,,', -',,,,752,752,719,719,752,,,,606,,,,,752,752,761,752,752,752,752,752,752', -'752,,,752,752,,,,752,752,752,752,,,719,,,752,,,,,,,,752,752,,752,752', -'752,752,752,752,752,752,752,752,752,,,752,,,,,751,751,,,751,,,,,,,,', -'751,751,752,751,751,751,751,751,751,751,,,751,751,,,,751,751,751,751', -',,,,,751,,,,,,,,751,751,,751,751,751,751,751,751,751,751,751,751,751', -',340,751,340,340,340,340,340,717,,717,717,717,717,717,,,340,,,,,751', -',717,715,,715,715,715,715,715,,,,,,,,340,340,715,,,,,717,,340,340,340', -'340,,,,717,717,717,717,,,,665,715,665,665,665,665,665,,,,715,715,715', -'715,,,665,,,,,,340,,,,,,,717,,,,,,,,,665,,,,,,,,715,665,665,665,665', -',,,,,,,,,,,,,,,,,,,,,,,,665,,,,,,,,665' ] - racc_action_check = arr = ::Array.new(26642, nil) +'11,,779,779,,,779,,,11,,,,,11,779,779,,779,779,779,779,779,779,779,', +',779,779,,,,779,779,779,779,,,,,,779,,,,,,,,779,779,,779,779,779,779', +'779,779,779,779,779,779,779,,,779,,,,,,,,,,230,230,,,230,,,,,,779,,', +'230,230,779,230,230,230,230,230,230,230,,,230,230,,,,230,230,230,230', +',,,,,230,,,,,,,,230,230,,230,230,230,230,230,230,230,230,230,230,230', +',,230,,,,,,,,,,229,229,,,229,,,,,,230,,,229,229,230,229,229,229,229', +'229,229,229,,,229,229,,,,229,229,229,229,,,,,,229,,,,,,,,229,229,,229', +'229,229,229,229,229,229,229,229,229,229,,,229,,,,,,,,,,778,778,,,778', +',,,,,229,,,778,778,229,778,778,778,778,778,778,778,,,778,778,,,,778', +'778,778,778,,,,,,778,,,,,,,,778,778,,778,778,778,778,778,778,778,778', +'778,778,778,,,778,,,,,,,,,,662,662,,,662,,,,,,778,,,662,662,778,662', +'662,662,662,662,662,662,,,662,662,,,,662,662,662,662,,,,,,662,,,,,,', +',662,662,,662,662,662,662,662,662,662,662,662,662,662,,,662,,,,,,,,', +',474,474,,,474,,,,,,662,,,474,474,662,474,474,474,474,474,474,474,,', +'474,474,,,,474,474,474,474,,,,,,474,,,,,,,,474,474,,474,474,474,474', +'474,474,474,474,474,474,474,,,474,,,,,,,,,,475,475,,,475,,,,,,474,,', +'475,475,474,475,475,475,475,475,475,475,,,475,475,,,,475,475,475,475', +',,,,,475,,,,,,,,475,475,,475,475,475,475,475,475,475,475,475,475,475', +',,475,,,,,,,,,,661,661,,,661,,,,,,475,,,661,661,475,661,661,661,661', +'661,661,661,,,661,661,,,,661,661,661,661,,,,,,661,,,,,,,,661,661,,661', +'661,661,661,661,661,661,661,661,661,661,,,661,,,,,,,,,,541,541,,,541', +',,,,,661,,,541,541,661,541,541,541,541,541,541,541,,,541,541,,,,541', +'541,541,541,,,,,,541,,,,,,,,541,541,,541,541,541,541,541,541,541,541', +'541,541,541,,1065,541,1065,1065,1065,1065,1065,,,,,279,279,,,279,1065', +',,,,541,,,279,279,541,279,279,279,279,279,279,279,,,279,279,1065,,,279', +'279,279,279,,,,,1065,1065,,,,,,,,279,279,,279,279,279,279,279,279,279', +'279,279,279,279,,,279,,,,,,,,,1065,551,551,,,551,,,,,,279,,,551,551', +'279,551,551,551,551,551,551,551,,,551,551,,,,551,551,551,551,,,,,,551', +',,,,,,,551,551,,551,551,551,551,551,551,551,551,551,551,551,,,551,,', +',,,,,,,550,550,,,550,,,,,,551,,,550,550,551,550,550,550,550,550,550', +'550,,,550,550,,,,550,550,550,550,,,,,,550,,,,,,,,550,550,,550,550,550', +'550,550,550,550,550,550,550,550,,,550,,,,,,,,,,540,540,,,540,,,,,,550', +',,540,540,550,540,540,540,540,540,540,540,,,540,540,,,,540,540,540,540', +',,,,,540,,,,,,,,540,540,,540,540,540,540,540,540,540,540,540,540,540', +',,540,,,,,,,,,,613,613,,,613,,,,,,540,,,613,613,540,613,613,613,613', +'613,613,613,,,613,613,,,,613,613,613,613,,,,,,613,,,,,,,,613,613,,613', +'613,613,613,613,613,613,613,613,613,613,,,613,,,,,,,,,,612,612,,,612', +',,,,,613,,,612,612,613,612,612,612,612,612,612,612,,,612,612,,,,612', +'612,612,612,,,,,,612,,,,,,,,612,612,,612,612,612,612,612,612,612,612', +'612,612,612,,,612,,,,,,,,,,1037,1037,,,1037,,,,,,612,,,1037,1037,612', +'1037,1037,1037,1037,1037,1037,1037,,,1037,1037,,,,1037,1037,1037,1037', +',,,,,1037,,,,,,,,1037,1037,,1037,1037,1037,1037,1037,1037,1037,1037', +'1037,1037,1037,,,1037,,,,,,,,,,1042,1042,,,1042,,,,,,1037,,,1042,1042', +'1037,1042,1042,1042,1042,1042,1042,1042,,,1042,1042,,,,1042,1042,1042', +'1042,,,,,,1042,,,,,,,,1042,1042,,1042,1042,1042,1042,1042,1042,1042', +'1042,1042,1042,1042,,,1042,745,,745,745,745,745,745,,,1043,1043,,,1043', +',,745,,,1042,,,1043,1043,1042,1043,1043,1043,1043,1043,1043,1043,,,1043', +'1043,,,745,1043,1043,1043,1043,,,,,,1043,745,745,,,,,,1043,1043,,1043', +'1043,1043,1043,1043,1043,1043,1043,1043,1043,1043,,1061,1043,1061,1061', +'1061,1061,1061,,,,,,745,,,,1061,,,,,1043,,,,953,1043,953,953,953,953', +'953,,,,,,,1061,,354,953,354,354,354,354,354,1061,1061,1061,1061,,,,', +'788,354,788,788,788,788,788,,953,,,,,,,,788,,,953,953,,,354,354,,,,1061', +',,,354,354,354,354,,,788,955,,955,955,955,955,955,,788,788,788,788,', +',953,1047,955,1047,1047,1047,1047,1047,,,,,,,,354,988,1047,988,988,988', +'988,988,,955,,,,,,788,,988,,,955,955,,,1047,986,,986,986,986,986,986', +',,,1047,1047,,,988,983,986,983,983,983,983,983,,,,988,988,,,955,831', +'983,831,831,831,831,831,,986,,,,,,1047,,831,986,986,986,986,,,983,,', +',,,988,,,983,983,983,983,,,831,1063,,1063,1063,1063,1063,1063,,831,831', +'831,831,,,986,,1063,,,,,,,,,,,,,983,,,,,,,831,,1063,,,,,,831,,,,,1063', +'1063,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1063' ] + racc_action_check = arr = ::Array.new(26358, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -1863,314 +1863,340 @@ end racc_action_pointer = [ - nil, 1215, 4534, 1119, nil, 644, nil, nil, 6082, 878, - nil, 24807, 24275, 996, nil, 959, 976, 630, 395, 876, - 685, nil, -78, 6362, 2560, 952, nil, 295, nil, 196, - 928, 1185, 6502, 6642, 6782, nil, 5380, 6922, 7062, nil, - 848, 258, 295, 830, 184, 7482, 7622, 7762, 725, 472, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 796, - nil, -76, 7902, nil, -19, nil, 8042, 8182, nil, nil, - 8322, 8462, 757, nil, 24408, nil, nil, nil, nil, nil, - -95, nil, nil, nil, nil, nil, nil, 681, 663, 658, - 638, 24142, nil, nil, nil, nil, nil, nil, 125, nil, - nil, 263, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 9162, nil, nil, nil, nil, 9302, - 9442, 9582, 9722, 9862, 648, nil, 634, nil, nil, nil, + nil, 1201, 3200, 845, nil, 92, nil, nil, 6299, 952, + nil, 24627, 23937, 699, nil, 661, 659, 707, 641, 495, + 496, nil, -68, 6439, 2777, 681, nil, -47, nil, 2, + 1068, 1800, 6579, 6719, 6859, nil, 2354, 6999, 7139, nil, + 577, 432, 494, 604, 181, 7419, 7559, -43, 7699, 478, + 740, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 1668, nil, 7839, nil, nil, -23, nil, 7979, 8119, nil, + nil, 8259, 8399, 470, nil, 23799, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 114, nil, nil, nil, nil, nil, nil, 350, + 316, 314, 285, 24213, nil, nil, nil, nil, nil, nil, + 384, nil, nil, 662, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 8679, nil, nil, nil, + nil, 8819, 8959, 9099, 9239, 9379, 254, nil, 721, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 629, nil, 1996, - 10002, 10142, 10282, 25975, 26043, nil, nil, 10422, 10562, 10702, - 10842, 10982, 11122, nil, nil, 409, 174, 103, 466, -30, - 373, 412, nil, 17982, 1714, 211, 18262, 18402, 18542, 18682, - 18822, 18962, 19102, 19242, 19382, 19522, 19662, 19802, 19942, 20082, - 20222, 20362, 20502, 20642, 20782, 20922, 21062, 5802, 21202, 21342, - 21482, 21622, nil, nil, 25059, nil, nil, 200, 22042, nil, - 158, nil, nil, nil, 22322, nil, nil, 22462, nil, 3406, - nil, 60, -14, nil, 23022, 12, 23162, nil, 23302, nil, - -104, 23442, nil, nil, 412, nil, 891, 23582, 1169, 3970, - 1183, 1210, 1171, 24002, 3124, 611, 597, 567, 1226, 768, - nil, 1140, 1097, -24, nil, nil, nil, 1123, -44, 1026, - 11962, nil, -85, 1079, 735, nil, 1073, nil, 12382, 4252, - nil, 12522, 1048, nil, 290, 324, 1171, 12942, nil, nil, - 26446, 396, 136, 157, 13362, 13502, 497, 1279, 1166, -19, - 34, 536, 1247, 164, 1284, nil, nil, 14482, nil, 14622, - 624, -54, 595, 605, 666, 626, 603, 326, 628, nil, - 181, nil, nil, nil, nil, nil, 696, nil, 595, nil, - 535, nil, 693, 465, nil, 738, 460, nil, 766, -28, - nil, 771, -33, nil, 299, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 5239, 24940, nil, - nil, nil, nil, 867, nil, nil, 895, 16722, 897, nil, - nil, 1855, 902, nil, nil, 913, 927, 506, 504, 1442, - nil, nil, nil, 533, 0, 1045, nil, nil, 1310, 1053, - nil, 3124, nil, 1007, nil, nil, 1573, nil, nil, nil, - nil, 237, nil, 25195, 25331, 5942, 177, 17702, 17562, 17422, - 4111, 4252, 332, 493, 1051, 1005, 997, 991, 5380, 5521, - 5404, 5098, 1001, 1135, 1258, 1392, 5239, 4393, 4534, 4675, - 4816, 971, 1200, 3970, 4957, 3547, 210, 25059, nil, nil, - nil, nil, nil, nil, 252, 274, 926, 917, nil, nil, - 17282, nil, nil, 17142, nil, 17002, nil, 256, nil, 16862, - nil, nil, 16582, 1148, 891, 885, nil, nil, 855, 16442, - 840, 16302, 25508, 25576, 483, 866, nil, 16162, 769, nil, - 16022, 15882, 25678, 25746, 3829, 15742, 875, 868, 526, nil, - nil, 15602, nil, nil, 15462, nil, 747, nil, 389, 769, - 58, 25869, nil, 721, 716, nil, 712, 701, 699, nil, - nil, nil, nil, nil, nil, nil, nil, 677, 892, nil, - nil, 15322, nil, nil, nil, 764, nil, nil, nil, 756, - nil, nil, 723, 5521, 738, nil, 5662, 55, 181, 731, - 694, nil, 15182, 26111, 26179, -5, nil, 340, 232, -21, - nil, 749, nil, 9, 15042, nil, 26241, nil, 14902, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 333, nil, nil, 437, nil, nil, nil, 107, nil, nil, - 105, nil, 114, nil, 24674, nil, 42, 14762, 14342, 372, - 1212, 14202, 14062, 13922, 13782, 1190, nil, nil, nil, 13642, - 13222, 1174, nil, 13082, 12802, nil, 136, 138, 401, 658, - 1117, 1714, 1075, nil, nil, 26507, nil, nil, 1173, -14, - -49, nil, nil, nil, nil, 1013, nil, 1046, 12662, nil, - nil, 12242, nil, 1135, -109, 12102, 1014, nil, 1019, 29, - 30, 1063, 152, 705, 1078, 1066, 11822, 2701, 1142, 258, - 1200, 11682, nil, 1094, 226, nil, nil, nil, 4393, 2278, - 1111, 356, nil, nil, 619, 26470, nil, 26453, nil, 26269, - nil, 11542, nil, 932, nil, 1143, 407, 1148, nil, nil, - nil, nil, 48, nil, 1263, nil, nil, nil, nil, 1269, - nil, 11402, 1159, 163, 31, 194, -1, 23862, nil, 569, - nil, 26384, 26316, 23722, nil, nil, nil, -93, 632, 4675, - 4957, 26248, 269, 24541, 203, 904, 5098, nil, nil, nil, - nil, nil, nil, nil, -27, 22882, 1996, 22742, nil, 88, - nil, 2278, nil, 2983, nil, nil, 3265, nil, 2137, nil, - 3688, 22602, 22182, 21902, 21762, 154, 18122, 182, 184, nil, - 199, 274, 276, nil, 356, 341, 360, 349, 17842, nil, - nil, 1855, nil, nil, nil, 3547, 3688, nil, nil, nil, - 408, 28, nil, nil, 540, nil, 3406, 422, 466, nil, - nil, nil, nil, 452, 570, 473, 490, nil, nil, nil, - 493, 496, nil, 502, 520, nil, 522, nil, nil, 527, - 993, 549, 1194, nil, 730, nil, 11262, 739, 2560, 2419, - nil, 16, 21, 189, 441, 500, nil, 651, 4816, 9022, - nil, -80, 785, 788, 672, nil, nil, nil, nil, nil, - nil, nil, nil, 687, 677, nil, 2842, 8882, 8742, 2419, - 455, nil, nil, 25921, nil, nil, 25897, nil, 25890, nil, - nil, 722, 1178, 8602, 629, 787, 835, 3829, 734, 840, - nil, 3265, nil, nil, 51, 7342, nil, nil, nil, nil, - nil, 25839, nil, 25832, nil, 25815, nil, 25808, nil, nil, - nil, nil, 394, 1276, 754, nil, 53, nil, 877, 879, - 7202, 2137, nil, nil, 887, 183, nil, nil, nil, nil, - 25638, nil, 777, nil, nil, 779, 809, 821, 822, nil, - 823, nil, 227, nil, nil, nil, 486, 25440, nil, nil, - 860, nil, nil, nil, 1573, 54, 80, 303, 927, 118, - nil, 859, 862, 863, 865, 880, 1153, 886, 1060, 4111, - nil, nil, nil, 33, 2983, nil, nil, 2842, 2701, nil, - 25400, nil, 25393, nil, 1373, nil, 1116, nil, nil, nil, - 801, 955, 959, nil, 1044, 6222, 25263, 25127, 134, 859, - nil, nil, nil, nil, 921, 944, 372, nil, nil, nil, - 1074, 1077, 1078, 959, 968, 969, 970, nil, nil, 975, - -9, 52, 124, -8, 980, 987, nil, nil, nil, nil, - 725, nil, nil, nil, nil, 44, nil, 1034, nil ] + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 213, nil, 2213, 9659, 9799, 9939, 10079, 10219, 10359, 24849, + 24776, nil, nil, 10499, 10639, 10779, nil, nil, 579, 264, + 259, 213, 203, 64, 13, nil, 23379, 2918, 0, 23519, + 23659, 10919, 11059, 11199, 11339, 11479, 11619, 11759, 11899, 12039, + 12179, 12319, 12459, 12599, 12739, 12879, 13019, 13159, 13299, 13439, + 13579, nil, nil, nil, nil, 13719, nil, nil, nil, 25360, + nil, nil, -41, 13999, nil, nil, 1224, nil, nil, nil, + 14279, nil, nil, 14419, nil, 2495, nil, 1170, 1169, nil, + 14839, 1207, 14979, nil, nil, 15119, 15259, nil, nil, 509, + nil, nil, 15399, 1207, nil, 1137, 5174, 1146, 1152, 1113, + 15679, 4469, 351, 356, 490, 1165, 772, nil, 1124, 1081, + -19, nil, nil, nil, 1112, 164, 1069, 16659, nil, 429, + 1126, 773, nil, 1118, 16939, nil, 17079, 5597, 1184, 1058, + 17219, 17359, nil, nil, 26046, 396, 148, 90, 17499, 5456, + 4751, 375, 1167, 1047, 28, 21, 424, 1113, -14, 1140, + nil, nil, 17779, nil, 17919, 175, 235, -61, 352, 443, + 448, 470, 527, 531, nil, 575, nil, nil, nil, nil, + nil, 448, nil, 424, nil, 154, nil, 1001, 296, nil, + 992, nil, 991, 160, nil, 980, 125, nil, 180, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 24075, nil, nil, nil, nil, 987, nil, + nil, 969, 19459, 961, nil, nil, 925, nil, 615, 389, + 1006, nil, nil, 1931, nil, nil, nil, nil, nil, 2072, + 920, nil, nil, 916, 910, 427, 171, 1540, nil, nil, + nil, 801, 0, 935, nil, nil, 1408, 1276, nil, nil, + nil, 154, nil, 930, 25068, 25141, 20719, 107, 20859, 20999, + 21139, 3341, 3200, 695, 617, 951, 918, 914, 911, 1358, + 1174, 1161, 4328, 4187, 3905, 3764, 3482, 3059, 948, 1083, + 4046, 3623, 2213, 1227, 851, nil, 1196, nil, nil, nil, + nil, nil, nil, nil, nil, 733, 730, nil, nil, 22819, + nil, nil, 22959, nil, 23099, nil, 164, nil, nil, nil, + 9519, 909, 721, 723, nil, nil, 725, 6159, 729, 22679, + 25579, 25287, 754, 773, nil, 22539, 736, nil, 800, 22399, + 25506, 25433, 960, 2354, 22259, 883, 882, 767, nil, nil, + 118, 568, 801, 786, nil, 165, 813, nil, 1032, nil, + 774, 784, nil, 789, 791, 797, nil, nil, nil, nil, + nil, nil, nil, nil, 786, 933, nil, nil, 22119, nil, + nil, nil, 883, nil, nil, nil, 884, nil, nil, 889, + 4046, 941, nil, 5738, 28, 951, 952, 951, 965, nil, + nil, 21979, 25725, 25652, -19, nil, 353, 259, 527, nil, + 260, nil, 873, 21839, nil, 893, nil, nil, nil, 21699, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 258, nil, nil, 382, nil, nil, nil, 859, nil, + nil, 880, nil, 1931, nil, 24351, nil, 890, 21559, 21419, + 21279, 25214, 24995, 20579, 20439, 341, 934, 20299, 20159, 20019, + 19879, 951, nil, nil, nil, 19739, 19599, 953, nil, nil, + nil, 230, 174, 929, 523, 947, 950, nil, -63, 1052, + -24, nil, 978, nil, 1083, nil, nil, 967, nil, 1009, + 19319, nil, nil, 19179, nil, -95, 19039, 972, nil, 976, + 4, -5, 1016, 29, 804, 1022, 984, 18899, 18759, 1050, + 152, 52, nil, 18619, nil, nil, nil, nil, 18479, nil, + nil, 18339, nil, nil, nil, -10, 1002, 339, nil, nil, + 289, 1471, nil, 1731, nil, 25935, nil, 18199, nil, 628, + nil, 1005, 319, 1023, nil, nil, nil, nil, 738, nil, + 1141, nil, nil, nil, nil, nil, 1148, nil, 18059, 1034, + 33, 57, 159, 160, 3764, nil, 768, nil, 24922, 24703, + 17639, nil, nil, nil, 156, 2495, 4187, 730, 26061, 24489, + 61, 905, 3905, nil, nil, 292, nil, nil, nil, 1077, + nil, 1062, 16799, 1066, 362, 290, 128, 256, nil, 2918, + 16519, nil, 1071, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 16379, 16239, 16099, 15959, 271, 15819, nil, + nil, 26184, nil, 3623, nil, nil, 1117, nil, -54, nil, + nil, nil, nil, 1102, 27, nil, nil, nil, nil, nil, + nil, nil, 4328, nil, 1105, 1152, nil, nil, 584, nil, + 4892, 5033, 1121, 1127, 1125, nil, nil, nil, 1126, 1127, + nil, 1130, 1132, nil, 1139, nil, nil, 1143, 1072, 1141, + 1065, nil, 1262, nil, nil, 15539, nil, 5315, 1282, nil, + nil, 50, -13, 1284, 670, 629, nil, 1171, 2072, 14699, + 394, 1291, nil, 1179, 351, nil, nil, nil, nil, nil, + nil, nil, 1168, nil, nil, 1178, 379, nil, nil, 14559, + 14139, 2636, 1191, 1192, nil, 1194, 1195, 1196, nil, 1220, + -91, -101, 13859, nil, nil, nil, nil, 2777, 3341, nil, + 136, 23239, nil, nil, 115, 236, 868, nil, nil, 487, + nil, 1339, nil, 26031, nil, 26100, nil, nil, nil, nil, + 257, 1504, 186, nil, 49, nil, nil, 6019, 5879, nil, + nil, 372, 426, nil, nil, 396, nil, nil, 317, nil, + -52, nil, nil, 26169, nil, nil, 26154, nil, 26130, nil, + nil, 365, 8539, 718, 443, nil, 492, 4610, 51, 151, + 633, 524, -9, nil, nil, nil, -103, nil, nil, nil, + 484, 486, 490, 508, 514, 1401, 526, 1415, 3482, nil, + 293, nil, nil, 3059, nil, 2636, 534, nil, nil, 536, + 538, 543, 548, nil, 558, nil, 839, 25798, nil, nil, + 689, 7279, 25871, 25944, 47, nil, 769, 26115, nil, nil, + nil, nil, 922, 583, 764, nil, nil, nil, 706, 715, + nil, 26006, nil, 26223, nil, 25349, nil, 1162, nil, nil, + 664, 702, nil, 676, 20, 21, 120, 35, nil, 687, + 692, nil, nil, nil, 698, 704, 706, 707, 8, nil, + 591, nil, nil, nil, nil, 720, nil ] racc_action_default = [ - -1, -628, -627, -628, -2, -614, -4, -5, -628, -8, - -9, -628, -628, -628, -29, -628, -628, -628, -280, -628, - -40, -43, -616, -628, -48, -50, -51, -52, -57, -257, - -257, -257, -294, -333, -334, -69, -627, -73, -81, -83, - -628, -516, -517, -628, -628, -628, -628, -628, -616, -238, - -271, -272, -273, -274, -275, -276, -277, -278, -279, -602, - -282, -285, -627, -292, -302, -405, -628, -628, -307, -310, - -614, -628, -318, -325, -628, -335, -336, -447, -448, -449, - -450, -451, -452, -627, -455, -627, -627, -627, -627, -627, - -627, -627, -492, -498, -500, -501, -502, -503, -600, -505, - -506, -601, -508, -509, -510, -511, -512, -513, -514, -515, - -520, -521, 1059, -3, -615, -623, -624, -625, -7, -628, - -628, -628, -628, -628, -628, -17, -628, -112, -113, -114, - -115, -116, -117, -118, -119, -120, -124, -125, -126, -127, - -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, - -188, -189, -190, -191, -192, -193, -194, -22, -121, -627, - -628, -628, -627, -628, -628, -612, -613, -628, -628, -628, - -628, -628, -616, -617, -47, -628, -516, -517, -628, -280, - -628, -628, -230, -628, -627, -628, -628, -628, -628, -628, - -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, - -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, - -628, -628, -411, -414, -628, -610, -611, -58, -628, -301, - -628, -428, -431, -64, -627, -425, -65, -616, -66, -239, - -252, -627, -627, -256, -628, -262, -628, -627, -492, -593, - -616, -628, -67, -68, -614, -13, -14, -628, -71, -627, - -616, -628, -74, -77, -627, -89, -90, -628, -628, -97, - -294, -297, -616, -418, -333, -334, -337, -426, -628, -79, - -628, -85, -290, -499, -628, -215, -216, -231, -628, -627, - -284, -628, -628, -240, -620, -620, -628, -627, -303, -304, - -548, -49, -628, -628, -628, -628, -614, -628, -615, -516, - -517, -628, -628, -280, -628, -358, -359, -628, -321, -628, - -112, -113, -154, -155, -156, -172, -177, -184, -187, -328, - -628, -516, -517, -588, -589, -453, -628, -476, -628, -478, - -628, -480, -628, -628, -460, -628, -628, -466, -628, -628, - -472, -628, -628, -474, -628, -491, -493, -494, -495, -496, - -6, -626, -23, -24, -25, -26, -27, -627, -628, -19, - -20, -21, -122, -628, -30, -39, -267, -628, -628, -266, - -31, -197, -616, -247, -248, -627, -627, -603, -604, -257, - -423, -605, -606, -604, -603, -257, -422, -424, -605, -606, - -37, -205, -38, -628, -41, -42, -195, -262, -44, -45, - -46, -616, -300, -628, -628, -627, -290, -628, -628, -628, - -206, -207, -208, -209, -210, -211, -212, -213, -217, -218, - -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, - -229, -232, -233, -234, -235, -616, -627, -257, -603, -604, - -54, -59, -258, -419, -627, -627, -616, -616, -296, -253, - -628, -261, -254, -628, -259, -628, -263, -628, -598, -628, - -599, -12, -615, -16, -616, -70, -288, -86, -75, -628, - -616, -627, -628, -628, -96, -628, -499, -628, -82, -87, - -628, -628, -628, -628, -236, -628, -439, -628, -286, -618, - -241, -622, -621, -243, -622, -291, -628, -591, -620, -628, - -628, -548, -408, -587, -587, -531, -533, -533, -533, -547, - -549, -550, -551, -552, -553, -554, -555, -556, -628, -558, - -560, -562, -567, -569, -570, -572, -577, -579, -580, -582, - -583, -584, -628, -627, -349, -350, -627, -628, -628, -628, - -628, -434, -627, -628, -628, -290, -315, -107, -108, -628, - -110, -628, -280, -628, -628, -326, -548, -330, -628, -454, - -477, -482, -483, -485, -456, -479, -457, -481, -458, -459, - -628, -462, -464, -628, -465, -468, -469, -628, -470, -471, - -628, -497, -628, -18, -628, -28, -270, -628, -628, -427, - -628, -249, -251, -628, -628, -60, -245, -246, -420, -628, - -628, -62, -421, -628, -628, -299, -603, -604, -603, -604, - -616, -195, -628, -394, -395, -616, -397, -412, -53, -415, - -627, -429, -432, -244, -295, -627, -260, -264, -628, -594, - -595, -628, -596, -15, -72, -628, -78, -84, -616, -603, - -604, -627, -607, -95, -628, -80, -628, -204, -214, -616, - -627, -627, -283, -616, -620, -293, -592, -406, -627, -627, - -616, -628, -529, -530, -628, -628, -540, -628, -543, -628, - -545, -628, -360, -628, -362, -364, -371, -616, -561, -571, - -581, -585, -627, -351, -627, -308, -352, -353, -311, -628, - -314, -628, -616, -603, -604, -607, -289, -628, -107, -108, - -109, -628, -628, -627, -319, -522, -523, -628, -322, -627, - -627, -548, -628, -628, -616, -628, -627, -461, -463, -467, - -473, -475, -10, -123, -268, -628, -198, -628, -619, -627, - -33, -200, -34, -201, -61, -35, -203, -36, -202, -63, - -196, -628, -628, -628, -628, -427, -628, -587, -587, -376, - -627, -627, -627, -393, -628, -616, -399, -556, -564, -565, - -575, -627, -417, -416, -55, -627, -627, -255, -265, -597, - -76, -427, -88, -298, -627, -356, -627, -440, -627, -441, - -442, -287, -242, -628, -628, -616, -587, -568, -586, -532, - -533, -533, -559, -533, -533, -578, -533, -556, -573, -616, - -628, -369, -628, -557, -628, -354, -628, -628, -627, -627, - -313, -628, -427, -628, -107, -108, -111, -616, -627, -628, - -525, -628, -628, -628, -616, -527, -331, -590, -484, -487, - -488, -489, -490, -628, -269, -32, -199, -250, -628, -237, - -628, -374, -375, -384, -378, -386, -628, -389, -628, -391, - -396, -628, -628, -628, -563, -628, -628, -627, -628, -628, - -11, -627, -446, -357, -628, -628, -444, -409, -410, -407, - -528, -628, -536, -628, -538, -628, -541, -628, -544, -546, - -361, -363, -367, -628, -372, -305, -628, -306, -628, -628, - -628, -627, -316, -427, -628, -628, -323, -327, -329, -526, - -548, -486, -587, -566, -377, -627, -627, -627, -627, -576, - -627, -398, -616, -401, -403, -404, -574, -628, -290, -413, - -628, -430, -433, -445, -627, -516, -517, -628, -628, -280, - -443, -533, -533, -533, -533, -365, -628, -370, -628, -627, - -309, -312, -264, -627, -627, -320, -524, -627, -627, -373, - -628, -381, -628, -383, -628, -387, -628, -390, -392, -400, - -628, -289, -607, -56, -439, -627, -628, -628, -290, -628, - -534, -537, -539, -542, -628, -368, -627, -435, -436, -437, - -628, -628, -628, -627, -627, -627, -627, -402, -438, -616, - -603, -604, -607, -289, -533, -366, -355, -317, -324, -332, - -628, -379, -382, -385, -388, -427, -535, -627, -380 ] + -1, -652, -651, -652, -2, -638, -4, -5, -652, -8, + -9, -652, -652, -652, -35, -652, -652, -39, -652, -652, + -295, -51, -640, -652, -56, -61, -62, -63, -67, -272, + -272, -272, -310, -344, -345, -79, -651, -83, -91, -93, + -652, -539, -540, -652, -652, -652, -652, -231, -652, -640, + -245, -286, -287, -288, -289, -290, -291, -292, -293, -294, + -624, -297, -299, -306, -308, -318, -424, -652, -652, -58, + -58, -638, -652, -328, -335, -652, -346, -347, -349, -350, + -351, -352, -353, -354, -355, -356, -357, -358, -367, -469, + -470, -471, -472, -473, -474, -651, -477, -651, -651, -651, + -487, -651, -651, -651, -515, -521, -523, -524, -525, -526, + -622, -528, -529, -623, -531, -532, -533, -534, -535, -536, + -537, -538, -543, -544, 1097, -3, -639, -647, -648, -649, + -7, -652, -652, -652, -652, -652, -652, -23, -652, -122, + -123, -124, -125, -126, -127, -128, -129, -130, -134, -135, + -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, + -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, + -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, + -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, + -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, + -186, -187, -188, -189, -190, -191, -192, -193, -194, -195, + -196, -197, -198, -199, -200, -201, -202, -203, -204, -205, + -28, -131, -651, -652, -652, -652, -652, -652, -651, -652, + -652, -634, -635, -652, -652, -640, -641, -55, -652, -539, + -540, -652, -295, -652, -652, -237, -652, -651, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -246, -247, -248, -249, -652, -360, -453, -432, -652, + -636, -637, -68, -652, -317, -359, -652, -446, -448, -74, + -651, -443, -75, -640, -76, -252, -267, -651, -651, -271, + -652, -277, -652, -651, -616, -652, -652, -77, -78, -638, + -17, -18, -652, -21, -22, -81, -651, -640, -652, -84, + -87, -651, -99, -100, -652, -652, -107, -310, -313, -640, + -436, -344, -345, -348, -444, -652, -89, -652, -95, -305, + -522, -652, -225, -226, -652, -238, -652, -651, -301, -640, + -651, -651, -319, -320, -571, -57, -652, -652, -652, -651, + -651, -638, -652, -639, -539, -540, -652, -652, -295, -652, + -377, -378, -652, -331, -652, -122, -123, -165, -166, -167, + -183, -188, -195, -198, -338, -652, -539, -540, -611, -612, + -475, -652, -499, -652, -501, -652, -503, -652, -652, -482, + -652, -651, -652, -652, -495, -652, -652, -497, -652, -514, + -516, -517, -518, -519, -6, -650, -29, -30, -31, -32, + -33, -10, -11, -652, -25, -26, -27, -132, -652, -36, + -38, -282, -652, -652, -281, -37, -652, -40, -652, -295, + -48, -50, -206, -257, -277, -52, -53, -41, -207, -257, + -640, -262, -263, -651, -651, -625, -626, -272, -441, -627, + -628, -626, -625, -272, -440, -442, -627, -628, -47, -215, + -54, -640, -316, -652, -652, -652, -651, -305, -652, -652, + -652, -216, -217, -218, -219, -220, -221, -222, -223, -227, + -228, -229, -230, -232, -233, -234, -235, -236, -239, -240, + -241, -242, -640, -250, -652, -454, -272, -625, -626, -65, + -69, -273, -437, -450, -453, -640, -640, -312, -268, -652, + -276, -269, -652, -274, -652, -278, -652, -619, -621, -16, + -639, -20, -640, -80, -303, -96, -85, -652, -640, -651, + -652, -652, -106, -652, -522, -652, -92, -97, -652, -652, + -652, -652, -251, -243, -652, -461, -652, -640, -300, -253, + -644, -644, -652, -652, -614, -644, -652, -425, -571, -428, + -610, -610, -554, -556, -556, -556, -570, -572, -573, -574, + -575, -576, -577, -578, -579, -652, -581, -583, -585, -590, + -592, -593, -595, -600, -602, -603, -605, -606, -607, -652, + -651, -368, -369, -651, -652, -652, -652, -652, -652, -363, + -456, -651, -652, -652, -305, -58, -117, -118, -652, -120, + -652, -295, -651, -652, -336, -549, -341, -632, -633, -652, + -476, -500, -505, -506, -508, -478, -502, -479, -504, -480, + -481, -652, -484, -486, -652, -489, -491, -492, -652, -493, + -494, -652, -520, -651, -24, -652, -34, -285, -652, -652, + -651, -652, -652, -652, -652, -445, -652, -264, -266, -652, + -652, -70, -260, -261, -438, -652, -652, -72, -439, -315, + -642, -625, -626, -625, -626, -640, -652, -431, -651, -64, + -433, -450, -652, -451, -652, -259, -311, -651, -275, -279, + -652, -617, -618, -652, -19, -82, -652, -88, -94, -640, + -625, -626, -651, -629, -105, -652, -90, -652, -652, -224, + -640, -651, -361, -651, -298, -366, -302, -254, -646, -645, + -256, -646, -307, -309, -615, -652, -640, -652, -552, -553, + -652, -652, -563, -652, -566, -652, -568, -652, -379, -652, + -381, -383, -390, -640, -584, -594, -604, -608, -651, -370, + -651, -59, -371, -372, -323, -324, -652, -326, -652, -640, + -625, -626, -629, -304, -651, -117, -118, -119, -652, -652, + -651, -329, -545, -547, -332, -651, -651, -571, -571, -652, + -640, -652, -651, -483, -485, -652, -488, -496, -498, -652, + -133, -283, -652, -640, -625, -626, -626, -625, -49, -258, + -652, -643, -651, -43, -209, -44, -210, -71, -45, -212, + -46, -211, -73, -652, -652, -652, -652, -445, -652, -413, + -414, -640, -416, -651, -435, -434, -652, -447, -651, -449, + -270, -280, -620, -86, -445, -98, -214, -314, -13, -15, + -362, -364, -651, -468, -462, -651, -463, -464, -644, -426, + -651, -651, -418, -640, -610, -591, -609, -555, -556, -556, + -582, -556, -556, -601, -556, -579, -596, -640, -652, -388, + -652, -580, -652, -365, -373, -652, -375, -651, -652, -60, + -325, -652, -445, -652, -117, -118, -121, -640, -651, -652, + -652, -652, -339, -640, -652, -342, -613, -507, -510, -511, + -512, -513, -652, -490, -12, -284, -445, -42, -208, -265, + -652, -244, -610, -610, -395, -651, -651, -651, -412, -652, + -640, -579, -587, -588, -598, -455, -66, -651, -651, -467, + -652, -652, -466, -255, -652, -652, -652, -427, -551, -652, + -559, -652, -561, -652, -564, -652, -567, -569, -380, -382, + -386, -652, -391, -321, -652, -376, -322, -652, -651, -327, + -445, -652, -652, -333, -337, -652, -548, -550, -549, -509, + -652, -393, -394, -403, -397, -405, -652, -408, -652, -410, + -415, -652, -652, -586, -652, -452, -651, -651, -539, -540, + -652, -652, -295, -465, -429, -430, -640, -420, -422, -423, + -556, -556, -556, -556, -384, -652, -389, -652, -651, -279, + -651, -330, -546, -651, -340, -651, -610, -589, -396, -651, + -651, -651, -651, -599, -651, -417, -597, -652, -305, -14, + -461, -651, -652, -652, -305, -419, -652, -652, -557, -560, + -562, -565, -652, -387, -651, -457, -458, -459, -652, -652, + -392, -652, -400, -652, -402, -652, -406, -652, -409, -411, + -304, -629, -460, -640, -625, -626, -629, -304, -421, -556, + -385, -374, -334, -343, -651, -651, -651, -651, -445, -558, + -652, -398, -401, -404, -407, -651, -399 ] clist = [ -'6,422,338,221,700,590,280,280,280,263,583,586,445,133,133,567,130,130', -'369,302,275,528,330,316,316,4,213,502,224,328,559,281,281,281,419,396', -'117,491,323,341,341,760,442,341,552,264,429,435,537,135,135,125,208', -'376,801,676,854,316,676,319,333,334,842,496,540,543,16,113,679,342,343', -'824,16,346,965,639,931,114,934,130,845,377,963,379,381,384,387,390,393', -'379,727,298,341,341,341,341,130,487,722,300,16,117,750,994,959,857,282', -'282,282,679,357,667,29,735,738,267,273,276,29,671,672,118,402,403,404', -'405,868,620,804,615,623,617,347,29,621,378,335,621,603,604,605,394,29', -'29,29,615,29,871,802,997,359,759,712,713,606,278,292,293,763,987,950', -'336,803,634,907,805,670,962,550,707,340,502,408,835,415,486,29,29,16', -'811,29,494,965,452,815,495,280,16,816,1027,1037,741,448,449,450,451', -'676,676,841,828,843,914,375,430,380,383,1,679,959,418,423,386,1025,389', -'931,414,420,418,392,439,686,878,440,444,29,765,567,400,695,29,29,29', -'29,29,453,766,395,9,498,869,842,559,280,9,660,849,356,739,280,207,1045', -'280,840,722,866,710,851,507,910,124,493,515,837,953,608,339,2,281,901', -'546,354,509,423,16,842,754,281,373,706,501,501,567,955,669,845,377,429', -'435,370,316,329,331,703,525,337,814,559,344,16,858,345,859,529,747,538', -',316,275,,,688,,526,795,,,522,341,341,29,29,29,29,,518,117,,29,29,29', -'29,29,29,532,,547,,,,,807,821,282,316,29,316,,587,588,9,1046,282,,842', -'298,691,511,,406,298,593,16,514,16,1028,691,512,520,16,,,768,,,768,', -'956,117,29,957,722,742,722,,29,998,820,29,607,942,567,492,567,16,301', -'862,891,892,,,497,,808,640,981,6,,29,589,29,133,548,655,130,29,784,', -',,647,817,789,,501,501,652,691,646,,280,632,,,,832,920,567,,,29,,29', -'676,430,,,135,445,633,,,559,679,423,29,29,,673,674,439,,,985,722,,874', -'662,,,,,16,,,,684,,647,872,873,,687,1038,1033,663,646,,,,,,,663,663', -',280,,,,,,529,,,,316,,,699,529,,,430,316,,645,722,29,722,423,943,651', -'430,,817,829,,,439,941,,,513,,,,,,439,,,,867,,,,,,,,,999,,,722,,716', -'718,720,,,,,,,29,280,413,807,,,807,,668,675,,16,758,,,,764,974,430,', -'691,,944,,,423,,301,,,,567,,,439,,,,,989,,,813,,,,,,,,704,,,736,736', -',,29,,,567,,808,,,808,29,,808,755,808,133,,,130,559,640,9,,,29,806,16', -'780,782,16,1029,812,,785,787,,301,444,,823,,301,,831,,,529,663,640,', -'316,135,501,773,807,,,822,,,647,316,,652,,,,853,646,,806,1055,29,,,29', -',825,830,418,,29,,,,,876,,,,,,,29,779,1031,1032,29,,341,,,640,,877,', -'280,,,825,,825,,,,,808,,808,861,808,430,808,,,,683,,,863,423,,29,29', -',439,,,29,29,,,29,,,,,130,,,,16,16,,,,501,,,,,885,19,,,806,808,870,19', -',,,875,316,,919,,894,894,894,,,,1039,,,,,,930,,,,,,,19,29,29,,,912,16', -'16,,916,,,341,16,,,,,949,,,,,922,924,341,926,928,,929,,640,691,,,355', -',,,,29,,936,,798,,29,,,,,,29,29,,945,,,16,29,,,16,16,,,,,,,29,,316,16', -',,,736,19,,800,,,,316,946,,19,,,836,,,,,,,,,,,,,,29,16,16,,29,29,,,17', -',,16,,,17,29,,,,,732,,1009,734,,,,,844,225,846,,894,894,894,894,,894', -'225,225,225,,17,307,307,29,,29,29,,16,439,,,16,996,,29,29,,1020,1021', -'1022,1023,,1016,,,280,19,825,,225,225,,,225,351,443,,41,,,,16,430,41', -',,,,,423,,19,,29,,,640,29,439,,825,,,,,,,894,894,894,894,41,305,305', -'16,,,17,,,1056,,225,225,225,225,17,29,799,16,,894,,,16,,,16,16,,,,833', -'834,,,349,,,371,,,,,19,,19,,,,29,19,952,,,798,,,798,,798,,,,838,29,', -'838,,,29,,,29,29,,19,,,41,,,,,,,,,41,,883,29,,,958,,960,,,,,,17,225', -'225,225,,,,,225,225,225,225,225,225,,,,982,,983,,984,,,,17,,,,895,897', -'899,,906,,,,908,909,,,,,,,,,,913,,,,19,,,,,,,225,798,,798,,798,225,798', -',225,,42,,41,,,,42,,,,938,939,,,,,,,17,,17,,,,307,17,1034,41,1035,,1036', -',,,42,306,306,,,,798,307,,,,1044,,,,,17,,225,,,,,,,970,,,,973,,225,225', -',,350,,838,372,,799,,1057,799,601,799,601,,,,,,,19,,,41,,41,993,,,305', -'41,,,,18,,,,,,18,,,,,42,305,1001,1003,1005,1007,,1008,,42,41,416,,,1014', -',17,,,447,,,,18,309,309,,,,1026,,,,,1030,,,,371,,371,,,,,,19,,,19,,', -',,,,,,353,,,,,,225,,,,,799,,799,,799,,799,,,,,1051,1052,1053,1054,,504', -',506,41,508,,,510,,,42,,,,,,18,,,1058,,,,,,18,,,,,,443,,,799,42,17,', -',,,,,307,,225,,,,,,307,,549,,,,,,225,,,,,,,,,,,,,,,,,,,,,,,,,,,19,19', -',,,,,,,,,,42,,42,,,,306,42,,17,41,,17,18,,,,305,225,,,,,306,,305,,,', -',225,,42,,225,636,,,18,19,19,,,,,,19,,,,,,,,,,,,,,372,,372,,,,,,,225', -'225,,,,,225,225,,,225,,41,,,41,,,,,,,19,,,,19,19,,,,,18,,18,,,19,309', -'18,,42,307,,,,,,,677,,,549,307,680,309,,,682,,,,,,18,17,17,,,19,19,', -',,,,,,,19,,,,,,,,,,,677,,602,549,602,,,,,,,,,,225,,,,,,225,,,,305,,17', -'17,19,,728,,19,17,,305,980,,,,,,,,225,,,41,41,,,,18,,,,42,,,,,,19,306', -',,,,,,,306,,,,904,,,17,,,,17,17,,,,,,,,,,17,,19,774,,41,41,677,549,', -',,41,,,,,19,,,,,19,,,19,19,,,,225,,17,17,42,,,42,,,,,17,225,818,,,819', -',,,,,,371,,,41,,,,41,41,,18,,,827,,,,309,41,,,,,966,,309,,17,,,,17,', -'848,,977,,,,,,,,,,,,,,,41,41,,447,,,,,,,41,17,,,,,,,,,,,,,,,,,,,,18', -'306,,18,,,884,,,,,,306,17,371,,,,41,,,,41,,42,42,975,,17,,,,,17,,,17', -'17,,,,,,,,,,,,,,,41,,225,,,,,,,,,,,,,,,,,,,,,42,42,,,,,,42,,,41,,,,', -',,,,,,,,,,41,,309,,,41,,,41,41,,,,309,,,,,549,,,,,,372,18,18,42,,,,42', -'42,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,992,,,42,42,18,18,,,,,882', -'18,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,372,,,,42,,602,,42,18,232,,976', -'18,18,,,,,279,279,279,,,18,,,,,,,,325,326,327,,,,42,,,,,,,,,,,279,,', -',,,,18,18,,,,,,,,,18,,,,,42,,,,,,,,,,,,,,,42,,,,,42,,,42,42,,,,,,602', -',,,18,,,,18,,,,979,,,,,,,,,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,18,,,,,,,,,,,,,,,18,,,,,18,,,18,18,279,421,279,,,,,441,446', -',,,,,,,,,,,,,,232,,,460,461,462,463,464,465,466,467,468,469,470,471', -'472,473,474,475,476,477,478,479,480,481,482,483,484,485,,,,,,,279,,', -',,,279,,,279,,,,,,,279,,279,,279,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,534,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,279,,441,661,421,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279', -',,279,,279,,,,279,,,,,,,,,,,,279,,,,,,,,,697,698,,,,,,,,,,279,,,279', -',,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,776,,,279,279,781,783,,,,,786,788', -',,661,790,,,,,,,,,,,,,,,,,,,,,,,,279,,,279,,,,,,,,,,,,,,,,,,,,279,,', -',,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,279,,,,,,,,,', -',,,,,,,,,,,,279,,886,,,,,,,,,,,,,,781,783,788,786,,889,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,279,886,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,279' ] - racc_goto_table = arr = ::Array.new(3110, nil) +'6,608,234,384,450,296,296,296,229,356,357,4,291,361,352,278,280,29,319', +'318,137,221,521,29,556,142,142,359,360,346,721,410,297,297,297,786,129', +'569,29,600,603,882,434,435,282,289,292,29,29,29,441,29,510,441,355,355', +'701,126,355,441,237,457,463,125,145,145,515,147,147,546,333,333,584', +'416,417,418,419,29,870,317,576,849,29,29,336,504,29,340,863,142,298', +'298,298,392,888,394,396,399,641,404,407,394,129,391,665,333,315,294', +'307,308,447,506,692,873,777,753,468,142,355,355,355,355,1033,698,926', +'833,698,130,636,362,638,738,739,642,1007,727,730,625,962,393,734,29', +'959,636,975,408,29,29,29,29,29,789,978,1009,9,622,761,624,928,423,9', +'430,371,930,220,704,1006,567,859,354,735,938,513,514,838,688,1055,768', +'521,855,940,390,395,929,398,848,644,401,403,406,907,791,792,409,899', +'653,136,1033,868,421,865,296,701,1027,629,428,344,2,562,655,690,458', +'445,446,348,388,748,563,353,1016,691,470,471,433,433,1,451,474,369,781', +'318,279,889,385,1078,626,347,29,29,29,29,29,29,29,467,414,766,349,29', +'29,29,736,685,1009,557,350,296,351,372,898,429,440,29,296,440,701,296', +'623,512,707,440,698,698,1053,896,937,1029,716,9,877,900,959,991,297', +'1023,374,584,420,451,785,836,,870,297,576,520,520,,29,318,604,392,,', +'318,29,457,463,29,543,1080,526,,540,,709,291,,547,873,870,869,694,871', +',,,29,,,550,29,,742,744,746,29,1081,,827,129,298,605,606,795,355,,,559', +'564,560,298,,333,1056,612,1039,,511,532,,530,29,844,538,,536,529,516', +',333,448,712,29,29,29,794,469,544,642,748,,712,879,,,315,769,1025,,', +'315,129,,,,,,,645,,,,,870,333,864,333,561,565,,927,,,,,,,,607,,840,', +'892,,948,,661,,,666,,654,943,,,803,142,843,673,,817,,,712,678,,822,', +'296,,520,520,701,,672,458,916,,584,,584,901,902,531,,,,,,903,904,671', +',451,,145,,677,147,,,686,981,982,441,,,673,467,,29,,457,463,441,441', +',,,923,441,441,,672,584,584,,,748,935,748,296,576,576,1072,,,547,,,689', +'458,698,,,547,,,1010,794,866,458,,866,,840,451,945,,,720,856,,,29,,', +',931,,970,813,815,29,467,897,,818,820,,,,1030,,467,1031,,,29,333,,,774', +'968,971,,697,333,,,,,758,296,,760,1060,,,,1014,748,,458,,,,,,,,,,,,', +',,451,784,712,,,,29,790,,29,,783,,469,997,448,924,29,467,950,952,,954', +'956,296,957,762,441,,29,835,,1084,,458,29,,748,1018,748,1026,,6,923', +',,923,,923,451,1057,,,799,,800,666,,584,29,142,,,,,29,29,467,,29,834', +',,,748,29,29,829,547,,666,29,29,,917,673,520,440,678,845,,1058,931,1059', +',931,,440,440,145,,672,147,440,440,,,862,905,,853,,857,,433,,812,,1088', +',,923,,923,,923,,923,,,333,,,,,,,,,,666,333,,,296,,,886,893,886,923', +',458,,,,,,,891,,1048,1049,1050,1051,866,912,,924,451,931,924,,924,666', +',,858,,,29,,,467,,,29,,,,,29,29,,142,,9,,29,,,520,862,,814,816,808,', +'1073,,819,821,,,,,29,,964,,,,,,,,939,829,,932,1089,,972,,944,,724,,440', +'29,,,,,942,,924,,924,,924,,924,846,,,,,29,,,965,,355,,712,29,29,666', +',,,,,,924,,355,,,,,,,,764,765,,767,,,29,,29,872,,874,,,,,862,,19,29', +'29,,,,19,,995,996,,984,984,984,,,,,,973,,238,,977,,,,,,,238,238,238', +',19,324,324,,,1020,29,29,918,,,,,,,,,,,333,,814,816,821,819,,19,,333', +',,238,238,,1040,238,366,29,,,1045,932,,1042,932,925,,932,853,932,,,', +',,1054,,1022,,,,,,,,,29,,296,,,,886,,,,,,458,333,,984,984,984,984,,984', +'29,,,19,,29,451,29,238,238,238,238,19,,,,472,,467,886,666,41,890,29', +'467,,,41,,,,918,,,,932,,932,,932,,932,,,,,,,,984,984,984,984,,,41,322', +'322,,,984,,,,932,,,,,,,,,,517,,1011,,1012,,1013,41,,,,,,,,,,364,,,386', +',,,533,19,238,438,238,238,438,238,,,,,438,238,238,1032,,1034,985,987', +'989,,,,,,19,,,,431,444,558,,,,,,,,963,,,,,,966,41,,,,969,,,,,41,,,974', +',,238,,,,,,,238,,,238,,,,1079,,,,,,,,,,,,,,1085,19,1086,,1087,19,,,', +'324,19,,,,,,,523,,525,,,527,528,,,324,,,1095,,,1062,1064,1066,1068,19', +'1069,,1021,,,,1024,,,,238,19,19,,,32,41,,,,,32,,,620,,620,679,,,,566', +',,,,32,,,,,41,,,,32,32,32,,32,1091,1092,1093,1094,,,,,,,,1096,,,,,,', +',,,695,696,,,32,,,,,32,32,,,32,,,,705,1082,1083,,,,708,,,,,,,,,,,,41', +',,,41,,657,726,322,41,,,,,,,,,,,,,238,,,322,,,,,,,,32,,41,,,32,32,32', +'32,32,,,,,41,41,,,,,,,,,,,,386,,386,,,,,,,,,,,,,,19,,18,,,,,324,18,238', +',,,,,324,,699,,,566,,702,,238,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,32,32,32', +'32,32,32,32,,,18,,32,32,32,,,,19,,,19,,,,,32,,,238,,,,,754,,,,,,,238', +'847,,,,,238,,,,,,,,,,,,,,,32,,,,,,,32,,19,32,,18,881,,438,238,,,19,', +'18,,,,438,438,,41,32,,438,438,32,,322,,,32,,,,801,322,,,,,,,906,699', +'566,,,,,,,,,,324,,32,,,,,,,,,324,,32,32,32,,,,,,,841,,,842,,,,,,,,,', +',41,,,41,,,,,,854,18,,18,,699,18,,566,,,,18,,,,947,,,,,,,19,876,,18', +',,238,958,,,,19,19,,,,,,19,,,41,444,16,,,,,,16,,41,,976,,,438,,,,,,', +',,,,,,,,,,,,,915,16,,19,,,,32,,,,,18,,,,18,,322,,,18,19,,,,,16,,322', +'19,19,,,,,,370,,,,,,,,,,18,,,,,,,,238,,19,,18,18,32,,,,,,,19,238,32', +',,,,,,,,,,,,,,32,41,,,,,16,,,,,,41,41,,16,,993,,41,,,19,19,,,1000,,', +',,,566,,,,,,,,,,,,,,32,,,32,,,,19,,,,32,,,41,,,,,,,,,32,,,,,,32,,1036', +',41,1019,,19,,,,,41,41,,,,,,,,,,,32,,,16,19,436,32,32,436,19,32,19,', +',436,41,32,32,,,,,32,32,,,41,238,16,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,', +',386,,,,,41,41,,,998,,,,,,,,,,,,,,,,,,,,,,,,16,,,41,16,,,,,16,,,,,,', +',,,,,,,18,,,18,386,32,,,,41,,32,16,,,,32,32,,,,,,32,16,16,,,,,41,,,', +',41,,41,42,,,32,,,42,,,,,,,,,18,,,,,,18,,,,18,32,,,,,18,18,,42,323,323', +'18,18,,,,,,,32,,,,,,,,32,32,,,,,,42,,,,,,,,,,365,,,387,,,,,32,,32,,', +',,,,,,,,32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,32,32,,42,,,18', +',,,,,,,,,,18,18,,,,,,18,,,16,,,,32,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,32', +',,,,18,,,,,,,,20,,,,,,20,,32,,,18,,32,,32,,42,,18,18,,,,16,,,16,,,,32', +',,20,326,326,,,,,,42,,,,18,,,,,,,,,,,18,,,20,,,,,,,,,,368,,,,,,,16,', +',,,,436,,,,16,,,,,,436,436,,18,18,,436,436,,,,,,,42,,,,42,,,,323,42', +',,,,,,,20,,,18,,,,,323,20,,,,,,,,,42,,,,,,,,,,,,42,42,18,,,,,,,,,,,387', +',387,,,,,,,,18,,,,,18,,18,,,,,,,,,,,,,,16,,,,,,,,,,,16,16,,,,,,16,,', +',20,,439,,,439,,,,,,439,,,436,,,,,,,,,,,20,,,,,,,,,,,,16,,,,,,,,,,,', +',,,,,,,16,,,,,,,,16,16,,,,,,,,,,,,,,,,,,,,,,,,,20,16,,,20,,,,326,20', +',,16,,,42,,,,,,,323,,,326,,,,,323,,,,,20,,,,,,,,,,,,20,20,,,16,16,,', +'1003,,,,,621,,621,,,,,,,,,,,,,,,,,,,,16,,,42,,,42,,,,,,,,,,,,,,,,,,', +',,,,16,,,,,,,,,,,,,,,,,,,,,16,,,,,16,42,16,,,,,,,,,42,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,323,,,,,,,,,,,323,,,,,,,,,,,,,,,,20,,,,', +',,326,,,,,,,,326,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,42,42,,,,,,42', +',,,,,,,,,,20,,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,42', +',,,20,,,,42,42,439,,,,20,,,,,,439,439,,,,,439,439,,,245,,,,,42,,,,295', +'295,295,,,,,42,,,,,,342,343,,345,,326,,,,,,,,,,,326,,,,,,,,,,,,387,', +',,,42,42,,,999,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,20,,,,,,,,,,,20', +'20,,,387,,911,20,,42,,,,,,,,,,,,,,,,439,,,,,42,,,,,42,,42,,,,,,,,,,', +'20,,,,,,,,,,,,,,,,,,,20,,,,,,,,20,20,,,,,,,,,,,,,,,,,,295,443,,,449', +'295,,,20,,449,,,,,,,,,20,,,,245,,,481,482,483,484,485,486,487,488,489', +'490,491,492,493,494,495,496,497,498,499,500,501,502,,,,,503,621,,,,', +'20,20,295,,1002,,,,,295,,,295,,,,,,,295,,295,,,295,295,,,,,,20,,,,,', +',,,,,,,,,,,,,,,,,,621,,,,,20,,,552,,553,,,,295,295,,,,,,,,,,,20,,,,', +'20,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',295,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,449,449,449,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,295,,295,,,,,,,,,,,,,,,295', +',,,,,,,,,719,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,,,,,,', +',,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,449,295', +',,,809,,,295,295,449,449,,,,,449,449,,,,,,,,,,,,,,,,,,,,,,,,295,,,295', +',,,,,,,,,,,,,,449,,,,,295,,,,,295,,,295,,,,,,,,,,,,,,,,295,,,,,,,,,', +',,,,,,,,,,,295,,,,,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,449,,', +',,,,,,,,,,449,449,449,449,,921,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,449,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295' ] + racc_goto_table = arr = ::Array.new(3977, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2180,87 +2206,105 @@ end clist = [ -'6,25,89,34,13,95,36,36,36,155,92,92,20,64,64,189,61,61,60,53,74,55,51', -'68,68,2,27,76,22,34,185,71,71,71,30,60,98,42,67,32,32,99,30,32,154,39', -'40,40,10,65,65,17,17,171,144,77,93,68,77,54,6,71,190,25,72,72,23,5,200', -'19,19,14,23,19,150,26,132,8,135,61,195,6,149,6,6,6,6,6,6,6,134,49,32', -'32,32,32,61,40,133,50,23,98,58,110,196,14,73,73,73,200,111,43,44,94', -'94,41,41,41,44,43,43,7,19,19,19,19,112,175,147,176,175,176,5,44,176', -'172,73,176,59,113,59,172,44,44,44,176,44,114,145,115,116,117,139,139', -'118,48,48,48,119,135,120,70,136,66,46,142,45,148,151,152,153,76,33,147', -'31,156,44,44,23,157,44,160,150,51,161,162,36,23,163,164,149,165,32,32', -'32,32,77,77,145,166,145,167,170,74,173,174,1,200,196,71,6,177,135,178', -'132,22,22,71,179,61,55,180,22,22,44,181,189,7,55,44,44,44,44,44,27,182', -'183,9,51,184,190,185,36,9,25,134,21,95,36,18,135,36,188,133,58,154,133', -'171,15,11,74,51,192,193,199,91,3,71,147,88,96,34,6,23,190,97,71,87,72', -'6,6,189,144,75,195,6,40,40,100,68,101,102,103,34,104,43,185,105,23,106', -'107,108,53,109,32,,68,74,,,25,,67,26,,,27,32,32,44,44,44,44,,54,98,', -'44,44,44,44,44,44,27,,6,,,,,189,26,73,68,44,68,,19,19,9,93,73,,190,49', -'40,5,,9,49,27,23,50,23,14,40,8,50,23,,,176,,,176,,145,98,44,145,133', -'25,133,,44,99,55,44,39,94,189,48,189,23,12,26,139,139,,,48,,191,34,145', -'6,,44,5,44,64,73,51,61,44,42,,,,74,76,42,,6,6,74,40,6,,36,2,,,,72,139', -'189,,,44,,44,77,74,,,65,20,17,,,185,200,6,44,44,,51,51,61,,,133,133', -',154,34,,,,,23,,,,51,,74,10,10,,51,13,145,6,6,,,,,,,6,6,,36,,,,,,53', -',,,68,,,32,53,,,74,68,,41,133,44,133,6,26,41,74,,76,30,,,61,92,,,9,', -',,,,61,,,,25,,,,,,,,,139,,,133,,187,187,187,,,,,,,44,36,12,189,,,189', -',41,73,,23,32,,,,32,92,74,,40,,10,,,6,,12,,,,189,,,61,,,,,92,,,89,,', -',,,,,73,,,98,98,,,44,,,189,,191,,,191,44,,191,98,191,64,,,61,185,34', -'9,,,44,34,23,22,22,23,95,155,,22,22,,12,22,,51,,12,,51,,,53,6,34,,68', -'65,6,17,189,,,53,,,74,68,,74,,,,51,6,,34,26,44,,,44,,6,6,71,,44,,,,', -'60,,,,,,,44,73,10,10,44,,32,,,34,,51,,36,,,6,,6,,,,,191,,191,71,191', -'74,191,,,,9,,,19,6,,44,44,,61,,,44,44,,,44,,,,,61,,,,23,23,,,,6,,,,', -'22,29,,,34,191,98,29,,,,98,68,,51,,6,6,6,,,,25,,,,,,51,,,,,,,29,44,44', -',,6,23,23,,6,,,32,23,,,,,51,,,,,187,187,32,187,187,,187,,34,40,,,29', -',,,,44,,19,,138,,44,,,,,,44,44,,19,,,23,44,,,23,23,,,,,,,44,,68,23,', -',,98,29,,143,,,,68,98,,29,,,138,,,,,,,,,,,,,,44,23,23,,44,44,,,24,,', -'23,,,24,44,,,,,12,,34,12,,,,,143,24,143,,6,6,6,6,,6,24,24,24,,24,24', -'24,44,,44,44,,23,61,,,23,98,,44,44,,187,187,187,187,,27,,,36,29,6,,24', -'24,,,24,24,29,,56,,,,23,74,56,,,,,,6,,29,,44,,,34,44,61,,6,,,,,,,6,6', -'6,6,56,56,56,23,,,24,,,187,,24,24,24,24,24,44,140,23,,6,,,23,,,23,23', -',,,12,12,,,56,,,56,,,,,29,,29,,,,44,29,138,,,138,,,138,,138,,,,140,44', -',140,,,44,,,44,44,,29,,,56,,,,,,,,,56,,12,44,,,143,,143,,,,,,24,24,24', -'24,,,,,24,24,24,24,24,24,,,,143,,143,,143,,,,24,,,,141,141,141,,12,', -',,12,12,,,,,,,,,,12,,,,29,,,,,,,24,138,,138,,138,24,138,,24,,57,,56', -',,,57,,,,12,12,,,,,,,24,,24,,,,24,24,143,56,143,,143,,,,57,57,57,,,', -'138,24,,,,143,,,,,24,,24,,,,,,,12,,,,12,,24,24,,,57,,140,57,,140,,143', -'140,24,140,24,,,,,,,29,,,56,,56,12,,,56,56,,,,28,,,,,,28,,,,,57,56,141', -'141,141,141,,141,,57,56,69,,,12,,24,,,69,,,,28,28,28,,,,12,,,,,12,,', -',56,,56,,,,,,29,,,29,,,,,,,,,28,,,,,,24,,,,,140,,140,,140,,140,,,,,141', -'141,141,141,,69,,69,56,69,,,69,,,57,,,,,,28,,,141,,,,,,28,,,,,,29,,', -'140,57,24,,,,,,,24,,24,,,,,,24,,69,,,,,,24,,,,,,,,,,,,,,,,,,,,,,,,,', -',29,29,,,,,,,,,,,57,,57,,,,57,57,,24,56,,24,28,,,,56,24,,,,,57,,56,', -',,,24,,57,,24,69,,,28,29,29,,,,,,29,,,,,,,,,,,,,,57,,57,,,,,,,24,24', -',,,,24,24,,,24,,56,,,56,,,,,,,29,,,,29,29,,,,,28,,28,,,29,28,28,,57', -'24,,,,,,,69,,,69,24,69,28,,,69,,,,,,28,24,24,,,29,29,,,,,,,,,29,,,,', -',,,,,,69,,28,69,28,,,,,,,,,,24,,,,,,24,,,,56,,24,24,29,,69,,29,24,,56', -'29,,,,,,,,24,,,56,56,,,,28,,,,57,,,,,,29,57,,,,,,,,57,,,,24,,,24,,,', -'24,24,,,,,,,,,,24,,29,69,,56,56,69,69,,,,56,,,,,29,,,,,29,,,29,29,,', -',24,,24,24,57,,,57,,,,,24,24,69,,,69,,,,,,,56,,,56,,,,56,56,,28,,,69', -',,,28,56,,,,,24,,28,,24,,,,24,,69,,24,,,,,,,,,,,,,,,56,56,,69,,,,,,', -'56,24,,,,,,,,,,,,,,,,,,,,28,57,,28,,,69,,,,,,57,24,56,,,,56,,,,56,,57', -'57,56,,24,,,,,24,,,24,24,,,,,,,,,,,,,,,56,,24,,,,,,,,,,,,,,,,,,,,,57', -'57,,,,,,57,,,56,,,,,,,,,,,,,,,56,,28,,,56,,,56,56,,,,28,,,,,69,,,,,', -'57,28,28,57,,,,57,57,,,,,,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,69,,,57', -'57,28,28,,,,,28,28,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,,,,57,,28', -',57,28,35,,57,28,28,,,,,35,35,35,,,28,,,,,,,,35,35,35,,,,57,,,,,,,,', -',,35,,,,,,,28,28,,,,,,,,,28,,,,,57,,,,,,,,,,,,,,,57,,,,,57,,,57,57,', -',,,,28,,,,28,,,,28,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,28,,,,,28,,,28,28,35,35,35,,,,,35', -'35,,,,,,,,,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', -'35,35,35,35,35,35,35,35,35,35,,,,,,,35,,,,,,35,,,35,,,,,,,35,,35,,35', -',,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,35,35,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,,,35,,,,,,,,,,,,35,,,,,,,,,35,35', -',,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,35,35,35,35,,,,', -'35,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,35,', -',,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,35,,,,,,,,,,,', -',,,,,,,,,,35,,35,,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] - racc_goto_check = arr = ::Array.new(3110, nil) +'6,115,39,69,35,45,45,45,37,23,23,2,87,23,104,173,37,53,62,14,21,21,89', +'53,12,70,70,41,41,39,15,69,84,84,84,123,120,172,53,108,108,109,28,28', +'50,50,50,53,53,53,24,53,51,24,30,30,221,8,30,24,26,49,49,5,73,73,35', +'74,74,64,79,79,210,23,23,23,23,53,211,59,205,17,53,53,63,174,53,77,164', +'70,86,86,86,6,111,6,6,6,194,6,6,6,120,190,36,79,58,57,57,57,32,49,52', +'216,67,150,32,70,30,30,30,30,217,90,160,162,90,7,195,5,195,155,155,195', +'166,85,85,138,151,191,85,53,148,195,139,191,53,53,53,53,53,140,141,167', +'9,68,42,68,152,31,9,29,25,158,22,20,165,168,169,170,171,18,177,178,180', +'182,183,184,89,185,186,189,192,164,193,16,196,197,198,199,200,201,202', +'203,204,13,11,217,209,10,213,45,221,214,220,14,80,3,83,75,88,87,30,30', +'9,100,149,103,106,151,54,30,30,84,84,1,6,37,117,119,14,48,44,124,166', +'125,126,53,53,53,53,53,53,53,70,7,115,127,53,53,53,172,35,167,128,129', +'45,130,131,132,26,26,53,45,26,221,45,133,87,64,26,90,90,151,67,162,160', +'64,9,150,134,148,164,84,135,136,210,9,6,137,52,,211,84,205,6,6,,53,14', +'23,6,,,14,53,49,49,53,39,151,190,,37,,35,87,,62,216,211,161,174,161', +',,,53,,,37,53,,208,208,208,53,109,,36,120,86,14,14,194,30,,,6,6,84,86', +',79,111,37,17,,57,59,,8,53,36,59,,63,5,57,,79,76,49,53,53,53,195,76', +'77,195,149,,49,149,,,58,35,123,,,58,120,,,,,,,6,,,,,211,79,154,79,86', +'86,,161,,,,,,,,5,,89,,36,,155,,37,,,39,,21,85,,,35,70,64,87,,51,,,49', +'87,,51,,45,,6,6,221,,6,87,36,,210,,210,12,12,9,,,,,,172,172,50,,6,,73', +',50,74,,,39,155,155,24,,,87,70,,53,,49,49,24,24,,,,154,24,24,,6,210', +'210,,,149,12,149,45,205,205,15,,,62,,,50,87,90,,,62,,,161,195,156,87', +',156,,89,6,12,,,30,28,,,53,,,,210,,36,32,32,53,70,35,,32,32,,,,161,', +'70,161,,,53,79,,,41,108,12,,86,79,,,,,14,45,,14,155,,,,149,149,,87,', +',,,,,,,,,,,,,6,30,49,,,,53,30,,53,,6,,76,108,76,156,53,70,208,208,,208', +'208,45,208,120,24,,53,104,,161,,87,53,,149,108,149,154,,6,154,,,154', +',154,6,115,,,2,,21,39,,210,53,70,,,,,53,53,70,,53,173,,,,149,53,53,6', +'62,,39,53,53,,32,87,6,26,87,62,,12,210,12,,210,,26,26,73,,6,74,26,26', +',,39,69,,6,,6,,84,,86,,36,,,154,,154,,154,,154,,,79,,,,,,,,,,39,79,', +',45,,,6,14,6,154,,87,,,,,,,84,,208,208,208,208,156,14,,156,6,210,156', +',156,39,,,86,,,53,,,70,,,53,,,,,53,53,,70,,9,,53,,,6,39,,76,76,9,,35', +',76,76,,,,,53,,23,,,,,,,,14,6,,212,208,,23,,14,,102,,26,53,,,,,6,,156', +',156,,156,,156,76,,,,,53,,,14,,30,,49,53,53,39,,,,,,,156,,30,,,,,,,', +'102,102,,102,,,53,,53,159,,159,,,,,39,,34,53,53,,,,34,,14,14,,6,6,6', +',,,,,120,,34,,120,,,,,,,34,34,34,,34,34,34,,,14,53,53,76,,,,,,,,,,,79', +',76,76,76,76,,34,,79,,,34,34,,14,34,34,53,,,39,212,,37,212,159,,212', +'6,212,,,,,,14,,120,,,,,,,,,53,,45,,,,6,,,,,,87,79,,6,6,6,6,,6,53,,,34', +',53,6,53,34,34,34,34,34,,,,60,,70,6,39,65,102,53,70,,,65,,,,76,,,,212', +',212,,212,,212,,,,,,,,6,6,6,6,,,65,65,65,,,6,,,,212,,,,,,,,,,60,,159', +',159,,159,65,,,,,,,,,,65,,,65,,,,60,34,34,34,34,34,34,34,,,,,34,34,34', +'159,,159,157,157,157,,,,,,34,,,,82,82,60,,,,,,,,102,,,,,,102,65,,,,102', +',,,,65,,,102,,,34,,,,,,,34,,,34,,,,159,,,,,,,,,,,,,,159,34,159,,159', +'34,,,,34,34,,,,,,,82,,82,,,82,82,,,34,,,159,,,157,157,157,157,34,157', +',102,,,,102,,,,34,34,34,,,56,65,,,,,56,,,34,,34,60,,,,82,,,,,56,,,,', +'65,,,,56,56,56,,56,157,157,157,157,,,,,,,,157,,,,,,,,,,60,60,,,56,,', +',,56,56,,,56,,,,60,102,102,,,,60,,,,,,,,,,,,65,,,,65,,82,60,65,65,,', +',,,,,,,,,,34,,,65,,,,,,,,56,,65,,,56,56,56,56,56,,,,,65,65,,,,,,,,,', +',,65,,65,,,,,,,,,,,,,,34,,33,,,,,34,33,34,,,,,,34,,82,,,82,,82,,34,', +',,,,,,,,,,33,,,,,,,,,,,,,,,,,56,56,56,56,56,56,56,,,33,,56,56,56,,,', +'34,,,34,,,,,56,,,34,,,,,82,,,,,,,34,60,,,,,34,,,,,,,,,,,,,,,56,,,,,', +',56,,34,56,,33,60,,34,34,,,34,,33,,,,34,34,,65,56,,34,34,56,,65,,,56', +',,,82,65,,,,,,,60,82,82,,,,,,,,,,34,,56,,,,,,,,,34,,56,56,56,,,,,,,82', +',,82,,,,,,,,,,,65,,,65,,,,,,82,33,,33,,82,33,,82,,,,33,,,,60,,,,,,,34', +'82,,33,,,34,60,,,,34,34,,,,,,34,,,65,82,27,,,,,,27,,65,,60,,,34,,,,', +',,,,,,,,,,,,,,,82,27,,34,,,,56,,,,,33,,,,33,,65,,,33,34,,,,,27,,65,34', +'34,,,,,,27,,,,,,,,,,33,,,,,,,,34,,34,,33,33,56,,,,,,,34,34,56,,,,,,', +',,,,,,,,56,65,,,,,27,,,,,,65,65,,27,,34,,65,,,34,34,,,34,,,,,,82,,,', +',,,,,,,,,,56,,,56,,,,34,,,,56,,,65,,,,,,,,,56,,,,,,56,,34,,65,82,,34', +',,,,65,65,,,,,,,,,,,56,,,27,34,27,56,56,27,34,56,34,,,27,65,56,56,,', +',,56,56,,,65,34,27,,,,,,,,,,,,,,,,,,33,,,,,,,,,,,,,,65,,,,,65,65,,,65', +',,,,,,,,,,,,,,,,,,,,,,,27,,,65,27,,,,,27,,,,,,,,,,,,,,33,,,33,65,56', +',,,65,,56,27,,,,56,56,,,,,,56,27,27,,,,,65,,,,,65,,65,66,,,56,,,66,', +',,,,,,,33,,,,,,33,,,,33,56,,,,,33,33,,66,66,66,33,33,,,,,,,56,,,,,,', +',56,56,,,,,,66,,,,,,,,,,66,,,66,,,,,56,,56,,,,,,,,,,,56,56,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,66,,,,,,56,56,,66,,,33,,,,,,,,,,,33,33,,,,,,33', +',,27,,,,56,,,,,,,,,,,33,,,,,,,,,,,,,,,,,,56,,,,,33,,,,,,,,38,,,,,,38', +',56,,,33,,56,,56,,66,,33,33,,,,27,,,27,,,,56,,,38,38,38,,,,,,66,,,,33', +',,,,,,,,,,33,,,38,,,,,,,,,,38,,,,,,,27,,,,,,27,,,,27,,,,,,27,27,,33', +'33,,27,27,,,,,,,66,,,,66,,,,66,66,,,,,,,,38,,,33,,,,,66,38,,,,,,,,,66', +',,,,,,,,,,,66,66,33,,,,,,,,,,,66,,66,,,,,,,,33,,,,,33,,33,,,,,,,,,,', +',,,27,,,,,,,,,,,27,27,,,,,,27,,,,38,,38,,,38,,,,,,38,,,27,,,,,,,,,,', +'38,,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,27,,,,,,,,27,27,,,,,,,,,,,,,,,,,', +',,,,,,,38,27,,,38,,,,38,38,,,27,,,66,,,,,,,66,,,38,,,,,66,,,,,38,,,', +',,,,,,,,38,38,,,27,27,,,27,,,,,38,,38,,,,,,,,,,,,,,,,,,,,27,,,66,,,66', +',,,,,,,,,,,,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,,,27,,,,,27,66,27,,,,,,,', +',66,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,,,66,,,,,,', +',,,,,,,,,38,,,,,,,38,,,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,', +',66,66,,,,,,66,,,,,,,,,,,38,,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,', +',,,,,,,,,,,,66,,,,38,,,,66,66,38,,,,38,,,,,,38,38,,,,,38,38,,,40,,,', +',66,,,,40,40,40,,,,,66,,,,,,40,40,,40,,38,,,,,,,,,,,38,,,,,,,,,,,,66', +',,,,66,66,,,66,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,38,,,,,,,,,,,38', +'38,,,66,,38,38,,66,,,,,,,,,,,,,,,,38,,,,,66,,,,,66,,66,,,,,,,,,,,38', +',,,,,,,,,,,,,,,,,,38,,,,,,,,38,38,,,,,,,,,,,,,,,,,,40,40,,,40,40,,,38', +',40,,,,,,,,,38,,,,40,,,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40', +'40,40,40,40,40,40,40,,,,,40,38,,,,,38,38,40,,38,,,,,40,,,40,,,,,,,40', +',40,,,40,40,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,38,,,,,38,,,40,,40,,,,40', +'40,,,,,,,,,,,38,,,,,38,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40', +',40,40,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,40,,40,,,,,,,,', +',,,,,,40,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,', +',,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40', +'40,40,,,,40,,,40,40,40,40,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,40,,,40,', +',,,,,,,,,,,,,40,,,,,40,,,,,40,,,40,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,', +',,,,,40,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,40,,,,,,,,,,,,', +'40,40,40,40,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40' ] + racc_goto_check = arr = ::Array.new(3977, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -2270,50 +2314,54 @@ end racc_goto_pointer = [ - nil, 206, 23, 266, nil, 62, -2, 113, 72, 235, - -281, 249, 358, -532, -629, -566, nil, 40, 237, 3, - -206, 175, 5, 64, 927, -211, -347, 9, 1305, 781, - -176, -36, -27, 47, -19, 2094, -26, nil, nil, 18, - -167, 86, -230, -375, 110, -324, -650, nil, 123, 55, - 63, -39, nil, -18, 21, -299, 999, 1204, -497, -219, - -56, 5, nil, nil, 2, 38, -249, -6, -14, 1119, - 99, -1, -270, 74, -10, -204, -255, -445, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 203, -68, -62, - nil, 200, -332, -676, -474, -342, 199, -328, 31, -565, - 214, 230, 230, -246, 231, 229, -436, 231, -437, -293, - -839, 38, -628, -219, -611, -797, 77, -454, -215, -449, - -716, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -774, -470, -478, -774, -503, nil, 196, -401, - 387, 365, -500, 232, -611, -517, nil, -537, -735, -820, - -828, -172, -381, 105, -296, -16, -87, -488, nil, nil, - -90, -487, -87, -484, -804, -400, -502, -627, nil, nil, - 122, -30, 50, 118, 118, -256, -249, 123, 124, 128, - -544, -387, -378, 145, -517, -310, nil, 0, -463, -325, - -653, -263, -449, -627, nil, -637, -792, nil, nil, -110, - -435 ] + nil, 225, 9, 207, nil, 58, -2, 119, 52, 152, + 63, 186, -323, -227, -17, -525, -536, -640, -677, nil, + -365, 9, 152, -58, -174, 90, 37, 1705, -181, -62, + -13, 22, -117, 1440, 910, -224, -346, -11, 2279, -20, + 2935, -42, -448, nil, -529, -27, nil, nil, 204, -168, + 15, -230, -401, 15, -289, nil, 1271, 75, 70, 43, + 814, nil, -19, 46, -268, 1052, 2076, -504, -217, -72, + 14, nil, nil, 53, 56, -218, 144, 43, nil, 33, + 159, nil, 938, -142, 0, -425, 58, -18, -296, -276, + -396, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 140, nil, 289, -134, -51, nil, 152, nil, -317, -717, + nil, -666, nil, nil, nil, -361, nil, 156, nil, -393, + 31, nil, nil, -590, 158, -150, 175, 185, -94, 192, + 193, 185, -522, -106, -504, -689, 211, -335, -247, -758, + -475, -753, nil, nil, nil, nil, nil, nil, -736, -369, + -470, -742, -673, nil, -331, -439, -206, 224, -668, 160, + -707, -420, -563, nil, -648, -780, -812, -793, -187, -567, + 103, -397, -317, -10, -192, nil, nil, -115, -115, nil, + -519, nil, -330, -844, -433, -544, -675, nil, nil, 89, + 8, 42, 84, 85, -300, -265, -215, 87, 87, 87, + -601, -442, -442, 90, -588, -274, nil, nil, -240, -543, + -282, -663, 7, -537, -777, nil, -630, -864, nil, nil, + -185, -466 ] racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 295, 7, 348, 296, - nil, nil, 536, nil, 855, nil, 294, nil, nil, nil, - 14, 15, 21, 231, 324, nil, nil, 752, 229, 230, - nil, nil, 20, nil, 332, 24, 25, 26, 27, nil, - 694, nil, nil, nil, 313, nil, nil, 28, 424, 35, - nil, nil, 37, 40, 39, nil, 226, 227, 600, nil, - 132, 432, 131, 134, 78, 79, nil, 93, 49, 285, - nil, 425, nil, 426, 437, 648, 499, 283, 268, 50, - 51, 52, 53, 54, 55, 56, 57, 58, nil, 269, - 64, nil, nil, nil, nil, nil, nil, nil, 584, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 5, nil, 310, 7, 363, 313, + nil, nil, nil, nil, 555, nil, nil, nil, nil, 309, + 311, nil, nil, nil, 14, 15, 21, 243, nil, nil, + 17, nil, 437, 244, 341, nil, nil, 779, 242, 473, + 24, nil, nil, 358, nil, 25, 26, 27, nil, 715, + nil, nil, nil, 330, nil, 28, 327, 452, 35, nil, + nil, 37, 40, 39, nil, 239, 240, 619, nil, 144, + 460, 143, 146, 90, 91, nil, 442, 105, 47, 50, + 275, 548, 301, nil, 453, nil, 454, 465, 674, 518, + 299, 283, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 61, nil, nil, 284, 65, nil, 67, nil, nil, + 68, 884, 69, 70, 71, nil, 72, nil, 73, nil, + 601, 74, 75, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 724, 566, nil, 725, 954, 797, 554, nil, - 555, nil, nil, 556, nil, 558, 664, nil, nil, nil, - 564, nil, nil, nil, 762, nil, nil, nil, 436, 270, - nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, - 82, nil, nil, nil, nil, nil, 610, nil, nil, nil, - nil, nil, nil, nil, nil, 839, 553, nil, 557, 847, - 569, 571, 572, 809, 575, 576, 810, 579, 582, nil, - 289 ] + nil, nil, 288, 277, 723, 852, 610, 885, 750, 583, + nil, 751, 1028, 922, 571, nil, 572, nil, nil, 573, + nil, 575, nil, 830, nil, nil, nil, 581, nil, nil, + nil, nil, nil, nil, nil, 464, 286, nil, nil, 693, + nil, 505, nil, nil, nil, nil, nil, 89, 92, 94, + nil, nil, nil, nil, nil, 631, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 867, 788, 570, nil, 574, + 875, 586, 588, 589, 933, 592, 593, 934, 596, 599, + nil, 304 ] racc_reduce_table = [ 0, 0, :racc_error, @@ -2324,630 +2372,654 @@ 1, 150, :_reduce_none, 3, 150, :_reduce_6, 2, 150, :_reduce_none, - 1, 153, :_reduce_8, + 1, 153, :_reduce_none, 0, 157, :_reduce_9, - 5, 153, :_reduce_10, - 4, 156, :_reduce_11, - 2, 158, :_reduce_12, - 1, 162, :_reduce_none, - 1, 162, :_reduce_none, - 3, 162, :_reduce_15, - 2, 162, :_reduce_16, - 0, 179, :_reduce_17, - 4, 155, :_reduce_18, - 3, 155, :_reduce_19, - 3, 155, :_reduce_20, - 3, 155, :_reduce_21, - 2, 155, :_reduce_22, - 3, 155, :_reduce_23, - 3, 155, :_reduce_24, + 3, 153, :_reduce_10, + 0, 159, :_reduce_11, + 4, 156, :_reduce_12, + 0, 164, :_reduce_13, + 6, 158, :_reduce_14, + 3, 158, :_reduce_15, + 2, 160, :_reduce_16, + 1, 165, :_reduce_none, + 1, 165, :_reduce_none, + 3, 165, :_reduce_19, + 2, 165, :_reduce_20, + 1, 166, :_reduce_none, + 1, 166, :_reduce_22, + 0, 177, :_reduce_23, + 4, 155, :_reduce_24, 3, 155, :_reduce_25, 3, 155, :_reduce_26, 3, 155, :_reduce_27, - 4, 155, :_reduce_28, - 1, 155, :_reduce_none, + 2, 155, :_reduce_28, + 3, 155, :_reduce_29, 3, 155, :_reduce_30, 3, 155, :_reduce_31, - 6, 155, :_reduce_32, - 5, 155, :_reduce_33, - 5, 155, :_reduce_34, - 5, 155, :_reduce_35, - 5, 155, :_reduce_36, + 3, 155, :_reduce_32, + 3, 155, :_reduce_33, + 4, 155, :_reduce_34, + 1, 155, :_reduce_none, + 3, 155, :_reduce_36, 3, 155, :_reduce_37, 3, 155, :_reduce_38, - 3, 155, :_reduce_39, 1, 155, :_reduce_none, - 3, 166, :_reduce_41, - 3, 166, :_reduce_42, - 1, 178, :_reduce_none, - 3, 178, :_reduce_44, - 3, 178, :_reduce_45, - 3, 178, :_reduce_46, - 2, 178, :_reduce_47, + 3, 170, :_reduce_40, + 3, 170, :_reduce_41, + 6, 170, :_reduce_42, + 5, 170, :_reduce_43, + 5, 170, :_reduce_44, + 5, 170, :_reduce_45, + 5, 170, :_reduce_46, + 3, 170, :_reduce_47, + 1, 178, :_reduce_48, + 3, 178, :_reduce_49, 1, 178, :_reduce_none, - 1, 165, :_reduce_49, - 1, 168, :_reduce_none, - 1, 168, :_reduce_none, - 1, 183, :_reduce_none, - 4, 183, :_reduce_53, - 0, 191, :_reduce_54, - 0, 192, :_reduce_55, - 6, 188, :_reduce_56, - 1, 190, :_reduce_57, - 2, 182, :_reduce_58, - 3, 182, :_reduce_59, - 4, 182, :_reduce_60, - 5, 182, :_reduce_61, - 4, 182, :_reduce_62, - 5, 182, :_reduce_63, - 2, 182, :_reduce_64, - 2, 182, :_reduce_65, - 2, 182, :_reduce_66, - 2, 182, :_reduce_67, - 2, 182, :_reduce_68, + 1, 176, :_reduce_none, + 3, 176, :_reduce_52, + 3, 176, :_reduce_53, + 3, 176, :_reduce_54, + 2, 176, :_reduce_55, + 1, 176, :_reduce_none, + 1, 169, :_reduce_57, + 0, 189, :_reduce_58, + 0, 190, :_reduce_59, + 4, 187, :_reduce_60, + 1, 172, :_reduce_none, + 1, 172, :_reduce_none, + 1, 192, :_reduce_none, + 4, 192, :_reduce_64, + 0, 200, :_reduce_65, + 4, 197, :_reduce_66, + 1, 199, :_reduce_67, + 2, 191, :_reduce_68, + 3, 191, :_reduce_69, + 4, 191, :_reduce_70, + 5, 191, :_reduce_71, + 4, 191, :_reduce_72, + 5, 191, :_reduce_73, + 2, 191, :_reduce_74, + 2, 191, :_reduce_75, + 2, 191, :_reduce_76, + 2, 191, :_reduce_77, + 2, 191, :_reduce_78, + 1, 171, :_reduce_none, + 3, 171, :_reduce_80, + 1, 205, :_reduce_none, + 3, 205, :_reduce_82, + 1, 204, :_reduce_83, + 2, 204, :_reduce_84, + 3, 204, :_reduce_85, + 5, 204, :_reduce_86, + 2, 204, :_reduce_87, + 4, 204, :_reduce_88, + 2, 204, :_reduce_89, + 4, 204, :_reduce_90, + 1, 204, :_reduce_91, + 3, 204, :_reduce_92, + 1, 208, :_reduce_none, + 3, 208, :_reduce_94, + 2, 207, :_reduce_95, + 3, 207, :_reduce_96, + 1, 210, :_reduce_97, + 3, 210, :_reduce_98, + 1, 209, :_reduce_99, + 1, 209, :_reduce_100, + 4, 209, :_reduce_101, + 3, 209, :_reduce_102, + 3, 209, :_reduce_103, + 3, 209, :_reduce_104, + 3, 209, :_reduce_105, + 2, 209, :_reduce_106, + 1, 209, :_reduce_107, + 1, 173, :_reduce_108, + 1, 173, :_reduce_109, + 4, 173, :_reduce_110, + 3, 173, :_reduce_111, + 3, 173, :_reduce_112, + 3, 173, :_reduce_113, + 3, 173, :_reduce_114, + 2, 173, :_reduce_115, + 1, 173, :_reduce_116, + 1, 213, :_reduce_117, + 1, 213, :_reduce_none, + 2, 214, :_reduce_119, + 1, 214, :_reduce_120, + 3, 214, :_reduce_121, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_125, + 1, 215, :_reduce_126, + 1, 218, :_reduce_none, + 1, 218, :_reduce_none, + 1, 167, :_reduce_129, 1, 167, :_reduce_none, - 3, 167, :_reduce_70, - 1, 196, :_reduce_none, - 3, 196, :_reduce_72, - 1, 195, :_reduce_73, - 2, 195, :_reduce_74, - 3, 195, :_reduce_75, - 5, 195, :_reduce_76, - 2, 195, :_reduce_77, - 4, 195, :_reduce_78, - 2, 195, :_reduce_79, - 4, 195, :_reduce_80, - 1, 195, :_reduce_81, - 3, 195, :_reduce_82, - 1, 199, :_reduce_none, - 3, 199, :_reduce_84, - 2, 198, :_reduce_85, - 3, 198, :_reduce_86, - 1, 201, :_reduce_87, - 3, 201, :_reduce_88, - 1, 200, :_reduce_89, - 1, 200, :_reduce_90, - 4, 200, :_reduce_91, - 3, 200, :_reduce_92, - 3, 200, :_reduce_93, - 3, 200, :_reduce_94, - 3, 200, :_reduce_95, - 2, 200, :_reduce_96, - 1, 200, :_reduce_97, - 1, 175, :_reduce_98, - 1, 175, :_reduce_99, - 4, 175, :_reduce_100, - 3, 175, :_reduce_101, - 3, 175, :_reduce_102, - 3, 175, :_reduce_103, - 3, 175, :_reduce_104, - 2, 175, :_reduce_105, - 1, 175, :_reduce_106, - 1, 204, :_reduce_107, - 1, 204, :_reduce_none, - 2, 205, :_reduce_109, - 1, 205, :_reduce_110, - 3, 205, :_reduce_111, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_115, - 1, 206, :_reduce_116, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 163, :_reduce_119, - 1, 163, :_reduce_none, - 1, 164, :_reduce_121, - 0, 212, :_reduce_122, - 4, 164, :_reduce_123, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 3, 181, :_reduce_195, - 5, 181, :_reduce_196, - 3, 181, :_reduce_197, - 5, 181, :_reduce_198, - 6, 181, :_reduce_199, - 5, 181, :_reduce_200, - 5, 181, :_reduce_201, - 5, 181, :_reduce_202, - 5, 181, :_reduce_203, - 4, 181, :_reduce_204, - 3, 181, :_reduce_205, - 3, 181, :_reduce_206, - 3, 181, :_reduce_207, - 3, 181, :_reduce_208, - 3, 181, :_reduce_209, - 3, 181, :_reduce_210, - 3, 181, :_reduce_211, - 3, 181, :_reduce_212, - 3, 181, :_reduce_213, - 4, 181, :_reduce_214, - 2, 181, :_reduce_215, - 2, 181, :_reduce_216, - 3, 181, :_reduce_217, - 3, 181, :_reduce_218, - 3, 181, :_reduce_219, - 3, 181, :_reduce_220, - 3, 181, :_reduce_221, - 3, 181, :_reduce_222, - 3, 181, :_reduce_223, - 3, 181, :_reduce_224, - 3, 181, :_reduce_225, - 3, 181, :_reduce_226, - 3, 181, :_reduce_227, - 3, 181, :_reduce_228, - 3, 181, :_reduce_229, - 2, 181, :_reduce_230, - 2, 181, :_reduce_231, - 3, 181, :_reduce_232, - 3, 181, :_reduce_233, - 3, 181, :_reduce_234, - 3, 181, :_reduce_235, - 3, 181, :_reduce_236, - 6, 181, :_reduce_237, - 1, 181, :_reduce_none, - 1, 215, :_reduce_239, + 1, 168, :_reduce_131, + 0, 221, :_reduce_132, + 4, 168, :_reduce_133, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, 1, 216, :_reduce_none, - 2, 216, :_reduce_241, - 4, 216, :_reduce_242, - 2, 216, :_reduce_243, - 3, 220, :_reduce_244, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 171, :_reduce_247, - 1, 171, :_reduce_248, - 2, 171, :_reduce_249, - 4, 171, :_reduce_250, - 2, 171, :_reduce_251, - 1, 194, :_reduce_252, - 2, 194, :_reduce_253, - 2, 194, :_reduce_254, - 4, 194, :_reduce_255, - 1, 194, :_reduce_256, - 0, 224, :_reduce_257, - 2, 187, :_reduce_258, - 2, 223, :_reduce_259, - 2, 222, :_reduce_260, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 3, 186, :_reduce_206, + 3, 186, :_reduce_207, + 6, 186, :_reduce_208, + 5, 186, :_reduce_209, + 5, 186, :_reduce_210, + 5, 186, :_reduce_211, + 5, 186, :_reduce_212, + 0, 227, :_reduce_213, + 5, 186, :_reduce_214, + 3, 186, :_reduce_215, + 3, 186, :_reduce_216, + 3, 186, :_reduce_217, + 3, 186, :_reduce_218, + 3, 186, :_reduce_219, + 3, 186, :_reduce_220, + 3, 186, :_reduce_221, + 3, 186, :_reduce_222, + 3, 186, :_reduce_223, + 4, 186, :_reduce_224, + 2, 186, :_reduce_225, + 2, 186, :_reduce_226, + 3, 186, :_reduce_227, + 3, 186, :_reduce_228, + 3, 186, :_reduce_229, + 3, 186, :_reduce_230, + 1, 186, :_reduce_none, + 3, 186, :_reduce_232, + 3, 186, :_reduce_233, + 3, 186, :_reduce_234, + 3, 186, :_reduce_235, + 3, 186, :_reduce_236, + 2, 186, :_reduce_237, + 2, 186, :_reduce_238, + 3, 186, :_reduce_239, + 3, 186, :_reduce_240, + 3, 186, :_reduce_241, + 3, 186, :_reduce_242, + 3, 186, :_reduce_243, + 6, 186, :_reduce_244, + 1, 186, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 3, 224, :_reduce_250, + 3, 224, :_reduce_251, + 1, 228, :_reduce_252, + 1, 229, :_reduce_none, + 2, 229, :_reduce_254, + 4, 229, :_reduce_255, + 2, 229, :_reduce_256, 1, 222, :_reduce_none, - 1, 217, :_reduce_262, - 2, 217, :_reduce_263, - 3, 217, :_reduce_264, - 4, 217, :_reduce_265, - 1, 177, :_reduce_266, - 1, 177, :_reduce_267, - 3, 176, :_reduce_268, - 4, 176, :_reduce_269, - 2, 176, :_reduce_270, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_281, - 0, 247, :_reduce_282, - 4, 214, :_reduce_283, - 2, 214, :_reduce_284, - 0, 248, :_reduce_285, - 0, 249, :_reduce_286, - 5, 214, :_reduce_287, - 3, 214, :_reduce_288, - 3, 214, :_reduce_289, - 2, 214, :_reduce_290, - 3, 214, :_reduce_291, - 0, 250, :_reduce_292, - 4, 214, :_reduce_293, - 1, 214, :_reduce_294, - 4, 214, :_reduce_295, - 3, 214, :_reduce_296, - 1, 214, :_reduce_297, - 5, 214, :_reduce_298, - 4, 214, :_reduce_299, - 3, 214, :_reduce_300, - 2, 214, :_reduce_301, - 1, 214, :_reduce_none, - 2, 214, :_reduce_303, - 2, 214, :_reduce_304, - 6, 214, :_reduce_305, - 6, 214, :_reduce_306, - 0, 251, :_reduce_307, - 0, 252, :_reduce_308, - 7, 214, :_reduce_309, - 0, 253, :_reduce_310, - 0, 254, :_reduce_311, - 7, 214, :_reduce_312, - 5, 214, :_reduce_313, - 4, 214, :_reduce_314, - 0, 255, :_reduce_315, - 0, 256, :_reduce_316, - 9, 214, :_reduce_317, - 0, 257, :_reduce_318, - 0, 258, :_reduce_319, - 7, 214, :_reduce_320, - 0, 259, :_reduce_321, - 0, 260, :_reduce_322, - 0, 261, :_reduce_323, - 9, 214, :_reduce_324, - 0, 262, :_reduce_325, - 0, 263, :_reduce_326, - 6, 214, :_reduce_327, - 0, 264, :_reduce_328, - 6, 214, :_reduce_329, - 0, 265, :_reduce_330, - 0, 266, :_reduce_331, - 9, 214, :_reduce_332, - 1, 214, :_reduce_333, - 1, 214, :_reduce_334, - 1, 214, :_reduce_335, - 1, 214, :_reduce_336, - 1, 170, :_reduce_337, + 3, 222, :_reduce_258, + 3, 233, :_reduce_259, + 1, 234, :_reduce_none, + 1, 234, :_reduce_none, + 1, 181, :_reduce_none, + 1, 181, :_reduce_none, + 2, 181, :_reduce_264, + 4, 181, :_reduce_265, + 2, 181, :_reduce_266, + 1, 203, :_reduce_267, + 2, 203, :_reduce_268, + 2, 203, :_reduce_269, + 4, 203, :_reduce_270, + 1, 203, :_reduce_271, + 0, 237, :_reduce_272, + 2, 196, :_reduce_273, + 2, 236, :_reduce_274, + 2, 235, :_reduce_275, + 1, 235, :_reduce_none, + 1, 230, :_reduce_277, + 2, 230, :_reduce_278, + 3, 230, :_reduce_279, + 4, 230, :_reduce_280, + 1, 175, :_reduce_281, + 1, 175, :_reduce_282, + 3, 174, :_reduce_283, + 4, 174, :_reduce_284, + 2, 174, :_reduce_285, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_296, + 0, 272, :_reduce_297, + 4, 225, :_reduce_298, + 0, 273, :_reduce_299, + 3, 225, :_reduce_300, + 0, 274, :_reduce_301, + 4, 225, :_reduce_302, + 3, 225, :_reduce_303, + 3, 225, :_reduce_304, + 2, 225, :_reduce_305, + 0, 275, :_reduce_306, + 4, 225, :_reduce_307, + 0, 276, :_reduce_308, + 4, 225, :_reduce_309, + 1, 225, :_reduce_310, + 4, 225, :_reduce_311, + 3, 225, :_reduce_312, + 1, 225, :_reduce_313, + 5, 225, :_reduce_314, + 4, 225, :_reduce_315, + 3, 225, :_reduce_316, + 2, 225, :_reduce_317, + 1, 225, :_reduce_none, + 2, 225, :_reduce_319, + 2, 225, :_reduce_320, + 6, 225, :_reduce_321, + 6, 225, :_reduce_322, + 4, 225, :_reduce_323, + 4, 225, :_reduce_324, + 5, 225, :_reduce_325, + 4, 225, :_reduce_326, + 6, 225, :_reduce_327, + 0, 277, :_reduce_328, + 0, 278, :_reduce_329, + 7, 225, :_reduce_330, + 0, 279, :_reduce_331, + 0, 280, :_reduce_332, + 0, 281, :_reduce_333, + 9, 225, :_reduce_334, + 0, 282, :_reduce_335, + 0, 283, :_reduce_336, + 6, 225, :_reduce_337, + 0, 284, :_reduce_338, + 0, 285, :_reduce_339, + 7, 225, :_reduce_340, + 0, 286, :_reduce_341, + 0, 287, :_reduce_342, + 9, 225, :_reduce_343, + 1, 225, :_reduce_344, + 1, 225, :_reduce_345, + 1, 225, :_reduce_346, + 1, 225, :_reduce_347, + 1, 180, :_reduce_348, + 1, 247, :_reduce_none, + 1, 253, :_reduce_none, + 1, 256, :_reduce_none, + 1, 258, :_reduce_none, + 1, 259, :_reduce_none, + 1, 260, :_reduce_none, + 1, 262, :_reduce_none, + 1, 264, :_reduce_none, 1, 267, :_reduce_none, 1, 268, :_reduce_none, - 1, 269, :_reduce_none, - 1, 270, :_reduce_none, - 1, 271, :_reduce_none, - 1, 272, :_reduce_none, - 1, 273, :_reduce_none, - 1, 274, :_reduce_none, - 1, 275, :_reduce_none, - 1, 276, :_reduce_none, - 1, 277, :_reduce_none, - 1, 238, :_reduce_none, - 1, 238, :_reduce_none, - 2, 238, :_reduce_none, - 1, 240, :_reduce_none, - 1, 240, :_reduce_none, - 1, 239, :_reduce_none, - 5, 239, :_reduce_355, - 1, 160, :_reduce_none, - 2, 160, :_reduce_357, - 1, 242, :_reduce_none, - 1, 242, :_reduce_359, - 1, 278, :_reduce_none, - 3, 278, :_reduce_361, - 1, 281, :_reduce_362, - 3, 281, :_reduce_363, - 1, 280, :_reduce_364, - 4, 280, :_reduce_365, - 6, 280, :_reduce_366, - 3, 280, :_reduce_367, - 5, 280, :_reduce_368, - 2, 280, :_reduce_369, - 4, 280, :_reduce_370, - 1, 280, :_reduce_371, - 3, 280, :_reduce_372, - 4, 282, :_reduce_373, - 2, 282, :_reduce_374, - 2, 282, :_reduce_375, - 1, 282, :_reduce_376, - 2, 287, :_reduce_377, - 1, 287, :_reduce_none, - 6, 288, :_reduce_379, - 8, 288, :_reduce_380, - 4, 288, :_reduce_381, - 6, 288, :_reduce_382, - 4, 288, :_reduce_383, - 2, 288, :_reduce_384, - 6, 288, :_reduce_385, - 2, 288, :_reduce_386, - 4, 288, :_reduce_387, - 6, 288, :_reduce_388, - 2, 288, :_reduce_389, - 4, 288, :_reduce_390, - 2, 288, :_reduce_391, - 4, 288, :_reduce_392, - 1, 288, :_reduce_393, - 1, 189, :_reduce_394, - 1, 189, :_reduce_none, - 3, 292, :_reduce_396, - 1, 292, :_reduce_397, - 4, 292, :_reduce_398, + 1, 288, :_reduce_none, + 1, 289, :_reduce_none, + 1, 290, :_reduce_none, + 1, 291, :_reduce_none, + 1, 292, :_reduce_none, + 1, 162, :_reduce_none, 1, 293, :_reduce_none, - 4, 293, :_reduce_400, - 1, 294, :_reduce_401, - 3, 294, :_reduce_402, - 1, 295, :_reduce_403, - 1, 295, :_reduce_none, - 0, 299, :_reduce_405, - 3, 237, :_reduce_406, - 4, 297, :_reduce_407, - 1, 297, :_reduce_408, - 3, 298, :_reduce_409, - 3, 298, :_reduce_410, - 0, 302, :_reduce_411, - 0, 303, :_reduce_412, - 6, 301, :_reduce_413, - 2, 184, :_reduce_414, - 4, 184, :_reduce_415, - 5, 184, :_reduce_416, - 5, 184, :_reduce_417, - 0, 305, :_reduce_418, - 3, 236, :_reduce_419, - 4, 236, :_reduce_420, - 4, 236, :_reduce_421, - 3, 236, :_reduce_422, - 3, 236, :_reduce_423, - 3, 236, :_reduce_424, - 2, 236, :_reduce_425, - 1, 236, :_reduce_426, - 4, 236, :_reduce_427, - 0, 306, :_reduce_428, - 0, 307, :_reduce_429, - 6, 235, :_reduce_430, - 0, 308, :_reduce_431, - 0, 309, :_reduce_432, - 6, 235, :_reduce_433, - 0, 311, :_reduce_434, - 6, 241, :_reduce_435, - 1, 310, :_reduce_none, + 1, 248, :_reduce_none, + 1, 202, :_reduce_none, + 1, 254, :_reduce_none, + 1, 254, :_reduce_none, + 2, 254, :_reduce_none, + 1, 188, :_reduce_none, + 1, 188, :_reduce_none, + 1, 255, :_reduce_none, + 5, 255, :_reduce_374, + 1, 257, :_reduce_none, + 2, 257, :_reduce_376, + 1, 263, :_reduce_none, + 1, 263, :_reduce_378, + 1, 294, :_reduce_none, + 3, 294, :_reduce_380, + 1, 297, :_reduce_381, + 3, 297, :_reduce_382, + 1, 296, :_reduce_383, + 4, 296, :_reduce_384, + 6, 296, :_reduce_385, + 3, 296, :_reduce_386, + 5, 296, :_reduce_387, + 2, 296, :_reduce_388, + 4, 296, :_reduce_389, + 1, 296, :_reduce_390, + 3, 296, :_reduce_391, + 4, 298, :_reduce_392, + 2, 298, :_reduce_393, + 2, 298, :_reduce_394, + 1, 298, :_reduce_395, + 2, 303, :_reduce_396, + 1, 303, :_reduce_none, + 6, 304, :_reduce_398, + 8, 304, :_reduce_399, + 4, 304, :_reduce_400, + 6, 304, :_reduce_401, + 4, 304, :_reduce_402, + 2, 304, :_reduce_403, + 6, 304, :_reduce_404, + 2, 304, :_reduce_405, + 4, 304, :_reduce_406, + 6, 304, :_reduce_407, + 2, 304, :_reduce_408, + 4, 304, :_reduce_409, + 2, 304, :_reduce_410, + 4, 304, :_reduce_411, + 1, 304, :_reduce_412, + 1, 308, :_reduce_413, + 1, 308, :_reduce_414, + 3, 309, :_reduce_415, + 1, 309, :_reduce_416, + 4, 309, :_reduce_417, 1, 310, :_reduce_none, - 6, 159, :_reduce_438, - 0, 159, :_reduce_439, - 1, 312, :_reduce_440, + 4, 310, :_reduce_419, + 1, 311, :_reduce_420, + 3, 311, :_reduce_421, + 1, 312, :_reduce_422, 1, 312, :_reduce_none, - 1, 312, :_reduce_none, - 2, 313, :_reduce_443, - 1, 313, :_reduce_none, - 2, 161, :_reduce_445, - 1, 161, :_reduce_none, - 1, 225, :_reduce_447, - 1, 225, :_reduce_448, - 1, 225, :_reduce_none, - 1, 226, :_reduce_450, - 1, 315, :_reduce_451, - 1, 315, :_reduce_none, - 2, 315, :_reduce_453, - 3, 316, :_reduce_454, - 1, 316, :_reduce_455, - 3, 227, :_reduce_456, - 3, 228, :_reduce_457, - 3, 229, :_reduce_458, - 3, 229, :_reduce_459, - 1, 320, :_reduce_460, - 3, 320, :_reduce_461, - 1, 321, :_reduce_none, - 2, 321, :_reduce_463, - 3, 231, :_reduce_464, - 3, 231, :_reduce_465, - 1, 323, :_reduce_466, - 3, 323, :_reduce_467, - 3, 230, :_reduce_468, - 3, 230, :_reduce_469, - 3, 232, :_reduce_470, - 3, 232, :_reduce_471, - 1, 324, :_reduce_472, - 3, 324, :_reduce_473, - 1, 325, :_reduce_474, - 3, 325, :_reduce_475, - 1, 317, :_reduce_476, - 2, 317, :_reduce_477, - 1, 318, :_reduce_478, - 2, 318, :_reduce_479, - 1, 319, :_reduce_480, - 2, 319, :_reduce_481, - 1, 322, :_reduce_482, - 0, 327, :_reduce_483, - 3, 322, :_reduce_484, - 0, 328, :_reduce_485, - 4, 322, :_reduce_486, - 1, 326, :_reduce_487, - 1, 326, :_reduce_488, - 1, 326, :_reduce_489, - 1, 326, :_reduce_none, - 2, 210, :_reduce_491, - 1, 210, :_reduce_492, - 1, 329, :_reduce_none, + 0, 316, :_reduce_424, + 0, 317, :_reduce_425, + 4, 252, :_reduce_426, + 4, 314, :_reduce_427, + 1, 314, :_reduce_428, + 3, 315, :_reduce_429, + 3, 315, :_reduce_430, + 3, 319, :_reduce_431, + 2, 193, :_reduce_432, + 4, 193, :_reduce_433, + 5, 193, :_reduce_434, + 5, 193, :_reduce_435, + 0, 322, :_reduce_436, + 3, 251, :_reduce_437, + 4, 251, :_reduce_438, + 4, 251, :_reduce_439, + 3, 251, :_reduce_440, + 3, 251, :_reduce_441, + 3, 251, :_reduce_442, + 2, 251, :_reduce_443, + 1, 251, :_reduce_444, + 4, 251, :_reduce_445, + 0, 323, :_reduce_446, + 4, 250, :_reduce_447, + 0, 324, :_reduce_448, + 4, 250, :_reduce_449, + 0, 325, :_reduce_450, + 0, 326, :_reduce_451, + 4, 198, :_reduce_452, + 0, 327, :_reduce_453, + 0, 328, :_reduce_454, + 4, 320, :_reduce_455, + 0, 330, :_reduce_456, + 6, 261, :_reduce_457, 1, 329, :_reduce_none, 1, 329, :_reduce_none, - 1, 329, :_reduce_none, - 3, 211, :_reduce_497, - 1, 314, :_reduce_none, - 2, 314, :_reduce_499, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 203, :_reduce_509, - 1, 203, :_reduce_510, - 1, 203, :_reduce_511, - 1, 203, :_reduce_512, - 1, 203, :_reduce_513, - 1, 203, :_reduce_514, - 1, 203, :_reduce_515, - 1, 233, :_reduce_516, - 1, 233, :_reduce_517, - 1, 169, :_reduce_518, - 1, 169, :_reduce_519, - 1, 174, :_reduce_520, - 1, 174, :_reduce_521, - 1, 243, :_reduce_522, - 0, 330, :_reduce_523, - 4, 243, :_reduce_524, - 2, 243, :_reduce_525, - 3, 245, :_reduce_526, - 2, 245, :_reduce_527, - 4, 331, :_reduce_528, - 2, 331, :_reduce_529, - 2, 331, :_reduce_530, + 6, 161, :_reduce_460, + 0, 161, :_reduce_461, + 1, 331, :_reduce_462, 1, 331, :_reduce_none, - 2, 333, :_reduce_532, - 0, 333, :_reduce_533, - 6, 300, :_reduce_534, - 8, 300, :_reduce_535, - 4, 300, :_reduce_536, - 6, 300, :_reduce_537, - 4, 300, :_reduce_538, - 6, 300, :_reduce_539, - 2, 300, :_reduce_540, - 4, 300, :_reduce_541, - 6, 300, :_reduce_542, - 2, 300, :_reduce_543, - 4, 300, :_reduce_544, - 2, 300, :_reduce_545, - 4, 300, :_reduce_546, - 1, 300, :_reduce_547, - 0, 300, :_reduce_548, - 1, 296, :_reduce_549, - 1, 296, :_reduce_550, - 1, 296, :_reduce_551, - 1, 296, :_reduce_552, - 1, 279, :_reduce_none, - 1, 279, :_reduce_554, - 1, 335, :_reduce_none, - 1, 336, :_reduce_none, - 3, 336, :_reduce_557, - 1, 289, :_reduce_558, - 3, 289, :_reduce_559, - 1, 337, :_reduce_none, - 2, 338, :_reduce_561, - 1, 338, :_reduce_562, - 2, 339, :_reduce_563, - 1, 339, :_reduce_564, - 1, 283, :_reduce_none, - 3, 283, :_reduce_566, + 1, 331, :_reduce_none, + 2, 332, :_reduce_465, 1, 332, :_reduce_none, - 3, 332, :_reduce_568, - 1, 340, :_reduce_none, + 2, 163, :_reduce_467, + 1, 163, :_reduce_none, + 1, 238, :_reduce_469, + 1, 238, :_reduce_470, + 1, 238, :_reduce_none, + 1, 239, :_reduce_472, + 1, 334, :_reduce_473, + 1, 334, :_reduce_none, + 2, 334, :_reduce_475, + 3, 335, :_reduce_476, + 1, 335, :_reduce_477, + 3, 240, :_reduce_478, + 3, 241, :_reduce_479, + 3, 242, :_reduce_480, + 3, 242, :_reduce_481, + 1, 339, :_reduce_482, + 3, 339, :_reduce_483, 1, 340, :_reduce_none, - 2, 284, :_reduce_571, - 1, 284, :_reduce_572, - 3, 341, :_reduce_573, - 3, 342, :_reduce_574, - 1, 290, :_reduce_575, - 3, 290, :_reduce_576, - 1, 334, :_reduce_577, - 3, 334, :_reduce_578, - 1, 343, :_reduce_none, - 1, 343, :_reduce_none, - 2, 291, :_reduce_581, - 1, 291, :_reduce_582, - 1, 344, :_reduce_none, - 1, 344, :_reduce_none, - 2, 286, :_reduce_585, - 2, 285, :_reduce_586, - 0, 285, :_reduce_587, - 1, 246, :_reduce_none, - 0, 345, :_reduce_589, - 4, 246, :_reduce_590, - 1, 234, :_reduce_591, - 2, 234, :_reduce_592, - 1, 219, :_reduce_none, - 3, 219, :_reduce_594, - 3, 346, :_reduce_595, - 3, 346, :_reduce_596, - 4, 346, :_reduce_597, - 2, 346, :_reduce_598, - 2, 346, :_reduce_599, - 1, 193, :_reduce_none, - 1, 193, :_reduce_none, - 1, 193, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 304, :_reduce_none, - 1, 304, :_reduce_none, - 1, 304, :_reduce_none, - 1, 185, :_reduce_none, - 1, 185, :_reduce_none, - 1, 173, :_reduce_none, - 1, 173, :_reduce_none, + 2, 340, :_reduce_485, + 3, 244, :_reduce_486, + 0, 343, :_reduce_487, + 4, 244, :_reduce_488, + 1, 342, :_reduce_489, + 3, 342, :_reduce_490, + 3, 243, :_reduce_491, + 3, 243, :_reduce_492, + 3, 245, :_reduce_493, + 3, 245, :_reduce_494, + 1, 344, :_reduce_495, + 3, 344, :_reduce_496, + 1, 345, :_reduce_497, + 3, 345, :_reduce_498, + 1, 336, :_reduce_499, + 2, 336, :_reduce_500, + 1, 337, :_reduce_501, + 2, 337, :_reduce_502, + 1, 338, :_reduce_503, + 2, 338, :_reduce_504, + 1, 341, :_reduce_505, + 0, 347, :_reduce_506, + 3, 341, :_reduce_507, + 0, 348, :_reduce_508, + 4, 341, :_reduce_509, + 1, 346, :_reduce_510, + 1, 346, :_reduce_511, + 1, 346, :_reduce_512, + 1, 346, :_reduce_none, + 2, 219, :_reduce_514, + 1, 219, :_reduce_515, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 3, 220, :_reduce_520, + 1, 333, :_reduce_none, + 2, 333, :_reduce_522, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 212, :_reduce_532, + 1, 212, :_reduce_533, + 1, 212, :_reduce_534, + 1, 212, :_reduce_535, + 1, 212, :_reduce_536, + 1, 212, :_reduce_537, + 1, 212, :_reduce_538, + 1, 246, :_reduce_539, + 1, 246, :_reduce_540, + 1, 179, :_reduce_541, + 1, 179, :_reduce_542, + 1, 184, :_reduce_543, + 1, 184, :_reduce_544, + 0, 350, :_reduce_545, + 4, 265, :_reduce_546, + 1, 265, :_reduce_547, + 3, 269, :_reduce_548, + 0, 352, :_reduce_549, + 3, 269, :_reduce_550, + 4, 351, :_reduce_551, + 2, 351, :_reduce_552, + 2, 351, :_reduce_553, + 1, 351, :_reduce_none, + 2, 354, :_reduce_555, + 0, 354, :_reduce_556, + 6, 318, :_reduce_557, + 8, 318, :_reduce_558, + 4, 318, :_reduce_559, + 6, 318, :_reduce_560, + 4, 318, :_reduce_561, + 6, 318, :_reduce_562, + 2, 318, :_reduce_563, + 4, 318, :_reduce_564, + 6, 318, :_reduce_565, + 2, 318, :_reduce_566, + 4, 318, :_reduce_567, + 2, 318, :_reduce_568, + 4, 318, :_reduce_569, + 1, 318, :_reduce_570, + 0, 318, :_reduce_571, + 1, 313, :_reduce_572, + 1, 313, :_reduce_573, + 1, 313, :_reduce_574, + 1, 313, :_reduce_575, + 1, 295, :_reduce_none, + 1, 295, :_reduce_577, + 1, 356, :_reduce_none, + 1, 357, :_reduce_none, + 3, 357, :_reduce_580, + 1, 305, :_reduce_581, + 3, 305, :_reduce_582, + 1, 358, :_reduce_none, + 2, 359, :_reduce_584, + 1, 359, :_reduce_585, + 2, 360, :_reduce_586, + 1, 360, :_reduce_587, + 1, 299, :_reduce_none, + 3, 299, :_reduce_589, + 1, 353, :_reduce_none, + 3, 353, :_reduce_591, + 1, 361, :_reduce_none, + 1, 361, :_reduce_none, + 2, 300, :_reduce_594, + 1, 300, :_reduce_595, + 3, 362, :_reduce_596, + 3, 363, :_reduce_597, + 1, 306, :_reduce_598, + 3, 306, :_reduce_599, + 1, 355, :_reduce_600, + 3, 355, :_reduce_601, + 1, 364, :_reduce_none, + 1, 364, :_reduce_none, + 2, 307, :_reduce_604, + 1, 307, :_reduce_605, + 1, 365, :_reduce_none, + 1, 365, :_reduce_none, + 2, 302, :_reduce_608, + 2, 301, :_reduce_609, + 0, 301, :_reduce_610, + 1, 270, :_reduce_none, + 0, 366, :_reduce_612, + 4, 270, :_reduce_613, + 1, 249, :_reduce_614, + 2, 249, :_reduce_none, + 1, 232, :_reduce_none, + 3, 232, :_reduce_617, + 3, 367, :_reduce_618, + 2, 367, :_reduce_619, + 4, 367, :_reduce_620, + 2, 367, :_reduce_621, + 1, 201, :_reduce_none, + 1, 201, :_reduce_none, + 1, 201, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 321, :_reduce_none, + 1, 321, :_reduce_none, + 1, 321, :_reduce_none, + 1, 271, :_reduce_none, + 1, 271, :_reduce_none, + 1, 183, :_reduce_none, + 1, 183, :_reduce_none, + 1, 194, :_reduce_none, + 1, 194, :_reduce_none, 0, 151, :_reduce_none, 1, 151, :_reduce_none, - 0, 180, :_reduce_none, - 1, 180, :_reduce_none, - 2, 197, :_reduce_none, - 2, 172, :_reduce_none, - 0, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 244, :_reduce_623, - 1, 244, :_reduce_none, + 0, 185, :_reduce_none, + 1, 185, :_reduce_none, + 2, 206, :_reduce_none, + 2, 182, :_reduce_none, + 0, 231, :_reduce_none, + 1, 231, :_reduce_none, + 1, 231, :_reduce_none, + 1, 266, :_reduce_647, + 1, 266, :_reduce_none, 1, 154, :_reduce_none, - 2, 154, :_reduce_626, - 0, 152, :_reduce_627 ] + 2, 154, :_reduce_650, + 0, 152, :_reduce_651 ] -racc_reduce_n = 628 +racc_reduce_n = 652 -racc_shift_n = 1059 +racc_shift_n = 1097 racc_token_table = { false => 0, @@ -3094,8 +3166,8 @@ :tIMAGINARY => 141, :tLABEL_END => 142, :tLONELY => 143, - :tEQL => 144, - :tLOWEST => 145 } + :tLOWEST => 144, + :tEQL => 145 } racc_nt_base = 146 @@ -3262,8 +3334,8 @@ "tIMAGINARY", "tLABEL_END", "tLONELY", - "tEQL", "tLOWEST", + "tEQL", "$start", "program", "top_compstmt", @@ -3274,44 +3346,53 @@ "top_stmt", "terms", "stmt", - "bodystmt", + "begin_block", "@2", + "bodystmt", + "@3", "compstmt", "opt_rescue", - "opt_else", + "k_else", "opt_ensure", + "@4", "stmts", + "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", + "lhs", + "mrhs", + "mrhs_arg", + "expr", + "@5", + "command_rhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@3", "opt_nl", "arg", + "expr_value_do", + "do", + "@6", + "@7", "command", "block_command", "block_call", - "dot_or_colon", + "call_op2", "operation2", "command_args", "cmd_brace_block", - "opt_block_param", + "brace_body", "fcall", - "@4", - "@5", + "@8", "operation", + "k_return", "call_args", "mlhs_basic", "mlhs_inner", @@ -3330,9 +3411,13 @@ "fsym", "symbol", "dsym", - "@6", + "@9", + "arg_rhs", "simple_numeric", + "rel_expr", "primary", + "relop", + "@10", "arg_value", "aref_args", "args", @@ -3342,7 +3427,7 @@ "opt_paren_args", "opt_block_arg", "block_arg", - "@7", + "@11", "literal", "strings", "xstring", @@ -3352,23 +3437,31 @@ "symbols", "qsymbols", "var_ref", + "k_begin", + "k_end", "assoc_list", "brace_block", "method_call", "lambda", + "k_if", "then", "if_tail", - "do", + "k_unless", + "opt_else", + "k_while", + "k_until", + "k_case", "case_body", + "k_for", "for_var", + "k_class", "superclass", "term", + "k_module", + "k_def", "f_arglist", "singleton", - "@8", - "@9", - "@10", - "@11", + "dot_or_colon", "@12", "@13", "@14", @@ -3385,17 +3478,12 @@ "@25", "@26", "@27", - "k_begin", - "k_if", - "k_unless", - "k_while", - "k_until", - "k_case", - "k_for", - "k_class", - "k_module", - "k_def", - "k_end", + "k_do", + "k_do_block", + "k_rescue", + "k_ensure", + "k_when", + "k_elsif", "f_marg", "f_norm_arg", "f_margs", @@ -3410,6 +3498,7 @@ "f_arg", "f_block_optarg", "f_rest_arg", + "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", @@ -3418,18 +3507,20 @@ "f_larglist", "lambda_body", "@28", + "@29", "f_args", "do_block", - "@29", - "@30", + "do_body", "operation3", + "@30", "@31", "@32", "@33", "@34", "@35", - "cases", "@36", + "cases", + "@37", "exc_list", "exc_var", "numeric", @@ -3442,14 +3533,16 @@ "word", "string_content", "symbol_list", + "@38", "qword_list", "qsym_list", "string_dvar", - "@37", - "@38", - "sym", "@39", + "@40", + "sym", + "@41", "args_tail", + "@42", "f_kwarg", "opt_args_tail", "f_optarg", @@ -3463,7 +3556,7 @@ "f_block_opt", "restarg_mark", "blkarg_mark", - "@40", + "@43", "assoc" ] Racc_debug_parser = false @@ -3473,20 +3566,21 @@ # reduce 0 omitted def _reduce_1(val, _values, result) - self.lexer.lex_state = :expr_beg - + self.lexer.lex_state = EXPR_BEG + result end def _reduce_2(val, _values, result) result = new_compstmt val - + result end def _reduce_3(val, _values, result) - result = val[0] - + stmt, _ = val + result = stmt + result end @@ -3496,22 +3590,13 @@ def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] - + result end # reduce 7 omitted -def _reduce_8(val, _values, result) - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - - result -end +# reduce 8 omitted def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then @@ -3519,239 +3604,275 @@ yyerror "BEGIN in method" end self.env.extend - + result end def _reduce_10(val, _values, result) - result = new_iter s(:preexe), nil, val[3] - + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + result end def _reduce_11(val, _values, result) - result = new_body val - + result = lexer.lineno result end def _reduce_12(val, _values, result) - result = new_compstmt val - + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt + result end -# reduce 13 omitted +def _reduce_13(val, _values, result) + res = _values[-2] + yyerror "else without rescue is useless" unless res -# reduce 14 omitted - -def _reduce_15(val, _values, result) - result = self.block_append val[0], val[2] - result end -def _reduce_16(val, _values, result) - result = val[1] - debug20 2, val, result - +def _reduce_14(val, _values, result) + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + result end -def _reduce_17(val, _values, result) - lexer.lex_state = :expr_fname - result = self.lexer.lineno - +def _reduce_15(val, _values, result) + body, resc, ens = val + + result = new_body [body, resc, nil, ens] + result end -def _reduce_18(val, _values, result) - result = s(:alias, val[1], val[3]).line(val[2]) - +def _reduce_16(val, _values, result) + result = new_compstmt val + result end +# reduce 17 omitted + +# reduce 18 omitted + def _reduce_19(val, _values, result) - result = s(:valias, val[1].to_sym, val[2].to_sym) - + result = self.block_append val[0], val[2] + result end def _reduce_20(val, _values, result) - result = s(:valias, val[1].to_sym, :"$#{val[2]}") - - result -end + result = val[1] + debug20 2, val, result -def _reduce_21(val, _values, result) - yyerror "can't make alias for the number variables" - result end +# reduce 21 omitted + def _reduce_22(val, _values, result) - result = val[1] - + yyerror "BEGIN is permitted only at toplevel" + result end def _reduce_23(val, _values, result) - result = new_if val[2], val[0], nil - + lexer.lex_state = EXPR_FNAME + result end def _reduce_24(val, _values, result) - result = new_if val[2], nil, val[0] - + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line + result end def _reduce_25(val, _values, result) - result = new_while val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line + result end def _reduce_26(val, _values, result) - result = new_until val[0], val[2], true - + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line + result end def _reduce_27(val, _values, result) - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) - + yyerror "can't make alias for the number variables" + result end def _reduce_28(val, _values, result) - if (self.in_def || self.in_single > 0) then - debug20 3 - yyerror "END in method; use at_exit" - end - result = new_iter s(:postexe), 0, val[2] - + result = val[1] + result end -# reduce 29 omitted +def _reduce_29(val, _values, result) + t, _, c = val + result = new_if c, t, nil + + result +end def _reduce_30(val, _values, result) - result = new_masgn val[0], val[2], :wrap - + f, _, c = val + result = new_if c, nil, f + result end def _reduce_31(val, _values, result) - result = new_op_asgn val - + e, _, c = val + result = new_while e, c, true + result end def _reduce_32(val, _values, result) - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - + e, _, c = val + result = new_until e, c, true + result end def _reduce_33(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn - end - result.line = val[0].line - + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody + result end def _reduce_34(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - if val[1] == '&.' - result.sexp_type = :safe_op_asgn + (_, line), _, stmt, _ = val + + if (self.in_def || self.in_single > 0) then + debug20 3 + yyerror "END in method; use at_exit" end - result.line = val[0].line - - result -end -def _reduce_35(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result - + result = new_iter s(:postexe).line(line), 0, stmt + result end +# reduce 35 omitted + def _reduce_36(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result - + result = new_masgn val[0], val[2], :wrap + result end def _reduce_37(val, _values, result) - self.backref_assign_error val[0] - + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + result end def _reduce_38(val, _values, result) - result = new_assign val[0], s(:svalue, val[2]) - + result = new_masgn val[0], val[2] + result end -def _reduce_39(val, _values, result) - result = new_masgn val[0], val[2] - +# reduce 39 omitted + +def _reduce_40(val, _values, result) + result = new_assign val[0], val[2] + result end -# reduce 40 omitted - def _reduce_41(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn val + result end def _reduce_42(val, _values, result) - result = new_assign val[0], val[2] - + result = new_op_asgn1 val + result end -# reduce 43 omitted +def _reduce_43(val, _values, result) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + + result +end def _reduce_44(val, _values, result) - result = logical_op :and, val[0], val[2] - + result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + result end def _reduce_45(val, _values, result) - result = logical_op :or, val[0], val[2] - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_46(val, _values, result) - result = s(:call, val[2], :"!") - + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + result end def _reduce_47(val, _values, result) - result = s(:call, val[1], :"!") - + self.backref_assign_error val[0] + result end -# reduce 48 omitted +def _reduce_48(val, _values, result) + expr, = val + result = value_expr expr + + result +end def _reduce_49(val, _values, result) - result = value_expr(val[0]) - + expr, (_, line), resbody = val + + expr = value_expr expr + ary = s(:array).line line + result = new_rescue(expr, new_resbody(ary, resbody)) + result end @@ -3759,67 +3880,132 @@ # reduce 51 omitted -# reduce 52 omitted +def _reduce_52(val, _values, result) + lhs, _, rhs = val + result = logical_op :and, lhs, rhs -def _reduce_53(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3] - result end -def _reduce_54(val, _values, result) - self.env.extend(:dynamic) - result = self.lexer.lineno - +def _reduce_53(val, _values, result) + lhs, _, rhs = val + result = logical_op :or, lhs, rhs + result end -def _reduce_55(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_54(val, _values, result) + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op + result end -def _reduce_56(val, _values, result) - result = new_iter nil, val[2], val[4] - result.line = val[1] +def _reduce_55(val, _values, result) + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y - self.env.unextend - result end +# reduce 56 omitted + def _reduce_57(val, _values, result) - result = new_call nil, val[0].to_sym - + result = value_expr(val[0]) + result end def _reduce_58(val, _values, result) - result = val[0].concat val[1].sexp_body # REFACTOR pattern - + lexer.cond.push true + result end def _reduce_59(val, _values, result) - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] + lexer.cond.pop + + result +end + +def _reduce_60(val, _values, result) + _, expr, _, _ = val + result = expr + + result +end + +# reduce 61 omitted + +# reduce 62 omitted + +# reduce 63 omitted + +def _reduce_64(val, _values, result) + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line + + result +end + +def _reduce_65(val, _values, result) + # self.env.extend(:dynamic) + result = self.lexer.lineno + + result +end + +def _reduce_66(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + # self.env.unextend + + result +end + +def _reduce_67(val, _values, result) + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno + + result +end + +def _reduce_68(val, _values, result) + call, args = val + result = call.concat args.sexp_body + + result +end - result, operation = val[2], result +def _reduce_69(val, _values, result) + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result result.insert 1, operation end - + result end -def _reduce_60(val, _values, result) - result = new_call val[0], val[2].to_sym, val[3], val[1] - +def _reduce_70(val, _values, result) + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop + result end -def _reduce_61(val, _values, result) +def _reduce_71(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] @@ -3827,17 +4013,17 @@ block.insert 1, call result = block - + result end -def _reduce_62(val, _values, result) +def _reduce_72(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_63(val, _values, result) +def _reduce_73(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args @@ -3845,384 +4031,417 @@ block.insert 1, call result = block - + result end -def _reduce_64(val, _values, result) +def _reduce_74(val, _values, result) result = new_super val[1] - + result end -def _reduce_65(val, _values, result) - result = new_yield val[1] - +def _reduce_75(val, _values, result) + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield + result end -def _reduce_66(val, _values, result) +def _reduce_76(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) - + result end -def _reduce_67(val, _values, result) - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) - +def _reduce_77(val, _values, result) + (_, line), args = val + result = s(:break, ret_args(args)).line line + result end -def _reduce_68(val, _values, result) +def _reduce_78(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) - + result end -# reduce 69 omitted +# reduce 79 omitted -def _reduce_70(val, _values, result) +def _reduce_80(val, _values, result) result = val[1] - + result end -# reduce 71 omitted +# reduce 81 omitted + +def _reduce_82(val, _values, result) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l -def _reduce_72(val, _values, result) - result = s(:masgn, s(:array, val[1])) - result end -def _reduce_73(val, _values, result) - result = s(:masgn, val[0]) - +def _reduce_83(val, _values, result) + head, = val + result = s(:masgn, head).line head.line + result end -def _reduce_74(val, _values, result) - result = s(:masgn, val[0] << val[1].compact) - +def _reduce_84(val, _values, result) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line + result end -def _reduce_75(val, _values, result) - result = s(:masgn, val[0] << s(:splat, val[2])) - +def _reduce_85(val, _values, result) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line + result end -def _reduce_76(val, _values, result) +def _reduce_86(val, _values, result) ary1, _, splat, _, ary2 = val - result = list_append ary1, s(:splat, splat) + result = list_append ary1, s(:splat, splat).line(splat.line) result.concat ary2.sexp_body - result = s(:masgn, result) - + result = s(:masgn, result).line result.line + result end -def _reduce_77(val, _values, result) - result = s(:masgn, val[0] << s(:splat)) - +def _reduce_87(val, _values, result) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l + result end -def _reduce_78(val, _values, result) - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - +def _reduce_88(val, _values, result) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end -def _reduce_79(val, _values, result) - result = s(:masgn, s(:array, s(:splat, val[1]))) - +def _reduce_89(val, _values, result) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l + result end -def _reduce_80(val, _values, result) - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) - +def _reduce_90(val, _values, result) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + result end -def _reduce_81(val, _values, result) - result = s(:masgn, s(:array, s(:splat))) - +def _reduce_91(val, _values, result) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l + result end -def _reduce_82(val, _values, result) - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) - +def _reduce_92(val, _values, result) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l + result end -# reduce 83 omitted +# reduce 93 omitted -def _reduce_84(val, _values, result) +def _reduce_94(val, _values, result) result = val[1] - + result end -def _reduce_85(val, _values, result) - result = s(:array, val[0]) - +def _reduce_95(val, _values, result) + lhs, _ = val + result = s(:array, lhs).line lhs.line + result end -def _reduce_86(val, _values, result) +def _reduce_96(val, _values, result) result = val[0] << val[1].compact - + result end -def _reduce_87(val, _values, result) - result = s(:array, val[0]) - +def _reduce_97(val, _values, result) + item, = val + result = s(:array, item).line item.line + result end -def _reduce_88(val, _values, result) +def _reduce_98(val, _values, result) result = list_append val[0], val[2] - + result end -def _reduce_89(val, _values, result) +def _reduce_99(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_90(val, _values, result) +def _reduce_100(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_91(val, _values, result) +def _reduce_101(val, _values, result) result = self.aryset val[0], val[2] - + result end -def _reduce_92(val, _values, result) +def _reduce_102(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end -def _reduce_93(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - +def _reduce_103(val, _values, result) + recv, _, id = val + result = new_attrasgn recv, id + result end -def _reduce_94(val, _values, result) +def _reduce_104(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end -def _reduce_95(val, _values, result) +def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) - + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l + result end -def _reduce_96(val, _values, result) +def _reduce_106(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end - result = s(:const, nil, s(:colon3, val[1].to_sym)) - + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l + result end -def _reduce_97(val, _values, result) +def _reduce_107(val, _values, result) self.backref_assign_error val[0] - + result end -def _reduce_98(val, _values, result) +def _reduce_108(val, _values, result) + line = lexer.lineno result = self.assignable val[0] - + result.line = line + result end -def _reduce_99(val, _values, result) +def _reduce_109(val, _values, result) + line = lexer.lineno result = self.assignable val[0] + result.line = line debug20 9, val, result - + result end -def _reduce_100(val, _values, result) - result = self.aryset val[0], val[2] - +def _reduce_110(val, _values, result) + lhs, _, args, _ = val + result = self.aryset lhs, args + result end -def _reduce_101(val, _values, result) - result = new_attrasgn val[0], val[2], val[1] - +def _reduce_111(val, _values, result) + lhs, op, id = val + result = new_attrasgn lhs, id, op + result end -def _reduce_102(val, _values, result) - result = s(:attrasgn, val[0], :"#{val[2]}=") - +def _reduce_112(val, _values, result) + lhs, _, id = val + result = new_attrasgn lhs, id + result end -def _reduce_103(val, _values, result) +def _reduce_113(val, _values, result) result = new_attrasgn val[0], val[2], val[1] - + result end -def _reduce_104(val, _values, result) +def _reduce_114(val, _values, result) + expr, _, id = val + if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) - + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l + result end -def _reduce_105(val, _values, result) +def _reduce_115(val, _values, result) + _, id = val + if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) - + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l + result end -def _reduce_106(val, _values, result) +def _reduce_116(val, _values, result) self.backref_assign_error val[0] - + result end -def _reduce_107(val, _values, result) +def _reduce_117(val, _values, result) yyerror "class/module name must be CONSTANT" - + result end -# reduce 108 omitted +# reduce 118 omitted + +def _reduce_119(val, _values, result) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno -def _reduce_109(val, _values, result) - result = s(:colon3, val[1].to_sym) - result end -def _reduce_110(val, _values, result) +def _reduce_120(val, _values, result) result = val[0].to_sym - + result end -def _reduce_111(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - +def _reduce_121(val, _values, result) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line + result end -# reduce 112 omitted +# reduce 122 omitted -# reduce 113 omitted +# reduce 123 omitted -# reduce 114 omitted +# reduce 124 omitted -def _reduce_115(val, _values, result) - lexer.lex_state = :expr_end +def _reduce_125(val, _values, result) + lexer.lex_state = EXPR_END result = val[0] - + result end -def _reduce_116(val, _values, result) - lexer.lex_state = :expr_end - result = val[0] - +def _reduce_126(val, _values, result) + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym + result end -# reduce 117 omitted +# reduce 127 omitted + +# reduce 128 omitted -# reduce 118 omitted +def _reduce_129(val, _values, result) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno -def _reduce_119(val, _values, result) - result = s(:lit, val[0].to_sym) - result end -# reduce 120 omitted +# reduce 130 omitted -def _reduce_121(val, _values, result) +def _reduce_131(val, _values, result) result = new_undef val[0] - + result end -def _reduce_122(val, _values, result) - lexer.lex_state = :expr_fname - +def _reduce_132(val, _values, result) + lexer.lex_state = EXPR_FNAME + result end -def _reduce_123(val, _values, result) +def _reduce_133(val, _values, result) result = new_undef val[0], val[3] - + result end -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - # reduce 134 omitted # reduce 135 omitted @@ -4345,1280 +4564,1378 @@ # reduce 194 omitted -def _reduce_195(val, _values, result) +# reduce 195 omitted + +# reduce 196 omitted + +# reduce 197 omitted + +# reduce 198 omitted + +# reduce 199 omitted + +# reduce 200 omitted + +# reduce 201 omitted + +# reduce 202 omitted + +# reduce 203 omitted + +# reduce 204 omitted + +# reduce 205 omitted + +def _reduce_206(val, _values, result) result = new_assign val[0], val[2] - - result -end -def _reduce_196(val, _values, result) - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - result end -def _reduce_197(val, _values, result) +def _reduce_207(val, _values, result) result = new_op_asgn val - + result end -def _reduce_198(val, _values, result) - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) - +def _reduce_208(val, _values, result) + result = new_op_asgn1 val + result end -def _reduce_199(val, _values, result) - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) - +def _reduce_209(val, _values, result) + result = new_op_asgn2 val + result end -def _reduce_200(val, _values, result) +def _reduce_210(val, _values, result) result = new_op_asgn2 val - + result end -def _reduce_201(val, _values, result) - result = new_op_asgn2 val - +def _reduce_211(val, _values, result) + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line + result end -def _reduce_202(val, _values, result) - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) - +def _reduce_212(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_203(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_213(val, _values, result) + result = self.lexer.lineno + result end -def _reduce_204(val, _values, result) - yyerror "constant re-assignment" - +def _reduce_214(val, _values, result) + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] + result end -def _reduce_205(val, _values, result) - self.backref_assign_error val[0] - +def _reduce_215(val, _values, result) + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn + result end -def _reduce_206(val, _values, result) +def _reduce_216(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end - + result end -def _reduce_207(val, _values, result) +def _reduce_217(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end - + result end -def _reduce_208(val, _values, result) +def _reduce_218(val, _values, result) result = new_call val[0], :+, argl(val[2]) - + result end -def _reduce_209(val, _values, result) +def _reduce_219(val, _values, result) result = new_call val[0], :-, argl(val[2]) - + result end -def _reduce_210(val, _values, result) +def _reduce_220(val, _values, result) result = new_call val[0], :*, argl(val[2]) - + result end -def _reduce_211(val, _values, result) +def _reduce_221(val, _values, result) result = new_call val[0], :"/", argl(val[2]) - + result end -def _reduce_212(val, _values, result) +def _reduce_222(val, _values, result) result = new_call val[0], :"%", argl(val[2]) - + result end -def _reduce_213(val, _values, result) +def _reduce_223(val, _values, result) result = new_call val[0], :**, argl(val[2]) - + result end -def _reduce_214(val, _values, result) - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") - +def _reduce_224(val, _values, result) + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + + result end -def _reduce_215(val, _values, result) +def _reduce_225(val, _values, result) result = new_call val[1], :"+@" - + result end -def _reduce_216(val, _values, result) +def _reduce_226(val, _values, result) result = new_call val[1], :"-@" - + result end -def _reduce_217(val, _values, result) +def _reduce_227(val, _values, result) result = new_call val[0], :"|", argl(val[2]) - + result end -def _reduce_218(val, _values, result) +def _reduce_228(val, _values, result) result = new_call val[0], :"^", argl(val[2]) - - result -end -def _reduce_219(val, _values, result) - result = new_call val[0], :"&", argl(val[2]) - result end -def _reduce_220(val, _values, result) - result = new_call val[0], :"<=>", argl(val[2]) - - result -end +def _reduce_229(val, _values, result) + result = new_call val[0], :"&", argl(val[2]) -def _reduce_221(val, _values, result) - result = new_call val[0], :">", argl(val[2]) - result end -def _reduce_222(val, _values, result) - result = new_call val[0], :">=", argl(val[2]) - - result -end +def _reduce_230(val, _values, result) + result = new_call val[0], :"<=>", argl(val[2]) -def _reduce_223(val, _values, result) - result = new_call val[0], :"<", argl(val[2]) - result end -def _reduce_224(val, _values, result) - result = new_call val[0], :"<=", argl(val[2]) - - result -end +# reduce 231 omitted -def _reduce_225(val, _values, result) +def _reduce_232(val, _values, result) result = new_call val[0], :"==", argl(val[2]) - + result end -def _reduce_226(val, _values, result) +def _reduce_233(val, _values, result) result = new_call val[0], :"===", argl(val[2]) - + result end -def _reduce_227(val, _values, result) +def _reduce_234(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) - + result end -def _reduce_228(val, _values, result) - result = new_match val[0], val[2] - +def _reduce_235(val, _values, result) + lhs, _, rhs = val + result = new_match lhs, rhs + result end -def _reduce_229(val, _values, result) - result = s(:not, new_match(val[0], val[2])) - +def _reduce_236(val, _values, result) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line + result end -def _reduce_230(val, _values, result) - result = new_call val[1], :"!" - +def _reduce_237(val, _values, result) + _, arg = val + result = new_call arg, :"!" + result.line arg.line + result end -def _reduce_231(val, _values, result) +def _reduce_238(val, _values, result) result = new_call value_expr(val[1]), :"~" - + result end -def _reduce_232(val, _values, result) +def _reduce_239(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) - + result end -def _reduce_233(val, _values, result) +def _reduce_240(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) - + result end -def _reduce_234(val, _values, result) +def _reduce_241(val, _values, result) result = logical_op :and, val[0], val[2] - + result end -def _reduce_235(val, _values, result) +def _reduce_242(val, _values, result) result = logical_op :or, val[0], val[2] - + result end -def _reduce_236(val, _values, result) - result = s(:defined, val[2]) - +def _reduce_243(val, _values, result) + (_, line), _, arg = val + result = s(:defined, arg).line line + result end -def _reduce_237(val, _values, result) - result = s(:if, val[0], val[2], val[5]) - +def _reduce_244(val, _values, result) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line + result end -# reduce 238 omitted +# reduce 245 omitted -def _reduce_239(val, _values, result) +# reduce 246 omitted + +# reduce 247 omitted + +# reduce 248 omitted + +# reduce 249 omitted + +def _reduce_250(val, _values, result) + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_251(val, _values, result) + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_252(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 240 omitted +# reduce 253 omitted -def _reduce_241(val, _values, result) +def _reduce_254(val, _values, result) result = args [val[0]] - + result end -def _reduce_242(val, _values, result) +def _reduce_255(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_243(val, _values, result) +def _reduce_256(val, _values, result) result = args [array_to_hash(val[0])] - - result -end -def _reduce_244(val, _values, result) - result = val[1] - result end -# reduce 245 omitted +# reduce 257 omitted -# reduce 246 omitted +def _reduce_258(val, _values, result) + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) -def _reduce_247(val, _values, result) - result = val[0] - result end -def _reduce_248(val, _values, result) - result = val[0] - +def _reduce_259(val, _values, result) + _, args, _ = val + result = args + result end -def _reduce_249(val, _values, result) +# reduce 260 omitted + +# reduce 261 omitted + +# reduce 262 omitted + +# reduce 263 omitted + +def _reduce_264(val, _values, result) result = args val - + result end -def _reduce_250(val, _values, result) +def _reduce_265(val, _values, result) result = args [val[0], array_to_hash(val[2])] - + result end -def _reduce_251(val, _values, result) +def _reduce_266(val, _values, result) result = args [array_to_hash(val[0])] - + result end -def _reduce_252(val, _values, result) +def _reduce_267(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val - + result end -def _reduce_253(val, _values, result) +def _reduce_268(val, _values, result) result = call_args val - result = self.arg_blk_pass val[0], val[1] - + result end -def _reduce_254(val, _values, result) - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] - +def _reduce_269(val, _values, result) + result = call_args [array_to_hash(val[0]), val[1]] + result end -def _reduce_255(val, _values, result) - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] - +def _reduce_270(val, _values, result) + result = call_args [val[0], array_to_hash(val[2]), val[3]] + result end -def _reduce_256(val, _values, result) +def _reduce_271(val, _values, result) result = call_args val - + result end -def _reduce_257(val, _values, result) - result = lexer.cmdarg.stack.dup # TODO: smell? +def _reduce_272(val, _values, result) + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true - + lexer.cmdarg.push false if lookahead + result end -def _reduce_258(val, _values, result) - lexer.cmdarg.stack.replace val[0] - result = val[1] - +def _reduce_273(val, _values, result) + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args + result end -def _reduce_259(val, _values, result) - result = s(:block_pass, val[1]) - +def _reduce_274(val, _values, result) + _, arg = val + result = s(:block_pass, arg).line arg.line + result end -def _reduce_260(val, _values, result) +def _reduce_275(val, _values, result) result = val[1] - + result end -# reduce 261 omitted +# reduce 276 omitted + +def _reduce_277(val, _values, result) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno -def _reduce_262(val, _values, result) - result = s(:array, val[0]) - result end -def _reduce_263(val, _values, result) - result = s(:array, s(:splat, val[1])) - +def _reduce_278(val, _values, result) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line + result end -def _reduce_264(val, _values, result) - result = self.list_append val[0], val[2] - +def _reduce_279(val, _values, result) + args, _, id = val + result = self.list_append args, id + result end -def _reduce_265(val, _values, result) - result = self.list_append val[0], s(:splat, val[3]) - +def _reduce_280(val, _values, result) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) + result end -def _reduce_266(val, _values, result) +def _reduce_281(val, _values, result) result = new_masgn_arg val[0] - + result end -def _reduce_267(val, _values, result) +def _reduce_282(val, _values, result) result = new_masgn_arg val[0], :wrap - + result end -def _reduce_268(val, _values, result) +def _reduce_283(val, _values, result) result = val[0] << val[2] - + result end -def _reduce_269(val, _values, result) - result = self.arg_concat val[0], val[3] - +def _reduce_284(val, _values, result) + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat + result end -def _reduce_270(val, _values, result) - result = s(:splat, val[1]) - +def _reduce_285(val, _values, result) + _, arg = val + result = s(:splat, arg).line arg.line + result end -# reduce 271 omitted +# reduce 286 omitted -# reduce 272 omitted +# reduce 287 omitted -# reduce 273 omitted +# reduce 288 omitted -# reduce 274 omitted +# reduce 289 omitted -# reduce 275 omitted +# reduce 290 omitted -# reduce 276 omitted +# reduce 291 omitted -# reduce 277 omitted +# reduce 292 omitted -# reduce 278 omitted +# reduce 293 omitted -# reduce 279 omitted +# reduce 294 omitted -# reduce 280 omitted +# reduce 295 omitted + +def _reduce_296(val, _values, result) + msg, = val + result = new_call nil, msg.to_sym -def _reduce_281(val, _values, result) - result = new_call nil, val[0].to_sym - result end -def _reduce_282(val, _values, result) +def _reduce_297(val, _values, result) + lexer.cmdarg.push false result = self.lexer.lineno - + result end -def _reduce_283(val, _values, result) - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end +def _reduce_298(val, _values, result) + lexer.cmdarg.pop + result = new_begin val - result.line = val[1] - result end -def _reduce_284(val, _values, result) - debug20 13, val, result - +def _reduce_299(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno + result end -def _reduce_285(val, _values, result) - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these - +def _reduce_300(val, _values, result) + _, line, _ = val + result = s(:begin).line line + result end -def _reduce_286(val, _values, result) - lexer.lex_state = :expr_endarg - +def _reduce_301(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result end -def _reduce_287(val, _values, result) - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] - +def _reduce_302(val, _values, result) + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt + result end -def _reduce_288(val, _values, result) - result = val[1] || s(:nil) +def _reduce_303(val, _values, result) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true - + + result +end + +def _reduce_304(val, _values, result) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line + result end -def _reduce_289(val, _values, result) - result = s(:colon2, val[0], val[2].to_sym) - +def _reduce_305(val, _values, result) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno + result end -def _reduce_290(val, _values, result) - result = s(:colon3, val[1].to_sym) - +def _reduce_306(val, _values, result) + result = lexer.lineno result end -def _reduce_291(val, _values, result) - result = val[1] || s(:array) +def _reduce_307(val, _values, result) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args - + result.line line + result end -def _reduce_292(val, _values, result) +def _reduce_308(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_293(val, _values, result) +def _reduce_309(val, _values, result) result = new_hash val - + result end -def _reduce_294(val, _values, result) - result = s(:return) - +def _reduce_310(val, _values, result) + (_, line), = val + result = s(:return).line line + result end -def _reduce_295(val, _values, result) +def _reduce_311(val, _values, result) result = new_yield val[2] - + result end -def _reduce_296(val, _values, result) +def _reduce_312(val, _values, result) result = new_yield - + result end -def _reduce_297(val, _values, result) +def _reduce_313(val, _values, result) result = new_yield - + result end -def _reduce_298(val, _values, result) - result = s(:defined, val[3]) - +def _reduce_314(val, _values, result) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line + result end -def _reduce_299(val, _values, result) - result = s(:call, val[2], :"!") - +def _reduce_315(val, _values, result) + _, _, lhs, _ = val + result = new_call lhs, :"!" + result end -def _reduce_300(val, _values, result) +def _reduce_316(val, _values, result) debug20 14, val, result - + result end -def _reduce_301(val, _values, result) - oper, iter = val[0], val[1] - call = oper # FIX +def _reduce_317(val, _values, result) + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line - + # FIX: probably not: call.line = iter.line + result end -# reduce 302 omitted +# reduce 318 omitted -def _reduce_303(val, _values, result) +def _reduce_319(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter - + result end -def _reduce_304(val, _values, result) +def _reduce_320(val, _values, result) result = val[1] # TODO: fix lineno - - result -end -def _reduce_305(val, _values, result) - result = new_if val[1], val[3], val[4] - result end -def _reduce_306(val, _values, result) - result = new_if val[1], val[4], val[3] - - result -end +def _reduce_321(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, t, f -def _reduce_307(val, _values, result) - lexer.cond.push true - result end -def _reduce_308(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_322(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, f, t -def _reduce_309(val, _values, result) - result = new_while val[5], val[2], true - result end -def _reduce_310(val, _values, result) - lexer.cond.push true - - result -end +def _reduce_323(val, _values, result) + _, cond, body, _ = val + result = new_while body, cond, true -def _reduce_311(val, _values, result) - lexer.cond.pop - result end -def _reduce_312(val, _values, result) - result = new_until val[5], val[2], true - +def _reduce_324(val, _values, result) + _, cond, body, _ = val + result = new_until body, cond, true + result end -def _reduce_313(val, _values, result) +def _reduce_325(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line - + result end -def _reduce_314(val, _values, result) +def _reduce_326(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line - - result -end -def _reduce_315(val, _values, result) - lexer.cond.push true - result end -def _reduce_316(val, _values, result) - lexer.cond.pop - - result -end +def _reduce_327(val, _values, result) + _, var, _, iter, body, _ = val + result = new_for iter, var, body -def _reduce_317(val, _values, result) - result = new_for val[4], val[1], val[7] - result end -def _reduce_318(val, _values, result) +def _reduce_328(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_319(val, _values, result) +def _reduce_329(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend - + result end -def _reduce_320(val, _values, result) +def _reduce_330(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_321(val, _values, result) +def _reduce_331(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_322(val, _values, result) +def _reduce_332(val, _values, result) result = self.in_def self.in_def = false - + result end -def _reduce_323(val, _values, result) +def _reduce_333(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend - + result end -def _reduce_324(val, _values, result) +def _reduce_334(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_325(val, _values, result) +def _reduce_335(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_326(val, _values, result) +def _reduce_336(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend - + result end -def _reduce_327(val, _values, result) +def _reduce_337(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_328(val, _values, result) - result = [self.in_def, self.lexer.cmdarg.stack.dup] +def _reduce_338(val, _values, result) + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments + result end -def _reduce_329(val, _values, result) - in_def, cmdarg = val[2] +def _reduce_339(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_340(val, _values, result) + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_330(val, _values, result) - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname - +def _reduce_341(val, _values, result) + lexer.lex_state = EXPR_FNAME + result end -def _reduce_331(val, _values, result) - self.in_single += 1 +def _reduce_342(val, _values, result) + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] - + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments + result end -def _reduce_332(val, _values, result) - line, cmdarg = val[5] - result = new_defs val - result[3].line line +def _reduce_343(val, _values, result) + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body - + result end -def _reduce_333(val, _values, result) - result = s(:break) - +def _reduce_344(val, _values, result) + (_, line), = val + result = s(:break).line line + result end -def _reduce_334(val, _values, result) - result = s(:next) - +def _reduce_345(val, _values, result) + (_, line), = val + result = s(:next).line line + result end -def _reduce_335(val, _values, result) - result = s(:redo) - +def _reduce_346(val, _values, result) + (_, line), = val + result = s(:redo).line line + result end -def _reduce_336(val, _values, result) - result = s(:retry) - +def _reduce_347(val, _values, result) + (_, line), = val + result = s(:retry).line line + result end -def _reduce_337(val, _values, result) +def _reduce_348(val, _values, result) result = value_expr(val[0]) - + result end -# reduce 338 omitted +# reduce 349 omitted + +# reduce 350 omitted + +# reduce 351 omitted + +# reduce 352 omitted + +# reduce 353 omitted -# reduce 339 omitted +# reduce 354 omitted -# reduce 340 omitted +# reduce 355 omitted -# reduce 341 omitted +# reduce 356 omitted -# reduce 342 omitted +# reduce 357 omitted -# reduce 343 omitted +# reduce 358 omitted -# reduce 344 omitted +# reduce 359 omitted -# reduce 345 omitted +# reduce 360 omitted -# reduce 346 omitted +# reduce 361 omitted -# reduce 347 omitted +# reduce 362 omitted -# reduce 348 omitted +# reduce 363 omitted -# reduce 349 omitted +# reduce 364 omitted -# reduce 350 omitted +# reduce 365 omitted -# reduce 351 omitted +# reduce 366 omitted -# reduce 352 omitted +# reduce 367 omitted -# reduce 353 omitted +# reduce 368 omitted -# reduce 354 omitted +# reduce 369 omitted + +# reduce 370 omitted + +# reduce 371 omitted + +# reduce 372 omitted + +# reduce 373 omitted + +def _reduce_374(val, _values, result) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line -def _reduce_355(val, _values, result) - result = s(:if, val[1], val[3], val[4]) - result end -# reduce 356 omitted +# reduce 375 omitted -def _reduce_357(val, _values, result) +def _reduce_376(val, _values, result) result = val[1] - + result end -# reduce 358 omitted +# reduce 377 omitted -def _reduce_359(val, _values, result) +def _reduce_378(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK - + result end -# reduce 360 omitted +# reduce 379 omitted -def _reduce_361(val, _values, result) +def _reduce_380(val, _values, result) result = val[1] - + result end -def _reduce_362(val, _values, result) - result = s(:array, val[0]) - +def _reduce_381(val, _values, result) + sym, = val + + result = s(:array, sym).line lexer.lineno + result end -def _reduce_363(val, _values, result) +def _reduce_382(val, _values, result) result = list_append val[0], val[2] - + result end -def _reduce_364(val, _values, result) +def _reduce_383(val, _values, result) args, = val result = block_var args - + result end -def _reduce_365(val, _values, result) +def _reduce_384(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym - + result end -def _reduce_366(val, _values, result) +def _reduce_385(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 - + result end -def _reduce_367(val, _values, result) +def _reduce_386(val, _values, result) args, _, _ = val result = block_var args, :* - + result end -def _reduce_368(val, _values, result) +def _reduce_387(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 - + result end -def _reduce_369(val, _values, result) +def _reduce_388(val, _values, result) _, splat = val result = block_var :"*#{splat}" - + result end -def _reduce_370(val, _values, result) +def _reduce_389(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args - + result end -def _reduce_371(val, _values, result) +def _reduce_390(val, _values, result) result = block_var :* - + result end -def _reduce_372(val, _values, result) +def _reduce_391(val, _values, result) _, _, args = val result = block_var :*, args - + result end -def _reduce_373(val, _values, result) +def _reduce_392(val, _values, result) result = call_args val - + result end -def _reduce_374(val, _values, result) +def _reduce_393(val, _values, result) result = call_args val - + result end -def _reduce_375(val, _values, result) +def _reduce_394(val, _values, result) result = call_args val - + result end -def _reduce_376(val, _values, result) - result = call_args val - +def _reduce_395(val, _values, result) + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line + result end -def _reduce_377(val, _values, result) +def _reduce_396(val, _values, result) result = args val - + result end -# reduce 378 omitted +# reduce 397 omitted -def _reduce_379(val, _values, result) +def _reduce_398(val, _values, result) result = args val - + result end -def _reduce_380(val, _values, result) +def _reduce_399(val, _values, result) result = args val - + result end -def _reduce_381(val, _values, result) +def _reduce_400(val, _values, result) result = args val - + result end -def _reduce_382(val, _values, result) +def _reduce_401(val, _values, result) result = args val - + result end -def _reduce_383(val, _values, result) +def _reduce_402(val, _values, result) result = args val - + result end -def _reduce_384(val, _values, result) - result = args val - +def _reduce_403(val, _values, result) + result = args(val) << nil + result end -def _reduce_385(val, _values, result) +def _reduce_404(val, _values, result) result = args val - + result end -def _reduce_386(val, _values, result) +def _reduce_405(val, _values, result) result = args val - + result end -def _reduce_387(val, _values, result) +def _reduce_406(val, _values, result) result = args val - + result end -def _reduce_388(val, _values, result) +def _reduce_407(val, _values, result) result = args val - + result end -def _reduce_389(val, _values, result) +def _reduce_408(val, _values, result) result = args val - + result end -def _reduce_390(val, _values, result) +def _reduce_409(val, _values, result) result = args val - + result end -def _reduce_391(val, _values, result) +def _reduce_410(val, _values, result) result = args val - + result end -def _reduce_392(val, _values, result) +def _reduce_411(val, _values, result) result = args val - + result end -def _reduce_393(val, _values, result) +def _reduce_412(val, _values, result) result = args val - + result end -def _reduce_394(val, _values, result) - result = 0 +def _reduce_413(val, _values, result) + result = 0 + result +end + +def _reduce_414(val, _values, result) + self.lexer.command_start = true + result end -# reduce 395 omitted - -def _reduce_396(val, _values, result) +def _reduce_415(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -def _reduce_397(val, _values, result) - self.lexer.command_start = true - result = s(:args) - +def _reduce_416(val, _values, result) + result = s(:args).line lexer.lineno + result end -def _reduce_398(val, _values, result) +def _reduce_417(val, _values, result) + # TODO: current_arg = 0 result = args val - + result end -# reduce 399 omitted +# reduce 418 omitted -def _reduce_400(val, _values, result) +def _reduce_419(val, _values, result) result = args val - + result end -def _reduce_401(val, _values, result) +def _reduce_420(val, _values, result) result = args val - + result end -def _reduce_402(val, _values, result) +def _reduce_421(val, _values, result) result = args val - + result end -def _reduce_403(val, _values, result) - result = s(:shadow, val[0].to_sym) - +def _reduce_422(val, _values, result) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line + result end -# reduce 404 omitted +# reduce 423 omitted -def _reduce_405(val, _values, result) +def _reduce_424(val, _values, result) self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest - + result end -def _reduce_406(val, _values, result) - lpar, args, body = val +def _reduce_425(val, _values, result) + lexer.cmdarg.push false + + result +end + +def _reduce_426(val, _values, result) + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend - + result.line = line + self.env.unextend # TODO: dynapush & dynapop + result end -def _reduce_407(val, _values, result) +def _reduce_427(val, _values, result) result = args val - + result end -def _reduce_408(val, _values, result) +def _reduce_428(val, _values, result) result = val[0] result = 0 if result == s(:args) - - result -end -def _reduce_409(val, _values, result) - result = val[1] - result end -def _reduce_410(val, _values, result) +def _reduce_429(val, _values, result) result = val[1] - - result -end -def _reduce_411(val, _values, result) - self.env.extend :dynamic - result = self.lexer.lineno - result end -def _reduce_412(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_430(val, _values, result) + result = val[1] + result end -def _reduce_413(val, _values, result) - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] +def _reduce_431(val, _values, result) + (_, line), iter, _ = val + result = iter.line line - self.env.unextend - result end -def _reduce_414(val, _values, result) +def _reduce_432(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); @@ -5628,465 +5945,523 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] - + cmd, blk = val + + result = blk + result.insert 1, cmd + result end -def _reduce_415(val, _values, result) +def _reduce_433(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_416(val, _values, result) +def _reduce_434(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_417(val, _values, result) +def _reduce_435(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 - + result end -def _reduce_418(val, _values, result) +def _reduce_436(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_419(val, _values, result) - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body - +def _reduce_437(val, _values, result) + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno + result end -def _reduce_420(val, _values, result) +def _reduce_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] - + result end -def _reduce_421(val, _values, result) +def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] - + result end -def _reduce_422(val, _values, result) +def _reduce_440(val, _values, result) result = new_call val[0], val[2].to_sym - + result end -def _reduce_423(val, _values, result) +def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2], val[1] - + result end -def _reduce_424(val, _values, result) +def _reduce_442(val, _values, result) result = new_call val[0], :call, val[2] - + result end -def _reduce_425(val, _values, result) +def _reduce_443(val, _values, result) result = new_super val[1] - + result end -def _reduce_426(val, _values, result) - result = s(:zsuper) - +def _reduce_444(val, _values, result) + result = s(:zsuper).line lexer.lineno + result end -def _reduce_427(val, _values, result) +def _reduce_445(val, _values, result) result = new_aref val - + result end -def _reduce_428(val, _values, result) +def _reduce_446(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - - result -end -def _reduce_429(val, _values, result) - result = nil # self.env.dynamic.keys - result end -def _reduce_430(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_447(val, _values, result) + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend - + result end -def _reduce_431(val, _values, result) +def _reduce_448(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno - + result end -def _reduce_432(val, _values, result) - result = nil # self.env.dynamic.keys - +def _reduce_449(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + result end -def _reduce_433(val, _values, result) - _, line, args, _, body, _ = val +def _reduce_450(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end - result = new_iter nil, args, body - result.line = line +def _reduce_451(val, _values, result) + result = lexer.cmdarg.store(false) + result +end +def _reduce_452(val, _values, result) + line, cmdarg, param, cmpstmt = val + + result = new_brace_body param, cmpstmt, line self.env.unextend - + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + result end -def _reduce_434(val, _values, result) +def _reduce_453(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end + +def _reduce_454(val, _values, result) + lexer.cmdarg.push false + result +end + +def _reduce_455(val, _values, result) + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop + self.env.unextend + + result +end + +def _reduce_456(val, _values, result) result = self.lexer.lineno - + result end -def _reduce_435(val, _values, result) +def _reduce_457(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] - + result end -# reduce 436 omitted +# reduce 458 omitted -# reduce 437 omitted +# reduce 459 omitted -def _reduce_438(val, _values, result) +def _reduce_460(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above - + result end -def _reduce_439(val, _values, result) +def _reduce_461(val, _values, result) result = nil - + result end -def _reduce_440(val, _values, result) - result = s(:array, val[0]) - +def _reduce_462(val, _values, result) + arg, = val + result = s(:array, arg).line arg.line + result end -# reduce 441 omitted +# reduce 463 omitted -# reduce 442 omitted +# reduce 464 omitted -def _reduce_443(val, _values, result) +def _reduce_465(val, _values, result) result = val[1] - + result end -# reduce 444 omitted +# reduce 466 omitted -def _reduce_445(val, _values, result) - _, body = val +def _reduce_467(val, _values, result) + (_, line), body = val + + result = body || s(:nil).line(line) - result = body || s(:nil) - result end -# reduce 446 omitted +# reduce 468 omitted -def _reduce_447(val, _values, result) +def _reduce_469(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -def _reduce_448(val, _values, result) +def _reduce_470(val, _values, result) + line = lexer.lineno result = s(:lit, val[0]) - + result.line = line + result end -# reduce 449 omitted +# reduce 471 omitted + +def _reduce_472(val, _values, result) + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str -def _reduce_450(val, _values, result) - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] - result end -def _reduce_451(val, _values, result) +def _reduce_473(val, _values, result) debug20 23, val, result - + result end -# reduce 452 omitted +# reduce 474 omitted -def _reduce_453(val, _values, result) +def _reduce_475(val, _values, result) result = self.literal_concat val[0], val[1] - + result end -def _reduce_454(val, _values, result) - result = val[1] - +def _reduce_476(val, _values, result) + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str + result end -def _reduce_455(val, _values, result) +def _reduce_477(val, _values, result) result = new_string val - + result end -def _reduce_456(val, _values, result) - result = new_xstring val[1] - +def _reduce_478(val, _values, result) + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? + result end -def _reduce_457(val, _values, result) +def _reduce_479(val, _values, result) result = new_regexp val - + result end -def _reduce_458(val, _values, result) - result = s(:array) - +def _reduce_480(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_459(val, _values, result) +def _reduce_481(val, _values, result) result = val[1] - + result end -def _reduce_460(val, _values, result) +def _reduce_482(val, _values, result) result = new_word_list - + result end -def _reduce_461(val, _values, result) +def _reduce_483(val, _values, result) result = val[0].dup << new_word_list_entry(val) - + result end -# reduce 462 omitted +# reduce 484 omitted -def _reduce_463(val, _values, result) +def _reduce_485(val, _values, result) result = self.literal_concat val[0], val[1] - + + result +end + +def _reduce_486(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_464(val, _values, result) - result = s(:array) - +def _reduce_487(val, _values, result) + result = lexer.lineno result end -def _reduce_465(val, _values, result) - result = val[1] - +def _reduce_488(val, _values, result) + _, line, list, _, = val + list.line = line + result = list + result end -def _reduce_466(val, _values, result) - result = new_symbol_list - +def _reduce_489(val, _values, result) + result = new_symbol_list.line lexer.lineno + result end -def _reduce_467(val, _values, result) - result = val[0].dup << new_symbol_list_entry(val) - +def _reduce_490(val, _values, result) + list, * = val + result = list.dup << new_symbol_list_entry(val) + result end -def _reduce_468(val, _values, result) - result = s(:array) - +def _reduce_491(val, _values, result) + result = s(:array).line lexer.lineno + result end -def _reduce_469(val, _values, result) +def _reduce_492(val, _values, result) result = val[1] - + result end -def _reduce_470(val, _values, result) - result = s(:array) - +def _reduce_493(val, _values, result) + result = s(:array).line lexer.lineno # FIX + result end -def _reduce_471(val, _values, result) +def _reduce_494(val, _values, result) result = val[1] - + result end -def _reduce_472(val, _values, result) +def _reduce_495(val, _values, result) result = new_qword_list - + result end -def _reduce_473(val, _values, result) +def _reduce_496(val, _values, result) result = val[0].dup << new_qword_list_entry(val) - + result end -def _reduce_474(val, _values, result) +def _reduce_497(val, _values, result) result = new_qsym_list - + result end -def _reduce_475(val, _values, result) +def _reduce_498(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) - + result end -def _reduce_476(val, _values, result) - result = s(:str, "") - +def _reduce_499(val, _values, result) + result = s(:str, "").line lexer.lineno + result end -def _reduce_477(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_500(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_478(val, _values, result) +def _reduce_501(val, _values, result) result = nil - + result end -def _reduce_479(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_502(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_480(val, _values, result) +def _reduce_503(val, _values, result) result = nil - + result end -def _reduce_481(val, _values, result) - result = literal_concat(val[0], val[1]) - +def _reduce_504(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + result end -def _reduce_482(val, _values, result) +def _reduce_505(val, _values, result) result = new_string val - + result end -def _reduce_483(val, _values, result) +def _reduce_506(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? - + lexer.lex_state = EXPR_BEG + result end -def _reduce_484(val, _values, result) - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) - +def _reduce_507(val, _values, result) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line + result end -def _reduce_485(val, _values, result) +def _reduce_508(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value - + lexer.lex_state = EXPR_BEG + result end -def _reduce_486(val, _values, result) - # TODO: tRCURLY -> tSTRING_END +def _reduce_509(val, _values, result) _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -6096,718 +6471,729 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end - + result end -def _reduce_487(val, _values, result) - result = s(:gvar, val[0].to_sym) +def _reduce_510(val, _values, result) + result = s(:gvar, val[0].to_sym).line lexer.lineno result end -def _reduce_488(val, _values, result) - result = s(:ivar, val[0].to_sym) +def _reduce_511(val, _values, result) + result = s(:ivar, val[0].to_sym).line lexer.lineno result end -def _reduce_489(val, _values, result) - result = s(:cvar, val[0].to_sym) +def _reduce_512(val, _values, result) + result = s(:cvar, val[0].to_sym).line lexer.lineno result end -# reduce 490 omitted +# reduce 513 omitted -def _reduce_491(val, _values, result) - lexer.lex_state = :expr_end +def _reduce_514(val, _values, result) + lexer.lex_state = EXPR_END result = val[1].to_sym - + result end -def _reduce_492(val, _values, result) +def _reduce_515(val, _values, result) result = val[0].to_sym - + result end -# reduce 493 omitted +# reduce 516 omitted -# reduce 494 omitted +# reduce 517 omitted -# reduce 495 omitted +# reduce 518 omitted -# reduce 496 omitted +# reduce 519 omitted -def _reduce_497(val, _values, result) - lexer.lex_state = :expr_end - result = val[1] +def _reduce_520(val, _values, result) + _, result, _ = val + + lexer.lex_state = EXPR_END - result ||= s(:str, "") + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end - + result end -# reduce 498 omitted +# reduce 521 omitted -def _reduce_499(val, _values, result) +def _reduce_522(val, _values, result) result = -val[1] # TODO: pt_testcase - + result end -# reduce 500 omitted +# reduce 523 omitted -# reduce 501 omitted +# reduce 524 omitted -# reduce 502 omitted +# reduce 525 omitted -# reduce 503 omitted +# reduce 526 omitted -# reduce 504 omitted +# reduce 527 omitted -# reduce 505 omitted +# reduce 528 omitted -# reduce 506 omitted +# reduce 529 omitted -# reduce 507 omitted +# reduce 530 omitted -# reduce 508 omitted +# reduce 531 omitted -def _reduce_509(val, _values, result) - result = s(:nil) +def _reduce_532(val, _values, result) + result = s(:nil).line lexer.lineno result end -def _reduce_510(val, _values, result) - result = s(:self) +def _reduce_533(val, _values, result) + result = s(:self).line lexer.lineno result end -def _reduce_511(val, _values, result) - result = s(:true) +def _reduce_534(val, _values, result) + result = s(:true).line lexer.lineno result end -def _reduce_512(val, _values, result) - result = s(:false) +def _reduce_535(val, _values, result) + result = s(:false).line lexer.lineno result end -def _reduce_513(val, _values, result) - result = s(:str, self.file) +def _reduce_536(val, _values, result) + result = s(:str, self.file).line lexer.lineno result end -def _reduce_514(val, _values, result) - result = s(:lit, lexer.lineno) +def _reduce_537(val, _values, result) + result = s(:lit, lexer.lineno).line lexer.lineno result end -def _reduce_515(val, _values, result) +def _reduce_538(val, _values, result) + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end - + result end -def _reduce_516(val, _values, result) +def _reduce_539(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_517(val, _values, result) +def _reduce_540(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) - + result end -def _reduce_518(val, _values, result) +def _reduce_541(val, _values, result) result = self.assignable val[0] - + result end -def _reduce_519(val, _values, result) +def _reduce_542(val, _values, result) result = self.assignable val[0] debug20 29, val, result - - result -end -def _reduce_520(val, _values, result) - result = s(:nth_ref, val[0]) result end -def _reduce_521(val, _values, result) - result = s(:back_ref, val[0]) +def _reduce_543(val, _values, result) + result = s(:nth_ref, val[0]).line lexer.lineno result end -def _reduce_522(val, _values, result) - result = nil - +def _reduce_544(val, _values, result) + result = s(:back_ref, val[0]).line lexer.lineno result end -def _reduce_523(val, _values, result) - lexer.lex_state = :expr_beg - +def _reduce_545(val, _values, result) + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_524(val, _values, result) +def _reduce_546(val, _values, result) result = val[2] - + result end -def _reduce_525(val, _values, result) - yyerrok +def _reduce_547(val, _values, result) result = nil - debug20 30, val, result - + result end -def _reduce_526(val, _values, result) +def _reduce_548(val, _values, result) result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; - + result end -def _reduce_527(val, _values, result) - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true - +def _reduce_549(val, _values, result) + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + + result +end + +def _reduce_550(val, _values, result) + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true + result end -def _reduce_528(val, _values, result) +def _reduce_551(val, _values, result) result = args val - + result end -def _reduce_529(val, _values, result) +def _reduce_552(val, _values, result) result = args val - + result end -def _reduce_530(val, _values, result) +def _reduce_553(val, _values, result) result = args val - + result end -# reduce 531 omitted +# reduce 554 omitted -def _reduce_532(val, _values, result) +def _reduce_555(val, _values, result) result = val[1] - + result end -def _reduce_533(val, _values, result) +def _reduce_556(val, _values, result) result = nil - + result end -def _reduce_534(val, _values, result) +def _reduce_557(val, _values, result) result = args val - + result end -def _reduce_535(val, _values, result) +def _reduce_558(val, _values, result) result = args val - + result end -def _reduce_536(val, _values, result) +def _reduce_559(val, _values, result) result = args val - + result end -def _reduce_537(val, _values, result) +def _reduce_560(val, _values, result) result = args val - + result end -def _reduce_538(val, _values, result) +def _reduce_561(val, _values, result) result = args val - + result end -def _reduce_539(val, _values, result) +def _reduce_562(val, _values, result) result = args val - + result end -def _reduce_540(val, _values, result) +def _reduce_563(val, _values, result) result = args val - + result end -def _reduce_541(val, _values, result) +def _reduce_564(val, _values, result) result = args val - + result end -def _reduce_542(val, _values, result) +def _reduce_565(val, _values, result) result = args val - + result end -def _reduce_543(val, _values, result) +def _reduce_566(val, _values, result) result = args val - + result end -def _reduce_544(val, _values, result) +def _reduce_567(val, _values, result) result = args val - + result end -def _reduce_545(val, _values, result) +def _reduce_568(val, _values, result) result = args val - + result end -def _reduce_546(val, _values, result) +def _reduce_569(val, _values, result) result = args val - + result end -def _reduce_547(val, _values, result) +def _reduce_570(val, _values, result) result = args val - + result end -def _reduce_548(val, _values, result) +def _reduce_571(val, _values, result) result = args val - + result end -def _reduce_549(val, _values, result) +def _reduce_572(val, _values, result) yyerror "formal argument cannot be a constant" - + result end -def _reduce_550(val, _values, result) +def _reduce_573(val, _values, result) yyerror "formal argument cannot be an instance variable" - + result end -def _reduce_551(val, _values, result) +def _reduce_574(val, _values, result) yyerror "formal argument cannot be a global variable" - + result end -def _reduce_552(val, _values, result) +def _reduce_575(val, _values, result) yyerror "formal argument cannot be a class variable" - + result end -# reduce 553 omitted +# reduce 576 omitted -def _reduce_554(val, _values, result) +def _reduce_577(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier - + result end -# reduce 555 omitted +# reduce 578 omitted -# reduce 556 omitted +# reduce 579 omitted -def _reduce_557(val, _values, result) +def _reduce_580(val, _values, result) result = val[1] - + result end -def _reduce_558(val, _values, result) - case val[0] +def _reduce_581(val, _values, result) + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end - + result end -def _reduce_559(val, _values, result) +def _reduce_582(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item - + result end -# reduce 560 omitted +# reduce 583 omitted + +def _reduce_584(val, _values, result) + # TODO: new_kw_arg + (label, line), arg = val -def _reduce_561(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) - + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line + result end -def _reduce_562(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_585(val, _values, result) + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line - result = s(:array, s(:kwarg, identifier)) - result end -def _reduce_563(val, _values, result) - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_586(val, _values, result) + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id, expr).line(line)).line line - result = s(:array, s(:kwarg, identifier, val[1])) - result end -def _reduce_564(val, _values, result) - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar +def _reduce_587(val, _values, result) + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line - result = s(:array, s(:kwarg, identifier)) - result end -# reduce 565 omitted +# reduce 588 omitted -def _reduce_566(val, _values, result) +def _reduce_589(val, _values, result) list, _, item = val result = list << item.last - + result end -# reduce 567 omitted +# reduce 590 omitted -def _reduce_568(val, _values, result) +def _reduce_591(val, _values, result) result = args val - + result end -# reduce 569 omitted +# reduce 592 omitted + +# reduce 593 omitted -# reduce 570 omitted +def _reduce_594(val, _values, result) + name = val[1].to_sym + self.assignable name + result = :"**#{name}" -def _reduce_571(val, _values, result) - result = :"**#{val[1]}" - result end -def _reduce_572(val, _values, result) +def _reduce_595(val, _values, result) result = :"**" - + result end -def _reduce_573(val, _values, result) +def _reduce_596(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names - + result end -def _reduce_574(val, _values, result) +def _reduce_597(val, _values, result) result = self.assignable val[0], val[2] - + result end -def _reduce_575(val, _values, result) - result = s(:block, val[0]) - +def _reduce_598(val, _values, result) + optblk, = val + result = s(:block, optblk).line optblk.line + result end -def _reduce_576(val, _values, result) - result = val[0] - result << val[2] - +def _reduce_599(val, _values, result) + optarg, _, optblk = val + result = optarg + result << optblk + result end -def _reduce_577(val, _values, result) - result = s(:block, val[0]) - +def _reduce_600(val, _values, result) + opt, = val + result = s(:block, opt).line opt.line + result end -def _reduce_578(val, _values, result) +def _reduce_601(val, _values, result) result = self.block_append val[0], val[2] - + result end -# reduce 579 omitted +# reduce 602 omitted -# reduce 580 omitted +# reduce 603 omitted -def _reduce_581(val, _values, result) +def _reduce_604(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" - + result end -def _reduce_582(val, _values, result) +def _reduce_605(val, _values, result) name = :"*" self.env[name] = :lvar result = name - + result end -# reduce 583 omitted +# reduce 606 omitted -# reduce 584 omitted +# reduce 607 omitted -def _reduce_585(val, _values, result) +def _reduce_608(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym - + result end -def _reduce_586(val, _values, result) +def _reduce_609(val, _values, result) result = val[1] - + result end -def _reduce_587(val, _values, result) +def _reduce_610(val, _values, result) result = nil - + result end -# reduce 588 omitted +# reduce 611 omitted + +def _reduce_612(val, _values, result) + lexer.lex_state = EXPR_BEG -def _reduce_589(val, _values, result) - lexer.lex_state = :expr_beg - result end -def _reduce_590(val, _values, result) +def _reduce_613(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit - - result -end -def _reduce_591(val, _values, result) - result = s(:array) - result end -def _reduce_592(val, _values, result) - result = val[0] - +def _reduce_614(val, _values, result) + result = s(:array).line lexer.lineno + result end -# reduce 593 omitted +# reduce 615 omitted -def _reduce_594(val, _values, result) +# reduce 616 omitted + +def _reduce_617(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash - + result end -def _reduce_595(val, _values, result) - result = s(:array, val[0], val[2]) - +def _reduce_618(val, _values, result) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line + result end -def _reduce_596(val, _values, result) - result = s(:array, s(:lit, val[0][0].to_sym), val.last) - +def _reduce_619(val, _values, result) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line + result end -def _reduce_597(val, _values, result) +def _reduce_620(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym - result = s(:array, sym, value) - - result -end + result = s(:array, sym, value).line sym.line -def _reduce_598(val, _values, result) - raise "not yet: #{val.inspect}" - # result = s(:array, s(:lit, val[1].to_sym), val[1]) - result end -def _reduce_599(val, _values, result) - result = s(:array, s(:kwsplat, val[1])) - +def _reduce_621(val, _values, result) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line + result end -# reduce 600 omitted +# reduce 622 omitted -# reduce 601 omitted +# reduce 623 omitted -# reduce 602 omitted +# reduce 624 omitted -# reduce 603 omitted +# reduce 625 omitted -# reduce 604 omitted +# reduce 626 omitted -# reduce 605 omitted +# reduce 627 omitted -# reduce 606 omitted +# reduce 628 omitted -# reduce 607 omitted +# reduce 629 omitted -# reduce 608 omitted +# reduce 630 omitted -# reduce 609 omitted +# reduce 631 omitted -# reduce 610 omitted +# reduce 632 omitted -# reduce 611 omitted +# reduce 633 omitted -# reduce 612 omitted +# reduce 634 omitted -# reduce 613 omitted +# reduce 635 omitted -# reduce 614 omitted +# reduce 636 omitted -# reduce 615 omitted +# reduce 637 omitted -# reduce 616 omitted +# reduce 638 omitted -# reduce 617 omitted +# reduce 639 omitted -# reduce 618 omitted +# reduce 640 omitted -# reduce 619 omitted +# reduce 641 omitted -# reduce 620 omitted +# reduce 642 omitted -# reduce 621 omitted +# reduce 643 omitted -# reduce 622 omitted +# reduce 644 omitted -def _reduce_623(val, _values, result) - yyerrok +# reduce 645 omitted + +# reduce 646 omitted + +def _reduce_647(val, _values, result) + yyerrok result end -# reduce 624 omitted +# reduce 648 omitted -# reduce 625 omitted +# reduce 649 omitted -def _reduce_626(val, _values, result) - yyerrok +def _reduce_650(val, _values, result) + yyerrok result end -def _reduce_627(val, _values, result) - result = nil; +def _reduce_651(val, _values, result) + result = nil; result end diff -Nru ruby-ruby-parser-3.11.0/lib/ruby25_parser.y ruby-ruby-parser-3.15.1/lib/ruby25_parser.y --- ruby-ruby-parser-3.11.0/lib/ruby25_parser.y 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby25_parser.y 2021-01-18 16:48:25.000000000 +0000 @@ -23,35 +23,35 @@ tLABEL_END tLONELY -prechigh - right tBANG tTILDE tUPLUS - right tPOW - right tUMINUS_NUM tUMINUS - left tSTAR2 tDIVIDE tPERCENT - left tPLUS tMINUS - left tLSHFT tRSHFT - left tAMPER2 - left tPIPE tCARET - left tGT tGEQ tLT tLEQ - nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH - left tANDOP - left tOROP - nonassoc tDOT2 tDOT3 - right tEH tCOLON - left kRESCUE_MOD - right tEQL tOP_ASGN - nonassoc kDEFINED - right kNOT - left kOR kAND - nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD - nonassoc tLBRACE_ARG - nonassoc tLOWEST preclow + nonassoc tLOWEST + nonassoc tLBRACE_ARG + nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD + left kOR kAND + right kNOT + nonassoc kDEFINED + right tEQL tOP_ASGN + left kRESCUE_MOD + right tEH tCOLON + nonassoc tDOT2 tDOT3 + left tOROP + left tANDOP + nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH + left tGT tGEQ tLT tLEQ + left tPIPE tCARET + left tAMPER2 + left tLSHFT tRSHFT + left tPLUS tMINUS + left tSTAR2 tDIVIDE tPERCENT # TODO: tSTAR2 -> tMULT + right tUMINUS_NUM tUMINUS + right tPOW + right tBANG tTILDE tUPLUS +prechigh rule program: { - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG } top_compstmt { @@ -60,7 +60,8 @@ top_compstmt: top_stmts opt_terms { - result = val[0] + stmt, _ = val + result = stmt } top_stmts: none @@ -72,14 +73,6 @@ | error top_stmt top_stmt: stmt - { - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - } | klBEGIN { if (self.in_def || self.in_single > 0) then @@ -88,14 +81,40 @@ end self.env.extend } - tLCURLY top_compstmt tRCURLY + begin_block { - result = new_iter s(:preexe), nil, val[3] + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + } + + begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY + { + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt } - bodystmt: compstmt opt_rescue opt_else opt_ensure + bodystmt: compstmt opt_rescue k_else { - result = new_body val + res = _values[-2] + yyerror "else without rescue is useless" unless res + } + compstmt + opt_ensure + { + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + } + | compstmt opt_rescue opt_ensure + { + body, resc, ens = val + + result = new_body [body, resc, nil, ens] } compstmt: stmts opt_terms @@ -104,8 +123,8 @@ } stmts: none - | stmt - | stmts terms stmt + | stmt_or_begin # TODO: newline_node ? + | stmts terms stmt_or_begin { result = self.block_append val[0], val[2] } @@ -115,22 +134,30 @@ debug20 2, val, result } + stmt_or_begin: stmt + | klBEGIN + { + yyerror "BEGIN is permitted only at toplevel" + } + stmt: kALIAS fitem { - lexer.lex_state = :expr_fname - result = self.lexer.lineno + lexer.lex_state = EXPR_FNAME } fitem { - result = s(:alias, val[1], val[3]).line(val[2]) + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line } | kALIAS tGVAR tGVAR { - result = s(:valias, val[1].to_sym, val[2].to_sym) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line } | kALIAS tGVAR tBACK_REF { - result = s(:valias, val[1].to_sym, :"$#{val[2]}") + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line } | kALIAS tGVAR tNTH_REF { @@ -142,54 +169,84 @@ } | stmt kIF_MOD expr_value { - result = new_if val[2], val[0], nil + t, _, c = val + result = new_if c, t, nil } | stmt kUNLESS_MOD expr_value { - result = new_if val[2], nil, val[0] + f, _, c = val + result = new_if c, nil, f } | stmt kWHILE_MOD expr_value { - result = new_while val[0], val[2], true + e, _, c = val + result = new_while e, c, true } | stmt kUNTIL_MOD expr_value { - result = new_until val[0], val[2], true + e, _, c = val + result = new_until e, c, true } | stmt kRESCUE_MOD stmt { - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody } | klEND tLCURLY compstmt tRCURLY { + (_, line), _, stmt, _ = val + if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end - result = new_iter s(:postexe), 0, val[2] + + result = new_iter s(:postexe).line(line), 0, stmt } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } - | var_lhs tOP_ASGN command_call + | lhs tEQL mrhs + { + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + } + | mlhs tEQL mrhs_arg + { + result = new_masgn val[0], val[2] + } + | expr + + command_asgn: lhs tEQL command_rhs + { + result = new_assign val[0], val[2] + } + # | lhs tEQL command_asgn + # { + # result = new_assign val[0], val[2] + # } + | var_lhs tOP_ASGN command_rhs { result = new_op_asgn val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn1 val } - | primary_value call_op tIDENTIFIER tOP_ASGN command_call + | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } - | primary_value call_op tCONSTANT tOP_ASGN command_call + | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' @@ -197,55 +254,61 @@ end result.line = val[0].line } - | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call + | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | backref tOP_ASGN command_call + | backref tOP_ASGN command_rhs { self.backref_assign_error val[0] } - | lhs tEQL mrhs - { - result = new_assign val[0], s(:svalue, val[2]) - } - | mlhs tEQL mrhs_arg - { - result = new_masgn val[0], val[2] - } - | expr - command_asgn: lhs tEQL command_call + command_rhs: command_call =tOP_ASGN { - result = new_assign val[0], val[2] + expr, = val + result = value_expr expr } - | lhs tEQL command_asgn + | command_call kRESCUE_MOD stmt { - result = new_assign val[0], val[2] + expr, (_, line), resbody = val + + expr = value_expr expr + ary = s(:array).line line + result = new_rescue(expr, new_resbody(ary, resbody)) } + | command_asgn expr: command_call | expr kAND expr { - result = logical_op :and, val[0], val[2] + lhs, _, rhs = val + result = logical_op :and, lhs, rhs } | expr kOR expr { - result = logical_op :or, val[0], val[2] + lhs, _, rhs = val + result = logical_op :or, lhs, rhs } | kNOT opt_nl expr { - result = s(:call, val[2], :"!") + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op } | tBANG command_call { - result = s(:call, val[1], :"!") + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y } | arg @@ -254,54 +317,71 @@ result = value_expr(val[0]) } + expr_value_do: { + lexer.cond.push true + } + expr_value do + { + lexer.cond.pop + } + { + _, expr, _, _ = val + result = expr + } + command_call: command | block_command block_command: block_call - | block_call dot_or_colon operation2 command_args + | block_call call_op2 operation2 command_args { - result = new_call val[0], val[2].to_sym, val[3] + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line } cmd_brace_block: tLBRACE_ARG { - self.env.extend(:dynamic) + # self.env.extend(:dynamic) result = self.lexer.lineno } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY + brace_body tRCURLY { - result = new_iter nil, val[2], val[4] - result.line = val[1] + _, line, body, _ = val - self.env.unextend + result = body + result.line = line + + # self.env.unextend } fcall: operation { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno } command: fcall command_args =tLOWEST { - result = val[0].concat val[1].sexp_body # REFACTOR pattern + call, args = val + result = call.concat args.sexp_body } | fcall command_args cmd_brace_block { - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block - result, operation = val[2], result + result, operation = block, result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { - result = new_call val[0], val[2].to_sym, val[3], val[1] + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop } | primary_value call_op operation2 command_args cmd_brace_block { @@ -333,17 +413,19 @@ } | kYIELD command_args { - result = new_yield val[1] + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield } - | kRETURN call_args + | k_return call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) + (_, line), args = val + result = s(:break, ret_args(args)).line line } | kNEXT call_args { @@ -360,56 +442,79 @@ mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { - result = s(:masgn, s(:array, val[1])) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l } mlhs_basic: mlhs_head { - result = s(:masgn, val[0]) + head, = val + result = s(:masgn, head).line head.line } | mlhs_head mlhs_item { - result = s(:masgn, val[0] << val[1].compact) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line } | mlhs_head tSTAR mlhs_node { - result = s(:masgn, val[0] << s(:splat, val[2])) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val - result = list_append ary1, s(:splat, splat) + result = list_append ary1, s(:splat, splat).line(splat.line) result.concat ary2.sexp_body - result = s(:masgn, result) + result = s(:masgn, result).line result.line } | mlhs_head tSTAR { - result = s(:masgn, val[0] << s(:splat)) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l } | mlhs_head tSTAR tCOMMA mlhs_post { - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR mlhs_node { - result = s(:masgn, s(:array, s(:splat, val[1]))) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l } | tSTAR mlhs_node tCOMMA mlhs_post { - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR { - result = s(:masgn, s(:array, s(:splat))) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l } | tSTAR tCOMMA mlhs_post { - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l } mlhs_item: mlhs_node @@ -420,7 +525,8 @@ mlhs_head: mlhs_item tCOMMA { - result = s(:array, val[0]) + lhs, _ = val + result = s(:array, lhs).line lhs.line } | mlhs_head mlhs_item tCOMMA { @@ -429,7 +535,8 @@ mlhs_post: mlhs_item { - result = s(:array, val[0]) + item, = val + result = s(:array, item).line item.line } | mlhs_post tCOMMA mlhs_item { @@ -454,7 +561,8 @@ } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + recv, _, id = val + result = new_attrasgn recv, id } | primary_value call_op tCONSTANT { @@ -467,7 +575,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l } | tCOLON3 tCONSTANT { @@ -476,7 +587,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, nil, s(:colon3, val[1].to_sym)) + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -485,24 +599,31 @@ lhs: user_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line } | keyword_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { - result = self.aryset val[0], val[2] + lhs, _, args, _ = val + result = self.aryset lhs, args } | primary_value call_op tIDENTIFIER # REFACTOR { - result = new_attrasgn val[0], val[2], val[1] + lhs, op, id = val + result = new_attrasgn lhs, id, op } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + lhs, _, id = val + result = new_attrasgn lhs, id } | primary_value call_op tCONSTANT # REFACTOR? { @@ -510,21 +631,27 @@ } | primary_value tCOLON2 tCONSTANT { + expr, _, id = val + if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l } | tCOLON3 tCONSTANT { + _, id = val + if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -539,7 +666,8 @@ cpath: tCOLON3 cname { - result = s(:colon3, val[1].to_sym) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno } | cname { @@ -547,27 +675,32 @@ } | primary_value tCOLON2 cname { - result = s(:colon2, val[0], val[2].to_sym) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line } fname: tIDENTIFIER | tCONSTANT | tFID | op { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[0] } | reswords { - lexer.lex_state = :expr_end - result = val[0] + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym } fsym: fname | symbol fitem: fsym { - result = s(:lit, val[0].to_sym) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno } | dsym @@ -578,7 +711,7 @@ | undef_list tCOMMA { - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fitem { @@ -590,6 +723,8 @@ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 + # TODO: tUBANG dead? + | tUBANG reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE @@ -601,68 +736,72 @@ | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL - arg: lhs tEQL arg + arg: lhs tEQL arg_rhs { result = new_assign val[0], val[2] } - | lhs tEQL arg kRESCUE_MOD arg - { - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - } - | var_lhs tOP_ASGN arg + | var_lhs tOP_ASGN arg_rhs { result = new_op_asgn val } - | var_lhs tOP_ASGN arg kRESCUE_MOD arg + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) + result = new_op_asgn1 val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg + | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn2 val } - | primary_value call_op tIDENTIFIER tOP_ASGN arg + | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = new_op_asgn2 val } - | primary_value call_op tCONSTANT tOP_ASGN arg + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { - result = new_op_asgn2 val + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg + | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] } - | primary_value tCOLON2 tCONSTANT tOP_ASGN arg + | tCOLON3 tCONSTANT { - yyerror "constant re-assignment" + result = self.lexer.lineno } - | tCOLON3 tCONSTANT tOP_ASGN arg + tOP_ASGN arg_rhs { - yyerror "constant re-assignment" + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] } - | backref tOP_ASGN arg + | backref tOP_ASGN arg_rhs { - self.backref_assign_error val[0] + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end } | arg tPLUS arg @@ -691,7 +830,9 @@ } | tUMINUS_NUM simple_numeric tPOW arg { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + } | tUPLUS arg { @@ -717,22 +858,7 @@ { result = new_call val[0], :"<=>", argl(val[2]) } - | arg tGT arg - { - result = new_call val[0], :">", argl(val[2]) - } - | arg tGEQ arg - { - result = new_call val[0], :">=", argl(val[2]) - } - | arg tLT arg - { - result = new_call val[0], :"<", argl(val[2]) - } - | arg tLEQ arg - { - result = new_call val[0], :"<=", argl(val[2]) - } + | rel_expr =tCMP | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) @@ -747,15 +873,19 @@ } | arg tMATCH arg { - result = new_match val[0], val[2] + lhs, _, rhs = val + result = new_match lhs, rhs } | arg tNMATCH arg { - result = s(:not, new_match(val[0], val[2])) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line } | tBANG arg { - result = new_call val[1], :"!" + _, arg = val + result = new_call arg, :"!" + result.line arg.line } | tTILDE arg { @@ -783,14 +913,33 @@ } | kDEFINED opt_nl arg { - result = s(:defined, val[2]) + (_, line), _, arg = val + result = s(:defined, arg).line line } | arg tEH arg opt_nl tCOLON arg { - result = s(:if, val[0], val[2], val[5]) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line } | primary + relop: tGT + | tLT + | tGEQ + | tLEQ + + rel_expr: arg relop arg =tGT + { + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + } + | rel_expr relop arg =tGT + { + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + } + arg_value: arg { result = value_expr(val[0]) @@ -810,22 +959,28 @@ result = args [array_to_hash(val[0])] } + arg_rhs: arg =tOP_ASGN + | arg kRESCUE_MOD arg + { + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + } + paren_args: tLPAREN2 opt_call_args rparen { - result = val[1] + _, args, _ = val + result = args } opt_paren_args: none | paren_args opt_call_args: none - { - result = val[0] - } | call_args - { - result = val[0] - } | args tCOMMA { result = args val @@ -847,17 +1002,14 @@ | args opt_block_arg { result = call_args val - result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] + result = call_args [array_to_hash(val[0]), val[1]] } | args tCOMMA assocs opt_block_arg { - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] + result = call_args [val[0], array_to_hash(val[2]), val[3]] } | block_arg { @@ -865,18 +1017,45 @@ } command_args: { - result = lexer.cmdarg.stack.dup # TODO: smell? + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead } call_args { - lexer.cmdarg.stack.replace val[0] - result = val[1] + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args } block_arg: tAMPER arg_value { - result = s(:block_pass, val[1]) + _, arg = val + result = s(:block_pass, arg).line arg.line } opt_block_arg: tCOMMA block_arg @@ -887,19 +1066,27 @@ args: arg_value { - result = s(:array, val[0]) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno } | tSTAR arg_value { - result = s(:array, s(:splat, val[1])) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line } | args tCOMMA arg_value { - result = self.list_append val[0], val[2] + args, _, id = val + result = self.list_append args, id } | args tCOMMA tSTAR arg_value { - result = self.list_append val[0], s(:splat, val[3]) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) } mrhs_arg: mrhs @@ -917,11 +1104,14 @@ } | args tCOMMA tSTAR arg_value { - result = self.arg_concat val[0], val[3] + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat } | tSTAR arg_value { - result = s(:splat, val[1]) + _, arg = val + result = s(:splat, arg).line arg.line } primary: literal @@ -936,58 +1126,65 @@ | backref | tFID { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call nil, msg.to_sym } - | kBEGIN + | k_begin { + lexer.cmdarg.push false result = self.lexer.lineno } - bodystmt kEND + bodystmt k_end { - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] + lexer.cmdarg.pop + result = new_begin val } - | tLPAREN_ARG rparen + | tLPAREN_ARG { - debug20 13, val, result + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno } - | tLPAREN_ARG + rparen { - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these + _, line, _ = val + result = s(:begin).line line } - expr + | tLPAREN_ARG + stmt { - lexer.lex_state = :expr_endarg + lexer.lex_state = EXPR_ENDARG } rparen { - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt } | tLPAREN compstmt tRPAREN { - result = val[1] || s(:nil) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true } | primary_value tCOLON2 tCONSTANT { - result = s(:colon2, val[0], val[2].to_sym) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line } | tCOLON3 tCONSTANT { - result = s(:colon3, val[1].to_sym) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno } - | tLBRACK aref_args tRBRACK + | tLBRACK { result = lexer.lineno } aref_args tRBRACK { - result = val[1] || s(:array) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args + result.line line } | tLBRACE { @@ -997,9 +1194,10 @@ { result = new_hash val } - | kRETURN + | k_return { - result = s(:return) + (_, line), = val + result = s(:return).line line } | kYIELD tLPAREN2 call_args rparen { @@ -1015,11 +1213,14 @@ } | kDEFINED opt_nl tLPAREN2 expr rparen { - result = s(:defined, val[3]) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line } | kNOT tLPAREN2 expr rparen { - result = s(:call, val[2], :"!") + _, _, lhs, _ = val + result = new_call lhs, :"!" } | kNOT tLPAREN2 rparen { @@ -1027,11 +1228,11 @@ } | fcall brace_block { - oper, iter = val[0], val[1] - call = oper # FIX + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line + # FIX: probably not: call.line = iter.line } | method_call | method_call brace_block @@ -1045,61 +1246,42 @@ { result = val[1] # TODO: fix lineno } - | kIF expr_value then compstmt if_tail kEND - { - result = new_if val[1], val[3], val[4] - } - | kUNLESS expr_value then compstmt opt_else kEND - { - result = new_if val[1], val[4], val[3] - } - | kWHILE - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_if expr_value then compstmt if_tail k_end { - result = new_while val[5], val[2], true + _, c, _, t, f, _ = val + result = new_if c, t, f } - | kUNTIL + | k_unless expr_value then compstmt opt_else k_end { - lexer.cond.push true + _, c, _, t, f, _ = val + result = new_if c, f, t } - expr_value do + | k_while expr_value_do compstmt k_end { - lexer.cond.pop + _, cond, body, _ = val + result = new_while body, cond, true } - compstmt kEND + | k_until expr_value_do compstmt k_end { - result = new_until val[5], val[2], true + _, cond, body, _ = val + result = new_until body, cond, true } - | kCASE expr_value opt_terms case_body kEND + | k_case expr_value opt_terms case_body k_end { (_, line), expr, _, body, _ = val result = new_case expr, body, line } - | kCASE opt_terms case_body kEND + | k_case opt_terms case_body k_end { (_, line), _, body, _ = val result = new_case nil, body, line } - | kFOR for_var kIN - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_for for_var kIN expr_value_do compstmt k_end { - result = new_for val[4], val[1], val[7] + _, var, _, iter, body, _ = val + result = new_for iter, var, body } - | kCLASS + | k_class { result = self.lexer.lineno } @@ -1111,13 +1293,13 @@ end self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kCLASS tLSHFT + | k_class tLSHFT { result = self.lexer.lineno } @@ -1132,13 +1314,13 @@ self.in_single = 0 self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kMODULE + | k_module { result = self.lexer.lineno } @@ -1150,74 +1332,90 @@ self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kDEF fname + | k_def fname { - result = [self.in_def, self.lexer.cmdarg.stack.dup] + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt { result = lexer.lineno } k_end { - in_def, cmdarg = val[2] + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body } - | kDEF singleton dot_or_colon + | k_def singleton dot_or_colon { - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fname { - self.in_single += 1 + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt k_end { - line, cmdarg = val[5] - result = new_defs val - result[3].line line + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body } | kBREAK { - result = s(:break) + (_, line), = val + result = s(:break).line line } | kNEXT { - result = s(:next) + (_, line), = val + result = s(:next).line line } | kREDO { - result = s(:redo) + (_, line), = val + result = s(:redo).line line } | kRETRY { - result = s(:retry) + (_, line), = val + result = s(:retry).line line } primary_value: primary @@ -1236,7 +1434,15 @@ k_class: kCLASS k_module: kMODULE k_def: kDEF + k_do: kDO + k_do_block: kDO_BLOCK + k_rescue: kRESCUE + k_ensure: kENSURE + k_when: kWHEN + k_else: kELSE + k_elsif: kELSIF k_end: kEND + k_return: kRETURN then: term | kTHEN @@ -1246,9 +1452,11 @@ | kDO_COND if_tail: opt_else - | kELSIF expr_value then compstmt if_tail + | k_elsif expr_value then compstmt if_tail { - result = s(:if, val[1], val[3], val[4]) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line } opt_else: none @@ -1271,7 +1479,9 @@ f_marg_list: f_marg { - result = s(:array, val[0]) + sym, = val + + result = s(:array, sym).line lexer.lineno } | f_marg_list tCOMMA f_marg { @@ -1345,7 +1555,9 @@ } | f_block_arg { - result = call_args val + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line } opt_block_args_tail: tCOMMA block_args_tail @@ -1376,7 +1588,7 @@ } | f_arg tCOMMA { - result = args val + result = args(val) << nil } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { @@ -1417,18 +1629,22 @@ opt_block_param: none { result = 0 } | block_param_def + { + self.lexer.command_start = true + } block_param_def: tPIPE opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } | tOROP { - self.lexer.command_start = true - result = s(:args) + result = s(:args).line lexer.lineno } | tPIPE block_param opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } @@ -1449,26 +1665,33 @@ bvar: tIDENTIFIER { - result = s(:shadow, val[0].to_sym) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line } | f_bad_arg lambda: { self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } - f_larglist lambda_body + f_larglist + { + lexer.cmdarg.push false + } + lambda_body { - lpar, args, body = val + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend + result.line = line + self.env.unextend # TODO: dynapush & dynapop } f_larglist: tLPAREN2 f_args opt_bv_decl rparen @@ -1485,28 +1708,15 @@ { result = val[1] } - | kDO_LAMBDA compstmt kEND + | kDO_LAMBDA bodystmt kEND { result = val[1] } - do_block: kDO_BLOCK - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt kEND + do_block: k_do_block do_body kEND { - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] - - self.env.unextend + (_, line), iter, _ = val + result = iter.line line } block_call: command do_block @@ -1520,14 +1730,16 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] + cmd, blk = val + + result = blk + result.insert 1, cmd } - | block_call dot_or_colon operation2 opt_paren_args + | block_call call_op2 operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } - | block_call dot_or_colon operation2 opt_paren_args brace_block + | block_call call_op2 operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val @@ -1536,7 +1748,7 @@ result = iter2 } - | block_call dot_or_colon operation2 command_args do_block + | block_call call_op2 operation2 command_args do_block { iter1, _, name, args, iter2 = val @@ -1552,8 +1764,10 @@ } paren_args { - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno } | primary_value call_op operation2 opt_paren_args { @@ -1581,7 +1795,7 @@ } | kSUPER { - result = s(:zsuper) + result = s(:zsuper).line lexer.lineno } | primary_value tLBRACK2 opt_call_args rbracket { @@ -1593,39 +1807,55 @@ self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + brace_body tRCURLY { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - _, line, args, _, body, _ = val + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend } - | kDO + | k_do { self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + do_body kEND { - result = nil # self.env.dynamic.keys + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend } - compstmt kEND + + brace_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { result = lexer.cmdarg.store(false) } + opt_block_param compstmt { - _, line, args, _, body, _ = val + line, cmdarg, param, cmpstmt = val - result = new_iter nil, args, body - result.line = line + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + } + do_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { lexer.cmdarg.push false } + opt_block_param + bodystmt + { + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop self.env.unextend } - case_body: kWHEN + case_body: k_when { result = self.lexer.lineno } @@ -1638,12 +1868,12 @@ cases: opt_else | case_body - opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue + opt_rescue: k_rescue exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) @@ -1656,7 +1886,8 @@ exc_list: arg_value { - result = s(:array, val[0]) + arg, = val + result = s(:array, arg).line arg.line } | mrhs | none @@ -1667,28 +1898,33 @@ } | none - opt_ensure: kENSURE compstmt + opt_ensure: k_ensure compstmt { - _, body = val + (_, line), body = val - result = body || s(:nil) + result = body || s(:nil).line(line) } | none literal: numeric { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | symbol { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | dsym strings: string { - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str } string: tCHAR @@ -1703,7 +1939,11 @@ string1: tSTRING_BEG string_contents tSTRING_END { - result = val[1] + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str } | tSTRING { @@ -1712,7 +1952,8 @@ xstring: tXSTRING_BEG xstring_contents tSTRING_END { - result = new_xstring val[1] + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? } regexp: tREGEXP_BEG regexp_contents tREGEXP_END @@ -1722,7 +1963,7 @@ words: tWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tWORDS_BEG word_list tSTRING_END { @@ -1746,25 +1987,28 @@ symbols: tSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } - | tSYMBOLS_BEG symbol_list tSTRING_END + | tSYMBOLS_BEG { result = lexer.lineno } symbol_list tSTRING_END { - result = val[1] + _, line, list, _, = val + list.line = line + result = list } symbol_list: none { - result = new_symbol_list + result = new_symbol_list.line lexer.lineno } | symbol_list word tSPACE { - result = val[0].dup << new_symbol_list_entry(val) + list, * = val + result = list.dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tQWORDS_BEG qword_list tSTRING_END { @@ -1773,7 +2017,7 @@ qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno # FIX } | tQSYMBOLS_BEG qsym_list tSTRING_END { @@ -1800,11 +2044,12 @@ string_contents: none { - result = s(:str, "") + result = s(:str, "").line lexer.lineno } | string_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } xstring_contents: none @@ -1813,7 +2058,8 @@ } | xstring_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } regexp_contents: none @@ -1822,7 +2068,8 @@ } | regexp_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } string_content: tSTRING_CONTENT @@ -1834,42 +2081,46 @@ result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? + lexer.lex_state = EXPR_BEG } string_dvar { - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value + lexer.lex_state = EXPR_BEG } - compstmt tRCURLY + compstmt + tSTRING_DEND { - # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -1879,24 +2130,24 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end } - string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } - | tIVAR { result = s(:ivar, val[0].to_sym) } - | tCVAR { result = s(:cvar, val[0].to_sym) } + string_dvar: tGVAR { result = s(:gvar, val[0].to_sym).line lexer.lineno } + | tIVAR { result = s(:ivar, val[0].to_sym).line lexer.lineno } + | tCVAR { result = s(:cvar, val[0].to_sym).line lexer.lineno } | backref symbol: tSYMBEG sym { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[1].to_sym } | tSYMBOL @@ -1908,18 +2159,19 @@ dsym: tSYMBEG xstring_contents tSTRING_END { - lexer.lex_state = :expr_end - result = val[1] + _, result, _ = val - result ||= s(:str, "") + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end @@ -1942,19 +2194,20 @@ | tCONSTANT | tCVAR -keyword_variable: kNIL { result = s(:nil) } - | kSELF { result = s(:self) } - | kTRUE { result = s(:true) } - | kFALSE { result = s(:false) } - | k__FILE__ { result = s(:str, self.file) } - | k__LINE__ { result = s(:lit, lexer.lineno) } +keyword_variable: kNIL { result = s(:nil).line lexer.lineno } + | kSELF { result = s(:self).line lexer.lineno } + | kTRUE { result = s(:true).line lexer.lineno } + | kFALSE { result = s(:false).line lexer.lineno } + | k__FILE__ { result = s(:str, self.file).line lexer.lineno } + | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno } | k__ENCODING__ { + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end } @@ -1979,43 +2232,42 @@ debug20 29, val, result } - backref: tNTH_REF { result = s(:nth_ref, val[0]) } - | tBACK_REF { result = s(:back_ref, val[0]) } + backref: tNTH_REF { result = s(:nth_ref, val[0]).line lexer.lineno } + | tBACK_REF { result = s(:back_ref, val[0]).line lexer.lineno } - superclass: term - { - result = nil - } - | tLT + superclass: tLT { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG + lexer.command_start = true } expr_value term { result = val[2] } - | error term + | none { - yyerrok result = nil - debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; } - | f_args term - { - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true + | { + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + } + f_args term + { + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg @@ -2138,12 +2390,13 @@ f_arg: f_arg_item { - case val[0] + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" @@ -2156,7 +2409,7 @@ if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item @@ -2166,38 +2419,42 @@ f_kw: f_label arg_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? + # TODO: new_kw_arg + (label, line), arg = val + identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line } | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } f_block_kw: f_label primary_value { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + result = s(:array, s(:kwarg, id, expr).line(line)).line line } | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } f_block_kwarg: f_block_kw @@ -2218,7 +2475,9 @@ f_kwrest: kwrest_mark tIDENTIFIER { - result = :"**#{val[1]}" + name = val[1].to_sym + self.assignable name + result = :"**#{name}" } | kwrest_mark { @@ -2238,17 +2497,20 @@ f_block_optarg: f_block_opt { - result = s(:block, val[0]) + optblk, = val + result = s(:block, optblk).line optblk.line } | f_block_optarg tCOMMA f_block_opt { - result = val[0] - result << val[2] + optarg, _, optblk = val + result = optarg + result << optblk } f_optarg: f_opt { - result = s(:block, val[0]) + opt, = val + result = s(:block, opt).line opt.line } | f_optarg tCOMMA f_opt { @@ -2293,7 +2555,7 @@ singleton: var_ref | tLPAREN2 { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG } expr rparen { @@ -2302,14 +2564,11 @@ result.sexp_type == :lit } - assoc_list: none # [!nil] + assoc_list: none { - result = s(:array) - } - | assocs trailer # [!nil] - { - result = val[0] + result = s(:array).line lexer.lineno } + | assocs trailer assocs: assoc | assocs tCOMMA assoc @@ -2323,26 +2582,27 @@ assoc: arg_value tASSOC arg_value { - result = s(:array, val[0], val[2]) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line } - | tLABEL opt_nl arg_value + | tLABEL arg_value { - result = s(:array, s(:lit, val[0][0].to_sym), val.last) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line } | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym - result = s(:array, sym, value) - } - | tSYMBOL arg_value - { - raise "not yet: #{val.inspect}" - # result = s(:array, s(:lit, val[1].to_sym), val[1]) + result = s(:array, sym, value).line sym.line } | tDSTAR arg_value { - result = s(:array, s(:kwsplat, val[1])) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line } operation: tIDENTIFIER | tCONSTANT | tFID @@ -2350,7 +2610,11 @@ operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT - | tLONELY + | tLONELY # TODO: rename tANDDOT? + + call_op2: call_op + | tCOLON2 + opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN @@ -2370,6 +2634,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: diff -Nru ruby-ruby-parser-3.11.0/lib/ruby26_parser.rb ruby-ruby-parser-3.15.1/lib/ruby26_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby26_parser.rb 1970-01-01 00:00:00.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby26_parser.rb 2021-01-18 16:48:25.000000000 +0000 @@ -0,0 +1,7224 @@ +# +# DO NOT MODIFY!!!! +# This file is automatically generated by Racc 1.5.0 +# from Racc grammar file "". +# + +require 'racc/parser.rb' +class Ruby26Parser < RubyParser::Parser + + +require "ruby_lexer" +require "ruby_parser_extras" +include RubyLexer::State::Values + +# :stopdoc: + +# Local Variables: ** +# racc-token-length-max:14 ** +# End: ** +##### State transition tables begin ### + +clist = [ +'-631,285,285,-116,587,-115,285,-631,-631,-631,-116,-110,832,-631,-631', +'590,-631,-539,861,-104,-110,832,235,236,-539,-631,1046,285,-102,273', +'274,231,-111,-113,-94,236,-631,-631,281,-631,-631,-631,-631,-631,992', +'-109,831,-114,598,597,-80,-101,-108,-103,763,831,509,-111,236,-115,850', +'602,602,-108,272,271,851,-631,-631,-631,-631,-631,-631,-631,-631,-631', +'-631,-631,-631,-631,-631,-113,591,-631,-631,-631,-104,676,287,287,235', +'-631,-438,287,-631,-102,232,225,226,-631,480,-631,602,-631,-631,-631', +'-631,-631,-631,-631,-106,-631,-631,-631,287,-107,-101,-116,-101,-627', +'-103,-104,-116,860,-104,-628,-631,-631,-306,-103,-102,-631,-112,-102', +'-110,-306,-306,-306,-631,-110,-104,-306,-306,-631,-306,-112,-111,-113', +'602,-102,-100,-111,-113,-101,128,-103,-101,-99,-103,127,602,-114,-102', +'-109,-306,-306,-114,-306,-306,-306,-306,-306,-101,-115,-103,128,128', +'-108,-115,967,127,127,-108,-112,-114,651,-104,236,225,226,225,226,225', +'226,-213,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306', +'-306,-306,479,-627,-306,-306,-306,632,675,128,637,128,-306,648,127,-306', +'127,632,106,107,-306,1004,-306,95,-306,-306,-306,-306,-306,-306,-306', +'96,-306,632,-306,106,107,729,1005,-112,728,650,-627,-628,-112,-115,-529', +'-306,-306,-631,-306,670,-306,-529,824,128,-631,-631,-631,-306,127,477', +'-631,-631,-306,-631,-114,128,634,633,-109,236,127,236,-631,-109,647', +'-625,634,633,630,-103,-105,478,729,-631,-631,731,-631,-631,-631,-631', +'-631,-104,634,633,652,108,109,703,887,582,609,579,578,577,-532,580,1017', +'-113,823,632,-113,-532,108,109,-631,-631,-631,-631,-631,-631,-631,-631', +'-631,-631,-631,-631,-631,-631,-532,231,-631,-631,-631,427,676,-532,778', +'-544,-631,-116,-625,-631,-543,632,-532,780,-631,632,-631,920,-631,-631', +'-631,-631,-631,-631,-631,422,-631,-631,-631,582,-625,579,578,577,-111', +'580,670,-624,634,633,725,-631,-631,-529,-631,1015,-631,793,598,597,-529', +'-529,-529,-631,587,-529,-529,-529,-631,-529,-112,-532,232,-109,725,590', +'787,-529,-108,-529,-529,-529,634,633,405,-110,634,633,640,-529,-529', +'913,-529,-529,-529,-529,-529,810,-541,-538,-529,225,226,-542,-113,-541', +'-538,-529,598,597,-542,632,-624,402,-541,400,-529,880,669,-542,-529', +'-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,-624', +'810,-529,-529,-529,-101,-529,-529,591,1035,-529,233,128,-529,-529,397', +'-529,127,-529,632,-529,-110,-529,-529,-529,-529,-529,-529,-529,-541', +'-529,-529,-529,1038,-542,850,128,231,634,633,796,127,-111,632,613,-529', +'-529,-529,-529,669,-529,-213,-529,611,-543,128,-540,-529,-306,-110,127', +'-537,-529,-540,-529,-306,-306,-306,-537,-116,-306,-306,-306,582,-306', +'579,578,577,587,580,634,633,635,-534,-306,-306,-306,128,373,590,-534', +'-102,127,-106,-306,-306,-99,-306,-306,-306,-306,-306,232,231,634,633', +'630,-111,231,-115,541,585,-108,775,1044,230,-544,776,233,539,595,594', +'598,597,228,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306', +'-306,-306,236,-535,-306,-306,-306,-536,826,-306,-535,1047,-306,955,-536', +'-306,-306,955,-306,591,-306,-100,-306,-107,-306,-306,-306,-306,-306', +'-306,-306,232,-306,128,-306,955,232,-109,127,-116,582,1052,579,578,577', +'587,580,-306,-306,-306,-306,627,-306,1017,-306,231,590,339,628,-306', +'-532,740,475,1061,-306,1063,-114,-532,-532,-532,1065,476,-532,-532,-532', +'1067,-532,582,585,579,578,577,256,580,-532,1067,-532,-532,-532,598,597', +'231,729,-631,722,731,-532,-532,662,-532,-532,-532,-532,-532,338,-306', +'276,660,729,231,1017,731,-306,725,253,749,1043,-628,255,254,232,-306', +'725,591,752,1041,227,-532,-532,-532,-532,-532,-532,-532,-532,-532,-532', +'-532,-532,-532,-532,225,226,-532,-532,-532,-631,-532,-532,883,887,-532', +'-628,-631,-532,-532,232,-532,-627,-532,256,-532,-631,-532,-532,-532', +'-532,-532,-532,-532,-306,-532,424,-532,232,883,887,426,425,582,-631', +'579,578,577,587,580,-532,-532,-532,-532,-627,-532,253,-532,231,590,255', +'254,-532,-306,236,1037,224,-532,223,-532,-306,-306,-306,222,780,-631', +'-306,-306,955,-306,-350,585,1008,1017,579,578,577,-350,580,1090,595', +'594,598,597,-307,1067,-350,1067,1067,-306,-306,-307,-306,-306,-306,-306', +'-306,124,-307,236,-307,1067,-297,231,-94,-307,706,236,236,-297,551,236', +'687,232,-307,554,591,717,-297,476,-306,-306,-306,-306,-306,-306,-306', +'-306,-306,-306,-306,-306,-306,-306,-306,-350,-306,-306,-306,718,675', +'-306,722,725,-306,236,-628,-306,732,-307,-306,733,-306,524,-306,737', +'-306,-306,-306,-306,-306,-306,-306,-307,-306,740,-306,-297,232,231,741', +'1008,743,579,578,577,1037,580,745,-306,-306,-631,-105,747,-306,780,755', +'756,-631,-631,-631,-306,757,-631,-631,-631,-306,-631,-114,-306,131,132', +'133,134,135,759,-631,-631,-631,-631,908,909,725,725,910,122,123,-631', +'-631,609,-631,-631,-631,-631,-631,582,725,579,578,577,256,580,782,256', +'232,787,582,256,579,578,577,797,580,131,132,133,134,135,-631,-631,-631', +'-631,-631,-631,-631,-631,-631,-631,-631,-631,-631,-631,798,749,-631', +'-631,-631,256,825,-631,256,-280,-631,680,749,-631,-631,290,-631,256', +'-631,811,-631,752,-631,-631,-631,-631,-631,-631,-631,668,-631,-631,-631', +'266,267,667,236,253,509,663,509,255,254,251,252,-631,-631,-631,-631', +'253,-631,259,-631,255,254,251,252,-631,-446,257,659,258,-631,236,-112', +'-446,-446,-446,828,276,-446,-446,-446,582,-446,579,578,577,587,580,658', +'837,839,-446,-446,-446,522,524,-279,590,656,717,236,649,-446,-446,290', +'-446,-446,-446,-446,-446,290,717,646,643,582,256,579,578,577,585,580', +'582,639,579,578,577,236,580,595,594,598,597,878,-446,-446,-446,-446', +'-446,-446,-446,-446,-446,-446,-446,-446,-446,-446,236,256,-446,-446', +'-446,749,887,-446,725,290,-446,236,749,-446,-446,615,-446,591,-446,614', +'-446,960,-446,-446,-446,-446,-446,-446,-446,415,-446,-446,-446,253,609', +'236,256,255,254,251,252,914,-281,236,549,-446,-446,-653,-446,545,-446', +'919,3,290,-653,-653,-653,-446,236,-653,-653,-653,-446,-653,582,293,579', +'578,577,587,580,542,-653,-653,131,132,133,134,135,256,590,936,717,-653', +'-653,-279,-653,-653,-653,-653,-653,941,256,535,534,266,267,131,132,133', +'134,135,585,946,236,740,949,951,266,267,953,253,955,598,597,255,254', +'251,252,955,236,961,725,236,253,-653,259,-633,255,254,251,252,-653,-79', +'-633,-633,-633,290,-653,-633,-633,-633,725,-633,725,256,524,591,236', +'522,519,725,-633,-633,-633,-633,236,979,-282,-653,-653,266,267,-633', +'-633,290,-633,-633,-633,-633,-633,980,740,-653,983,986,988,253,-653', +'259,990,255,254,251,252,-653,,257,,258,-653,,,,-633,-633,-633,-633,-633', +'-633,-633,-633,-633,-633,-633,-633,-633,-633,,,-633,-633,-633,,,-633', +',,-633,,,-633,-633,,-633,,-633,,-633,,-633,-633,-633,-633,-633,-633', +'-633,,-633,-633,-633,582,,579,578,577,587,580,,,,,,-633,-633,-633,-633', +'590,-633,-632,-633,,,,,-633,-632,-632,-632,,-633,-632,-632,-632,,-632', +'256,,,585,,,,,-632,-632,-632,-632,,,598,597,266,267,,-632,-632,,-632', +'-632,-632,-632,-632,582,,579,578,577,253,580,259,,255,254,251,252,,582', +',579,578,577,,580,591,,-632,-632,-632,-632,-632,-632,-632,-632,-632', +'-632,-632,-632,-632,-632,,749,-632,-632,-632,,,-632,,,-632,,,-632,-632', +'749,-632,,-632,,-632,,-632,-632,-632,-632,-632,-632,-632,,-632,-632', +'-632,582,,579,578,577,587,580,,,,,,-632,-632,-632,-632,590,-632,-653', +'-632,,,,,-632,-653,-653,-653,,-632,-653,-653,-653,582,-653,579,578,577', +'585,580,,,,-653,-653,-653,,595,594,598,597,,,,-653,-653,,-653,-653,-653', +'-653,-653,,,,,,,,,,749,,,,,,,,,,,,591,,-653,-653,-653,-653,-653,-653', +'-653,-653,-653,-653,-653,-653,-653,-653,,,-653,-653,-653,,,-653,,290', +'-653,,,-653,-653,,-653,,-653,,-653,,-653,-653,-653,-653,-653,-653,-653', +',-653,-653,-653,,,,,,,,,,,,,-653,-653,-298,-653,,-653,,,,-298,-298,-298', +'-653,,-298,-298,-298,-653,-298,,,,,,,,,,-298,-298,-298,,,,,,,,-298,-298', +',-298,-298,-298,-298,-298,,,,,,,,,,,,,,,,,,,,,,,,-298,-298,-298,-298', +'-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,,,-298,-298,-298,', +',-298,,,-298,,,-298,-298,,-298,,-298,,-298,,-298,-298,-298,-298,-298', +'-298,-298,,-298,,-298,582,,579,578,577,587,580,,,,,,-298,-298,-298,-298', +'590,-298,-315,-298,,,,,-298,-315,-315,-315,,-298,-315,-315,-315,,-315', +',,,585,,,,,,-315,-315,,595,594,598,597,,,,-315,-315,,-315,-315,-315', +'-315,-315,,,,,,,,,,,,,,,,,,,,,,591,,-315,-315,-315,-315,-315,-315,-315', +'-315,-315,-315,-315,-315,-315,-315,,,-315,-315,-315,,,-315,,293,-315', +',,-315,-315,,-315,,-315,,-315,,-315,-315,-315,-315,-315,-315,-315,,-315', +',-315,,,,,,,,,,,,,-315,-315,,-315,,-315,8,85,86,87,12,78,-315,,,79,80', +'-315,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,', +',,,664,11,49,10,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,', +',266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271', +'257,23,258,,,,103,95,97,98,99,101,,,,96,104,,270,,-254,,,66,,,93,100', +'102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,664,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263', +'273,274,268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38', +'253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101', +',,,96,104,,270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266', +'267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257', +'23,258,,,,103,95,97,98,99,101,,,,96,104,236,270,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,249,250,,,266,267,,43,,,316,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266', +'267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257', +'23,258,,,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102,,,108', +'109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273,274', +'268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259', +'48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104', +',270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +'256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102,,,108,109', +'312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,256,260,261,262,263,273,274,268,269', +'264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255', +'254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,270', +',,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256', +'-654,-654,-654,-654,273,274,,,-654,-654,,,,,,266,267,,43,,,36,,,62,63', +',,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,8,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,11,49,10,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,256,260,261,262,263,273,274,268,269,264,265,,-654,-654', +',,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272', +'271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,-654,-654,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,256,-654,-654,-654,-654,273,274,,,-654,-654,,,,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,256,260,261,262,263,273,274,268,,264,265', +',,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272', +'271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,-654,-654,-654,-654', +'273,274,,,-654,-654,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259', +'48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256', +'-654,-654,-654,-654,273,274,,,-654,-654,,,,,,266,267,,43,,,36,,,62,63', +',,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,', +'106,107,,45,46,44,256,260,261,262,263,273,274,,,264,265,,,,,,266,267', +',43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23', +'258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109', +'312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,256,-654,-654,-654,-654,273,274,,,-654', +'-654,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251', +'252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256,-654,-654,-654', +'-654,273,274,,,-654,-654,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,43,,,316,,,62,63,,,64,,38,,,,48,,,,,,,,23,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,', +'38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43', +',,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'316,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,700,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,', +',,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331', +'332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,', +',,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302', +',300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,', +',49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334', +'116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,320', +',,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,247,,,62,63', +',,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,337,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,', +'247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,', +',,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,', +',83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,', +',,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,128,,,,,127,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,367,,,36,,,62,63', +',,64,,38,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77', +',,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,994,,,247', +',,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,415,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,', +',83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,', +',,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,', +',62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,415,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,432,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,432,,', +',48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,', +',,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,', +',,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +'236,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,', +'335,,,,,,,,,,,,,,,,,,,,994,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48', +',,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,', +',49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,236,,,,,,66,,306,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +'305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,', +',,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,247,,,62,63,,,64,,,,,,,,,,', +',,,,,,,,103,95,97,98,99,101,,,,96,104,,,,537,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325', +',,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,554,,62,63,,,64', +',,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,', +'247,,,62,63,,,64,,302,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96', +'104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49', +',,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305', +'114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,', +',,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120', +'119,121,616,60,112,111,617,,114,122,123,,106,107,,,,335,,,,,,,,,,,,', +',,,,,,,618,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'329,,,120,119,121,616,60,112,111,617,,114,122,123,,106,107,,,,335,,', +',,,,,,,,,,,,,,,,,618,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,,,48,,,,,', +',,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,', +',,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334', +'116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',432,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77', +',,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,', +',,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,', +',,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104', +',,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,', +',,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,300,,48,,,,,,,,246,,,,,103', +'303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62', +'63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,', +'66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99', +'101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,802', +',,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325', +',,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,300,,48', +',,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104', +',,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,', +'335,,,,,,,,,,,,,,,,,,,,1001,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,189,200,190,213,186,206,196,195', +'216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208', +'215,210,382,381,383,380,185,204,203,,,,,,184,191,182,183,377,378,379', +'375,141,112,111,376,,114,,,,,,,173,174,,169,151,152,153,160,157,159', +',,154,155,,,,175,176,161,162,,,,,,389,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,,,,,,,,170,,,,,178,189', +'200,190,213,186,206,196,195,216,217,211,194,193,188,214,218,219,198', +'187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203,', +',,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169,151', +'152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165', +',150,172,168,167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,,104', +',,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211,194', +'193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209,202', +'212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140,', +',,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161', +'162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,103,,,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196', +'195,216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192', +',,,208,215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179', +'180,181,139,141,412,411,140,,413,,,,,,,173,174,,169,151,152,153,160', +'157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,,,,,,,,170,,,,,178', +'189,200,190,213,186,206,196,195,216,217,211,194,193,188,214,218,219', +'198,187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203', +',,,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,', +'104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211', +'194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209', +'202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140', +',,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161', +'162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,,,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195', +'216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208', +'215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181', +'139,141,138,,140,,,,,,,,,173,174,,169,151,152,153,160,157,159,,,154', +'155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,103,,,,,,,,,,104,,507,459,,,508,,,170,,,,', +'178,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,462,466,,,461,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,455,459,,,456', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,894,466,,,895,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,', +',807,466,,,806,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,', +'154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,681,459,,,682,,,,,,170,,', +'173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,683,466,,,684,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,804,459,,,805', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,713,466,,,714,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,582,177,579,578', +'577,587,580,,,,,507,459,,,508,590,,,,,170,,,173,174,178,169,151,152', +'153,160,157,159,,,154,155,585,,,175,176,161,162,,,,,598,597,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,591,683', +'466,,,684,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,,,,,,,,,,681,459,,,682,,,,,,170,,,173,174', +'178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290', +',,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,', +',,,,,,,710,459,,,711,,,,,,170,,,173,174,178,169,151,152,153,160,157', +'159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,,,,,,,,,,772,466,,,773,,,,,,170', +',,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,770,459,,,771,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,1071,466,,,1070', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,1074,459,,,1075,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,582,,579', +'578,577,587,580,,,1076,466,,,1077,,,590,,,170,,,173,174,178,169,151', +'152,153,160,157,159,,,154,155,,,585,175,176,161,162,,,,,,290,598,597', +',,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,582,177,579', +'578,577,587,580,,,,,,591,,,,590,,,,,170,,,,582,178,579,578,577,587,580', +',,,,,,585,,582,590,579,578,577,587,580,595,594,598,597,,,,,582,590,579', +'578,577,587,580,,585,,,,,,,,590,,,598,597,,,585,568,,,,591,,,,595,594', +'598,597,,,585,582,,579,578,577,587,580,,595,594,598,597,,,591,582,590', +'579,578,577,587,580,,,,,,,,591,582,590,579,578,577,587,580,,585,,,,', +',591,,590,,,598,597,,,585,582,,579,578,577,587,580,,,,598,597,,,585', +'582,590,579,578,577,587,580,,,,598,597,,,591,582,590,579,578,577,587', +'580,,585,,,,,,591,,590,595,594,598,597,,,585,,,,,,591,,,595,594,598', +'597,,,585,582,,579,578,577,587,580,,595,594,598,597,,,591,,590,,,,,', +',,,,,,,591,,,,,,,236,,585,,,,,,591,,,,,598,597,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,591' ] + racc_action_table = arr = ::Array.new(26358, nil) + idx = 0 + clist.each do |str| + str.split(',', -1).each do |i| + arr[idx] = i.to_i unless i.empty? + idx += 1 + end + end + +clist = [ +'462,690,65,1002,980,614,330,462,462,462,368,892,688,462,462,980,462', +'377,735,711,1088,838,22,1006,377,462,1006,29,710,47,47,27,1074,1075', +'705,930,462,462,27,462,462,462,462,462,931,365,688,1077,980,980,705', +'844,364,713,604,838,282,770,22,1044,721,964,891,998,47,47,721,462,462', +'462,462,462,462,462,462,462,462,462,462,462,462,771,980,462,462,462', +'711,462,690,65,248,462,29,330,462,710,27,790,790,462,244,462,357,462', +'462,462,462,462,462,462,614,462,462,462,29,368,892,1002,844,713,713', +'711,1002,735,711,1077,462,462,806,462,710,462,1076,710,1088,806,806', +'806,462,1088,711,806,806,462,806,462,1074,1075,940,710,365,1074,1075', +'844,604,713,844,364,713,604,356,1077,770,999,806,806,1077,806,806,806', +'806,806,844,1044,713,964,891,998,1044,891,964,891,998,772,773,406,771', +'790,720,720,471,471,784,784,477,806,806,806,806,806,806,806,806,806', +'806,806,806,806,806,243,1076,806,806,806,395,806,357,395,5,806,403,357', +'806,5,526,335,335,806,944,806,92,806,806,806,806,806,806,806,92,806', +'408,806,44,44,560,945,1076,560,406,772,773,1076,477,375,806,806,807', +'806,456,806,375,682,940,807,807,807,806,940,241,807,807,806,807,806', +'356,395,395,999,720,356,471,807,999,403,617,526,526,526,772,773,242', +'565,807,807,565,807,807,807,807,807,456,408,408,408,335,335,526,1020', +'960,1020,960,960,960,376,960,962,456,681,641,682,376,44,44,807,807,807', +'807,807,807,807,807,807,807,807,807,807,807,617,620,807,807,807,220', +'807,617,620,240,807,242,617,807,239,795,617,620,807,398,807,827,807', +'807,807,807,807,807,807,136,807,807,807,752,617,752,752,752,681,752', +'805,616,641,641,971,807,807,110,807,960,807,641,740,740,110,110,110', +'807,737,110,110,110,807,110,807,617,620,240,975,737,978,110,239,110', +'110,110,795,795,102,827,398,398,398,110,110,795,110,110,110,110,110', +'665,322,378,616,355,355,323,805,322,378,616,737,737,323,644,616,101', +'322,100,616,752,804,323,110,110,110,110,110,110,110,110,110,110,110', +'110,110,110,616,916,110,110,110,665,110,110,737,991,110,439,904,110', +'110,99,110,904,110,393,110,665,110,110,110,110,110,110,110,322,110,616', +'110,994,323,996,361,366,644,644,644,361,804,391,366,110,110,110,110', +'455,110,339,110,366,41,900,379,110,684,916,900,380,110,379,110,684,684', +'684,380,439,684,684,684,949,684,949,949,949,949,949,393,393,393,381', +'684,684,684,972,73,949,381,455,972,339,684,684,41,684,684,684,684,684', +'366,324,391,391,391,455,19,339,324,949,41,618,1001,19,42,618,20,324', +'949,949,949,949,19,684,684,684,684,684,684,684,684,684,684,684,684,684', +'684,49,382,684,684,684,383,684,684,382,1010,684,1011,383,684,684,1012', +'684,949,684,42,684,20,684,684,684,684,684,684,684,324,684,309,684,1013', +'19,42,309,20,1090,1014,1090,1090,1090,1090,1090,684,684,684,684,385', +'684,1016,684,238,1090,43,385,684,113,1026,238,1029,684,1030,684,113', +'113,113,1031,238,113,113,113,1032,113,749,1090,749,749,749,484,749,113', +'1034,113,113,113,1090,1090,438,561,894,1040,561,113,113,438,113,113', +'113,113,113,40,895,25,438,858,1000,1053,858,895,1058,484,749,1000,895', +'484,484,238,895,1059,1090,749,1000,18,113,113,113,113,113,113,113,113', +'113,113,113,113,113,113,17,17,113,113,113,894,113,113,758,758,113,1070', +'894,113,113,438,113,894,113,483,113,894,113,113,113,113,113,113,113', +'895,113,138,113,1000,1054,1054,138,138,787,894,787,787,787,787,787,113', +'113,113,113,1071,113,483,113,993,787,483,483,113,461,1073,993,16,113', +'15,113,461,461,461,13,993,894,461,461,1079,461,50,787,1046,1080,1046', +'1046,1046,50,1046,1084,787,787,787,787,542,1085,50,1086,1087,461,461', +'542,461,461,461,461,461,3,776,532,542,1095,326,341,533,776,536,538,516', +'326,341,515,504,993,776,543,787,546,326,341,461,461,461,461,461,461', +'461,461,461,461,461,461,461,461,714,50,461,461,461,548,461,714,555,556', +'461,557,714,461,562,542,714,563,461,566,461,570,461,461,461,461,461', +'461,461,776,461,571,461,326,341,1036,573,946,574,946,946,946,1036,946', +'575,461,461,683,461,584,461,1036,592,596,683,683,683,461,599,683,683', +'683,461,683,461,714,531,531,531,531,531,601,683,683,683,683,791,791', +'605,606,791,791,791,683,683,607,683,683,683,683,683,1052,608,1052,1052', +'1052,488,1052,622,487,1036,625,585,486,585,585,585,648,585,9,9,9,9,9', +'683,683,683,683,683,683,683,683,683,683,683,683,683,683,651,1052,683', +'683,683,498,683,683,485,657,683,473,585,683,683,463,683,552,683,666', +'683,585,683,683,683,683,683,683,683,454,683,683,683,552,552,453,450', +'498,671,440,677,498,498,498,498,683,683,683,683,552,683,552,683,552', +'552,552,552,683,30,552,436,552,683,685,683,30,30,30,686,689,30,30,30', +'568,30,568,568,568,568,568,433,692,694,30,30,30,697,699,431,568,428', +'707,709,405,30,30,712,30,30,30,30,30,715,716,402,400,880,719,880,880', +'880,568,880,878,397,878,878,878,736,878,568,568,568,568,751,30,30,30', +'30,30,30,30,30,30,30,30,30,30,30,753,499,30,30,30,880,760,30,766,30', +'30,769,878,30,30,369,30,568,30,367,30,878,30,30,30,30,30,30,30,363,30', +'30,30,499,362,349,343,499,499,499,499,799,801,803,340,30,30,506,30,336', +'30,812,1,334,506,506,506,30,329,506,506,506,30,506,1067,328,1067,1067', +'1067,1067,1067,325,506,506,348,348,348,348,348,491,1067,836,843,506', +'506,854,506,506,506,506,506,855,490,319,318,491,491,313,313,313,313', +'313,1067,862,863,864,868,869,490,490,871,491,872,1067,1067,491,491,491', +'491,874,877,879,882,317,490,506,490,467,490,490,490,490,506,315,467', +'467,467,506,506,467,467,467,888,467,893,503,301,1067,897,298,297,901', +'467,467,467,467,903,912,915,506,506,503,503,467,467,286,467,467,467', +'467,467,922,923,506,925,926,927,503,506,503,929,503,503,503,503,506', +',503,,503,506,,,,467,467,467,467,467,467,467,467,467,467,467,467,467', +'467,,,467,467,467,,,467,,,467,,,467,467,,467,,467,,467,,467,467,467', +'467,467,467,467,,467,467,467,951,,951,951,951,951,951,,,,,,467,467,467', +'467,951,467,466,467,,,,,467,466,466,466,,467,466,466,466,,466,489,,', +'951,,,,,466,466,466,466,,,951,951,489,489,,466,466,,466,466,466,466', +'466,1015,,1015,1015,1015,489,1015,489,,489,489,489,489,,1017,,1017,1017', +'1017,,1017,951,,466,466,466,466,466,466,466,466,466,466,466,466,466', +'466,,1015,466,466,466,,,466,,,466,,,466,466,1017,466,,466,,466,,466', +'466,466,466,466,466,466,,466,466,466,741,,741,741,741,741,741,,,,,,466', +'466,466,466,741,466,457,466,,,,,466,457,457,457,,466,457,457,457,961', +'457,961,961,961,741,961,,,,457,457,457,,741,741,741,741,,,,457,457,', +'457,457,457,457,457,,,,,,,,,,961,,,,,,,,,,,,741,,457,457,457,457,457', +'457,457,457,457,457,457,457,457,457,,,457,457,457,,,457,,457,457,,,457', +'457,,457,,457,,457,,457,457,457,457,457,457,457,,457,457,457,,,,,,,', +',,,,,457,457,60,457,,457,,,,60,60,60,457,,60,60,60,457,60,,,,,,,,,,60', +'60,60,,,,,,,,60,60,,60,60,60,60,60,,,,,,,,,,,,,,,,,,,,,,,,60,60,60,60', +'60,60,60,60,60,60,60,60,60,60,,,60,60,60,,,60,,,60,,,60,60,,60,,60,', +'60,,60,60,60,60,60,60,60,,60,,60,743,,743,743,743,743,743,,,,,,60,60', +'60,60,743,60,31,60,,,,,60,31,31,31,,60,31,31,31,,31,,,,743,,,,,,31,31', +',743,743,743,743,,,,31,31,,31,31,31,31,31,,,,,,,,,,,,,,,,,,,,,,743,', +'31,31,31,31,31,31,31,31,31,31,31,31,31,31,,,31,31,31,,,31,,31,31,,,31', +'31,,31,,31,,31,,31,31,31,31,31,31,31,,31,,31,,,,,,,,,,,,,31,31,,31,', +'31,653,653,653,653,653,653,31,,,653,653,31,,,653,,653,653,653,653,653', +'653,653,,,,,,653,653,653,653,653,653,653,,,653,,,,,443,653,653,653,653', +'653,653,653,653,653,653,653,653,,653,653,653,,653,653,,653,653,653,443', +'443,443,443,443,443,443,443,443,443,443,,443,443,,,443,443,,653,,,653', +',,653,653,,,653,,653,443,,443,653,443,443,443,443,443,443,443,653,443', +',,,653,653,653,653,653,653,,,,653,653,,443,,443,,,653,,,653,653,653', +',,653,653,898,898,898,898,898,898,,,,898,898,,,,898,,898,898,898,898', +'898,898,898,,,,,,898,898,898,898,898,898,898,,,898,,,,,449,898,898,898', +'898,898,898,898,898,898,898,898,898,,898,898,898,,898,898,,898,898,898', +'449,449,449,449,449,449,449,449,449,449,449,,449,449,,,449,449,,898', +',,898,,,898,898,,,898,,898,449,,449,898,449,449,449,449,449,449,449', +'898,449,,,,898,898,898,898,898,898,,,,898,898,,449,,,,,898,,,898,898', +'898,,,898,898,222,222,222,222,222,222,,,,222,222,,,,222,,222,222,222', +'222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,222,222', +'222,222,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222', +'222,502,502,502,502,502,502,502,502,502,502,502,,502,502,,,502,502,', +'222,,,222,,,222,222,,,222,,222,502,,502,222,502,502,502,502,502,502', +'502,222,502,,,,222,222,222,222,222,222,,,,222,222,502,502,,,,,222,,', +'222,222,222,,,222,222,36,36,36,36,36,36,,,,36,36,,,,36,,36,36,36,36', +'36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36,36,36,36,36,36,36', +'36,36,36,36,,36,36,36,,36,36,,36,36,36,553,553,553,553,553,553,553,553', +'553,553,553,,553,553,,,553,553,,36,,,36,,,36,36,,,36,,36,553,,553,36', +'553,553,553,553,553,553,553,36,553,,,,36,36,36,36,36,36,,,,36,36,,553', +',,,,36,,,36,36,36,,,36,36,785,785,785,785,785,785,,,,785,785,,,,785', +',785,785,785,785,785,785,785,,,,,,785,785,785,785,785,785,785,,,785', +',,,,,785,785,785,785,785,785,785,785,785,785,785,785,,785,785,785,,785', +'785,,785,785,785,295,295,295,295,295,295,295,295,295,295,295,,295,295', +',,295,295,,785,,,785,,,785,785,,,785,,785,295,,295,785,295,295,295,295', +'295,295,295,785,295,,,,785,785,785,785,785,785,,,,785,785,,295,,,,,785', +',,785,785,785,,,785,785,1025,1025,1025,1025,1025,1025,,,,1025,1025,', +',,1025,,1025,1025,1025,1025,1025,1025,1025,,,,,,1025,1025,1025,1025', +'1025,1025,1025,,,1025,,,,,,1025,1025,1025,1025,1025,1025,1025,1025,1025', +'1025,1025,1025,,1025,1025,1025,,1025,1025,,1025,1025,1025,921,921,921', +'921,921,921,921,921,921,921,921,,921,921,,,921,921,,1025,,,1025,,,1025', +'1025,,,1025,,1025,921,,921,1025,921,921,921,921,921,921,921,1025,921', +',,,1025,1025,1025,1025,1025,1025,,,,1025,1025,,921,,,,,1025,,,1025,1025', +'1025,,,1025,1025,937,937,937,937,937,937,,,,937,937,,,,937,,937,937', +'937,937,937,937,937,,,,,,937,937,937,937,937,937,937,,,937,,,,,,937', +'937,937,937,937,937,937,937,937,937,937,937,,937,937,937,,937,937,,937', +'937,937,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,937,,,937,', +',937,937,,,937,,937,24,,24,937,24,24,24,24,24,24,24,937,24,,,,937,937', +'937,937,937,937,,,,937,937,,24,,,,,937,,,937,937,937,,,937,937,247,247', +'247,247,247,247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,', +'247,247,247,247,247,247,247,,,247,,,,,,247,247,247,247,247,247,247,247', +'247,247,247,247,,247,247,247,,247,247,,247,247,247,809,809,809,809,809', +'809,809,809,809,809,809,,809,809,,,809,809,,247,,,247,,,247,247,,,247', +',247,809,,809,247,809,809,809,809,809,809,809,247,809,,,,247,247,247', +'247,247,247,,,,247,247,,809,,,,,247,,,247,247,247,,,247,247,1023,1023', +'1023,1023,1023,1023,,,,1023,1023,,,,1023,,1023,1023,1023,1023,1023,1023', +'1023,,,,,,1023,1023,1023,1023,1023,1023,1023,,,1023,,,,,,1023,1023,1023', +'1023,1023,1023,1023,1023,1023,1023,1023,1023,,1023,1023,1023,,1023,1023', +',1023,1023,1023,497,497,497,497,497,497,497,,,497,497,,,,,,497,497,', +'1023,,,1023,,,1023,1023,,,1023,,1023,497,,497,1023,497,497,497,497,497', +'497,497,1023,497,,,,1023,1023,1023,1023,1023,1023,,,,1023,1023,,,,,', +',1023,,,1023,1023,1023,,,1023,1023,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2', +'2,2,2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2', +'2,,2,2,2,482,482,482,482,482,482,482,482,482,482,482,,482,482,,,482', +'482,,2,,,2,,,2,2,,,2,,2,482,,482,2,482,482,482,482,482,482,482,2,482', +',,,2,2,2,2,2,2,,,,2,2,,,,,,,2,,,2,2,2,,,2,2,938,938,938,938,938,938', +',,,938,938,,,,938,,938,938,938,938,938,938,938,,,,,,938,938,938,938', +'938,938,938,,,938,,,,,,938,938,938,938,938,938,938,938,938,938,938,938', +',938,938,938,,938,938,,938,938,938,481,481,481,481,481,481,481,481,481', +'481,481,,481,481,,,481,481,,938,,,938,,,938,938,,,938,,938,481,,481', +'938,481,481,481,481,481,481,481,938,481,,,,938,938,938,938,938,938,', +',,938,938,,,,,,,938,,,938,938,938,,,938,938,1018,1018,1018,1018,1018', +'1018,,,,1018,1018,,,,1018,,1018,1018,1018,1018,1018,1018,1018,,,,,,1018', +'1018,1018,1018,1018,1018,1018,,,1018,,,,,,1018,1018,1018,1018,1018,1018', +'1018,1018,1018,1018,1018,1018,,1018,1018,1018,,1018,1018,,1018,1018', +'1018,496,496,496,496,496,496,496,,,496,496,,,,,,496,496,,1018,,,1018', +',,1018,1018,,,1018,,1018,496,,496,1018,496,496,496,496,496,496,496,1018', +'496,,,,1018,1018,1018,1018,1018,1018,,,,1018,1018,,,,,,,1018,,,1018', +'1018,1018,,,1018,1018,833,833,833,833,833,833,,,,833,833,,,,833,,833', +'833,833,833,833,833,833,,,,,,833,833,833,833,833,833,833,,,833,,,,,', +'833,833,833,833,833,833,833,833,833,833,833,833,,833,833,833,,833,833', +',833,833,833,501,501,501,501,501,501,501,501,,501,501,,,,,,501,501,', +'833,,,833,,,833,833,,,833,,833,501,,501,833,501,501,501,501,501,501', +'501,833,501,,,,833,833,833,833,833,833,,,,833,833,,,,,,,833,,,833,833', +'833,,,833,833,774,774,774,774,774,774,,,,774,774,,,,774,,774,774,774', +'774,774,774,774,,,,,,774,774,774,774,774,774,774,,,774,,,,,,774,774', +'774,774,774,774,774,774,774,774,774,774,,774,774,774,,774,774,,774,774', +'774,495,495,495,495,495,495,495,,,495,495,,,,,,495,495,,774,,,774,,', +'774,774,,,774,,774,495,,495,774,495,495,495,495,495,495,495,774,495', +',,,774,774,774,774,774,774,,,,774,774,,,,,,,774,,,774,774,774,,,774', +'774,792,792,792,792,792,792,,,,792,792,,,,792,,792,792,792,792,792,792', +'792,,,,,,792,792,792,792,792,792,792,,,792,,,,,,792,792,792,792,792', +'792,792,792,792,792,792,792,,792,792,792,,792,792,,792,792,792,494,494', +'494,494,494,494,494,,,494,494,,,,,,494,494,,792,,,792,,,792,792,,,792', +',792,494,,494,792,494,494,494,494,494,494,494,792,494,,,,792,792,792', +'792,792,792,,,,792,792,,,,,,,792,,,792,792,792,,,792,792,600,600,600', +'600,600,600,,,,600,600,,,,600,,600,600,600,600,600,600,600,,,,,,600', +'600,600,600,600,600,600,,,600,,,,,,600,600,600,600,600,600,600,600,600', +'600,600,600,,600,600,600,,600,600,,600,600,600,500,500,500,500,500,500', +'500,,,500,500,,,,,,500,500,,600,,,600,,,600,600,,,600,,600,500,,500', +'600,500,500,500,500,500,500,500,600,500,,,,600,600,600,600,600,600,', +',,600,600,,,,,,,600,,,600,600,600,,,600,600,786,786,786,786,786,786', +',,,786,786,,,,786,,786,786,786,786,786,786,786,,,,,,786,786,786,786', +'786,786,786,,,786,,,,,,786,786,786,786,786,786,786,786,786,786,786,786', +',786,786,786,,786,786,,786,786,786,493,493,493,493,493,493,493,,,493', +'493,,,,,,493,493,,786,,,786,,,786,786,,,786,,786,493,,493,786,493,493', +'493,493,493,493,493,786,493,,,,786,786,786,786,786,786,,,,786,786,,', +',,,,786,,,786,786,786,,,786,786,852,852,852,852,852,852,,,,852,852,', +',,852,,852,852,852,852,852,852,852,,,,,,852,852,852,852,852,852,852', +',,852,,,,,,852,852,852,852,852,852,852,852,852,852,852,852,,852,852', +'852,,852,852,,852,852,852,492,492,492,492,492,492,492,,,492,492,,,,', +',492,492,,852,,,852,,,852,852,,,852,,852,492,,492,852,492,492,492,492', +'492,492,492,852,492,,,,852,852,852,852,852,852,,,,852,852,,,,,,,852', +',,852,852,852,,,852,852,321,321,321,321,321,321,,,,321,321,,,,321,,321', +'321,321,321,321,321,321,,,,,,321,321,321,321,321,321,321,,,321,,,,,', +'321,321,321,321,321,321,321,321,321,321,321,321,,321,321,321,,321,321', +',321,321,321,,,,,,,,,,,,,,,,,,,,321,,,321,,,321,321,,,321,,321,,,,321', +',,,,,,,321,,,,,321,321,321,321,321,321,,,,321,321,,,,,,,321,,,321,321', +'321,,,321,321,997,997,997,997,997,997,,,,997,997,,,,997,,997,997,997', +'997,997,997,997,,,,,,997,997,997,997,997,997,997,,,997,,,,,,997,997', +'997,997,997,997,997,997,997,997,997,997,,997,997,997,,997,997,,997,997', +'997,,,,,,,,,,,,,,,,,,,,997,,,997,,,997,997,,,997,,997,,,,997,,,,,,,', +'997,,,,,997,997,997,997,997,997,,,,997,997,,,,,,,997,,,997,997,997,', +',997,997,360,360,360,360,360,360,,,,360,360,,,,360,,360,360,360,360', +'360,360,360,,,,,,360,360,360,360,360,360,360,,,360,,,,,,360,360,360', +'360,360,360,360,360,360,360,360,360,,360,360,360,,360,360,,360,360,360', +',,,,,,,,,,,,,,,,,,,360,,,360,,,360,360,,,360,,360,,,,360,,,,,,,,360', +',,,,360,360,360,360,360,360,,,,360,360,,,,,,,360,,,360,360,360,,,360', +'360,860,860,860,860,860,860,,,,860,860,,,,860,,860,860,860,860,860,860', +'860,,,,,,860,860,860,860,860,860,860,,,860,,,,,,860,860,860,860,860', +'860,860,860,860,860,860,860,,860,860,860,,860,860,,860,860,860,,,,,', +',,,,,,,,,,,,,,860,,,860,,,860,860,,,860,,860,,,,860,,,,,,,,860,,,,,860', +'860,860,860,860,860,,,,860,860,,,,,,,860,,,860,860,860,,,860,860,861', +'861,861,861,861,861,,,,861,861,,,,861,,861,861,861,861,861,861,861,', +',,,,861,861,861,861,861,861,861,,,861,,,,,,861,861,861,861,861,861,861', +'861,861,861,861,861,,861,861,861,,861,861,,861,861,861,,,,,,,,,,,,,', +',,,,,,861,,,861,,,861,861,,,861,,861,,,,861,,,,,,,,861,,,,,861,861,861', +'861,861,861,,,,861,861,,,,,,,861,,,861,861,861,,,861,861,316,316,316', +'316,316,316,,,,316,316,,,,316,,316,316,316,316,316,316,316,,,,,,316', +'316,316,316,316,316,316,,,316,,,,,,316,316,316,316,316,316,316,316,316', +'316,316,316,,316,316,316,,316,316,,316,316,316,,,,,,,,,,,,,,,,,,,,316', +',,316,,,316,316,,,316,,316,,,,316,,,,,,,,316,,,,,316,316,316,316,316', +'316,,,,316,316,,,,,,,316,,,316,316,316,,,316,316,887,887,887,887,887', +'887,,,,887,887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887,887', +'887,887,887,887,,,887,,,,,,887,887,887,887,887,887,887,887,887,887,887', +'887,,887,887,887,,887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887', +',,887,887,,,887,,887,,,,887,,,,,,,,887,,,,,887,887,887,887,887,887,', +',,887,887,,,,,,,887,,,887,887,887,,,887,887,359,359,359,359,359,359', +',,,359,359,,,,359,,359,359,359,359,359,359,359,,,,,,359,359,359,359', +'359,359,359,,,359,,,,,,359,359,359,359,359,359,359,359,359,359,359,359', +',359,359,359,,359,359,,359,359,359,,,,,,,,,,,,,,,,,,,,359,,,359,,,359', +'359,,,359,,359,,,,359,,,,,,,,359,,,,,359,359,359,359,359,359,,,,359', +'359,,,,,,,359,,,359,359,359,,,359,359,347,347,347,347,347,347,,,,347', +'347,,,,347,,347,347,347,347,347,347,347,,,,,,347,347,347,347,347,347', +'347,,,347,,,,,,347,347,347,347,347,347,347,347,347,347,347,347,,347', +'347,347,,347,347,,347,347,347,,,,,,,,,,,,,,,,,,,,347,,,347,,,347,347', +',,347,,347,,,,347,,,,,,,,347,,,,,347,347,347,347,347,347,,,,347,347', +',,,,,,347,,,347,347,347,,,347,347,603,603,603,603,603,603,,,,603,603', +',,,603,,603,603,603,603,603,603,603,,,,,,603,603,603,603,603,603,603', +',,603,,,,,,603,603,603,603,603,603,603,603,603,603,603,603,,603,603', +'603,,603,603,,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603,603,,,603', +',603,,,,603,,,,,,,,603,,,,,603,603,603,603,603,603,,,,603,603,,,,,,', +'603,,,603,603,603,,,603,603,968,968,968,968,968,968,,,,968,968,,,,968', +',968,968,968,968,968,968,968,,,,,,968,968,968,968,968,968,968,,,968', +',,,,,968,968,968,968,968,968,968,968,968,968,968,968,,968,968,968,,968', +'968,,968,968,968,,,,,,,,,,,,,,,,,,,,968,,,968,,,968,968,,,968,,968,', +',,968,,,,,,,,968,,,,,968,968,968,968,968,968,,,,968,968,,,,,,,968,,', +'968,968,968,,,968,968,967,967,967,,967,,,,967,967,,,,967,,967,967,967', +'967,967,967,967,,,,,,967,967,967,967,967,967,967,,,967,,,,,,,967,,,967', +'967,967,967,967,967,967,967,,967,967,967,,967,967,,967,967,967,,,,,', +',,,,,,,,,,,,,,967,,,967,,,967,967,,,967,,967,,,,967,,,,,,,,967,,,,,967', +'967,967,967,967,967,,,,967,967,,,,,,,967,,,967,967,967,,,967,967,537', +'537,537,,537,,,,537,537,,,,537,,537,537,537,537,537,537,537,,,,,,537', +'537,537,537,537,537,537,,,537,,,,,,,537,,,537,537,537,537,537,537,537', +'537,,537,537,537,,537,537,,,,537,,,,,,,,,,,,,,,,,,,,537,,,537,,,537', +'537,,,537,,,,,,,,,,,,,,,,,,,537,537,537,537,537,537,,,,537,537,,,,,', +',537,,,537,537,537,,,537,537,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,', +',,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8,,8,8,,8,8,8', +',,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8,8,8,8', +',,,8,8,,,,,,,8,,,8,8,8,,,8,8,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23', +'23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23', +'23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23', +',,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,,,23', +'23,23,,,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,', +',32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32', +'32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,', +'32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32', +',,32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33', +'33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,', +'33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33', +',,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33', +'33,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34', +'34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34', +',34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,', +',34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37', +'37,37,,37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37', +'37,,,37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,', +',,,,,,,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37', +'37,37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,', +'38,,38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38', +'38,38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,', +'38,,,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,', +',38,,,38,38,38,,,38,38,1041,1041,1041,,1041,,,,1041,1041,,,,1041,,1041', +'1041,1041,1041,1041,1041,1041,,,,,,1041,1041,1041,1041,1041,1041,1041', +',,1041,,,,,,,1041,,,1041,1041,1041,1041,1041,1041,1041,1041,1041,1041', +'1041,1041,,1041,1041,,1041,1041,1041,,,,,,,,,,,,,,,,,,,,1041,,,1041', +',,1041,1041,,,1041,,1041,,1041,,1041,,,,,,,,1041,,,,,1041,1041,1041', +'1041,1041,1041,,,,1041,1041,,,,,,,1041,,1041,1041,1041,1041,,,1041,1041', +'45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45,45,45,,,,,,45,45,45,45,45', +'45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45,45,,45,45,45,,45,45,,45,45', +'45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45,,,,,,45,,,,,,,,45,,,,,45', +'45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45,,,45,45,46,46,46,,46,,,', +'46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46,46,46,46,46,46,,,46,,,', +',,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46,46,,46,46,46,,,,,,,,,', +',,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,,46,,,,,46,46,46,46,46', +'46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,48,48,48,,48,,,,48,48,,,,48', +',48,48,48,48,48,48,48,,,,,,48,48,48,48,48,48,48,,,48,,,,,,,48,,,48,48', +'48,48,48,48,48,48,,48,48,48,,48,48,,48,48,48,,,,,,,,,,,,,,,,,,,,48,', +',48,,,48,48,,,48,,,,,,48,,,,,,,,48,,,,,48,48,48,48,48,48,,,,48,48,,', +',,,,48,,,48,48,48,,,48,48,62,62,62,62,62,,,,62,62,,,,62,,62,62,62,62', +'62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,62,62,,62,62,62,62,62,62', +'62,62,62,,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62,,,62', +'62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,,,,62', +',,62,62,62,,,62,62,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67', +',,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67', +'67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,', +'67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,,,67', +'67,68,68,68,,68,,,,68,68,,,,68,,68,68,68,68,68,68,68,,,,,,68,68,68,68', +'68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68,68,68,,68,68,68,,68,68,,68', +'68,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68,,,,,,68,,,,,,,,68,,,,', +'68,68,68,68,68,68,,,,68,68,,,,,,,68,,,68,68,68,,,68,68,71,71,71,,71', +',,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71', +',,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,71,71,71,,,,,,', +',,,,,,,,,,,,,71,,,71,,,71,71,,,71,,,,,,71,,,,,,,,71,,,,,71,71,71,71', +'71,71,,,,71,71,71,,,,,71,71,,,71,71,71,,,71,71,72,72,72,,72,,,,72,72', +',,,72,,72,72,72,72,72,72,72,,,,,,72,72,72,72,72,72,72,,,72,,,,,,,72', +',,72,72,72,72,72,72,72,72,,72,72,72,,72,72,,,,72,,,,,,,,,,,,,,,,,,,', +'72,,,72,,,72,72,,,72,,72,,,,,,,,,,,,,,,,,72,72,72,72,72,72,,,,72,72', +',,,,,,72,,,72,72,72,,,72,72,992,992,992,,992,,,,992,992,,,,992,,992', +'992,992,992,992,992,992,,,,,,992,992,992,992,992,992,992,,,992,,,,,', +',992,,,992,992,992,992,992,992,992,992,,992,992,992,,992,992,,,,992', +',,,,,,,,,,,,,,,,,,,992,,,992,,,992,992,,,992,,,,,,,,,,,,,,,,,,,992,992', +'992,992,992,992,,,,992,992,,,,,,,992,,,992,992,992,,,992,992,126,126', +'126,126,126,,,,126,126,,,,126,,126,126,126,126,126,126,126,,,,,,126', +'126,126,126,126,126,126,,,126,,,,,,126,126,126,126,126,126,126,126,126', +'126,126,126,,126,126,126,,126,126,,126,126,126,,,,,,,,,,,,,,,,,,,,126', +',,126,,,126,126,,,126,,126,,,,126,,,,,,,,126,,,,,126,126,126,126,126', +'126,,,,126,126,,,,,,126,126,,,126,126,126,,,126,126,131,131,131,,131', +',,,131,131,,,,131,,131,131,131,131,131,131,131,,,,,,131,131,131,131', +'131,131,131,,,131,,,,,,,131,,,131,131,131,131,131,131,131,131,,131,131', +'131,,131,131,,131,131,131,,,,,,,,,,,,,,,,,,,,131,,,131,,,131,131,,,131', +',,,,,131,,,,,,,,131,,,,,131,131,131,131,131,131,,,,131,131,,,,,,,131', +',,131,131,131,,,131,131,132,132,132,,132,,,,132,132,,,,132,,132,132', +'132,132,132,132,132,,,,,,132,132,132,132,132,132,132,,,132,,,,,,,132', +',,132,132,132,132,132,132,132,132,,132,132,132,,132,132,,132,132,132', +',,,,,,,,,,,,,,,,,,,132,,,132,,,132,132,,,132,,,,,,132,,,,,,,,132,,,', +',132,132,132,132,132,132,,,,132,132,,,,,,,132,,,132,132,132,,,132,132', +'133,133,133,,133,,,,133,133,,,,133,,133,133,133,133,133,133,133,,,,', +',133,133,133,133,133,133,133,,,133,,,,,,,133,,,133,133,133,133,133,133', +'133,133,,133,133,133,,133,133,,133,133,133,,,,,,,,,,,,,,,,,,,,133,,', +'133,,,133,133,,,133,,,,,,133,,,,,,,,133,,,,,133,133,133,133,133,133', +',,,133,133,,,,,,,133,,,133,133,133,,,133,133,134,134,134,,134,,,,134', +'134,,,,134,,134,134,134,134,134,134,134,,,,,,134,134,134,134,134,134', +'134,,,134,,,,,,,134,,,134,134,134,134,134,134,134,134,,134,134,134,', +'134,134,,134,134,134,,,,,,,,,,,,,,,,,,,,134,,,134,,,134,134,,,134,,', +',,,134,,,,,,,,134,,,,,134,134,134,134,134,134,,,,134,134,,,,,,,134,', +',134,134,134,,,134,134,135,135,135,135,135,,,,135,135,,,,135,,135,135', +'135,135,135,135,135,,,,,,135,135,135,135,135,135,135,,,135,,,,,,135', +'135,,135,135,135,135,135,135,135,135,135,,135,135,135,,135,135,,135', +'135,135,,,,,,,,,,,,,,,,,,,,135,,,135,,,135,135,,,135,,135,,,,135,,,', +',,,,135,,,,,135,135,135,135,135,135,,,,135,135,,,,,,,135,,,135,135,135', +',,135,135,530,530,530,530,530,,,,530,530,,,,530,,530,530,530,530,530', +'530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,,530,530,530,530', +'530,530,530,530,530,530,530,530,,530,530,530,,530,530,,530,530,530,', +',,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,530,,,,530,,,,,,,,530,', +',,,530,530,530,530,530,530,,,,530,530,,,,,,530,530,,,530,530,530,,,530', +'530,223,223,223,,223,,,,223,223,,,,223,,223,223,223,223,223,223,223', +',,,,,223,223,223,223,223,223,223,,,223,,,,,,,223,,,223,223,223,223,223', +'223,223,223,,223,223,223,,223,223,,223,223,223,,,,,,,,,,,,,,,,,,,,223', +',,223,,,223,223,,,223,,223,,,,223,,,,,,,,223,,,,,223,223,223,223,223', +'223,,,,223,223,,,,,,,223,,,223,223,223,,,223,223,224,224,224,,224,,', +',224,224,,,,224,,224,224,224,224,224,224,224,,,,,,224,224,224,224,224', +'224,224,,,224,,,,,,,224,,,224,224,224,224,224,224,224,224,,224,224,224', +',224,224,,224,224,224,,,,,,,,,,,,,,,,,,,,224,,,224,,,224,224,,,224,', +'224,,,,224,,,,,,,,224,,,,,224,224,224,224,224,224,,,,224,224,,,,,,,224', +',,224,224,224,,,224,224,225,225,225,,225,,,,225,225,,,,225,,225,225', +'225,225,225,225,225,,,,,,225,225,225,225,225,225,225,,,225,,,,,,,225', +',,225,225,225,225,225,225,225,225,,225,225,225,,225,225,,225,225,225', +',,,,,,,,,,,,,,,,,,,225,,,225,,,225,225,,,225,,,,,,225,,,,,,,,225,,,', +',225,225,225,225,225,225,,,,225,225,,,,,,,225,,,225,225,225,,,225,225', +'226,226,226,,226,,,,226,226,,,,226,,226,226,226,226,226,226,226,,,,', +',226,226,226,226,226,226,226,,,226,,,,,,,226,,,226,226,226,226,226,226', +'226,226,,226,226,226,,226,226,,226,226,226,,,,,,,,,,,,,,,,,,,,226,,', +'226,,,226,226,,,226,,,,,,226,,,,,,,,226,,,,,226,226,226,226,226,226', +',,,226,226,,,,,,,226,,,226,226,226,,,226,226,227,227,227,,227,,,,227', +'227,,,,227,,227,227,227,227,227,227,227,,,,,,227,227,227,227,227,227', +'227,,,227,,,,,,,227,,,227,227,227,227,227,227,227,227,,227,227,227,', +'227,227,,227,227,227,,,,,,,,,,,,,,,,,,,,227,,,227,,,227,227,,,227,,', +',,,227,,,,,,,,227,,,,,227,227,227,227,227,227,,,,227,227,,,,,,,227,', +',227,227,227,,,227,227,228,228,228,,228,,,,228,228,,,,228,,228,228,228', +'228,228,228,228,,,,,,228,228,228,228,228,228,228,,,228,,,,,,,228,,,228', +'228,228,228,228,228,228,228,228,228,228,228,,228,228,,228,228,228,,', +',,,,,,,,,,,,,,,,,228,,,228,,,228,228,,,228,,228,,228,,228,,,,,,,,228', +',,,,228,228,228,228,228,228,,,,228,228,,,,,,,228,,228,228,228,228,,', +'228,228,233,233,233,,233,,,,233,233,,,,233,,233,233,233,233,233,233', +'233,,,,,,233,233,233,233,233,233,233,,,233,,,,,,,233,,,233,233,233,233', +'233,233,233,233,,233,233,233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,', +',,233,,,233,,,233,233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233', +'233,233,,,,233,233,,,,,,,233,,,233,233,233,,,233,233,234,234,234,,234', +',,,234,234,,,,234,,234,234,234,234,234,234,234,,,,,,234,234,234,234', +'234,234,234,,,234,,,,,,,234,,,234,234,234,234,234,234,234,234,,234,234', +'234,,234,234,,234,234,234,,,,,,,,,,,,,,,,,,,,234,,,234,,,234,234,,,234', +',,,,,234,,,,,,,,234,,,,,234,234,234,234,234,234,,,,234,234,,,,,,,234', +',,234,234,234,,,234,234,235,235,235,,235,,,,235,235,,,,235,,235,235', +'235,235,235,235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,,,235', +',,235,235,235,235,235,235,235,235,,235,235,235,,235,235,,235,235,235', +',,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,,,235,,,', +',235,235,235,235,235,235,,,,235,235,235,,,,,,235,,,235,235,235,,,235', +'235,251,251,251,,251,,,,251,251,,,,251,,251,251,251,251,251,251,251', +',,,,,251,251,251,251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251', +'251,251,251,,251,251,251,,251,251,,251,251,251,,,,,,,,,,,,,,,,,,,,251', +',,251,,,251,251,,,251,,,,,,251,,,,,,,,251,,,,,251,251,251,251,251,251', +',,,251,251,,,,,,,251,,,251,251,251,,,251,251,252,252,252,,252,,,,252', +'252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252,252,252', +'252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,252,252,', +'252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,', +',,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252,252,,,,,,,252,', +',252,252,252,,,252,252,253,253,253,,253,,,,253,253,,,,253,,253,253,253', +'253,253,253,253,,,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253', +'253,253,253,253,253,253,253,,253,253,253,,253,253,,253,253,253,,,,,', +',,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,,,253', +'253,253,253,253,253,,,,253,253,,,,,,,253,,,253,253,253,,,253,253,254', +'254,254,,254,,,,254,254,,,,254,,254,254,254,254,254,254,254,,,,,,254', +'254,254,254,254,254,254,,,254,,,,,,,254,,,254,254,254,254,254,254,254', +'254,,254,254,254,,254,254,,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254', +',,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254', +'254,,,,,,,254,,,254,254,254,,,254,254,255,255,255,,255,,,,255,255,,', +',255,,255,255,255,255,255,255,255,,,,,,255,255,255,255,255,255,255,', +',255,,,,,,,255,,,255,255,255,255,255,255,255,255,,255,255,255,,255,255', +',255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,,,,,255,', +',,,,,,255,,,,,255,255,255,255,255,255,,,,255,255,,,,,,,255,,,255,255', +'255,,,255,255,256,256,256,,256,,,,256,256,,,,256,,256,256,256,256,256', +'256,256,,,,,,256,256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256', +'256,256,256,256,256,,256,256,256,,256,256,,256,256,256,,,,,,,,,,,,,', +',,,,,,256,,,256,,,256,256,,,256,,,,,,256,,,,,,,,256,,,,,256,256,256', +'256,256,256,,,,256,256,,,,,,,256,,,256,256,256,,,256,256,257,257,257', +',257,,,,257,257,,,,257,,257,257,257,257,257,257,257,,,,,,257,257,257', +'257,257,257,257,,,257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257', +'257,257,,257,257,,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257', +',,257,,,,,,257,,,,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,,,', +',,,257,,,257,257,257,,,257,257,258,258,258,,258,,,,258,258,,,,258,,258', +'258,258,258,258,258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,', +',258,,,258,258,258,258,258,258,258,258,,258,258,258,,258,258,,258,258', +'258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258', +',,,,258,258,258,258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258', +'258,259,259,259,,259,,,,259,259,,,,259,,259,259,259,259,259,259,259', +',,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259', +'259,259,259,,259,259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259', +',,259,,,259,259,,,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259', +',,,259,259,,,,,,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260', +'260,,,,260,,260,260,260,260,260,260,260,,,,,,260,260,260,260,260,260', +'260,,,260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260,260,260,', +'260,260,,260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,', +',,,260,,,,,,,,260,,,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,', +',260,260,260,,,260,260,261,261,261,,261,,,,261,261,,,,261,,261,261,261', +'261,261,261,261,,,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261', +'261,261,261,261,261,261,261,,261,261,261,,261,261,,261,261,261,,,,,', +',,,,,,,,,,,,,,261,,,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261', +'261,261,261,261,261,,,,261,261,,,,,,,261,,,261,261,261,,,261,261,262', +'262,262,,262,,,,262,262,,,,262,,262,262,262,262,262,262,262,,,,,,262', +'262,262,262,262,262,262,,,262,,,,,,,262,,,262,262,262,262,262,262,262', +'262,,262,262,262,,262,262,,262,262,262,,,,,,,,,,,,,,,,,,,,262,,,262', +',,262,262,,,262,,,,,,262,,,,,,,,262,,,,,262,262,262,262,262,262,,,,262', +'262,,,,,,,262,,,262,262,262,,,262,262,263,263,263,,263,,,,263,263,,', +',263,,263,263,263,263,263,263,263,,,,,,263,263,263,263,263,263,263,', +',263,,,,,,,263,,,263,263,263,263,263,263,263,263,,263,263,263,,263,263', +',263,263,263,,,,,,,,,,,,,,,,,,,,263,,,263,,,263,263,,,263,,,,,,263,', +',,,,,,263,,,,,263,263,263,263,263,263,,,,263,263,,,,,,,263,,,263,263', +'263,,,263,263,264,264,264,,264,,,,264,264,,,,264,,264,264,264,264,264', +'264,264,,,,,,264,264,264,264,264,264,264,,,264,,,,,,,264,,,264,264,264', +'264,264,264,264,264,,264,264,264,,264,264,,264,264,264,,,,,,,,,,,,,', +',,,,,,264,,,264,,,264,264,,,264,,,,,,264,,,,,,,,264,,,,,264,264,264', +'264,264,264,,,,264,264,,,,,,,264,,,264,264,264,,,264,264,265,265,265', +',265,,,,265,265,,,,265,,265,265,265,265,265,265,265,,,,,,265,265,265', +'265,265,265,265,,,265,,,,,,,265,,,265,265,265,265,265,265,265,265,,265', +'265,265,,265,265,,265,265,265,,,,,,,,,,,,,,,,,,,,265,,,265,,,265,265', +',,265,,,,,,265,,,,,,,,265,,,,,265,265,265,265,265,265,,,,265,265,,,', +',,,265,,,265,265,265,,,265,265,266,266,266,,266,,,,266,266,,,,266,,266', +'266,266,266,266,266,266,,,,,,266,266,266,266,266,266,266,,,266,,,,,', +',266,,,266,266,266,266,266,266,266,266,,266,266,266,,266,266,,266,266', +'266,,,,,,,,,,,,,,,,,,,,266,,,266,,,266,266,,,266,,,,,,266,,,,,,,,266', +',,,,266,266,266,266,266,266,,,,266,266,,,,,,,266,,,266,266,266,,,266', +'266,267,267,267,,267,,,,267,267,,,,267,,267,267,267,267,267,267,267', +',,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267,267,267,267,267', +'267,267,267,,267,267,267,,267,267,,267,267,267,,,,,,,,,,,,,,,,,,,,267', +',,267,,,267,267,,,267,,,,,,267,,,,,,,,267,,,,,267,267,267,267,267,267', +',,,267,267,,,,,,,267,,,267,267,267,,,267,267,268,268,268,,268,,,,268', +'268,,,,268,,268,268,268,268,268,268,268,,,,,,268,268,268,268,268,268', +'268,,,268,,,,,,,268,,,268,268,268,268,268,268,268,268,,268,268,268,', +'268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268,,,268,268,,,268,,', +',,,268,,,,,,,,268,,,,,268,268,268,268,268,268,,,,268,268,,,,,,,268,', +',268,268,268,,,268,268,269,269,269,,269,,,,269,269,,,,269,,269,269,269', +'269,269,269,269,,,,,,269,269,269,269,269,269,269,,,269,,,,,,,269,,,269', +'269,269,269,269,269,269,269,,269,269,269,,269,269,,269,269,269,,,,,', +',,,,,,,,,,,,,,269,,,269,,,269,269,,,269,,,,,,269,,,,,,,,269,,,,,269', +'269,269,269,269,269,,,,269,269,,,,,,,269,,,269,269,269,,,269,269,270', +'270,270,,270,,,,270,270,,,,270,,270,270,270,270,270,270,270,,,,,,270', +'270,270,270,270,270,270,,,270,,,,,,,270,,,270,270,270,270,270,270,270', +'270,,270,270,270,,270,270,,270,270,270,,,,,,,,,,,,,,,,,,,,270,,,270', +',,270,270,,,270,,,,,,270,,,,,,,,270,,,,,270,270,270,270,270,270,,,,270', +'270,,,,,,,270,,,270,270,270,,,270,270,275,275,275,,275,,,,275,275,,', +',275,,275,275,275,275,275,275,275,,,,,,275,275,275,275,275,275,275,', +',275,,,,,,,275,,,275,275,275,275,275,275,275,275,,275,275,275,,275,275', +',275,275,275,,,,,,,,,,,,,,,,,,,,275,,,275,,,275,275,,,275,,,,,,275,', +',,,,,,275,,,,,275,275,275,275,275,275,,,,275,275,,,,,,,275,,,275,275', +'275,,,275,275,932,932,932,,932,,,,932,932,,,,932,,932,932,932,932,932', +'932,932,,,,,,932,932,932,932,932,932,932,,,932,,,,,,,932,,,932,932,932', +'932,932,932,932,932,,932,932,932,,932,932,,,,932,,,,,,,,,,,,,,,,,,,', +'932,,,932,,,932,932,,,932,,,,,,,,,,,,,,,,,,,932,932,932,932,932,932', +',,,932,932,,,,,,,932,,,932,932,932,,,932,932,283,283,283,,283,,,,283', +'283,,,,283,,283,283,283,283,283,283,283,,,,,,283,283,283,283,283,283', +'283,,,283,,,,,,,283,,,283,283,283,283,283,283,283,283,283,283,283,283', +',283,283,,283,283,283,,,,,,,,,,,,,,,,,,,,283,,,283,,,283,283,,,283,', +'283,,283,,283,,,,,,,,283,,,,,283,283,283,283,283,283,,,,283,283,,,,', +',,283,,283,283,283,283,,,283,283,920,920,920,,920,,,,920,920,,,,920', +',920,920,920,920,920,920,920,,,,,,920,920,920,920,920,920,920,,,920', +',,,,,,920,,,920,920,920,920,920,920,920,920,,920,920,920,,920,920,,920', +'920,920,,,,,,,,,,,,,,,,,,,,920,,,920,,,920,920,,,920,,,,,,920,,,,,,', +',920,,,,,920,920,920,920,920,920,,,,920,920,,,,,,,920,,,920,920,920', +',,920,920,290,290,290,,290,,,,290,290,,,,290,,290,290,290,290,290,290', +'290,,,,,,290,290,290,290,290,290,290,,,290,,,,,,,290,,,290,290,290,290', +'290,290,290,290,290,290,290,290,,290,290,,290,290,290,,,,,,,,,,,,,,', +',,,,,290,,,290,,,290,290,,,290,,290,,290,,290,,,,,,,,290,,,,,290,290', +'290,290,290,290,,,,290,290,,,,,,,290,,290,290,290,290,,,290,290,293', +'293,293,,293,,,,293,293,,,,293,,293,293,293,293,293,293,293,,,,,,293', +'293,293,293,293,293,293,,,293,,,,,,,293,,,293,293,293,293,293,293,293', +'293,293,293,293,293,,293,293,,293,293,293,,,,,,,,,,,,,,,,,,,,293,,,293', +',,293,293,,,293,,293,,293,,293,,,,,,,,293,,,,,293,293,293,293,293,293', +',,,293,293,293,,,,,,293,,293,293,293,293,,,293,293,919,919,919,,919', +',,,919,919,,,,919,,919,919,919,919,919,919,919,,,,,,919,919,919,919', +'919,919,919,,,919,,,,,,,919,,,919,919,919,919,919,919,919,919,919,919', +'919,919,,919,919,,919,919,919,,,,,,,,,,,,,,,,,,,,919,,,919,,,919,919', +',,919,,,,919,,919,,,,,,,,919,,,,,919,919,919,919,919,919,,,,919,919', +',,,,,,919,,919,919,919,919,,,919,919,899,899,899,,899,,,,899,899,,,', +'899,,899,899,899,899,899,899,899,,,,,,899,899,899,899,899,899,899,,', +'899,,,,,,,899,,,899,899,899,899,899,899,899,899,,899,899,899,,899,899', +',899,899,899,,,,,,,,,,,,,,,,,,,,899,,,899,,,899,899,,,899,,,,,,899,', +',,,,,,899,,,,,899,899,899,899,899,899,,,,899,899,,,,,,,899,,,899,899', +'899,,,899,899,300,300,300,,300,,,,300,300,,,,300,,300,300,300,300,300', +'300,300,,,,,,300,300,300,300,300,300,300,,,300,,,,,,,300,,,300,300,300', +'300,300,300,300,300,,300,300,300,,300,300,,300,300,300,,,,,,,,,,,,,', +',,,,,,300,,,300,,,300,300,,,300,,,,,,300,,,,,,,,300,,,,,300,300,300', +'300,300,300,,,,300,300,,,,,,,300,,,300,300,300,,,300,300,302,302,302', +',302,,,,302,302,,,,302,,302,302,302,302,302,302,302,,,,,,302,302,302', +'302,302,302,302,,,302,,,,,,,302,,,302,302,302,302,302,302,302,302,,302', +'302,302,,302,302,,302,302,302,,,,,,,,,,,,,,,,,,,,302,,,302,,,302,302', +',,302,,,,,,302,,,,,,,,302,,,,,302,302,302,302,302,302,,,,302,302,,,', +',,,302,,,302,302,302,,,302,302,305,305,305,,305,,,,305,305,,,,305,,305', +'305,305,305,305,305,305,,,,,,305,305,305,305,305,305,305,,,305,,,,,', +',305,,,305,305,305,305,305,305,305,305,,305,305,305,,305,305,,305,305', +'305,,,,,,,,,,,,,,,,,,,,305,,,305,,,305,305,,,305,,,,,,305,,,,,,,,305', +',,,,305,305,305,305,305,305,,,,305,305,,,,,,,305,,,305,305,305,,,305', +'305,306,306,306,,306,,,,306,306,,,,306,,306,306,306,306,306,306,306', +',,,,,306,306,306,306,306,306,306,,,306,,,,,,,306,,,306,306,306,306,306', +'306,306,306,,306,306,306,,306,306,,306,306,306,,,,,,,,,,,,,,,,,,,,306', +',,306,,,306,306,,,306,,,,,,306,,,,,,,,306,,,,,306,306,306,306,306,306', +',,,306,306,,,,,,,306,,,306,306,306,,,306,306,312,312,312,312,312,,,', +'312,312,,,,312,,312,312,312,312,312,312,312,,,,,,312,312,312,312,312', +'312,312,,,312,,,,,,312,312,,312,312,312,312,312,312,312,312,312,,312', +'312,312,,312,312,,312,312,312,,,,,,,,,,,,,,,,,,,,312,,,312,,,312,312', +',,312,,312,,,,312,,,,,,,,312,,,,,312,312,312,312,312,312,,,,312,312', +',,,,,,312,,,312,312,312,,,312,312,885,885,885,,885,,,,885,885,,,,885', +',885,885,885,885,885,885,885,,,,,,885,885,885,885,885,885,885,,,885', +',,,,,,885,,,885,885,885,885,885,885,885,885,,885,885,885,,885,885,,885', +'885,885,,,,,,,,,,,,,,,,,,,,885,,,885,,,885,885,,,885,,,,,,885,,,,,,', +',885,,,,,885,885,885,885,885,885,,,,885,885,,,,,,,885,,,885,885,885', +',,885,885,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320', +'320,,,,,,320,320,320,320,320,320,320,,,320,,,,,,,320,,,320,320,320,320', +'320,320,320,320,,320,320,320,,320,320,,,,320,,,,,,,,,,,,,,,,,,,,320', +',,320,,,320,320,,,320,,,,,,,,,,,,,,,,,,,320,320,320,320,320,320,,,,320', +'320,,,,320,,,320,,,320,320,320,,,320,320,828,828,828,,828,,,,828,828', +',,,828,,828,828,828,828,828,828,828,,,,,,828,828,828,828,828,828,828', +',,828,,,,,,,828,,,828,828,828,828,828,828,828,828,,828,828,828,,828', +'828,,828,828,828,,,,,,,,,,,,,,,,,,,,828,,,828,,,828,828,,,828,,,,,,828', +',,,,,,,828,,,,,828,828,828,828,828,828,,,,828,828,,,,,,,828,,,828,828', +'828,,,828,828,826,826,826,,826,,,,826,826,,,,826,,826,826,826,826,826', +'826,826,,,,,,826,826,826,826,826,826,826,,,826,,,,,,,826,,,826,826,826', +'826,826,826,826,826,,826,826,826,,826,826,,826,826,826,,,,,,,,,,,,,', +',,,,,,826,,,826,,,826,826,,,826,,,,,,826,,,,,,,,826,,,,,826,826,826', +'826,826,826,,,,826,826,,,,,,,826,,,826,826,826,,,826,826,825,825,825', +',825,,,,825,825,,,,825,,825,825,825,825,825,825,825,,,,,,825,825,825', +'825,825,825,825,,,825,,,,,,,825,,,825,825,825,825,825,825,825,825,,825', +'825,825,,825,825,,825,825,825,,,,,,,,,,,,,,,,,,,,825,,,825,,,825,825', +',,825,,,,,,825,,,,,,,,825,,,,,825,825,825,825,825,825,,,,825,825,,,', +',,,825,,,825,825,825,,,825,825,824,824,824,,824,,,,824,824,,,,824,,824', +'824,824,824,824,824,824,,,,,,824,824,824,824,824,824,824,,,824,,,,,', +',824,,,824,824,824,824,824,824,824,824,,824,824,824,,824,824,,824,824', +'824,,,,,,,,,,,,,,,,,,,,824,,,824,,,824,824,,,824,,,,,,824,,,,,,,,824', +',,,,824,824,824,824,824,824,,,,824,824,,,,,,,824,,,824,824,824,,,824', +'824,823,823,823,,823,,,,823,823,,,,823,,823,823,823,823,823,823,823', +',,,,,823,823,823,823,823,823,823,,,823,,,,,,,823,,,823,823,823,823,823', +'823,823,823,,823,823,823,,823,823,,823,823,823,,,,,,,,,,,,,,,,,,,,823', +',,823,,,823,823,,,823,,,,,,823,,,,,,,,823,,,,,823,823,823,823,823,823', +',,,823,823,,,,,,,823,,,823,823,823,,,823,823,810,810,810,,810,,,,810', +'810,,,,810,,810,810,810,810,810,810,810,,,,,,810,810,810,810,810,810', +'810,,,810,,,,,,,810,,,810,810,810,810,810,810,810,810,,810,810,810,', +'810,810,,810,810,810,,,,,,,,,,,,,,,,,,,,810,,,810,,,810,810,,,810,,', +',,,810,,,,,,,,810,,,,,810,810,810,810,810,810,,,,810,810,,,,,,,810,', +',810,810,810,,,810,810,337,337,337,,337,,,,337,337,,,,337,,337,337,337', +'337,337,337,337,,,,,,337,337,337,337,337,337,337,,,337,,,,,,,337,,,337', +'337,337,337,337,337,337,337,,337,337,337,,337,337,,,,337,,,,,,,,,,,', +',,,,,,,,337,,,337,,,337,337,,,337,,,,,,,,,,,,,,,,,,,337,337,337,337', +'337,337,,,,337,337,,,,,,,337,,,337,337,337,,,337,337,802,802,802,,802', +',,,802,802,,,,802,,802,802,802,802,802,802,802,,,,,,802,802,802,802', +'802,802,802,,,802,,,,,,,802,,,802,802,802,802,802,802,802,802,,802,802', +'802,,802,802,,802,802,802,,,,,,,,,,,,,,,,,,,,802,,,802,,,802,802,,,802', +',,,,,802,,,,,,,,802,,,,,802,802,802,802,802,802,,,,802,802,,,,,,,802', +',,802,802,802,,,802,802,344,344,344,,344,,,,344,344,,,,344,,344,344', +'344,344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344', +',,344,344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344', +',,,,,,,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344,,,', +',344,344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344,344', +'346,346,346,,346,,,,346,346,,,,346,,346,346,346,346,346,346,346,,,,', +',346,346,346,346,346,346,346,,,346,,,,,,,346,,,346,346,346,346,346,346', +'346,346,,346,346,346,,346,346,,346,346,346,,,,,,,,,,,,,,,,,,,,346,,', +'346,346,,346,346,,,346,,,,,,346,,,,,,,,346,,,,,346,346,346,346,346,346', +',,,346,346,,,,,,,346,,,346,346,346,,,346,346,350,350,350,,350,,,,350', +'350,,,,350,,350,350,350,350,350,350,350,,,,,,350,350,350,350,350,350', +'350,,,350,,,,,,,350,,,350,350,350,350,350,350,350,350,350,350,350,350', +',350,350,,350,350,350,,,,,,,,,,,,,,,,,,,,350,,,350,,,350,350,,,350,', +'350,,,,350,,,,,,,,350,,,,,350,350,350,350,350,350,,,,350,350,,,,,,,350', +',350,350,350,350,,,350,350,351,351,351,,351,,,,351,351,,,,351,,351,351', +'351,351,351,351,351,,,,,,351,351,351,351,351,351,351,,,351,,,,,,,351', +',,351,351,351,351,351,351,351,351,351,351,351,351,,351,351,,351,351', +'351,,,,,,,,,,,,,,,,,,,,351,,,351,,,351,351,,,351,,,,,,351,,,,,,,,351', +',,,,351,351,351,351,351,351,,,,351,351,,,,,,,351,,351,351,351,351,,', +'351,351,358,358,358,,358,,,,358,358,,,,358,,358,358,358,358,358,358', +'358,,,,,,358,358,358,358,358,358,358,,,358,,,,,,,358,,,358,358,358,358', +'358,358,358,358,,358,358,358,,358,358,,358,358,358,,,,,,,,,,,,,,,,,', +',,358,,,358,,,358,358,,,358,,,,,,358,,,,,,,,358,,,,,358,358,358,358', +'358,358,,,,358,358,,,,,,,358,,,358,358,358,,,358,358,780,780,780,,780', +',,,780,780,,,,780,,780,780,780,780,780,780,780,,,,,,780,780,780,780', +'780,780,780,,,780,,,,,,,780,,,780,780,780,780,780,780,780,780,780,780', +'780,780,,780,780,,780,780,780,,,,,,,,,,,,,,,,,,,,780,,,780,,,780,780', +',,780,,780,,780,,780,,,,,,,,780,,,,,780,780,780,780,780,780,,,,780,780', +',,,,,,780,,780,780,780,780,,,780,780,372,372,372,,372,,,,372,372,,,', +'372,,372,372,372,372,372,372,372,,,,,,372,372,372,372,372,372,372,,', +'372,,,,,,,372,,,372,372,372,372,372,372,372,372,,372,372,372,,372,372', +',,,372,,,,,,,,,,,,,,,,,,,,372,,,372,,,372,372,,,372,,,,,,,,,,,,,,,,', +',,372,372,372,372,372,372,,,,372,372,,,,,,,372,,,372,372,372,,,372,372', +'374,374,374,,374,,,,374,374,,,,374,,374,374,374,374,374,374,374,,,,', +',374,374,374,374,374,374,374,,,374,,,,,,,374,,,374,374,374,374,374,374', +'374,374,,374,374,374,,374,374,,,,374,,,,,,,,,,,,,,,,,,,,374,,,374,,', +'374,374,,,374,,,,,,,,,,,,,,,,,,,374,374,374,374,374,374,,,,374,374,', +',,,,,374,,,374,374,374,,,374,374,768,768,768,,768,,,,768,768,,,,768', +',768,768,768,768,768,768,768,,,,,,768,768,768,768,768,768,768,,,768', +',,,,,,768,,,768,768,768,768,768,768,768,768,,768,768,768,,768,768,,768', +'768,768,,,,,,,,,,,,,,,,,,,,768,,,768,,,768,768,,,768,,768,,,,768,,,', +',,,,768,,,,,768,768,768,768,768,768,,,,768,768,,,,,,,768,,,768,768,768', +',,768,768,747,747,747,,747,,,,747,747,,,,747,,747,747,747,747,747,747', +'747,,,,,,747,747,747,747,747,747,747,,,747,,,,,,,747,,,747,747,747,747', +'747,747,747,747,,747,747,747,,747,747,,747,747,747,,,,,,,,,,,,,,,,,', +',,747,,,747,,,747,747,,,747,,,,,,747,,,,,,,,747,,,,,747,747,747,747', +'747,747,,,,747,747,,,,,,,747,,,747,747,747,,,747,747,731,731,731,,731', +',,,731,731,,,,731,,731,731,731,731,731,731,731,,,,,,731,731,731,731', +'731,731,731,,,731,,,,,,,731,,,731,731,731,731,731,731,731,731,731,731', +'731,731,,731,731,,731,731,731,,,,,,,,,,,,,,,,,,,,731,,,731,,,731,731', +',,731,,,,,,731,,,,,,,,731,,,,,731,731,731,731,731,731,,,,731,731,,,', +',,,731,,731,731,731,731,,,731,731,728,728,728,,728,,,,728,728,,,,728', +',728,728,728,728,728,728,728,,,,,,728,728,728,728,728,728,728,,,728', +',,,,,,728,,,728,728,728,728,728,728,728,728,728,728,728,728,,728,728', +',728,728,728,,,,,,,,,,,,,,,,,,,,728,,,728,,,728,728,,,728,,728,,,,728', +',,,,,,,728,,,,,728,728,728,728,728,728,,,,728,728,,,,,,,728,,728,728', +'728,728,,,728,728,723,723,723,,723,,,,723,723,,,,723,,723,723,723,723', +'723,723,723,,,,,,723,723,723,723,723,723,723,,,723,,,,,,,723,,,723,723', +'723,723,723,723,723,723,,723,723,723,,723,723,,723,723,723,,,,,,,,,', +',,,,,,,,,,723,,,723,,,723,723,,,723,,723,,,,723,,,,,,,,723,,,,,723,723', +'723,723,723,723,,,,723,723,,,,,,,723,,,723,723,723,,,723,723,718,718', +'718,,718,,,,718,718,,,,718,,718,718,718,718,718,718,718,,,,,,718,718', +'718,718,718,718,718,,,718,,,,,,,718,,,718,718,718,718,718,718,718,718', +',718,718,718,,718,718,,718,718,718,,,,,,,,,,,,,,,,,,,,718,,,718,,,718', +'718,,,718,,,,,,718,,,,,,,,718,,,,,718,718,718,718,718,718,,,,718,718', +',,,,,,718,,,718,718,718,,,718,718,717,717,717,,717,,,,717,717,,,,717', +',717,717,717,717,717,717,717,,,,,,717,717,717,717,717,717,717,,,717', +',,,,,,717,,,717,717,717,717,717,717,717,717,,717,717,717,,717,717,,', +',717,,,,,,,,,,,,,,,,,,,,717,,,717,,,717,717,,,717,,,,,,,,,,,,,,,,,,', +'717,717,717,717,717,717,,,,717,717,,,,,,,717,,,717,717,717,,,717,717', +'706,706,706,,706,,,,706,706,,,,706,,706,706,706,706,706,706,706,,,,', +',706,706,706,706,706,706,706,,,706,,,,,,,706,,,706,706,706,706,706,706', +'706,706,,706,706,706,,706,706,,,,706,,,,,,,,,,,,,,,,,,,,706,,,706,,', +'706,706,,,706,,,,,,,,,,,,,,,,,,,706,706,706,706,706,706,,,,706,706,', +',,,,,706,,,706,706,706,,,706,706,703,703,703,,703,,,,703,703,,,,703', +',703,703,703,703,703,703,703,,,,,,703,703,703,703,703,703,703,,,703', +',,,,,,703,,,703,703,703,703,703,703,703,703,,703,703,703,,703,703,,703', +'703,703,,,,,,,,,,,,,,,,,,,,703,,,703,,,703,703,,,703,,,,,,703,,,,,,', +',703,,,,,703,703,703,703,703,703,,,,703,703,,,,,,,703,,,703,703,703', +',,703,703,700,700,700,,700,,,,700,700,,,,700,,700,700,700,700,700,700', +'700,,,,,,700,700,700,700,700,700,700,,,700,,,,,,,700,,,700,700,700,700', +'700,700,700,700,,700,700,700,,700,700,,700,700,700,,,,,,,,,,,,,,,,,', +',,700,,,700,,,700,700,,,700,,,,,,700,,,,,,,,700,,,,,700,700,700,700', +'700,700,,,,700,700,,,,,,,700,,,700,700,700,,,700,700,432,432,432,,432', +',,,432,432,,,,432,,432,432,432,432,432,432,432,,,,,,432,432,432,432', +'432,432,432,,,432,,,,,,,432,,,432,432,432,432,432,432,432,432,,432,432', +'432,,432,432,,432,432,432,,,,,,,,,,,,,,,,,,,,432,,,432,,,432,432,,,432', +',,,,,432,,,,,,,,432,,,,,432,432,432,432,432,432,,,,432,432,,,,,,,432', +',,432,432,432,,,432,432,676,676,676,,676,,,,676,676,,,,676,,676,676', +'676,676,676,676,676,,,,,,676,676,676,676,676,676,676,,,676,,,,,,,676', +',,676,676,676,676,676,676,676,676,,676,676,676,,676,676,,676,676,676', +',,,,,,,,,,,,,,,,,,,676,,,676,,,676,676,,,676,,,,,,676,,,,,,,,676,,,', +',676,676,676,676,676,676,,,,676,676,,,,,,,676,,,676,676,676,,,676,676', +'675,675,675,,675,,,,675,675,,,,675,,675,675,675,675,675,675,675,,,,', +',675,675,675,675,675,675,675,,,675,,,,,,,675,,,675,675,675,675,675,675', +'675,675,,675,675,675,,675,675,,675,675,675,,,,,,,,,,,,,,,,,,,,675,,', +'675,,,675,675,,,675,,,,,,675,,,,,,,,675,,,,,675,675,675,675,675,675', +',,,675,675,,,,,,,675,,,675,675,675,,,675,675,670,670,670,,670,,,,670', +'670,,,,670,,670,670,670,670,670,670,670,,,,,,670,670,670,670,670,670', +'670,,,670,,,,,,,670,,,670,670,670,670,670,670,670,670,,670,670,670,', +'670,670,,670,670,670,,,,,,,,,,,,,,,,,,,,670,,,670,,,670,670,,,670,,', +',,,670,,,,,,,,670,,,,,670,670,670,670,670,670,,,,670,670,,,,,,,670,', +',670,670,670,,,670,670,669,669,669,,669,,,,669,669,,,,669,,669,669,669', +'669,669,669,669,,,,,,669,669,669,669,669,669,669,,,669,,,,,,,669,,,669', +'669,669,669,669,669,669,669,,669,669,669,,669,669,,669,669,669,,,,,', +',,,,,,,,,,,,,,669,,,669,,,669,669,,,669,,,,,,669,,,,,,,,669,,,,,669', +'669,669,669,669,669,,,,669,669,,,,,,,669,,,669,669,669,,,669,669,668', +'668,668,,668,,,,668,668,,,,668,,668,668,668,668,668,668,668,,,,,,668', +'668,668,668,668,668,668,,,668,,,,,,,668,,,668,668,668,668,668,668,668', +'668,668,668,668,668,,668,668,,668,668,668,,,,,,,,,,,,,,,,,,,,668,,,668', +',,668,668,,,668,,,,668,,668,,,,,,,,668,,,,,668,668,668,668,668,668,', +',,668,668,,,,,,,668,,668,668,668,668,,,668,668,667,667,667,,667,,,,667', +'667,,,,667,,667,667,667,667,667,667,667,,,,,,667,667,667,667,667,667', +'667,,,667,,,,,,,667,,,667,667,667,667,667,667,667,667,667,667,667,667', +',667,667,,667,667,667,,,,,,,,,,,,,,,,,,,,667,,,667,,,667,667,,,667,', +'667,,667,,667,,,,,,,,667,,,,,667,667,667,667,667,667,,,,667,667,,,,', +',,667,,667,667,667,667,,,667,667,664,664,664,,664,,,,664,664,,,,664', +',664,664,664,664,664,664,664,,,,,,664,664,664,664,664,664,664,,,664', +',,,,,,664,,,664,664,664,664,664,664,664,664,,664,664,664,,664,664,,664', +'664,664,,,,,,,,,,,,,,,,,,,,664,,,664,,,664,664,,,664,,,,,,664,,,,,,', +',664,,,,,664,664,664,664,664,664,,,,664,664,,,,,,,664,,,664,664,664', +',,664,664,663,663,663,663,663,,,,663,663,,,,663,,663,663,663,663,663', +'663,663,,,,,,663,663,663,663,663,663,663,,,663,,,,,,663,663,,663,663', +'663,663,663,663,663,663,663,,663,663,663,,663,663,,663,663,663,,,,,', +',,,,,,,,,,,,,,663,,,663,,,663,663,,,663,,663,,,,663,,,,,,,,663,,,,,663', +'663,663,663,663,663,,,,663,663,,,,,,,663,,,663,663,663,,,663,663,476', +'476,476,,476,,,,476,476,,,,476,,476,476,476,476,476,476,476,,,,,,476', +'476,476,476,476,476,476,,,476,,,,,,,476,,,476,476,476,476,476,476,476', +'476,476,476,476,476,,476,476,,476,476,476,,,,,,,,,,,,,,,,,,,,476,,,476', +',,476,476,,,476,,476,,476,,476,,,,,,,,476,,,,,476,476,476,476,476,476', +',,,476,476,,,,,,,476,,476,476,476,476,,,476,476,478,478,478,,478,,,', +'478,478,,,,478,,478,478,478,478,478,478,478,,,,,,478,478,478,478,478', +'478,478,,,478,,,,,,,478,,,478,478,478,478,478,478,478,478,,478,478,478', +',478,478,,478,478,478,,,,,,,,,,,,,,,,,,,,478,,,478,,,478,478,,,478,', +',,,,478,,,,,,,,478,,,,,478,478,478,478,478,478,,,,478,478,,,,,,,478', +',,478,478,478,,,478,478,479,479,479,,479,,,,479,479,,,,479,,479,479', +'479,479,479,479,479,,,,,,479,479,479,479,479,479,479,,,479,,,,,,,479', +',,479,479,479,479,479,479,479,479,,479,479,479,,479,479,,479,479,479', +',,,,,,,,,,,,,,,,,,,479,,,479,,,479,479,,,479,,,,,,479,,,,,,,,479,,,', +',479,479,479,479,479,479,,,,479,479,,,,,,,479,,,479,479,479,,,479,479', +'480,480,480,,480,,,,480,480,,,,480,,480,480,480,480,480,480,480,,,,', +',480,480,480,480,480,480,480,,,480,,,,,,,480,,,480,480,480,480,480,480', +'480,480,,480,480,480,,480,480,,480,480,480,,,,,,,,,,,,,,,,,,,,480,,', +'480,,,480,480,,,480,,,,,,480,,,,,,,,480,,,,,480,480,480,480,480,480', +',,,480,480,,,,,,,480,,,480,480,480,,,480,480,660,660,660,,660,,,,660', +'660,,,,660,,660,660,660,660,660,660,660,,,,,,660,660,660,660,660,660', +'660,,,660,,,,,,,660,,,660,660,660,660,660,660,660,660,660,660,660,660', +',660,660,,660,660,660,,,,,,,,,,,,,,,,,,,,660,,,660,,,660,660,,,660,', +'660,,660,,660,,,,,,,,660,,,,,660,660,660,660,660,660,,,,660,660,,,,', +',,660,,660,660,660,660,,,660,660,659,659,659,,659,,,,659,659,,,,659', +',659,659,659,659,659,659,659,,,,,,659,659,659,659,659,659,659,,,659', +',,,,,,659,,,659,659,659,659,659,659,659,659,,659,659,659,,659,659,,659', +'659,659,,,,,,,,,,,,,,,,,,,,659,,,659,,,659,659,,,659,,,,,,659,,,,,,', +',659,,,,,659,659,659,659,659,659,,,,659,659,,,,,,,659,,,659,659,659', +',,659,659,658,658,658,,658,,,,658,658,,,,658,,658,658,658,658,658,658', +'658,,,,,,658,658,658,658,658,658,658,,,658,,,,,,,658,,,658,658,658,658', +'658,658,658,658,,658,658,658,,658,658,,658,658,658,,,,,,,,,,,,,,,,,', +',,658,,,658,,,658,658,,,658,,658,,,,658,,,,,,,,658,,,,,658,658,658,658', +'658,658,,,,658,658,,,,,,,658,,,658,658,658,,,658,658,629,629,629,,629', +',,,629,629,,,,629,,629,629,629,629,629,629,629,,,,,,629,629,629,629', +'629,629,629,,,629,,,,,,,629,,,629,629,629,629,629,629,629,629,,629,629', +'629,,629,629,,629,629,629,,,,,,,,,,,,,,,,,,,,629,,,629,,,629,629,,,629', +',,,,,629,,,,,,,,629,,,,,629,629,629,629,629,629,,,,629,629,,,,,,,629', +',,629,629,629,,,629,629,623,623,623,,623,,,,623,623,,,,623,,623,623', +'623,623,623,623,623,,,,,,623,623,623,623,623,623,623,,,623,,,,,,,623', +',,623,623,623,623,623,623,623,623,,623,623,623,,623,623,,623,623,623', +',,,,,,,,,,,,,,,,,,,623,,,623,,,623,623,,,623,,,,,,623,,,,,,,,623,,,', +',623,623,623,623,623,623,,,,623,623,,,,,,,623,,,623,623,623,,,623,623', +'611,611,611,,611,,,,611,611,,,,611,,611,611,611,611,611,611,611,,,,', +',611,611,611,611,611,611,611,,,611,,,,,,,611,,,611,611,611,611,611,611', +'611,611,611,611,611,611,,611,611,,611,611,611,,,,,,,,,,,,,,,,,,,,611', +',,611,,,611,611,,,611,,611,,611,,611,,,,,,,,611,,,,,611,611,611,611', +'611,611,,,,611,611,,,,,,,611,,611,611,611,611,,,611,611,588,588,588', +',588,,,,588,588,,,,588,,588,588,588,588,588,588,588,,,,,,588,588,588', +'588,588,588,588,,,588,,,,,,,588,,,588,588,588,588,588,588,588,588,,588', +'588,588,,588,588,,588,588,588,,,,,,,,,,,,,,,,,,,,588,,,588,,,588,588', +',,588,,,,,,588,,,,,,,,588,,,,,588,588,588,588,588,588,,,,588,588,,,', +',,,588,,,588,588,588,,,588,588,554,554,554,,554,,,,554,554,,,,554,,554', +'554,554,554,554,554,554,,,,,,554,554,554,554,554,554,554,,,554,,,,,', +',554,,,554,554,554,554,554,554,554,554,,554,554,554,,554,554,,554,554', +'554,,,,,,,,,,,,,,,,,,,,554,,,554,,,554,554,,,554,,,,,,554,,,,,,,,554', +',,,,554,554,554,554,554,554,,,,554,554,,,,,,,554,,,554,554,554,,,554', +'554,549,549,549,,549,,,,549,549,,,,549,,549,549,549,549,549,549,549', +',,,,,549,549,549,549,549,549,549,,,549,,,,,,,549,,,549,549,549,549,549', +'549,549,549,,549,549,549,,549,549,,549,549,549,,,,,,,,,,,,,,,,,,,,549', +',,549,,,549,549,,,549,,,,,,549,,,,,,,,549,,,,,549,549,549,549,549,549', +',,,549,549,,,,,,,549,,,549,549,549,,,549,549,545,545,545,,545,,,,545', +'545,,,,545,,545,545,545,545,545,545,545,,,,,,545,545,545,545,545,545', +'545,,,545,,,,,,,545,,,545,545,545,545,545,545,545,545,,545,545,545,', +'545,545,,,,545,,,,,,,,,,,,,,,,,,,,545,,,545,,,545,545,,,545,,,,,,,,', +',,,,,,,,,,545,545,545,545,545,545,,,,545,545,,,,,,,545,,,545,545,545', +',,545,545,539,539,539,,539,,,,539,539,,,,539,,539,539,539,539,539,539', +'539,,,,,,539,539,539,539,539,539,539,,,539,,,,,,,539,,,539,539,539,539', +'539,539,539,539,539,539,539,539,,539,539,,539,539,539,,,,,,,,,,,,,,', +',,,,,539,,,539,,,539,539,,,539,,539,,539,,539,,,,,,,,539,,,,,539,539', +'539,539,539,539,,,,539,539,,,,,,,539,,539,539,539,539,,,539,539,519', +'519,519,,519,,,,519,519,,,,519,,519,519,519,519,519,519,519,,,,,,519', +'519,519,519,519,519,519,,,519,,,,,,,519,,,519,519,519,519,519,519,519', +'519,519,519,519,519,,519,519,,519,519,519,,,,,,,,,,,,,,,,,,,,519,,,519', +',,519,519,,,519,,519,,519,,519,,,,,,,,519,,,,,519,519,519,519,519,519', +',,,519,519,,,,,,,519,,519,519,519,519,,,519,519,522,522,522,,522,,,', +'522,522,,,,522,,522,522,522,522,522,522,522,,,,,,522,522,522,522,522', +'522,522,,,522,,,,,,,522,,,522,522,522,522,522,522,522,522,522,522,522', +'522,,522,522,,522,522,522,,,,,,,,,,,,,,,,,,,,522,,,522,,,522,522,,,522', +',,,522,,522,,,,,,,,522,,,,,522,522,522,522,522,522,,,,522,522,,,,,,', +'522,,522,522,522,522,,,522,522,524,524,524,,524,,,,524,524,,,,524,,524', +'524,524,524,524,524,524,,,,,,524,524,524,524,524,524,524,,,524,,,,,', +',524,,,524,524,524,524,524,524,524,524,,524,524,524,,524,524,,524,524', +'524,,,,,,,,,,,,,,,,,,,,524,,,524,,,524,524,,,524,,,,,,524,,,,,,,,524', +',,,,524,524,524,524,524,524,,,,524,524,,,,,,,524,,,524,524,524,,,524', +'524,941,941,941,,941,,,,941,941,,,,941,,941,941,941,941,941,941,941', +',,,,,941,941,941,941,941,941,941,,,941,,,,,,,941,,,941,941,941,941,941', +'941,941,941,,941,941,941,,941,941,,,,941,,,,,,,,,,,,,,,,,,,,941,,,941', +',,941,941,,,941,,,,,,,,,,,,,,,,,,,941,941,941,941,941,941,,,,941,941', +',,,,,,941,,,941,941,941,,,941,941,246,246,246,,246,,,,246,246,,,,246', +',246,246,246,246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246', +',,,,,,246,,,246,246,246,246,246,246,246,246,,246,246,246,,246,246,,246', +'246,246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,', +',246,,,,,246,246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246', +',,246,246,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249,249', +'249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249,249', +'249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,,,,,', +',,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249,249', +'249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250,,250', +',,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250,250', +'250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250,250', +'250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250', +',,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,,,,,250', +',,250,250,250,,,250,250,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75', +'75,75,75,75,75,75,75,75,75,,,,75,75,75,75,75,75,75,75,75,75,,,,,,75', +'75,75,75,75,75,75,75,75,75,75,75,,75,,,,,,,75,75,,75,75,75,75,75,75', +'75,,,75,75,,,,75,75,75,75,,,,,,75,,,,,,,,75,75,,75,75,75,75,75,75,75', +'75,75,75,75,,,75,,,,,,,,,,,,,,,,,,,,75,,,,,75,12,12,12,12,12,12,12,12', +'12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12', +'12,12,12,12,,,,,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12', +'12,12,12,12,12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12', +'12,12,12,12,12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,,,,,12,423,423,423', +'423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423', +'423,423,423,423,,,,423,423,423,423,423,423,423,423,423,423,,,,,,423', +'423,423,423,423,423,423,423,423,,,423,,,,,,,,,423,423,,423,423,423,423', +'423,423,423,,,423,423,,,,423,423,423,423,,,,,,,,,,,,,,423,423,,423,423', +'423,423,423,423,423,423,423,423,423,,,423,423,,,,,,,,,,423,,,,,,,,,423', +',,,,423,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103', +'103,103,103,103,103,103,103,103,103,,,,103,103,103,103,103,103,103,103', +'103,103,,,,,,103,103,103,103,103,103,103,103,103,103,103,103,,103,,', +',,,,103,103,,103,103,103,103,103,103,103,,,103,103,,,,103,103,103,103', +',,,,,,,,,,,,,103,103,,103,103,103,103,103,103,103,103,103,103,103,,', +'103,,,,,,,,,,,,,,,,,,,,103,,,,,103,655,655,655,655,655,655,655,655,655', +'655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,,,,655,655', +'655,655,655,655,655,655,655,655,,,,,,655,655,655,655,655,655,655,655', +'655,,,655,,,,,,,,,655,655,,655,655,655,655,655,655,655,,,655,655,,,', +'655,655,655,655,,,,,,,,,,,,,,655,655,,655,655,655,655,655,655,655,655', +'655,655,655,,,655,655,,,,,,,,,,655,,,,,,,,,655,,,,,655,789,789,789,789', +'789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789', +'789,789,789,,,,789,789,789,789,789,789,789,789,789,789,,,,,,789,789', +'789,789,789,789,789,789,789,,,789,,,,,,,,,789,789,,789,789,789,789,789', +'789,789,,,789,789,,,,789,789,789,789,,,,,,,,,,,,,,789,789,,789,789,789', +'789,789,789,789,789,789,789,789,,,789,,,,,,,,,,,,,,,,,,,,789,,,,,789', +'11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11', +'11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11', +'11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,', +',,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,', +'11,,779,779,,,779,,,11,,,,,11,779,779,,779,779,779,779,779,779,779,', +',779,779,,,,779,779,779,779,,,,,,779,,,,,,,,779,779,,779,779,779,779', +'779,779,779,779,779,779,779,,,779,,,,,,,,,,230,230,,,230,,,,,,779,,', +'230,230,779,230,230,230,230,230,230,230,,,230,230,,,,230,230,230,230', +',,,,,230,,,,,,,,230,230,,230,230,230,230,230,230,230,230,230,230,230', +',,230,,,,,,,,,,229,229,,,229,,,,,,230,,,229,229,230,229,229,229,229', +'229,229,229,,,229,229,,,,229,229,229,229,,,,,,229,,,,,,,,229,229,,229', +'229,229,229,229,229,229,229,229,229,229,,,229,,,,,,,,,,778,778,,,778', +',,,,,229,,,778,778,229,778,778,778,778,778,778,778,,,778,778,,,,778', +'778,778,778,,,,,,778,,,,,,,,778,778,,778,778,778,778,778,778,778,778', +'778,778,778,,,778,,,,,,,,,,662,662,,,662,,,,,,778,,,662,662,778,662', +'662,662,662,662,662,662,,,662,662,,,,662,662,662,662,,,,,,662,,,,,,', +',662,662,,662,662,662,662,662,662,662,662,662,662,662,,,662,,,,,,,,', +',474,474,,,474,,,,,,662,,,474,474,662,474,474,474,474,474,474,474,,', +'474,474,,,,474,474,474,474,,,,,,474,,,,,,,,474,474,,474,474,474,474', +'474,474,474,474,474,474,474,,,474,,,,,,,,,,475,475,,,475,,,,,,474,,', +'475,475,474,475,475,475,475,475,475,475,,,475,475,,,,475,475,475,475', +',,,,,475,,,,,,,,475,475,,475,475,475,475,475,475,475,475,475,475,475', +',,475,,,,,,,,,,661,661,,,661,,,,,,475,,,661,661,475,661,661,661,661', +'661,661,661,,,661,661,,,,661,661,661,661,,,,,,661,,,,,,,,661,661,,661', +'661,661,661,661,661,661,661,661,661,661,,,661,,,,,,,,,,541,541,,,541', +',,,,,661,,,541,541,661,541,541,541,541,541,541,541,,,541,541,,,,541', +'541,541,541,,,,,,541,,,,,,,,541,541,,541,541,541,541,541,541,541,541', +'541,541,541,,1065,541,1065,1065,1065,1065,1065,,,,,279,279,,,279,1065', +',,,,541,,,279,279,541,279,279,279,279,279,279,279,,,279,279,1065,,,279', +'279,279,279,,,,,1065,1065,,,,,,,,279,279,,279,279,279,279,279,279,279', +'279,279,279,279,,,279,,,,,,,,,1065,551,551,,,551,,,,,,279,,,551,551', +'279,551,551,551,551,551,551,551,,,551,551,,,,551,551,551,551,,,,,,551', +',,,,,,,551,551,,551,551,551,551,551,551,551,551,551,551,551,,,551,,', +',,,,,,,550,550,,,550,,,,,,551,,,550,550,551,550,550,550,550,550,550', +'550,,,550,550,,,,550,550,550,550,,,,,,550,,,,,,,,550,550,,550,550,550', +'550,550,550,550,550,550,550,550,,,550,,,,,,,,,,540,540,,,540,,,,,,550', +',,540,540,550,540,540,540,540,540,540,540,,,540,540,,,,540,540,540,540', +',,,,,540,,,,,,,,540,540,,540,540,540,540,540,540,540,540,540,540,540', +',,540,,,,,,,,,,613,613,,,613,,,,,,540,,,613,613,540,613,613,613,613', +'613,613,613,,,613,613,,,,613,613,613,613,,,,,,613,,,,,,,,613,613,,613', +'613,613,613,613,613,613,613,613,613,613,,,613,,,,,,,,,,612,612,,,612', +',,,,,613,,,612,612,613,612,612,612,612,612,612,612,,,612,612,,,,612', +'612,612,612,,,,,,612,,,,,,,,612,612,,612,612,612,612,612,612,612,612', +'612,612,612,,,612,,,,,,,,,,1037,1037,,,1037,,,,,,612,,,1037,1037,612', +'1037,1037,1037,1037,1037,1037,1037,,,1037,1037,,,,1037,1037,1037,1037', +',,,,,1037,,,,,,,,1037,1037,,1037,1037,1037,1037,1037,1037,1037,1037', +'1037,1037,1037,,,1037,,,,,,,,,,1042,1042,,,1042,,,,,,1037,,,1042,1042', +'1037,1042,1042,1042,1042,1042,1042,1042,,,1042,1042,,,,1042,1042,1042', +'1042,,,,,,1042,,,,,,,,1042,1042,,1042,1042,1042,1042,1042,1042,1042', +'1042,1042,1042,1042,,,1042,745,,745,745,745,745,745,,,1043,1043,,,1043', +',,745,,,1042,,,1043,1043,1042,1043,1043,1043,1043,1043,1043,1043,,,1043', +'1043,,,745,1043,1043,1043,1043,,,,,,1043,745,745,,,,,,1043,1043,,1043', +'1043,1043,1043,1043,1043,1043,1043,1043,1043,1043,,1061,1043,1061,1061', +'1061,1061,1061,,,,,,745,,,,1061,,,,,1043,,,,953,1043,953,953,953,953', +'953,,,,,,,1061,,354,953,354,354,354,354,354,1061,1061,1061,1061,,,,', +'788,354,788,788,788,788,788,,953,,,,,,,,788,,,953,953,,,354,354,,,,1061', +',,,354,354,354,354,,,788,955,,955,955,955,955,955,,788,788,788,788,', +',953,1047,955,1047,1047,1047,1047,1047,,,,,,,,354,988,1047,988,988,988', +'988,988,,955,,,,,,788,,988,,,955,955,,,1047,986,,986,986,986,986,986', +',,,1047,1047,,,988,983,986,983,983,983,983,983,,,,988,988,,,955,831', +'983,831,831,831,831,831,,986,,,,,,1047,,831,986,986,986,986,,,983,,', +',,,988,,,983,983,983,983,,,831,1063,,1063,1063,1063,1063,1063,,831,831', +'831,831,,,986,,1063,,,,,,,,,,,,,983,,,,,,,831,,1063,,,,,,831,,,,,1063', +'1063,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1063' ] + racc_action_check = arr = ::Array.new(26358, nil) + idx = 0 + clist.each do |str| + str.split(',', -1).each do |i| + arr[idx] = i.to_i unless i.empty? + idx += 1 + end + end + +racc_action_pointer = [ + nil, 1201, 3200, 845, nil, 92, nil, nil, 6299, 952, + nil, 24627, 23937, 699, nil, 661, 659, 707, 641, 495, + 496, nil, -68, 6439, 2777, 681, nil, -47, nil, 2, + 1068, 1800, 6579, 6719, 6859, nil, 2354, 6999, 7139, nil, + 577, 432, 494, 604, 181, 7419, 7559, -43, 7699, 478, + 740, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 1668, nil, 7839, nil, nil, -23, nil, 7979, 8119, nil, + nil, 8259, 8399, 470, nil, 23799, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 114, nil, nil, nil, nil, nil, nil, 350, + 316, 314, 285, 24213, nil, nil, nil, nil, nil, nil, + 384, nil, nil, 662, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 8679, nil, nil, nil, + nil, 8819, 8959, 9099, 9239, 9379, 254, nil, 721, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 213, nil, 2213, 9659, 9799, 9939, 10079, 10219, 10359, 24849, + 24776, nil, nil, 10499, 10639, 10779, nil, nil, 579, 264, + 259, 213, 203, 64, 13, nil, 23379, 2918, 0, 23519, + 23659, 10919, 11059, 11199, 11339, 11479, 11619, 11759, 11899, 12039, + 12179, 12319, 12459, 12599, 12739, 12879, 13019, 13159, 13299, 13439, + 13579, nil, nil, nil, nil, 13719, nil, nil, nil, 25360, + nil, nil, -41, 13999, nil, nil, 1224, nil, nil, nil, + 14279, nil, nil, 14419, nil, 2495, nil, 1170, 1169, nil, + 14839, 1207, 14979, nil, nil, 15119, 15259, nil, nil, 509, + nil, nil, 15399, 1207, nil, 1137, 5174, 1146, 1152, 1113, + 15679, 4469, 351, 356, 490, 1165, 772, nil, 1124, 1081, + -19, nil, nil, nil, 1112, 164, 1069, 16659, nil, 429, + 1126, 773, nil, 1118, 16939, nil, 17079, 5597, 1184, 1058, + 17219, 17359, nil, nil, 26046, 396, 148, 90, 17499, 5456, + 4751, 375, 1167, 1047, 28, 21, 424, 1113, -14, 1140, + nil, nil, 17779, nil, 17919, 175, 235, -61, 352, 443, + 448, 470, 527, 531, nil, 575, nil, nil, nil, nil, + nil, 448, nil, 424, nil, 154, nil, 1001, 296, nil, + 992, nil, 991, 160, nil, 980, 125, nil, 180, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 24075, nil, nil, nil, nil, 987, nil, + nil, 969, 19459, 961, nil, nil, 925, nil, 615, 389, + 1006, nil, nil, 1931, nil, nil, nil, nil, nil, 2072, + 920, nil, nil, 916, 910, 427, 171, 1540, nil, nil, + nil, 801, 0, 935, nil, nil, 1408, 1276, nil, nil, + nil, 154, nil, 930, 25068, 25141, 20719, 107, 20859, 20999, + 21139, 3341, 3200, 695, 617, 951, 918, 914, 911, 1358, + 1174, 1161, 4328, 4187, 3905, 3764, 3482, 3059, 948, 1083, + 4046, 3623, 2213, 1227, 851, nil, 1196, nil, nil, nil, + nil, nil, nil, nil, nil, 733, 730, nil, nil, 22819, + nil, nil, 22959, nil, 23099, nil, 164, nil, nil, nil, + 9519, 909, 721, 723, nil, nil, 725, 6159, 729, 22679, + 25579, 25287, 754, 773, nil, 22539, 736, nil, 800, 22399, + 25506, 25433, 960, 2354, 22259, 883, 882, 767, nil, nil, + 118, 568, 801, 786, nil, 165, 813, nil, 1032, nil, + 774, 784, nil, 789, 791, 797, nil, nil, nil, nil, + nil, nil, nil, nil, 786, 933, nil, nil, 22119, nil, + nil, nil, 883, nil, nil, nil, 884, nil, nil, 889, + 4046, 941, nil, 5738, 28, 951, 952, 951, 965, nil, + nil, 21979, 25725, 25652, -19, nil, 353, 259, 527, nil, + 260, nil, 873, 21839, nil, 893, nil, nil, nil, 21699, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 258, nil, nil, 382, nil, nil, nil, 859, nil, + nil, 880, nil, 1931, nil, 24351, nil, 890, 21559, 21419, + 21279, 25214, 24995, 20579, 20439, 341, 934, 20299, 20159, 20019, + 19879, 951, nil, nil, nil, 19739, 19599, 953, nil, nil, + nil, 230, 174, 929, 523, 947, 950, nil, -63, 1052, + -24, nil, 978, nil, 1083, nil, nil, 967, nil, 1009, + 19319, nil, nil, 19179, nil, -95, 19039, 972, nil, 976, + 4, -5, 1016, 29, 804, 1022, 984, 18899, 18759, 1050, + 152, 52, nil, 18619, nil, nil, nil, nil, 18479, nil, + nil, 18339, nil, nil, nil, -10, 1002, 339, nil, nil, + 289, 1471, nil, 1731, nil, 25935, nil, 18199, nil, 628, + nil, 1005, 319, 1023, nil, nil, nil, nil, 738, nil, + 1141, nil, nil, nil, nil, nil, 1148, nil, 18059, 1034, + 33, 57, 159, 160, 3764, nil, 768, nil, 24922, 24703, + 17639, nil, nil, nil, 156, 2495, 4187, 730, 26061, 24489, + 61, 905, 3905, nil, nil, 292, nil, nil, nil, 1077, + nil, 1062, 16799, 1066, 362, 290, 128, 256, nil, 2918, + 16519, nil, 1071, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 16379, 16239, 16099, 15959, 271, 15819, nil, + nil, 26184, nil, 3623, nil, nil, 1117, nil, -54, nil, + nil, nil, nil, 1102, 27, nil, nil, nil, nil, nil, + nil, nil, 4328, nil, 1105, 1152, nil, nil, 584, nil, + 4892, 5033, 1121, 1127, 1125, nil, nil, nil, 1126, 1127, + nil, 1130, 1132, nil, 1139, nil, nil, 1143, 1072, 1141, + 1065, nil, 1262, nil, nil, 15539, nil, 5315, 1282, nil, + nil, 50, -13, 1284, 670, 629, nil, 1171, 2072, 14699, + 394, 1291, nil, 1179, 351, nil, nil, nil, nil, nil, + nil, nil, 1168, nil, nil, 1178, 379, nil, nil, 14559, + 14139, 2636, 1191, 1192, nil, 1194, 1195, 1196, nil, 1220, + -91, -101, 13859, nil, nil, nil, nil, 2777, 3341, nil, + 136, 23239, nil, nil, 115, 236, 868, nil, nil, 487, + nil, 1339, nil, 26031, nil, 26100, nil, nil, nil, nil, + 257, 1504, 186, nil, 49, nil, nil, 6019, 5879, nil, + nil, 372, 426, nil, nil, 396, nil, nil, 317, nil, + -52, nil, nil, 26169, nil, nil, 26154, nil, 26130, nil, + nil, 365, 8539, 718, 443, nil, 492, 4610, 51, 151, + 633, 524, -9, nil, nil, nil, -103, nil, nil, nil, + 484, 486, 490, 508, 514, 1401, 526, 1415, 3482, nil, + 293, nil, nil, 3059, nil, 2636, 534, nil, nil, 536, + 538, 543, 548, nil, 558, nil, 839, 25798, nil, nil, + 689, 7279, 25871, 25944, 47, nil, 769, 26115, nil, nil, + nil, nil, 922, 583, 764, nil, nil, nil, 706, 715, + nil, 26006, nil, 26223, nil, 25349, nil, 1162, nil, nil, + 664, 702, nil, 676, 20, 21, 120, 35, nil, 687, + 692, nil, nil, nil, 698, 704, 706, 707, 8, nil, + 591, nil, nil, nil, nil, 720, nil ] + +racc_action_default = [ + -1, -654, -653, -654, -2, -640, -4, -5, -654, -8, + -9, -654, -654, -654, -35, -654, -654, -39, -654, -654, + -297, -51, -642, -654, -56, -61, -62, -63, -67, -274, + -274, -274, -312, -346, -347, -79, -653, -83, -91, -93, + -654, -541, -542, -654, -654, -654, -654, -233, -654, -642, + -247, -288, -289, -290, -291, -292, -293, -294, -295, -296, + -626, -299, -301, -308, -310, -320, -426, -654, -654, -58, + -58, -640, -654, -330, -337, -654, -348, -349, -351, -352, + -353, -354, -355, -356, -357, -358, -359, -360, -369, -471, + -472, -473, -474, -475, -476, -653, -479, -653, -653, -653, + -489, -653, -653, -653, -517, -523, -525, -526, -527, -528, + -624, -530, -531, -625, -533, -534, -535, -536, -537, -538, + -539, -540, -545, -546, 1097, -3, -641, -649, -650, -651, + -7, -654, -654, -654, -654, -654, -654, -23, -654, -122, + -123, -124, -125, -126, -127, -128, -129, -130, -134, -135, + -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, + -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, + -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, + -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, + -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, + -186, -187, -188, -189, -190, -191, -192, -193, -194, -195, + -196, -197, -198, -199, -200, -201, -202, -203, -204, -205, + -28, -131, -653, -654, -654, -654, -654, -654, -653, -654, + -654, -636, -637, -654, -654, -642, -643, -55, -654, -541, + -542, -654, -297, -654, -654, -239, -654, -653, -654, -218, + -219, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -248, -249, -250, -251, -654, -362, -455, -434, -654, + -638, -639, -68, -654, -319, -361, -654, -448, -450, -74, + -653, -445, -75, -642, -76, -254, -269, -653, -653, -273, + -654, -279, -654, -653, -618, -654, -654, -77, -78, -640, + -17, -18, -654, -21, -22, -81, -653, -642, -654, -84, + -87, -653, -99, -100, -654, -654, -107, -312, -315, -642, + -438, -346, -347, -350, -446, -654, -89, -654, -95, -307, + -524, -654, -227, -228, -654, -240, -654, -653, -303, -642, + -653, -653, -321, -322, -573, -57, -654, -654, -654, -653, + -653, -640, -654, -641, -541, -542, -654, -654, -297, -654, + -379, -380, -654, -333, -654, -122, -123, -165, -166, -167, + -183, -188, -195, -198, -340, -654, -541, -542, -613, -614, + -477, -654, -501, -654, -503, -654, -505, -654, -654, -484, + -654, -653, -654, -654, -497, -654, -654, -499, -654, -516, + -518, -519, -520, -521, -6, -652, -29, -30, -31, -32, + -33, -10, -11, -654, -25, -26, -27, -132, -654, -36, + -38, -284, -654, -654, -283, -37, -654, -40, -654, -297, + -48, -50, -206, -259, -279, -52, -53, -41, -207, -259, + -642, -264, -265, -653, -653, -627, -628, -274, -443, -629, + -630, -628, -627, -274, -442, -444, -629, -630, -47, -215, + -54, -642, -318, -654, -654, -654, -653, -307, -654, -654, + -654, -216, -217, -220, -221, -222, -223, -224, -225, -229, + -230, -231, -232, -234, -235, -236, -237, -238, -241, -242, + -243, -244, -642, -252, -654, -456, -274, -627, -628, -65, + -69, -275, -439, -452, -455, -642, -642, -314, -270, -654, + -278, -271, -654, -276, -654, -280, -654, -621, -623, -16, + -641, -20, -642, -80, -305, -96, -85, -654, -642, -653, + -654, -654, -106, -654, -524, -654, -92, -97, -654, -654, + -654, -654, -253, -245, -654, -463, -654, -642, -302, -255, + -646, -646, -654, -654, -616, -646, -654, -427, -573, -430, + -612, -612, -556, -558, -558, -558, -572, -574, -575, -576, + -577, -578, -579, -580, -581, -654, -583, -585, -587, -592, + -594, -595, -597, -602, -604, -605, -607, -608, -609, -654, + -653, -370, -371, -653, -654, -654, -654, -654, -654, -365, + -458, -653, -654, -654, -307, -58, -117, -118, -654, -120, + -654, -297, -653, -654, -338, -551, -343, -634, -635, -654, + -478, -502, -507, -508, -510, -480, -504, -481, -506, -482, + -483, -654, -486, -488, -654, -491, -493, -494, -654, -495, + -496, -654, -522, -653, -24, -654, -34, -287, -654, -654, + -653, -654, -654, -654, -654, -447, -654, -266, -268, -654, + -654, -70, -262, -263, -440, -654, -654, -72, -441, -317, + -644, -627, -628, -627, -628, -642, -654, -433, -653, -64, + -435, -452, -654, -453, -654, -261, -313, -653, -277, -281, + -654, -619, -620, -654, -19, -82, -654, -88, -94, -642, + -627, -628, -653, -631, -105, -654, -90, -654, -654, -226, + -642, -653, -363, -653, -300, -368, -304, -256, -648, -647, + -258, -648, -309, -311, -617, -654, -642, -654, -554, -555, + -654, -654, -565, -654, -568, -654, -570, -654, -381, -654, + -383, -385, -392, -642, -586, -596, -606, -610, -653, -372, + -653, -59, -373, -374, -325, -326, -654, -328, -654, -642, + -627, -628, -631, -306, -653, -117, -118, -119, -654, -654, + -653, -331, -547, -549, -334, -653, -653, -573, -573, -654, + -642, -654, -653, -485, -487, -654, -490, -498, -500, -654, + -133, -285, -654, -642, -627, -628, -628, -627, -49, -260, + -654, -645, -653, -43, -209, -44, -210, -71, -45, -212, + -46, -211, -73, -654, -654, -654, -654, -447, -654, -415, + -416, -642, -418, -653, -437, -436, -654, -449, -653, -451, + -272, -282, -622, -86, -447, -98, -214, -316, -13, -15, + -364, -366, -653, -470, -464, -653, -465, -466, -646, -428, + -653, -653, -420, -642, -612, -593, -611, -557, -558, -558, + -584, -558, -558, -603, -558, -581, -598, -642, -654, -390, + -654, -582, -654, -367, -375, -654, -377, -653, -654, -60, + -327, -654, -447, -654, -117, -118, -121, -642, -653, -654, + -654, -654, -341, -642, -654, -344, -615, -509, -512, -513, + -514, -515, -654, -492, -12, -286, -447, -42, -208, -267, + -654, -246, -612, -612, -397, -653, -653, -653, -414, -654, + -642, -581, -589, -590, -600, -457, -66, -653, -653, -469, + -654, -654, -468, -257, -654, -654, -654, -429, -553, -654, + -561, -654, -563, -654, -566, -654, -569, -571, -382, -384, + -388, -654, -393, -323, -654, -378, -324, -654, -653, -329, + -447, -654, -654, -335, -339, -654, -550, -552, -551, -511, + -654, -395, -396, -405, -399, -407, -654, -410, -654, -412, + -417, -654, -654, -588, -654, -454, -653, -653, -541, -542, + -654, -654, -297, -467, -431, -432, -642, -422, -424, -425, + -558, -558, -558, -558, -386, -654, -391, -654, -653, -281, + -653, -332, -548, -653, -342, -653, -612, -591, -398, -653, + -653, -653, -653, -601, -653, -419, -599, -654, -307, -14, + -463, -653, -654, -654, -307, -421, -654, -654, -559, -562, + -564, -567, -654, -389, -653, -459, -460, -461, -654, -654, + -394, -654, -402, -654, -404, -654, -408, -654, -411, -413, + -306, -631, -462, -642, -627, -628, -631, -306, -423, -558, + -387, -376, -336, -345, -653, -653, -653, -653, -447, -560, + -654, -400, -403, -406, -409, -653, -401 ] + +clist = [ +'6,608,234,384,450,296,296,296,229,356,357,4,291,361,352,278,280,29,319', +'318,137,221,521,29,556,142,142,359,360,346,721,410,297,297,297,786,129', +'569,29,600,603,882,434,435,282,289,292,29,29,29,441,29,510,441,355,355', +'701,126,355,441,237,457,463,125,145,145,515,147,147,546,333,333,584', +'416,417,418,419,29,870,317,576,849,29,29,336,504,29,340,863,142,298', +'298,298,392,888,394,396,399,641,404,407,394,129,391,665,333,315,294', +'307,308,447,506,692,873,777,753,468,142,355,355,355,355,1033,698,926', +'833,698,130,636,362,638,738,739,642,1007,727,730,625,962,393,734,29', +'959,636,975,408,29,29,29,29,29,789,978,1009,9,622,761,624,928,423,9', +'430,371,930,220,704,1006,567,859,354,735,938,513,514,838,688,1055,768', +'521,855,940,390,395,929,398,848,644,401,403,406,907,791,792,409,899', +'653,136,1033,868,421,865,296,701,1027,629,428,344,2,562,655,690,458', +'445,446,348,388,748,563,353,1016,691,470,471,433,433,1,451,474,369,781', +'318,279,889,385,1078,626,347,29,29,29,29,29,29,29,467,414,766,349,29', +'29,29,736,685,1009,557,350,296,351,372,898,429,440,29,296,440,701,296', +'623,512,707,440,698,698,1053,896,937,1029,716,9,877,900,959,991,297', +'1023,374,584,420,451,785,836,,870,297,576,520,520,,29,318,604,392,,', +'318,29,457,463,29,543,1080,526,,540,,709,291,,547,873,870,869,694,871', +',,,29,,,550,29,,742,744,746,29,1081,,827,129,298,605,606,795,355,,,559', +'564,560,298,,333,1056,612,1039,,511,532,,530,29,844,538,,536,529,516', +',333,448,712,29,29,29,794,469,544,642,748,,712,879,,,315,769,1025,,', +'315,129,,,,,,,645,,,,,870,333,864,333,561,565,,927,,,,,,,,607,,840,', +'892,,948,,661,,,666,,654,943,,,803,142,843,673,,817,,,712,678,,822,', +'296,,520,520,701,,672,458,916,,584,,584,901,902,531,,,,,,903,904,671', +',451,,145,,677,147,,,686,981,982,441,,,673,467,,29,,457,463,441,441', +',,,923,441,441,,672,584,584,,,748,935,748,296,576,576,1072,,,547,,,689', +'458,698,,,547,,,1010,794,866,458,,866,,840,451,945,,,720,856,,,29,,', +',931,,970,813,815,29,467,897,,818,820,,,,1030,,467,1031,,,29,333,,,774', +'968,971,,697,333,,,,,758,296,,760,1060,,,,1014,748,,458,,,,,,,,,,,,', +',,451,784,712,,,,29,790,,29,,783,,469,997,448,924,29,467,950,952,,954', +'956,296,957,762,441,,29,835,,1084,,458,29,,748,1018,748,1026,,6,923', +',,923,,923,451,1057,,,799,,800,666,,584,29,142,,,,,29,29,467,,29,834', +',,,748,29,29,829,547,,666,29,29,,917,673,520,440,678,845,,1058,931,1059', +',931,,440,440,145,,672,147,440,440,,,862,905,,853,,857,,433,,812,,1088', +',,923,,923,,923,,923,,,333,,,,,,,,,,666,333,,,296,,,886,893,886,923', +',458,,,,,,,891,,1048,1049,1050,1051,866,912,,924,451,931,924,,924,666', +',,858,,,29,,,467,,,29,,,,,29,29,,142,,9,,29,,,520,862,,814,816,808,', +'1073,,819,821,,,,,29,,964,,,,,,,,939,829,,932,1089,,972,,944,,724,,440', +'29,,,,,942,,924,,924,,924,,924,846,,,,,29,,,965,,355,,712,29,29,666', +',,,,,,924,,355,,,,,,,,764,765,,767,,,29,,29,872,,874,,,,,862,,19,29', +'29,,,,19,,995,996,,984,984,984,,,,,,973,,238,,977,,,,,,,238,238,238', +',19,324,324,,,1020,29,29,918,,,,,,,,,,,333,,814,816,821,819,,19,,333', +',,238,238,,1040,238,366,29,,,1045,932,,1042,932,925,,932,853,932,,,', +',,1054,,1022,,,,,,,,,29,,296,,,,886,,,,,,458,333,,984,984,984,984,,984', +'29,,,19,,29,451,29,238,238,238,238,19,,,,472,,467,886,666,41,890,29', +'467,,,41,,,,918,,,,932,,932,,932,,932,,,,,,,,984,984,984,984,,,41,322', +'322,,,984,,,,932,,,,,,,,,,517,,1011,,1012,,1013,41,,,,,,,,,,364,,,386', +',,,533,19,238,438,238,238,438,238,,,,,438,238,238,1032,,1034,985,987', +'989,,,,,,19,,,,431,444,558,,,,,,,,963,,,,,,966,41,,,,969,,,,,41,,,974', +',,238,,,,,,,238,,,238,,,,1079,,,,,,,,,,,,,,1085,19,1086,,1087,19,,,', +'324,19,,,,,,,523,,525,,,527,528,,,324,,,1095,,,1062,1064,1066,1068,19', +'1069,,1021,,,,1024,,,,238,19,19,,,32,41,,,,,32,,,620,,620,679,,,,566', +',,,,32,,,,,41,,,,32,32,32,,32,1091,1092,1093,1094,,,,,,,,1096,,,,,,', +',,,695,696,,,32,,,,,32,32,,,32,,,,705,1082,1083,,,,708,,,,,,,,,,,,41', +',,,41,,657,726,322,41,,,,,,,,,,,,,238,,,322,,,,,,,,32,,41,,,32,32,32', +'32,32,,,,,41,41,,,,,,,,,,,,386,,386,,,,,,,,,,,,,,19,,18,,,,,324,18,238', +',,,,,324,,699,,,566,,702,,238,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,32,32,32', +'32,32,32,32,,,18,,32,32,32,,,,19,,,19,,,,,32,,,238,,,,,754,,,,,,,238', +'847,,,,,238,,,,,,,,,,,,,,,32,,,,,,,32,,19,32,,18,881,,438,238,,,19,', +'18,,,,438,438,,41,32,,438,438,32,,322,,,32,,,,801,322,,,,,,,906,699', +'566,,,,,,,,,,324,,32,,,,,,,,,324,,32,32,32,,,,,,,841,,,842,,,,,,,,,', +',41,,,41,,,,,,854,18,,18,,699,18,,566,,,,18,,,,947,,,,,,,19,876,,18', +',,238,958,,,,19,19,,,,,,19,,,41,444,16,,,,,,16,,41,,976,,,438,,,,,,', +',,,,,,,,,,,,,915,16,,19,,,,32,,,,,18,,,,18,,322,,,18,19,,,,,16,,322', +'19,19,,,,,,370,,,,,,,,,,18,,,,,,,,238,,19,,18,18,32,,,,,,,19,238,32', +',,,,,,,,,,,,,,32,41,,,,,16,,,,,,41,41,,16,,993,,41,,,19,19,,,1000,,', +',,,566,,,,,,,,,,,,,,32,,,32,,,,19,,,,32,,,41,,,,,,,,,32,,,,,,32,,1036', +',41,1019,,19,,,,,41,41,,,,,,,,,,,32,,,16,19,436,32,32,436,19,32,19,', +',436,41,32,32,,,,,32,32,,,41,238,16,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,', +',386,,,,,41,41,,,998,,,,,,,,,,,,,,,,,,,,,,,,16,,,41,16,,,,,16,,,,,,', +',,,,,,,18,,,18,386,32,,,,41,,32,16,,,,32,32,,,,,,32,16,16,,,,,41,,,', +',41,,41,42,,,32,,,42,,,,,,,,,18,,,,,,18,,,,18,32,,,,,18,18,,42,323,323', +'18,18,,,,,,,32,,,,,,,,32,32,,,,,,42,,,,,,,,,,365,,,387,,,,,32,,32,,', +',,,,,,,,32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,32,32,,42,,,18', +',,,,,,,,,,18,18,,,,,,18,,,16,,,,32,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,32', +',,,,18,,,,,,,,20,,,,,,20,,32,,,18,,32,,32,,42,,18,18,,,,16,,,16,,,,32', +',,20,326,326,,,,,,42,,,,18,,,,,,,,,,,18,,,20,,,,,,,,,,368,,,,,,,16,', +',,,,436,,,,16,,,,,,436,436,,18,18,,436,436,,,,,,,42,,,,42,,,,323,42', +',,,,,,,20,,,18,,,,,323,20,,,,,,,,,42,,,,,,,,,,,,42,42,18,,,,,,,,,,,387', +',387,,,,,,,,18,,,,,18,,18,,,,,,,,,,,,,,16,,,,,,,,,,,16,16,,,,,,16,,', +',20,,439,,,439,,,,,,439,,,436,,,,,,,,,,,20,,,,,,,,,,,,16,,,,,,,,,,,', +',,,,,,,16,,,,,,,,16,16,,,,,,,,,,,,,,,,,,,,,,,,,20,16,,,20,,,,326,20', +',,16,,,42,,,,,,,323,,,326,,,,,323,,,,,20,,,,,,,,,,,,20,20,,,16,16,,', +'1003,,,,,621,,621,,,,,,,,,,,,,,,,,,,,16,,,42,,,42,,,,,,,,,,,,,,,,,,', +',,,,16,,,,,,,,,,,,,,,,,,,,,16,,,,,16,42,16,,,,,,,,,42,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,323,,,,,,,,,,,323,,,,,,,,,,,,,,,,20,,,,', +',,326,,,,,,,,326,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,42,42,,,,,,42', +',,,,,,,,,,20,,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,42', +',,,20,,,,42,42,439,,,,20,,,,,,439,439,,,,,439,439,,,245,,,,,42,,,,295', +'295,295,,,,,42,,,,,,342,343,,345,,326,,,,,,,,,,,326,,,,,,,,,,,,387,', +',,,42,42,,,999,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,20,,,,,,,,,,,20', +'20,,,387,,911,20,,42,,,,,,,,,,,,,,,,439,,,,,42,,,,,42,,42,,,,,,,,,,', +'20,,,,,,,,,,,,,,,,,,,20,,,,,,,,20,20,,,,,,,,,,,,,,,,,,295,443,,,449', +'295,,,20,,449,,,,,,,,,20,,,,245,,,481,482,483,484,485,486,487,488,489', +'490,491,492,493,494,495,496,497,498,499,500,501,502,,,,,503,621,,,,', +'20,20,295,,1002,,,,,295,,,295,,,,,,,295,,295,,,295,295,,,,,,20,,,,,', +',,,,,,,,,,,,,,,,,,621,,,,,20,,,552,,553,,,,295,295,,,,,,,,,,,20,,,,', +'20,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',295,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,449,449,449,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,295,,295,,,,,,,,,,,,,,,295', +',,,,,,,,,719,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,,,,,,', +',,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,449,295', +',,,809,,,295,295,449,449,,,,,449,449,,,,,,,,,,,,,,,,,,,,,,,,295,,,295', +',,,,,,,,,,,,,,449,,,,,295,,,,,295,,,295,,,,,,,,,,,,,,,,295,,,,,,,,,', +',,,,,,,,,,,295,,,,,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,449,,', +',,,,,,,,,,449,449,449,449,,921,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,449,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295' ] + racc_goto_table = arr = ::Array.new(3977, nil) + idx = 0 + clist.each do |str| + str.split(',', -1).each do |i| + arr[idx] = i.to_i unless i.empty? + idx += 1 + end + end + +clist = [ +'6,115,39,69,35,45,45,45,37,23,23,2,87,23,104,173,37,53,62,14,21,21,89', +'53,12,70,70,41,41,39,15,69,84,84,84,123,120,172,53,108,108,109,28,28', +'50,50,50,53,53,53,24,53,51,24,30,30,221,8,30,24,26,49,49,5,73,73,35', +'74,74,64,79,79,210,23,23,23,23,53,211,59,205,17,53,53,63,174,53,77,164', +'70,86,86,86,6,111,6,6,6,194,6,6,6,120,190,36,79,58,57,57,57,32,49,52', +'216,67,150,32,70,30,30,30,30,217,90,160,162,90,7,195,5,195,155,155,195', +'166,85,85,138,151,191,85,53,148,195,139,191,53,53,53,53,53,140,141,167', +'9,68,42,68,152,31,9,29,25,158,22,20,165,168,169,170,171,18,177,178,180', +'182,183,184,89,185,186,189,192,164,193,16,196,197,198,199,200,201,202', +'203,204,13,11,217,209,10,213,45,221,214,220,14,80,3,83,75,88,87,30,30', +'9,100,149,103,106,151,54,30,30,84,84,1,6,37,117,119,14,48,44,124,166', +'125,126,53,53,53,53,53,53,53,70,7,115,127,53,53,53,172,35,167,128,129', +'45,130,131,132,26,26,53,45,26,221,45,133,87,64,26,90,90,151,67,162,160', +'64,9,150,134,148,164,84,135,136,210,9,6,137,52,,211,84,205,6,6,,53,14', +'23,6,,,14,53,49,49,53,39,151,190,,37,,35,87,,62,216,211,161,174,161', +',,,53,,,37,53,,208,208,208,53,109,,36,120,86,14,14,194,30,,,6,6,84,86', +',79,111,37,17,,57,59,,8,53,36,59,,63,5,57,,79,76,49,53,53,53,195,76', +'77,195,149,,49,149,,,58,35,123,,,58,120,,,,,,,6,,,,,211,79,154,79,86', +'86,,161,,,,,,,,5,,89,,36,,155,,37,,,39,,21,85,,,35,70,64,87,,51,,,49', +'87,,51,,45,,6,6,221,,6,87,36,,210,,210,12,12,9,,,,,,172,172,50,,6,,73', +',50,74,,,39,155,155,24,,,87,70,,53,,49,49,24,24,,,,154,24,24,,6,210', +'210,,,149,12,149,45,205,205,15,,,62,,,50,87,90,,,62,,,161,195,156,87', +',156,,89,6,12,,,30,28,,,53,,,,210,,36,32,32,53,70,35,,32,32,,,,161,', +'70,161,,,53,79,,,41,108,12,,86,79,,,,,14,45,,14,155,,,,149,149,,87,', +',,,,,,,,,,,,,6,30,49,,,,53,30,,53,,6,,76,108,76,156,53,70,208,208,,208', +'208,45,208,120,24,,53,104,,161,,87,53,,149,108,149,154,,6,154,,,154', +',154,6,115,,,2,,21,39,,210,53,70,,,,,53,53,70,,53,173,,,,149,53,53,6', +'62,,39,53,53,,32,87,6,26,87,62,,12,210,12,,210,,26,26,73,,6,74,26,26', +',,39,69,,6,,6,,84,,86,,36,,,154,,154,,154,,154,,,79,,,,,,,,,,39,79,', +',45,,,6,14,6,154,,87,,,,,,,84,,208,208,208,208,156,14,,156,6,210,156', +',156,39,,,86,,,53,,,70,,,53,,,,,53,53,,70,,9,,53,,,6,39,,76,76,9,,35', +',76,76,,,,,53,,23,,,,,,,,14,6,,212,208,,23,,14,,102,,26,53,,,,,6,,156', +',156,,156,,156,76,,,,,53,,,14,,30,,49,53,53,39,,,,,,,156,,30,,,,,,,', +'102,102,,102,,,53,,53,159,,159,,,,,39,,34,53,53,,,,34,,14,14,,6,6,6', +',,,,,120,,34,,120,,,,,,,34,34,34,,34,34,34,,,14,53,53,76,,,,,,,,,,,79', +',76,76,76,76,,34,,79,,,34,34,,14,34,34,53,,,39,212,,37,212,159,,212', +'6,212,,,,,,14,,120,,,,,,,,,53,,45,,,,6,,,,,,87,79,,6,6,6,6,,6,53,,,34', +',53,6,53,34,34,34,34,34,,,,60,,70,6,39,65,102,53,70,,,65,,,,76,,,,212', +',212,,212,,212,,,,,,,,6,6,6,6,,,65,65,65,,,6,,,,212,,,,,,,,,,60,,159', +',159,,159,65,,,,,,,,,,65,,,65,,,,60,34,34,34,34,34,34,34,,,,,34,34,34', +'159,,159,157,157,157,,,,,,34,,,,82,82,60,,,,,,,,102,,,,,,102,65,,,,102', +',,,,65,,,102,,,34,,,,,,,34,,,34,,,,159,,,,,,,,,,,,,,159,34,159,,159', +'34,,,,34,34,,,,,,,82,,82,,,82,82,,,34,,,159,,,157,157,157,157,34,157', +',102,,,,102,,,,34,34,34,,,56,65,,,,,56,,,34,,34,60,,,,82,,,,,56,,,,', +'65,,,,56,56,56,,56,157,157,157,157,,,,,,,,157,,,,,,,,,,60,60,,,56,,', +',,56,56,,,56,,,,60,102,102,,,,60,,,,,,,,,,,,65,,,,65,,82,60,65,65,,', +',,,,,,,,,,34,,,65,,,,,,,,56,,65,,,56,56,56,56,56,,,,,65,65,,,,,,,,,', +',,65,,65,,,,,,,,,,,,,,34,,33,,,,,34,33,34,,,,,,34,,82,,,82,,82,,34,', +',,,,,,,,,,33,,,,,,,,,,,,,,,,,56,56,56,56,56,56,56,,,33,,56,56,56,,,', +'34,,,34,,,,,56,,,34,,,,,82,,,,,,,34,60,,,,,34,,,,,,,,,,,,,,,56,,,,,', +',56,,34,56,,33,60,,34,34,,,34,,33,,,,34,34,,65,56,,34,34,56,,65,,,56', +',,,82,65,,,,,,,60,82,82,,,,,,,,,,34,,56,,,,,,,,,34,,56,56,56,,,,,,,82', +',,82,,,,,,,,,,,65,,,65,,,,,,82,33,,33,,82,33,,82,,,,33,,,,60,,,,,,,34', +'82,,33,,,34,60,,,,34,34,,,,,,34,,,65,82,27,,,,,,27,,65,,60,,,34,,,,', +',,,,,,,,,,,,,,,82,27,,34,,,,56,,,,,33,,,,33,,65,,,33,34,,,,,27,,65,34', +'34,,,,,,27,,,,,,,,,,33,,,,,,,,34,,34,,33,33,56,,,,,,,34,34,56,,,,,,', +',,,,,,,,56,65,,,,,27,,,,,,65,65,,27,,34,,65,,,34,34,,,34,,,,,,82,,,', +',,,,,,,,,,56,,,56,,,,34,,,,56,,,65,,,,,,,,,56,,,,,,56,,34,,65,82,,34', +',,,,65,65,,,,,,,,,,,56,,,27,34,27,56,56,27,34,56,34,,,27,65,56,56,,', +',,56,56,,,65,34,27,,,,,,,,,,,,,,,,,,33,,,,,,,,,,,,,,65,,,,,65,65,,,65', +',,,,,,,,,,,,,,,,,,,,,,,27,,,65,27,,,,,27,,,,,,,,,,,,,,33,,,33,65,56', +',,,65,,56,27,,,,56,56,,,,,,56,27,27,,,,,65,,,,,65,,65,66,,,56,,,66,', +',,,,,,,33,,,,,,33,,,,33,56,,,,,33,33,,66,66,66,33,33,,,,,,,56,,,,,,', +',56,56,,,,,,66,,,,,,,,,,66,,,66,,,,,56,,56,,,,,,,,,,,56,56,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,66,,,,,,56,56,,66,,,33,,,,,,,,,,,33,33,,,,,,33', +',,27,,,,56,,,,,,,,,,,33,,,,,,,,,,,,,,,,,,56,,,,,33,,,,,,,,38,,,,,,38', +',56,,,33,,56,,56,,66,,33,33,,,,27,,,27,,,,56,,,38,38,38,,,,,,66,,,,33', +',,,,,,,,,,33,,,38,,,,,,,,,,38,,,,,,,27,,,,,,27,,,,27,,,,,,27,27,,33', +'33,,27,27,,,,,,,66,,,,66,,,,66,66,,,,,,,,38,,,33,,,,,66,38,,,,,,,,,66', +',,,,,,,,,,,66,66,33,,,,,,,,,,,66,,66,,,,,,,,33,,,,,33,,33,,,,,,,,,,', +',,,27,,,,,,,,,,,27,27,,,,,,27,,,,38,,38,,,38,,,,,,38,,,27,,,,,,,,,,', +'38,,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,27,,,,,,,,27,27,,,,,,,,,,,,,,,,,', +',,,,,,,38,27,,,38,,,,38,38,,,27,,,66,,,,,,,66,,,38,,,,,66,,,,,38,,,', +',,,,,,,,38,38,,,27,27,,,27,,,,,38,,38,,,,,,,,,,,,,,,,,,,,27,,,66,,,66', +',,,,,,,,,,,,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,,,27,,,,,27,66,27,,,,,,,', +',66,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,,,66,,,,,,', +',,,,,,,,,38,,,,,,,38,,,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,', +',66,66,,,,,,66,,,,,,,,,,,38,,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,', +',,,,,,,,,,,,66,,,,38,,,,66,66,38,,,,38,,,,,,38,38,,,,,38,38,,,40,,,', +',66,,,,40,40,40,,,,,66,,,,,,40,40,,40,,38,,,,,,,,,,,38,,,,,,,,,,,,66', +',,,,66,66,,,66,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,38,,,,,,,,,,,38', +'38,,,66,,38,38,,66,,,,,,,,,,,,,,,,38,,,,,66,,,,,66,,66,,,,,,,,,,,38', +',,,,,,,,,,,,,,,,,,38,,,,,,,,38,38,,,,,,,,,,,,,,,,,,40,40,,,40,40,,,38', +',40,,,,,,,,,38,,,,40,,,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40', +'40,40,40,40,40,40,40,,,,,40,38,,,,,38,38,40,,38,,,,,40,,,40,,,,,,,40', +',40,,,40,40,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,38,,,,,38,,,40,,40,,,,40', +'40,,,,,,,,,,,38,,,,,38,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40', +',40,40,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,40,,40,,,,,,,,', +',,,,,,40,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,', +',,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40', +'40,40,,,,40,,,40,40,40,40,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,40,,,40,', +',,,,,,,,,,,,,40,,,,,40,,,,,40,,,40,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,', +',,,,,40,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,40,,,,,,,,,,,,', +'40,40,40,40,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40' ] + racc_goto_check = arr = ::Array.new(3977, nil) + idx = 0 + clist.each do |str| + str.split(',', -1).each do |i| + arr[idx] = i.to_i unless i.empty? + idx += 1 + end + end + +racc_goto_pointer = [ + nil, 225, 9, 207, nil, 58, -2, 119, 52, 152, + 63, 186, -323, -227, -17, -525, -536, -640, -677, nil, + -365, 9, 152, -58, -174, 90, 37, 1705, -181, -62, + -13, 22, -117, 1440, 910, -224, -346, -11, 2279, -20, + 2935, -42, -448, nil, -529, -27, nil, nil, 204, -168, + 15, -230, -401, 15, -289, nil, 1271, 75, 70, 43, + 814, nil, -19, 46, -268, 1052, 2076, -504, -217, -72, + 14, nil, nil, 53, 56, -218, 144, 43, nil, 33, + 159, nil, 938, -142, 0, -425, 58, -18, -296, -276, + -396, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 140, nil, 289, -134, -51, nil, 152, nil, -317, -717, + nil, -666, nil, nil, nil, -361, nil, 156, nil, -393, + 31, nil, nil, -590, 158, -150, 175, 185, -94, 192, + 193, 185, -522, -106, -504, -689, 211, -335, -247, -758, + -475, -753, nil, nil, nil, nil, nil, nil, -736, -369, + -470, -742, -673, nil, -331, -439, -206, 224, -668, 160, + -707, -420, -563, nil, -648, -780, -812, -793, -187, -567, + 103, -397, -317, -10, -192, nil, nil, -115, -115, nil, + -519, nil, -330, -844, -433, -544, -675, nil, nil, 89, + 8, 42, 84, 85, -300, -265, -215, 87, 87, 87, + -601, -442, -442, 90, -588, -274, nil, nil, -240, -543, + -282, -663, 7, -537, -777, nil, -630, -864, nil, nil, + -185, -466 ] + +racc_goto_default = [ + nil, nil, nil, nil, 5, nil, 310, 7, 363, 313, + nil, nil, nil, nil, 555, nil, nil, nil, nil, 309, + 311, nil, nil, nil, 14, 15, 21, 243, nil, nil, + 17, nil, 437, 244, 341, nil, nil, 779, 242, 473, + 24, nil, nil, 358, nil, 25, 26, 27, nil, 715, + nil, nil, nil, 330, nil, 28, 327, 452, 35, nil, + nil, 37, 40, 39, nil, 239, 240, 619, nil, 144, + 460, 143, 146, 90, 91, nil, 442, 105, 47, 50, + 275, 548, 301, nil, 453, nil, 454, 465, 674, 518, + 299, 283, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 61, nil, nil, 284, 65, nil, 67, nil, nil, + 68, 884, 69, 70, 71, nil, 72, nil, 73, nil, + 601, 74, 75, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 288, 277, 723, 852, 610, 885, 750, 583, + nil, 751, 1028, 922, 571, nil, 572, nil, nil, 573, + nil, 575, nil, 830, nil, nil, nil, 581, nil, nil, + nil, nil, nil, nil, nil, 464, 286, nil, nil, 693, + nil, 505, nil, nil, nil, nil, nil, 89, 92, 94, + nil, nil, nil, nil, nil, 631, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 867, 788, 570, nil, 574, + 875, 586, 588, 589, 933, 592, 593, 934, 596, 599, + nil, 304 ] + +racc_reduce_table = [ + 0, 0, :racc_error, + 0, 149, :_reduce_1, + 2, 147, :_reduce_2, + 2, 148, :_reduce_3, + 1, 150, :_reduce_none, + 1, 150, :_reduce_none, + 3, 150, :_reduce_6, + 2, 150, :_reduce_none, + 1, 153, :_reduce_none, + 0, 157, :_reduce_9, + 3, 153, :_reduce_10, + 0, 159, :_reduce_11, + 4, 156, :_reduce_12, + 0, 164, :_reduce_13, + 6, 158, :_reduce_14, + 3, 158, :_reduce_15, + 2, 160, :_reduce_16, + 1, 165, :_reduce_none, + 1, 165, :_reduce_none, + 3, 165, :_reduce_19, + 2, 165, :_reduce_20, + 1, 166, :_reduce_none, + 1, 166, :_reduce_22, + 0, 177, :_reduce_23, + 4, 155, :_reduce_24, + 3, 155, :_reduce_25, + 3, 155, :_reduce_26, + 3, 155, :_reduce_27, + 2, 155, :_reduce_28, + 3, 155, :_reduce_29, + 3, 155, :_reduce_30, + 3, 155, :_reduce_31, + 3, 155, :_reduce_32, + 3, 155, :_reduce_33, + 4, 155, :_reduce_34, + 1, 155, :_reduce_none, + 3, 155, :_reduce_36, + 3, 155, :_reduce_37, + 3, 155, :_reduce_38, + 1, 155, :_reduce_none, + 3, 170, :_reduce_40, + 3, 170, :_reduce_41, + 6, 170, :_reduce_42, + 5, 170, :_reduce_43, + 5, 170, :_reduce_44, + 5, 170, :_reduce_45, + 5, 170, :_reduce_46, + 3, 170, :_reduce_47, + 1, 178, :_reduce_48, + 3, 178, :_reduce_49, + 1, 178, :_reduce_none, + 1, 176, :_reduce_none, + 3, 176, :_reduce_52, + 3, 176, :_reduce_53, + 3, 176, :_reduce_54, + 2, 176, :_reduce_55, + 1, 176, :_reduce_none, + 1, 169, :_reduce_57, + 0, 189, :_reduce_58, + 0, 190, :_reduce_59, + 4, 187, :_reduce_60, + 1, 172, :_reduce_none, + 1, 172, :_reduce_none, + 1, 192, :_reduce_none, + 4, 192, :_reduce_64, + 0, 200, :_reduce_65, + 4, 197, :_reduce_66, + 1, 199, :_reduce_67, + 2, 191, :_reduce_68, + 3, 191, :_reduce_69, + 4, 191, :_reduce_70, + 5, 191, :_reduce_71, + 4, 191, :_reduce_72, + 5, 191, :_reduce_73, + 2, 191, :_reduce_74, + 2, 191, :_reduce_75, + 2, 191, :_reduce_76, + 2, 191, :_reduce_77, + 2, 191, :_reduce_78, + 1, 171, :_reduce_none, + 3, 171, :_reduce_80, + 1, 205, :_reduce_none, + 3, 205, :_reduce_82, + 1, 204, :_reduce_83, + 2, 204, :_reduce_84, + 3, 204, :_reduce_85, + 5, 204, :_reduce_86, + 2, 204, :_reduce_87, + 4, 204, :_reduce_88, + 2, 204, :_reduce_89, + 4, 204, :_reduce_90, + 1, 204, :_reduce_91, + 3, 204, :_reduce_92, + 1, 208, :_reduce_none, + 3, 208, :_reduce_94, + 2, 207, :_reduce_95, + 3, 207, :_reduce_96, + 1, 210, :_reduce_97, + 3, 210, :_reduce_98, + 1, 209, :_reduce_99, + 1, 209, :_reduce_100, + 4, 209, :_reduce_101, + 3, 209, :_reduce_102, + 3, 209, :_reduce_103, + 3, 209, :_reduce_104, + 3, 209, :_reduce_105, + 2, 209, :_reduce_106, + 1, 209, :_reduce_107, + 1, 173, :_reduce_108, + 1, 173, :_reduce_109, + 4, 173, :_reduce_110, + 3, 173, :_reduce_111, + 3, 173, :_reduce_112, + 3, 173, :_reduce_113, + 3, 173, :_reduce_114, + 2, 173, :_reduce_115, + 1, 173, :_reduce_116, + 1, 213, :_reduce_117, + 1, 213, :_reduce_none, + 2, 214, :_reduce_119, + 1, 214, :_reduce_120, + 3, 214, :_reduce_121, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_125, + 1, 215, :_reduce_126, + 1, 218, :_reduce_none, + 1, 218, :_reduce_none, + 1, 167, :_reduce_129, + 1, 167, :_reduce_none, + 1, 168, :_reduce_131, + 0, 221, :_reduce_132, + 4, 168, :_reduce_133, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 3, 186, :_reduce_206, + 3, 186, :_reduce_207, + 6, 186, :_reduce_208, + 5, 186, :_reduce_209, + 5, 186, :_reduce_210, + 5, 186, :_reduce_211, + 5, 186, :_reduce_212, + 0, 227, :_reduce_213, + 5, 186, :_reduce_214, + 3, 186, :_reduce_215, + 3, 186, :_reduce_216, + 3, 186, :_reduce_217, + 2, 186, :_reduce_218, + 2, 186, :_reduce_219, + 3, 186, :_reduce_220, + 3, 186, :_reduce_221, + 3, 186, :_reduce_222, + 3, 186, :_reduce_223, + 3, 186, :_reduce_224, + 3, 186, :_reduce_225, + 4, 186, :_reduce_226, + 2, 186, :_reduce_227, + 2, 186, :_reduce_228, + 3, 186, :_reduce_229, + 3, 186, :_reduce_230, + 3, 186, :_reduce_231, + 3, 186, :_reduce_232, + 1, 186, :_reduce_none, + 3, 186, :_reduce_234, + 3, 186, :_reduce_235, + 3, 186, :_reduce_236, + 3, 186, :_reduce_237, + 3, 186, :_reduce_238, + 2, 186, :_reduce_239, + 2, 186, :_reduce_240, + 3, 186, :_reduce_241, + 3, 186, :_reduce_242, + 3, 186, :_reduce_243, + 3, 186, :_reduce_244, + 3, 186, :_reduce_245, + 6, 186, :_reduce_246, + 1, 186, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 3, 224, :_reduce_252, + 3, 224, :_reduce_253, + 1, 228, :_reduce_254, + 1, 229, :_reduce_none, + 2, 229, :_reduce_256, + 4, 229, :_reduce_257, + 2, 229, :_reduce_258, + 1, 222, :_reduce_none, + 3, 222, :_reduce_260, + 3, 233, :_reduce_261, + 1, 234, :_reduce_none, + 1, 234, :_reduce_none, + 1, 181, :_reduce_none, + 1, 181, :_reduce_none, + 2, 181, :_reduce_266, + 4, 181, :_reduce_267, + 2, 181, :_reduce_268, + 1, 203, :_reduce_269, + 2, 203, :_reduce_270, + 2, 203, :_reduce_271, + 4, 203, :_reduce_272, + 1, 203, :_reduce_273, + 0, 237, :_reduce_274, + 2, 196, :_reduce_275, + 2, 236, :_reduce_276, + 2, 235, :_reduce_277, + 1, 235, :_reduce_none, + 1, 230, :_reduce_279, + 2, 230, :_reduce_280, + 3, 230, :_reduce_281, + 4, 230, :_reduce_282, + 1, 175, :_reduce_283, + 1, 175, :_reduce_284, + 3, 174, :_reduce_285, + 4, 174, :_reduce_286, + 2, 174, :_reduce_287, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_298, + 0, 272, :_reduce_299, + 4, 225, :_reduce_300, + 0, 273, :_reduce_301, + 3, 225, :_reduce_302, + 0, 274, :_reduce_303, + 4, 225, :_reduce_304, + 3, 225, :_reduce_305, + 3, 225, :_reduce_306, + 2, 225, :_reduce_307, + 0, 275, :_reduce_308, + 4, 225, :_reduce_309, + 0, 276, :_reduce_310, + 4, 225, :_reduce_311, + 1, 225, :_reduce_312, + 4, 225, :_reduce_313, + 3, 225, :_reduce_314, + 1, 225, :_reduce_315, + 5, 225, :_reduce_316, + 4, 225, :_reduce_317, + 3, 225, :_reduce_318, + 2, 225, :_reduce_319, + 1, 225, :_reduce_none, + 2, 225, :_reduce_321, + 2, 225, :_reduce_322, + 6, 225, :_reduce_323, + 6, 225, :_reduce_324, + 4, 225, :_reduce_325, + 4, 225, :_reduce_326, + 5, 225, :_reduce_327, + 4, 225, :_reduce_328, + 6, 225, :_reduce_329, + 0, 277, :_reduce_330, + 0, 278, :_reduce_331, + 7, 225, :_reduce_332, + 0, 279, :_reduce_333, + 0, 280, :_reduce_334, + 0, 281, :_reduce_335, + 9, 225, :_reduce_336, + 0, 282, :_reduce_337, + 0, 283, :_reduce_338, + 6, 225, :_reduce_339, + 0, 284, :_reduce_340, + 0, 285, :_reduce_341, + 7, 225, :_reduce_342, + 0, 286, :_reduce_343, + 0, 287, :_reduce_344, + 9, 225, :_reduce_345, + 1, 225, :_reduce_346, + 1, 225, :_reduce_347, + 1, 225, :_reduce_348, + 1, 225, :_reduce_349, + 1, 180, :_reduce_350, + 1, 247, :_reduce_none, + 1, 253, :_reduce_none, + 1, 256, :_reduce_none, + 1, 258, :_reduce_none, + 1, 259, :_reduce_none, + 1, 260, :_reduce_none, + 1, 262, :_reduce_none, + 1, 264, :_reduce_none, + 1, 267, :_reduce_none, + 1, 268, :_reduce_none, + 1, 288, :_reduce_none, + 1, 289, :_reduce_none, + 1, 290, :_reduce_none, + 1, 291, :_reduce_none, + 1, 292, :_reduce_none, + 1, 162, :_reduce_none, + 1, 293, :_reduce_none, + 1, 248, :_reduce_none, + 1, 202, :_reduce_none, + 1, 254, :_reduce_none, + 1, 254, :_reduce_none, + 2, 254, :_reduce_none, + 1, 188, :_reduce_none, + 1, 188, :_reduce_none, + 1, 255, :_reduce_none, + 5, 255, :_reduce_376, + 1, 257, :_reduce_none, + 2, 257, :_reduce_378, + 1, 263, :_reduce_none, + 1, 263, :_reduce_380, + 1, 294, :_reduce_none, + 3, 294, :_reduce_382, + 1, 297, :_reduce_383, + 3, 297, :_reduce_384, + 1, 296, :_reduce_385, + 4, 296, :_reduce_386, + 6, 296, :_reduce_387, + 3, 296, :_reduce_388, + 5, 296, :_reduce_389, + 2, 296, :_reduce_390, + 4, 296, :_reduce_391, + 1, 296, :_reduce_392, + 3, 296, :_reduce_393, + 4, 298, :_reduce_394, + 2, 298, :_reduce_395, + 2, 298, :_reduce_396, + 1, 298, :_reduce_397, + 2, 303, :_reduce_398, + 1, 303, :_reduce_none, + 6, 304, :_reduce_400, + 8, 304, :_reduce_401, + 4, 304, :_reduce_402, + 6, 304, :_reduce_403, + 4, 304, :_reduce_404, + 2, 304, :_reduce_405, + 6, 304, :_reduce_406, + 2, 304, :_reduce_407, + 4, 304, :_reduce_408, + 6, 304, :_reduce_409, + 2, 304, :_reduce_410, + 4, 304, :_reduce_411, + 2, 304, :_reduce_412, + 4, 304, :_reduce_413, + 1, 304, :_reduce_414, + 1, 308, :_reduce_415, + 1, 308, :_reduce_416, + 3, 309, :_reduce_417, + 1, 309, :_reduce_418, + 4, 309, :_reduce_419, + 1, 310, :_reduce_none, + 4, 310, :_reduce_421, + 1, 311, :_reduce_422, + 3, 311, :_reduce_423, + 1, 312, :_reduce_424, + 1, 312, :_reduce_none, + 0, 316, :_reduce_426, + 0, 317, :_reduce_427, + 4, 252, :_reduce_428, + 4, 314, :_reduce_429, + 1, 314, :_reduce_430, + 3, 315, :_reduce_431, + 3, 315, :_reduce_432, + 3, 319, :_reduce_433, + 2, 193, :_reduce_434, + 4, 193, :_reduce_435, + 5, 193, :_reduce_436, + 5, 193, :_reduce_437, + 0, 322, :_reduce_438, + 3, 251, :_reduce_439, + 4, 251, :_reduce_440, + 4, 251, :_reduce_441, + 3, 251, :_reduce_442, + 3, 251, :_reduce_443, + 3, 251, :_reduce_444, + 2, 251, :_reduce_445, + 1, 251, :_reduce_446, + 4, 251, :_reduce_447, + 0, 323, :_reduce_448, + 4, 250, :_reduce_449, + 0, 324, :_reduce_450, + 4, 250, :_reduce_451, + 0, 325, :_reduce_452, + 0, 326, :_reduce_453, + 4, 198, :_reduce_454, + 0, 327, :_reduce_455, + 0, 328, :_reduce_456, + 4, 320, :_reduce_457, + 0, 330, :_reduce_458, + 6, 261, :_reduce_459, + 1, 329, :_reduce_none, + 1, 329, :_reduce_none, + 6, 161, :_reduce_462, + 0, 161, :_reduce_463, + 1, 331, :_reduce_464, + 1, 331, :_reduce_none, + 1, 331, :_reduce_none, + 2, 332, :_reduce_467, + 1, 332, :_reduce_none, + 2, 163, :_reduce_469, + 1, 163, :_reduce_none, + 1, 238, :_reduce_471, + 1, 238, :_reduce_472, + 1, 238, :_reduce_none, + 1, 239, :_reduce_474, + 1, 334, :_reduce_475, + 1, 334, :_reduce_none, + 2, 334, :_reduce_477, + 3, 335, :_reduce_478, + 1, 335, :_reduce_479, + 3, 240, :_reduce_480, + 3, 241, :_reduce_481, + 3, 242, :_reduce_482, + 3, 242, :_reduce_483, + 1, 339, :_reduce_484, + 3, 339, :_reduce_485, + 1, 340, :_reduce_none, + 2, 340, :_reduce_487, + 3, 244, :_reduce_488, + 0, 343, :_reduce_489, + 4, 244, :_reduce_490, + 1, 342, :_reduce_491, + 3, 342, :_reduce_492, + 3, 243, :_reduce_493, + 3, 243, :_reduce_494, + 3, 245, :_reduce_495, + 3, 245, :_reduce_496, + 1, 344, :_reduce_497, + 3, 344, :_reduce_498, + 1, 345, :_reduce_499, + 3, 345, :_reduce_500, + 1, 336, :_reduce_501, + 2, 336, :_reduce_502, + 1, 337, :_reduce_503, + 2, 337, :_reduce_504, + 1, 338, :_reduce_505, + 2, 338, :_reduce_506, + 1, 341, :_reduce_507, + 0, 347, :_reduce_508, + 3, 341, :_reduce_509, + 0, 348, :_reduce_510, + 4, 341, :_reduce_511, + 1, 346, :_reduce_512, + 1, 346, :_reduce_513, + 1, 346, :_reduce_514, + 1, 346, :_reduce_none, + 2, 219, :_reduce_516, + 1, 219, :_reduce_517, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 3, 220, :_reduce_522, + 1, 333, :_reduce_none, + 2, 333, :_reduce_524, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 212, :_reduce_534, + 1, 212, :_reduce_535, + 1, 212, :_reduce_536, + 1, 212, :_reduce_537, + 1, 212, :_reduce_538, + 1, 212, :_reduce_539, + 1, 212, :_reduce_540, + 1, 246, :_reduce_541, + 1, 246, :_reduce_542, + 1, 179, :_reduce_543, + 1, 179, :_reduce_544, + 1, 184, :_reduce_545, + 1, 184, :_reduce_546, + 0, 350, :_reduce_547, + 4, 265, :_reduce_548, + 1, 265, :_reduce_549, + 3, 269, :_reduce_550, + 0, 352, :_reduce_551, + 3, 269, :_reduce_552, + 4, 351, :_reduce_553, + 2, 351, :_reduce_554, + 2, 351, :_reduce_555, + 1, 351, :_reduce_none, + 2, 354, :_reduce_557, + 0, 354, :_reduce_558, + 6, 318, :_reduce_559, + 8, 318, :_reduce_560, + 4, 318, :_reduce_561, + 6, 318, :_reduce_562, + 4, 318, :_reduce_563, + 6, 318, :_reduce_564, + 2, 318, :_reduce_565, + 4, 318, :_reduce_566, + 6, 318, :_reduce_567, + 2, 318, :_reduce_568, + 4, 318, :_reduce_569, + 2, 318, :_reduce_570, + 4, 318, :_reduce_571, + 1, 318, :_reduce_572, + 0, 318, :_reduce_573, + 1, 313, :_reduce_574, + 1, 313, :_reduce_575, + 1, 313, :_reduce_576, + 1, 313, :_reduce_577, + 1, 295, :_reduce_none, + 1, 295, :_reduce_579, + 1, 356, :_reduce_none, + 1, 357, :_reduce_none, + 3, 357, :_reduce_582, + 1, 305, :_reduce_583, + 3, 305, :_reduce_584, + 1, 358, :_reduce_none, + 2, 359, :_reduce_586, + 1, 359, :_reduce_587, + 2, 360, :_reduce_588, + 1, 360, :_reduce_589, + 1, 299, :_reduce_none, + 3, 299, :_reduce_591, + 1, 353, :_reduce_none, + 3, 353, :_reduce_593, + 1, 361, :_reduce_none, + 1, 361, :_reduce_none, + 2, 300, :_reduce_596, + 1, 300, :_reduce_597, + 3, 362, :_reduce_598, + 3, 363, :_reduce_599, + 1, 306, :_reduce_600, + 3, 306, :_reduce_601, + 1, 355, :_reduce_602, + 3, 355, :_reduce_603, + 1, 364, :_reduce_none, + 1, 364, :_reduce_none, + 2, 307, :_reduce_606, + 1, 307, :_reduce_607, + 1, 365, :_reduce_none, + 1, 365, :_reduce_none, + 2, 302, :_reduce_610, + 2, 301, :_reduce_611, + 0, 301, :_reduce_612, + 1, 270, :_reduce_none, + 0, 366, :_reduce_614, + 4, 270, :_reduce_615, + 1, 249, :_reduce_616, + 2, 249, :_reduce_none, + 1, 232, :_reduce_none, + 3, 232, :_reduce_619, + 3, 367, :_reduce_620, + 2, 367, :_reduce_621, + 4, 367, :_reduce_622, + 2, 367, :_reduce_623, + 1, 201, :_reduce_none, + 1, 201, :_reduce_none, + 1, 201, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 321, :_reduce_none, + 1, 321, :_reduce_none, + 1, 321, :_reduce_none, + 1, 271, :_reduce_none, + 1, 271, :_reduce_none, + 1, 183, :_reduce_none, + 1, 183, :_reduce_none, + 1, 194, :_reduce_none, + 1, 194, :_reduce_none, + 0, 151, :_reduce_none, + 1, 151, :_reduce_none, + 0, 185, :_reduce_none, + 1, 185, :_reduce_none, + 2, 206, :_reduce_none, + 2, 182, :_reduce_none, + 0, 231, :_reduce_none, + 1, 231, :_reduce_none, + 1, 231, :_reduce_none, + 1, 266, :_reduce_649, + 1, 266, :_reduce_none, + 1, 154, :_reduce_none, + 2, 154, :_reduce_652, + 0, 152, :_reduce_653 ] + +racc_reduce_n = 654 + +racc_shift_n = 1097 + +racc_token_table = { + false => 0, + :error => 1, + :kCLASS => 2, + :kMODULE => 3, + :kDEF => 4, + :kUNDEF => 5, + :kBEGIN => 6, + :kRESCUE => 7, + :kENSURE => 8, + :kEND => 9, + :kIF => 10, + :kUNLESS => 11, + :kTHEN => 12, + :kELSIF => 13, + :kELSE => 14, + :kCASE => 15, + :kWHEN => 16, + :kWHILE => 17, + :kUNTIL => 18, + :kFOR => 19, + :kBREAK => 20, + :kNEXT => 21, + :kREDO => 22, + :kRETRY => 23, + :kIN => 24, + :kDO => 25, + :kDO_COND => 26, + :kDO_BLOCK => 27, + :kDO_LAMBDA => 28, + :kRETURN => 29, + :kYIELD => 30, + :kSUPER => 31, + :kSELF => 32, + :kNIL => 33, + :kTRUE => 34, + :kFALSE => 35, + :kAND => 36, + :kOR => 37, + :kNOT => 38, + :kIF_MOD => 39, + :kUNLESS_MOD => 40, + :kWHILE_MOD => 41, + :kUNTIL_MOD => 42, + :kRESCUE_MOD => 43, + :kALIAS => 44, + :kDEFINED => 45, + :klBEGIN => 46, + :klEND => 47, + :k__LINE__ => 48, + :k__FILE__ => 49, + :k__ENCODING__ => 50, + :tIDENTIFIER => 51, + :tFID => 52, + :tGVAR => 53, + :tIVAR => 54, + :tCONSTANT => 55, + :tLABEL => 56, + :tCVAR => 57, + :tNTH_REF => 58, + :tBACK_REF => 59, + :tSTRING_CONTENT => 60, + :tINTEGER => 61, + :tFLOAT => 62, + :tREGEXP_END => 63, + :tUPLUS => 64, + :tUMINUS => 65, + :tUMINUS_NUM => 66, + :tPOW => 67, + :tCMP => 68, + :tEQ => 69, + :tEQQ => 70, + :tNEQ => 71, + :tGEQ => 72, + :tLEQ => 73, + :tANDOP => 74, + :tOROP => 75, + :tMATCH => 76, + :tNMATCH => 77, + :tDOT => 78, + :tDOT2 => 79, + :tDOT3 => 80, + :tAREF => 81, + :tASET => 82, + :tLSHFT => 83, + :tRSHFT => 84, + :tCOLON2 => 85, + :tCOLON3 => 86, + :tOP_ASGN => 87, + :tASSOC => 88, + :tLPAREN => 89, + :tLPAREN2 => 90, + :tRPAREN => 91, + :tLPAREN_ARG => 92, + :tLBRACK => 93, + :tLBRACK2 => 94, + :tRBRACK => 95, + :tLBRACE => 96, + :tLBRACE_ARG => 97, + :tSTAR => 98, + :tSTAR2 => 99, + :tAMPER => 100, + :tAMPER2 => 101, + :tTILDE => 102, + :tPERCENT => 103, + :tDIVIDE => 104, + :tPLUS => 105, + :tMINUS => 106, + :tLT => 107, + :tGT => 108, + :tPIPE => 109, + :tBANG => 110, + :tCARET => 111, + :tLCURLY => 112, + :tRCURLY => 113, + :tBACK_REF2 => 114, + :tSYMBEG => 115, + :tSTRING_BEG => 116, + :tXSTRING_BEG => 117, + :tREGEXP_BEG => 118, + :tWORDS_BEG => 119, + :tQWORDS_BEG => 120, + :tSTRING_DBEG => 121, + :tSTRING_DVAR => 122, + :tSTRING_END => 123, + :tSTRING => 124, + :tSYMBOL => 125, + :tNL => 126, + :tEH => 127, + :tCOLON => 128, + :tCOMMA => 129, + :tSPACE => 130, + :tSEMI => 131, + :tLAMBDA => 132, + :tLAMBEG => 133, + :tDSTAR => 134, + :tCHAR => 135, + :tSYMBOLS_BEG => 136, + :tQSYMBOLS_BEG => 137, + :tSTRING_DEND => 138, + :tUBANG => 139, + :tRATIONAL => 140, + :tIMAGINARY => 141, + :tLABEL_END => 142, + :tLONELY => 143, + :tLOWEST => 144, + :tEQL => 145 } + +racc_nt_base = 146 + +racc_use_result_var = true + +Racc_arg = [ + racc_action_table, + racc_action_check, + racc_action_default, + racc_action_pointer, + racc_goto_table, + racc_goto_check, + racc_goto_default, + racc_goto_pointer, + racc_nt_base, + racc_reduce_table, + racc_token_table, + racc_shift_n, + racc_reduce_n, + racc_use_result_var ] + +Racc_token_to_s_table = [ + "$end", + "error", + "kCLASS", + "kMODULE", + "kDEF", + "kUNDEF", + "kBEGIN", + "kRESCUE", + "kENSURE", + "kEND", + "kIF", + "kUNLESS", + "kTHEN", + "kELSIF", + "kELSE", + "kCASE", + "kWHEN", + "kWHILE", + "kUNTIL", + "kFOR", + "kBREAK", + "kNEXT", + "kREDO", + "kRETRY", + "kIN", + "kDO", + "kDO_COND", + "kDO_BLOCK", + "kDO_LAMBDA", + "kRETURN", + "kYIELD", + "kSUPER", + "kSELF", + "kNIL", + "kTRUE", + "kFALSE", + "kAND", + "kOR", + "kNOT", + "kIF_MOD", + "kUNLESS_MOD", + "kWHILE_MOD", + "kUNTIL_MOD", + "kRESCUE_MOD", + "kALIAS", + "kDEFINED", + "klBEGIN", + "klEND", + "k__LINE__", + "k__FILE__", + "k__ENCODING__", + "tIDENTIFIER", + "tFID", + "tGVAR", + "tIVAR", + "tCONSTANT", + "tLABEL", + "tCVAR", + "tNTH_REF", + "tBACK_REF", + "tSTRING_CONTENT", + "tINTEGER", + "tFLOAT", + "tREGEXP_END", + "tUPLUS", + "tUMINUS", + "tUMINUS_NUM", + "tPOW", + "tCMP", + "tEQ", + "tEQQ", + "tNEQ", + "tGEQ", + "tLEQ", + "tANDOP", + "tOROP", + "tMATCH", + "tNMATCH", + "tDOT", + "tDOT2", + "tDOT3", + "tAREF", + "tASET", + "tLSHFT", + "tRSHFT", + "tCOLON2", + "tCOLON3", + "tOP_ASGN", + "tASSOC", + "tLPAREN", + "tLPAREN2", + "tRPAREN", + "tLPAREN_ARG", + "tLBRACK", + "tLBRACK2", + "tRBRACK", + "tLBRACE", + "tLBRACE_ARG", + "tSTAR", + "tSTAR2", + "tAMPER", + "tAMPER2", + "tTILDE", + "tPERCENT", + "tDIVIDE", + "tPLUS", + "tMINUS", + "tLT", + "tGT", + "tPIPE", + "tBANG", + "tCARET", + "tLCURLY", + "tRCURLY", + "tBACK_REF2", + "tSYMBEG", + "tSTRING_BEG", + "tXSTRING_BEG", + "tREGEXP_BEG", + "tWORDS_BEG", + "tQWORDS_BEG", + "tSTRING_DBEG", + "tSTRING_DVAR", + "tSTRING_END", + "tSTRING", + "tSYMBOL", + "tNL", + "tEH", + "tCOLON", + "tCOMMA", + "tSPACE", + "tSEMI", + "tLAMBDA", + "tLAMBEG", + "tDSTAR", + "tCHAR", + "tSYMBOLS_BEG", + "tQSYMBOLS_BEG", + "tSTRING_DEND", + "tUBANG", + "tRATIONAL", + "tIMAGINARY", + "tLABEL_END", + "tLONELY", + "tLOWEST", + "tEQL", + "$start", + "program", + "top_compstmt", + "@1", + "top_stmts", + "opt_terms", + "none", + "top_stmt", + "terms", + "stmt", + "begin_block", + "@2", + "bodystmt", + "@3", + "compstmt", + "opt_rescue", + "k_else", + "opt_ensure", + "@4", + "stmts", + "stmt_or_begin", + "fitem", + "undef_list", + "expr_value", + "command_asgn", + "mlhs", + "command_call", + "lhs", + "mrhs", + "mrhs_arg", + "expr", + "@5", + "command_rhs", + "var_lhs", + "primary_value", + "opt_call_args", + "rbracket", + "call_op", + "backref", + "opt_nl", + "arg", + "expr_value_do", + "do", + "@6", + "@7", + "command", + "block_command", + "block_call", + "call_op2", + "operation2", + "command_args", + "cmd_brace_block", + "brace_body", + "fcall", + "@8", + "operation", + "k_return", + "call_args", + "mlhs_basic", + "mlhs_inner", + "rparen", + "mlhs_head", + "mlhs_item", + "mlhs_node", + "mlhs_post", + "user_variable", + "keyword_variable", + "cname", + "cpath", + "fname", + "op", + "reswords", + "fsym", + "symbol", + "dsym", + "@9", + "arg_rhs", + "simple_numeric", + "rel_expr", + "primary", + "relop", + "@10", + "arg_value", + "aref_args", + "args", + "trailer", + "assocs", + "paren_args", + "opt_paren_args", + "opt_block_arg", + "block_arg", + "@11", + "literal", + "strings", + "xstring", + "regexp", + "words", + "qwords", + "symbols", + "qsymbols", + "var_ref", + "k_begin", + "k_end", + "assoc_list", + "brace_block", + "method_call", + "lambda", + "k_if", + "then", + "if_tail", + "k_unless", + "opt_else", + "k_while", + "k_until", + "k_case", + "case_body", + "k_for", + "for_var", + "k_class", + "superclass", + "term", + "k_module", + "k_def", + "f_arglist", + "singleton", + "dot_or_colon", + "@12", + "@13", + "@14", + "@15", + "@16", + "@17", + "@18", + "@19", + "@20", + "@21", + "@22", + "@23", + "@24", + "@25", + "@26", + "@27", + "k_do", + "k_do_block", + "k_rescue", + "k_ensure", + "k_when", + "k_elsif", + "f_marg", + "f_norm_arg", + "f_margs", + "f_marg_list", + "block_args_tail", + "f_block_kwarg", + "f_kwrest", + "opt_f_block_arg", + "f_block_arg", + "opt_block_args_tail", + "block_param", + "f_arg", + "f_block_optarg", + "f_rest_arg", + "opt_block_param", + "block_param_def", + "opt_bv_decl", + "bv_decls", + "bvar", + "f_bad_arg", + "f_larglist", + "lambda_body", + "@28", + "@29", + "f_args", + "do_block", + "do_body", + "operation3", + "@30", + "@31", + "@32", + "@33", + "@34", + "@35", + "@36", + "cases", + "@37", + "exc_list", + "exc_var", + "numeric", + "string", + "string1", + "string_contents", + "xstring_contents", + "regexp_contents", + "word_list", + "word", + "string_content", + "symbol_list", + "@38", + "qword_list", + "qsym_list", + "string_dvar", + "@39", + "@40", + "sym", + "@41", + "args_tail", + "@42", + "f_kwarg", + "opt_args_tail", + "f_optarg", + "f_arg_asgn", + "f_arg_item", + "f_label", + "f_kw", + "f_block_kw", + "kwrest_mark", + "f_opt", + "f_block_opt", + "restarg_mark", + "blkarg_mark", + "@43", + "assoc" ] + +Racc_debug_parser = false + +##### State transition tables end ##### + +# reduce 0 omitted + +def _reduce_1(val, _values, result) + self.lexer.lex_state = EXPR_BEG + + result +end + +def _reduce_2(val, _values, result) + result = new_compstmt val + + result +end + +def _reduce_3(val, _values, result) + stmt, _ = val + result = stmt + + result +end + +# reduce 4 omitted + +# reduce 5 omitted + +def _reduce_6(val, _values, result) + result = self.block_append val[0], val[2] + + result +end + +# reduce 7 omitted + +# reduce 8 omitted + +def _reduce_9(val, _values, result) + if (self.in_def || self.in_single > 0) then + debug20 1 + yyerror "BEGIN in method" + end + self.env.extend + + result +end + +def _reduce_10(val, _values, result) + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + + result +end + +def _reduce_11(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_12(val, _values, result) + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt + + result +end + +def _reduce_13(val, _values, result) + res = _values[-2] + yyerror "else without rescue is useless" unless res + + result +end + +def _reduce_14(val, _values, result) + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + + result +end + +def _reduce_15(val, _values, result) + body, resc, ens = val + + result = new_body [body, resc, nil, ens] + + result +end + +def _reduce_16(val, _values, result) + result = new_compstmt val + + result +end + +# reduce 17 omitted + +# reduce 18 omitted + +def _reduce_19(val, _values, result) + result = self.block_append val[0], val[2] + + result +end + +def _reduce_20(val, _values, result) + result = val[1] + debug20 2, val, result + + result +end + +# reduce 21 omitted + +def _reduce_22(val, _values, result) + yyerror "BEGIN is permitted only at toplevel" + + result +end + +def _reduce_23(val, _values, result) + lexer.lex_state = EXPR_FNAME + + result +end + +def _reduce_24(val, _values, result) + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line + + result +end + +def _reduce_25(val, _values, result) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line + + result +end + +def _reduce_26(val, _values, result) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line + + result +end + +def _reduce_27(val, _values, result) + yyerror "can't make alias for the number variables" + + result +end + +def _reduce_28(val, _values, result) + result = val[1] + + result +end + +def _reduce_29(val, _values, result) + t, _, c = val + result = new_if c, t, nil + + result +end + +def _reduce_30(val, _values, result) + f, _, c = val + result = new_if c, nil, f + + result +end + +def _reduce_31(val, _values, result) + e, _, c = val + result = new_while e, c, true + + result +end + +def _reduce_32(val, _values, result) + e, _, c = val + result = new_until e, c, true + + result +end + +def _reduce_33(val, _values, result) + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody + + result +end + +def _reduce_34(val, _values, result) + (_, line), _, stmt, _ = val + + if (self.in_def || self.in_single > 0) then + debug20 3 + yyerror "END in method; use at_exit" + end + + result = new_iter s(:postexe).line(line), 0, stmt + + result +end + +# reduce 35 omitted + +def _reduce_36(val, _values, result) + result = new_masgn val[0], val[2], :wrap + + result +end + +def _reduce_37(val, _values, result) + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + + result +end + +def _reduce_38(val, _values, result) + result = new_masgn val[0], val[2] + + result +end + +# reduce 39 omitted + +def _reduce_40(val, _values, result) + result = new_assign val[0], val[2] + + result +end + +def _reduce_41(val, _values, result) + result = new_op_asgn val + + result +end + +def _reduce_42(val, _values, result) + result = new_op_asgn1 val + + result +end + +def _reduce_43(val, _values, result) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + + result +end + +def _reduce_44(val, _values, result) + result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + + result +end + +def _reduce_45(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + + result +end + +def _reduce_46(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + + result +end + +def _reduce_47(val, _values, result) + self.backref_assign_error val[0] + + result +end + +def _reduce_48(val, _values, result) + expr, = val + result = value_expr expr + + result +end + +def _reduce_49(val, _values, result) + expr, (_, line), resbody = val + + expr = value_expr expr + ary = s(:array).line line + result = new_rescue(expr, new_resbody(ary, resbody)) + + result +end + +# reduce 50 omitted + +# reduce 51 omitted + +def _reduce_52(val, _values, result) + lhs, _, rhs = val + result = logical_op :and, lhs, rhs + + result +end + +def _reduce_53(val, _values, result) + lhs, _, rhs = val + result = logical_op :or, lhs, rhs + + result +end + +def _reduce_54(val, _values, result) + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op + + result +end + +def _reduce_55(val, _values, result) + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y + + result +end + +# reduce 56 omitted + +def _reduce_57(val, _values, result) + result = value_expr(val[0]) + + result +end + +def _reduce_58(val, _values, result) + lexer.cond.push true + + result +end + +def _reduce_59(val, _values, result) + lexer.cond.pop + + result +end + +def _reduce_60(val, _values, result) + _, expr, _, _ = val + result = expr + + result +end + +# reduce 61 omitted + +# reduce 62 omitted + +# reduce 63 omitted + +def _reduce_64(val, _values, result) + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line + + result +end + +def _reduce_65(val, _values, result) + # self.env.extend(:dynamic) + result = self.lexer.lineno + + result +end + +def _reduce_66(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + # self.env.unextend + + result +end + +def _reduce_67(val, _values, result) + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno + + result +end + +def _reduce_68(val, _values, result) + call, args = val + result = call.concat args.sexp_body + + result +end + +def _reduce_69(val, _values, result) + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result + result.insert 1, operation + end + + result +end + +def _reduce_70(val, _values, result) + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop + + result +end + +def _reduce_71(val, _values, result) + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args, val[1] + + block_dup_check call, block + + block.insert 1, call + result = block + + result +end + +def _reduce_72(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3] + + result +end + +def _reduce_73(val, _values, result) + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args + + block_dup_check call, block + + block.insert 1, call + result = block + + result +end + +def _reduce_74(val, _values, result) + result = new_super val[1] + + result +end + +def _reduce_75(val, _values, result) + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield + + result +end + +def _reduce_76(val, _values, result) + line = val[0].last + result = s(:return, ret_args(val[1])).line(line) + + result +end + +def _reduce_77(val, _values, result) + (_, line), args = val + result = s(:break, ret_args(args)).line line + + result +end + +def _reduce_78(val, _values, result) + line = val[0].last + result = s(:next, ret_args(val[1])).line(line) + + result +end + +# reduce 79 omitted + +def _reduce_80(val, _values, result) + result = val[1] + + result +end + +# reduce 81 omitted + +def _reduce_82(val, _values, result) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l + + result +end + +def _reduce_83(val, _values, result) + head, = val + result = s(:masgn, head).line head.line + + result +end + +def _reduce_84(val, _values, result) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line + + result +end + +def _reduce_85(val, _values, result) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line + + result +end + +def _reduce_86(val, _values, result) + ary1, _, splat, _, ary2 = val + + result = list_append ary1, s(:splat, splat).line(splat.line) + result.concat ary2.sexp_body + result = s(:masgn, result).line result.line + + result +end + +def _reduce_87(val, _values, result) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l + + result +end + +def _reduce_88(val, _values, result) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + + result +end + +def _reduce_89(val, _values, result) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l + + result +end + +def _reduce_90(val, _values, result) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + + result +end + +def _reduce_91(val, _values, result) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l + + result +end + +def _reduce_92(val, _values, result) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l + + result +end + +# reduce 93 omitted + +def _reduce_94(val, _values, result) + result = val[1] + + result +end + +def _reduce_95(val, _values, result) + lhs, _ = val + result = s(:array, lhs).line lhs.line + + result +end + +def _reduce_96(val, _values, result) + result = val[0] << val[1].compact + + result +end + +def _reduce_97(val, _values, result) + item, = val + result = s(:array, item).line item.line + + result +end + +def _reduce_98(val, _values, result) + result = list_append val[0], val[2] + + result +end + +def _reduce_99(val, _values, result) + result = self.assignable val[0] + + result +end + +def _reduce_100(val, _values, result) + result = self.assignable val[0] + + result +end + +def _reduce_101(val, _values, result) + result = self.aryset val[0], val[2] + + result +end + +def _reduce_102(val, _values, result) + result = new_attrasgn val[0], val[2], val[1] + + result +end + +def _reduce_103(val, _values, result) + recv, _, id = val + result = new_attrasgn recv, id + + result +end + +def _reduce_104(val, _values, result) + result = new_attrasgn val[0], val[2], val[1] + + result +end + +def _reduce_105(val, _values, result) + if (self.in_def || self.in_single > 0) then + debug20 7 + yyerror "dynamic constant assignment" + end + + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l + + result +end + +def _reduce_106(val, _values, result) + if (self.in_def || self.in_single > 0) then + debug20 8 + yyerror "dynamic constant assignment" + end + + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l + + result +end + +def _reduce_107(val, _values, result) + self.backref_assign_error val[0] + + result +end + +def _reduce_108(val, _values, result) + line = lexer.lineno + result = self.assignable val[0] + result.line = line + + result +end + +def _reduce_109(val, _values, result) + line = lexer.lineno + result = self.assignable val[0] + result.line = line + debug20 9, val, result + + result +end + +def _reduce_110(val, _values, result) + lhs, _, args, _ = val + result = self.aryset lhs, args + + result +end + +def _reduce_111(val, _values, result) + lhs, op, id = val + result = new_attrasgn lhs, id, op + + result +end + +def _reduce_112(val, _values, result) + lhs, _, id = val + result = new_attrasgn lhs, id + + result +end + +def _reduce_113(val, _values, result) + result = new_attrasgn val[0], val[2], val[1] + + result +end + +def _reduce_114(val, _values, result) + expr, _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 10 + yyerror "dynamic constant assignment" + end + + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l + + result +end + +def _reduce_115(val, _values, result) + _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 11 + yyerror "dynamic constant assignment" + end + + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l + + result +end + +def _reduce_116(val, _values, result) + self.backref_assign_error val[0] + + result +end + +def _reduce_117(val, _values, result) + yyerror "class/module name must be CONSTANT" + + result +end + +# reduce 118 omitted + +def _reduce_119(val, _values, result) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno + + result +end + +def _reduce_120(val, _values, result) + result = val[0].to_sym + + result +end + +def _reduce_121(val, _values, result) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line + + result +end + +# reduce 122 omitted + +# reduce 123 omitted + +# reduce 124 omitted + +def _reduce_125(val, _values, result) + lexer.lex_state = EXPR_END + result = val[0] + + result +end + +def _reduce_126(val, _values, result) + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym + + result +end + +# reduce 127 omitted + +# reduce 128 omitted + +def _reduce_129(val, _values, result) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno + + result +end + +# reduce 130 omitted + +def _reduce_131(val, _values, result) + result = new_undef val[0] + + result +end + +def _reduce_132(val, _values, result) + lexer.lex_state = EXPR_FNAME + + result +end + +def _reduce_133(val, _values, result) + result = new_undef val[0], val[3] + + result +end + +# reduce 134 omitted + +# reduce 135 omitted + +# reduce 136 omitted + +# reduce 137 omitted + +# reduce 138 omitted + +# reduce 139 omitted + +# reduce 140 omitted + +# reduce 141 omitted + +# reduce 142 omitted + +# reduce 143 omitted + +# reduce 144 omitted + +# reduce 145 omitted + +# reduce 146 omitted + +# reduce 147 omitted + +# reduce 148 omitted + +# reduce 149 omitted + +# reduce 150 omitted + +# reduce 151 omitted + +# reduce 152 omitted + +# reduce 153 omitted + +# reduce 154 omitted + +# reduce 155 omitted + +# reduce 156 omitted + +# reduce 157 omitted + +# reduce 158 omitted + +# reduce 159 omitted + +# reduce 160 omitted + +# reduce 161 omitted + +# reduce 162 omitted + +# reduce 163 omitted + +# reduce 164 omitted + +# reduce 165 omitted + +# reduce 166 omitted + +# reduce 167 omitted + +# reduce 168 omitted + +# reduce 169 omitted + +# reduce 170 omitted + +# reduce 171 omitted + +# reduce 172 omitted + +# reduce 173 omitted + +# reduce 174 omitted + +# reduce 175 omitted + +# reduce 176 omitted + +# reduce 177 omitted + +# reduce 178 omitted + +# reduce 179 omitted + +# reduce 180 omitted + +# reduce 181 omitted + +# reduce 182 omitted + +# reduce 183 omitted + +# reduce 184 omitted + +# reduce 185 omitted + +# reduce 186 omitted + +# reduce 187 omitted + +# reduce 188 omitted + +# reduce 189 omitted + +# reduce 190 omitted + +# reduce 191 omitted + +# reduce 192 omitted + +# reduce 193 omitted + +# reduce 194 omitted + +# reduce 195 omitted + +# reduce 196 omitted + +# reduce 197 omitted + +# reduce 198 omitted + +# reduce 199 omitted + +# reduce 200 omitted + +# reduce 201 omitted + +# reduce 202 omitted + +# reduce 203 omitted + +# reduce 204 omitted + +# reduce 205 omitted + +def _reduce_206(val, _values, result) + result = new_assign val[0], val[2] + + result +end + +def _reduce_207(val, _values, result) + result = new_op_asgn val + + result +end + +def _reduce_208(val, _values, result) + result = new_op_asgn1 val + + result +end + +def _reduce_209(val, _values, result) + result = new_op_asgn2 val + + result +end + +def _reduce_210(val, _values, result) + result = new_op_asgn2 val + + result +end + +def _reduce_211(val, _values, result) + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line + + result +end + +def _reduce_212(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] + + result +end + +def _reduce_213(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_214(val, _values, result) + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] + + result +end + +def _reduce_215(val, _values, result) + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn + + result +end + +def _reduce_216(val, _values, result) + v1, v2 = val[0], val[2] + if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then + result = s(:lit, (v1.last)..(v2.last)).line v1.line + else + result = s(:dot2, v1, v2).line v1.line + end + + result +end + +def _reduce_217(val, _values, result) + v1, v2 = val[0], val[2] + if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then + result = s(:lit, (v1.last)...(v2.last)).line v1.line + else + result = s(:dot3, v1, v2).line v1.line + end + + result +end + +def _reduce_218(val, _values, result) + v1, _ = val + v2 = nil + + result = s(:dot2, v1, v2).line v1.line + + result +end + +def _reduce_219(val, _values, result) + v1, _ = val + v2 = nil + + result = s(:dot3, v1, v2).line v1.line + + result +end + +def _reduce_220(val, _values, result) + result = new_call val[0], :+, argl(val[2]) + + result +end + +def _reduce_221(val, _values, result) + result = new_call val[0], :-, argl(val[2]) + + result +end + +def _reduce_222(val, _values, result) + result = new_call val[0], :*, argl(val[2]) + + result +end + +def _reduce_223(val, _values, result) + result = new_call val[0], :"/", argl(val[2]) + + result +end + +def _reduce_224(val, _values, result) + result = new_call val[0], :"%", argl(val[2]) + + result +end + +def _reduce_225(val, _values, result) + result = new_call val[0], :**, argl(val[2]) + + result +end + +def _reduce_226(val, _values, result) + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + + + result +end + +def _reduce_227(val, _values, result) + result = new_call val[1], :"+@" + + result +end + +def _reduce_228(val, _values, result) + result = new_call val[1], :"-@" + + result +end + +def _reduce_229(val, _values, result) + result = new_call val[0], :"|", argl(val[2]) + + result +end + +def _reduce_230(val, _values, result) + result = new_call val[0], :"^", argl(val[2]) + + result +end + +def _reduce_231(val, _values, result) + result = new_call val[0], :"&", argl(val[2]) + + result +end + +def _reduce_232(val, _values, result) + result = new_call val[0], :"<=>", argl(val[2]) + + result +end + +# reduce 233 omitted + +def _reduce_234(val, _values, result) + result = new_call val[0], :"==", argl(val[2]) + + result +end + +def _reduce_235(val, _values, result) + result = new_call val[0], :"===", argl(val[2]) + + result +end + +def _reduce_236(val, _values, result) + result = new_call val[0], :"!=", argl(val[2]) + + result +end + +def _reduce_237(val, _values, result) + lhs, _, rhs = val + result = new_match lhs, rhs + + result +end + +def _reduce_238(val, _values, result) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line + + result +end + +def _reduce_239(val, _values, result) + _, arg = val + result = new_call arg, :"!" + result.line arg.line + + result +end + +def _reduce_240(val, _values, result) + result = new_call value_expr(val[1]), :"~" + + result +end + +def _reduce_241(val, _values, result) + val[0] = value_expr val[0] + val[2] = value_expr val[2] + result = new_call val[0], :"\<\<", argl(val[2]) + + result +end + +def _reduce_242(val, _values, result) + val[0] = value_expr val[0] + val[2] = value_expr val[2] + result = new_call val[0], :">>", argl(val[2]) + + result +end + +def _reduce_243(val, _values, result) + result = logical_op :and, val[0], val[2] + + result +end + +def _reduce_244(val, _values, result) + result = logical_op :or, val[0], val[2] + + result +end + +def _reduce_245(val, _values, result) + (_, line), _, arg = val + result = s(:defined, arg).line line + + result +end + +def _reduce_246(val, _values, result) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line + + result +end + +# reduce 247 omitted + +# reduce 248 omitted + +# reduce 249 omitted + +# reduce 250 omitted + +# reduce 251 omitted + +def _reduce_252(val, _values, result) + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_253(val, _values, result) + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_254(val, _values, result) + result = value_expr(val[0]) + + result +end + +# reduce 255 omitted + +def _reduce_256(val, _values, result) + result = args [val[0]] + + result +end + +def _reduce_257(val, _values, result) + result = args [val[0], array_to_hash(val[2])] + + result +end + +def _reduce_258(val, _values, result) + result = args [array_to_hash(val[0])] + + result +end + +# reduce 259 omitted + +def _reduce_260(val, _values, result) + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + + result +end + +def _reduce_261(val, _values, result) + _, args, _ = val + result = args + + result +end + +# reduce 262 omitted + +# reduce 263 omitted + +# reduce 264 omitted + +# reduce 265 omitted + +def _reduce_266(val, _values, result) + result = args val + + result +end + +def _reduce_267(val, _values, result) + result = args [val[0], array_to_hash(val[2])] + + result +end + +def _reduce_268(val, _values, result) + result = args [array_to_hash(val[0])] + + result +end + +def _reduce_269(val, _values, result) + warning "parenthesize argument(s) for future version" + result = call_args val + + result +end + +def _reduce_270(val, _values, result) + result = call_args val + + result +end + +def _reduce_271(val, _values, result) + result = call_args [array_to_hash(val[0]), val[1]] + + result +end + +def _reduce_272(val, _values, result) + result = call_args [val[0], array_to_hash(val[2]), val[3]] + + result +end + +def _reduce_273(val, _values, result) + result = call_args val + + result +end + +def _reduce_274(val, _values, result) + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead + + result +end + +def _reduce_275(val, _values, result) + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args + + result +end + +def _reduce_276(val, _values, result) + _, arg = val + result = s(:block_pass, arg).line arg.line + + result +end + +def _reduce_277(val, _values, result) + result = val[1] + + result +end + +# reduce 278 omitted + +def _reduce_279(val, _values, result) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno + + result +end + +def _reduce_280(val, _values, result) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line + + result +end + +def _reduce_281(val, _values, result) + args, _, id = val + result = self.list_append args, id + + result +end + +def _reduce_282(val, _values, result) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) + + result +end + +def _reduce_283(val, _values, result) + result = new_masgn_arg val[0] + + result +end + +def _reduce_284(val, _values, result) + result = new_masgn_arg val[0], :wrap + + result +end + +def _reduce_285(val, _values, result) + result = val[0] << val[2] + + result +end + +def _reduce_286(val, _values, result) + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat + + result +end + +def _reduce_287(val, _values, result) + _, arg = val + result = s(:splat, arg).line arg.line + + result +end + +# reduce 288 omitted + +# reduce 289 omitted + +# reduce 290 omitted + +# reduce 291 omitted + +# reduce 292 omitted + +# reduce 293 omitted + +# reduce 294 omitted + +# reduce 295 omitted + +# reduce 296 omitted + +# reduce 297 omitted + +def _reduce_298(val, _values, result) + msg, = val + result = new_call nil, msg.to_sym + + result +end + +def _reduce_299(val, _values, result) + lexer.cmdarg.push false + result = self.lexer.lineno + + result +end + +def _reduce_300(val, _values, result) + lexer.cmdarg.pop + result = new_begin val + + result +end + +def _reduce_301(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno + + result +end + +def _reduce_302(val, _values, result) + _, line, _ = val + result = s(:begin).line line + + result +end + +def _reduce_303(val, _values, result) + lexer.lex_state = EXPR_ENDARG + + result +end + +def _reduce_304(val, _values, result) + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt + + result +end + +def _reduce_305(val, _values, result) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno + result.paren = true + + result +end + +def _reduce_306(val, _values, result) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line + + result +end + +def _reduce_307(val, _values, result) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno + + result +end + +def _reduce_308(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_309(val, _values, result) + _, line, args, _ = val + result = args || s(:array) + result.sexp_type = :array # aref_args is :args + result.line line + + result +end + +def _reduce_310(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_311(val, _values, result) + result = new_hash val + + result +end + +def _reduce_312(val, _values, result) + (_, line), = val + result = s(:return).line line + + result +end + +def _reduce_313(val, _values, result) + result = new_yield val[2] + + result +end + +def _reduce_314(val, _values, result) + result = new_yield + + result +end + +def _reduce_315(val, _values, result) + result = new_yield + + result +end + +def _reduce_316(val, _values, result) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line + + result +end + +def _reduce_317(val, _values, result) + _, _, lhs, _ = val + result = new_call lhs, :"!" + + result +end + +def _reduce_318(val, _values, result) + debug20 14, val, result + + result +end + +def _reduce_319(val, _values, result) + call, iter = val + + iter.insert 1, call + result = iter + # FIX: probably not: call.line = iter.line + + result +end + +# reduce 320 omitted + +def _reduce_321(val, _values, result) + call, iter = val[0], val[1] + block_dup_check call, iter + iter.insert 1, call # FIX + result = iter + + result +end + +def _reduce_322(val, _values, result) + result = val[1] # TODO: fix lineno + + result +end + +def _reduce_323(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, t, f + + result +end + +def _reduce_324(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, f, t + + result +end + +def _reduce_325(val, _values, result) + _, cond, body, _ = val + result = new_while body, cond, true + + result +end + +def _reduce_326(val, _values, result) + _, cond, body, _ = val + result = new_until body, cond, true + + result +end + +def _reduce_327(val, _values, result) + (_, line), expr, _, body, _ = val + result = new_case expr, body, line + + result +end + +def _reduce_328(val, _values, result) + (_, line), _, body, _ = val + result = new_case nil, body, line + + result +end + +def _reduce_329(val, _values, result) + _, var, _, iter, body, _ = val + result = new_for iter, var, body + + result +end + +def _reduce_330(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_331(val, _values, result) + self.comments.push self.lexer.comments + if (self.in_def || self.in_single > 0) then + yyerror "class definition in method body" + end + self.env.extend + + result +end + +def _reduce_332(val, _values, result) + result = new_class val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + + result +end + +def _reduce_333(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_334(val, _values, result) + result = self.in_def + self.in_def = false + + result +end + +def _reduce_335(val, _values, result) + result = self.in_single + self.in_single = 0 + self.env.extend + + result +end + +def _reduce_336(val, _values, result) + result = new_sclass val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + + result +end + +def _reduce_337(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_338(val, _values, result) + self.comments.push self.lexer.comments + yyerror "module definition in method body" if + self.in_def or self.in_single > 0 + + self.env.extend + + result +end + +def _reduce_339(val, _values, result) + result = new_module val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + + result +end + +def _reduce_340(val, _values, result) + result = self.in_def + + self.in_def = true # group = local_push + self.env.extend + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments + + result +end + +def _reduce_341(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_342(val, _values, result) + in_def = val[2] + + result = new_defn val + + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop + self.env.unextend + self.in_def = in_def + + self.lexer.comments # we don't care about comments in the body + + result +end + +def _reduce_343(val, _values, result) + lexer.lex_state = EXPR_FNAME + + result +end + +def _reduce_344(val, _values, result) + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push + self.env.extend + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments + + result +end + +def _reduce_345(val, _values, result) + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val + + result = new_defs val + + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop + self.env.unextend + self.in_def = in_def + + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + + self.lexer.comments # we don't care about comments in the body + + result +end + +def _reduce_346(val, _values, result) + (_, line), = val + result = s(:break).line line + + result +end + +def _reduce_347(val, _values, result) + (_, line), = val + result = s(:next).line line + + result +end + +def _reduce_348(val, _values, result) + (_, line), = val + result = s(:redo).line line + + result +end + +def _reduce_349(val, _values, result) + (_, line), = val + result = s(:retry).line line + + result +end + +def _reduce_350(val, _values, result) + result = value_expr(val[0]) + + result +end + +# reduce 351 omitted + +# reduce 352 omitted + +# reduce 353 omitted + +# reduce 354 omitted + +# reduce 355 omitted + +# reduce 356 omitted + +# reduce 357 omitted + +# reduce 358 omitted + +# reduce 359 omitted + +# reduce 360 omitted + +# reduce 361 omitted + +# reduce 362 omitted + +# reduce 363 omitted + +# reduce 364 omitted + +# reduce 365 omitted + +# reduce 366 omitted + +# reduce 367 omitted + +# reduce 368 omitted + +# reduce 369 omitted + +# reduce 370 omitted + +# reduce 371 omitted + +# reduce 372 omitted + +# reduce 373 omitted + +# reduce 374 omitted + +# reduce 375 omitted + +def _reduce_376(val, _values, result) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line + + result +end + +# reduce 377 omitted + +def _reduce_378(val, _values, result) + result = val[1] + + result +end + +# reduce 379 omitted + +def _reduce_380(val, _values, result) + val[0].delete_at 1 if val[0][1].nil? # HACK + + result +end + +# reduce 381 omitted + +def _reduce_382(val, _values, result) + result = val[1] + + result +end + +def _reduce_383(val, _values, result) + sym, = val + + result = s(:array, sym).line lexer.lineno + + result +end + +def _reduce_384(val, _values, result) + result = list_append val[0], val[2] + + result +end + +def _reduce_385(val, _values, result) + args, = val + + result = block_var args + + result +end + +def _reduce_386(val, _values, result) + args, _, _, splat = val + + result = block_var args, "*#{splat}".to_sym + + result +end + +def _reduce_387(val, _values, result) + args, _, _, splat, _, args2 = val + + result = block_var args, "*#{splat}".to_sym, args2 + + result +end + +def _reduce_388(val, _values, result) + args, _, _ = val + + result = block_var args, :* + + result +end + +def _reduce_389(val, _values, result) + args, _, _, _, args2 = val + + result = block_var args, :*, args2 + + result +end + +def _reduce_390(val, _values, result) + _, splat = val + + result = block_var :"*#{splat}" + + result +end + +def _reduce_391(val, _values, result) + _, splat, _, args = val + + result = block_var :"*#{splat}", args + + result +end + +def _reduce_392(val, _values, result) + result = block_var :* + + result +end + +def _reduce_393(val, _values, result) + _, _, args = val + + result = block_var :*, args + + result +end + +def _reduce_394(val, _values, result) + result = call_args val + + result +end + +def _reduce_395(val, _values, result) + result = call_args val + + result +end + +def _reduce_396(val, _values, result) + result = call_args val + + result +end + +def _reduce_397(val, _values, result) + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line + + result +end + +def _reduce_398(val, _values, result) + result = args val + + result +end + +# reduce 399 omitted + +def _reduce_400(val, _values, result) + result = args val + + result +end + +def _reduce_401(val, _values, result) + result = args val + + result +end + +def _reduce_402(val, _values, result) + result = args val + + result +end + +def _reduce_403(val, _values, result) + result = args val + + result +end + +def _reduce_404(val, _values, result) + result = args val + + result +end + +def _reduce_405(val, _values, result) + result = args(val) << nil + + result +end + +def _reduce_406(val, _values, result) + result = args val + + result +end + +def _reduce_407(val, _values, result) + result = args val + + result +end + +def _reduce_408(val, _values, result) + result = args val + + result +end + +def _reduce_409(val, _values, result) + result = args val + + result +end + +def _reduce_410(val, _values, result) + result = args val + + result +end + +def _reduce_411(val, _values, result) + result = args val + + result +end + +def _reduce_412(val, _values, result) + result = args val + + result +end + +def _reduce_413(val, _values, result) + result = args val + + result +end + +def _reduce_414(val, _values, result) + result = args val + + result +end + +def _reduce_415(val, _values, result) + result = 0 + result +end + +def _reduce_416(val, _values, result) + self.lexer.command_start = true + + result +end + +def _reduce_417(val, _values, result) + # TODO: current_arg = 0 + result = args val + + result +end + +def _reduce_418(val, _values, result) + result = s(:args).line lexer.lineno + + result +end + +def _reduce_419(val, _values, result) + # TODO: current_arg = 0 + result = args val + + result +end + +# reduce 420 omitted + +def _reduce_421(val, _values, result) + result = args val + + result +end + +def _reduce_422(val, _values, result) + result = args val + + result +end + +def _reduce_423(val, _values, result) + result = args val + + result +end + +def _reduce_424(val, _values, result) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line + + result +end + +# reduce 425 omitted + +def _reduce_426(val, _values, result) + self.env.extend :dynamic + result = [lexer.lineno, lexer.lpar_beg] + lexer.paren_nest += 1 + lexer.lpar_beg = lexer.paren_nest + + result +end + +def _reduce_427(val, _values, result) + lexer.cmdarg.push false + + result +end + +def _reduce_428(val, _values, result) + (line, lpar), args, _cmdarg, body = val + lexer.lpar_beg = lpar + + lexer.cmdarg.pop + + call = s(:lambda).line line + result = new_iter call, args, body + result.line = line + self.env.unextend # TODO: dynapush & dynapop + + result +end + +def _reduce_429(val, _values, result) + result = args val + + result +end + +def _reduce_430(val, _values, result) + result = val[0] + result = 0 if result == s(:args) + + result +end + +def _reduce_431(val, _values, result) + result = val[1] + + result +end + +def _reduce_432(val, _values, result) + result = val[1] + + result +end + +def _reduce_433(val, _values, result) + (_, line), iter, _ = val + result = iter.line line + + result +end + +def _reduce_434(val, _values, result) + # TODO: + ## if (nd_type($1) == NODE_YIELD) { + ## compile_error(PARSER_ARG "block given to yield"); + + syntax_error "Both block arg and actual block given." if + val[0].block_pass? + + val = invert_block_call val if inverted? val + + cmd, blk = val + + result = blk + result.insert 1, cmd + + result +end + +def _reduce_435(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3] + + result +end + +def _reduce_436(val, _values, result) + iter1, _, name, args, iter2 = val + + call = new_call iter1, name.to_sym, args + iter2.insert 1, call + + result = iter2 + + result +end + +def _reduce_437(val, _values, result) + iter1, _, name, args, iter2 = val + + call = new_call iter1, name.to_sym, args + iter2.insert 1, call + + result = iter2 + + result +end + +def _reduce_438(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_439(val, _values, result) + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno + + result +end + +def _reduce_440(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3], val[1] + + result +end + +def _reduce_441(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3] + + result +end + +def _reduce_442(val, _values, result) + result = new_call val[0], val[2].to_sym + + result +end + +def _reduce_443(val, _values, result) + result = new_call val[0], :call, val[2], val[1] + + result +end + +def _reduce_444(val, _values, result) + result = new_call val[0], :call, val[2] + + result +end + +def _reduce_445(val, _values, result) + result = new_super val[1] + + result +end + +def _reduce_446(val, _values, result) + result = s(:zsuper).line lexer.lineno + + result +end + +def _reduce_447(val, _values, result) + result = new_aref val + + result +end + +def _reduce_448(val, _values, result) + self.env.extend :dynamic + result = self.lexer.lineno + + result +end + +def _reduce_449(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + + result +end + +def _reduce_450(val, _values, result) + self.env.extend :dynamic + result = self.lexer.lineno + + result +end + +def _reduce_451(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + + result +end + +def _reduce_452(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end + +def _reduce_453(val, _values, result) + result = lexer.cmdarg.store(false) + result +end + +def _reduce_454(val, _values, result) + line, cmdarg, param, cmpstmt = val + + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + + result +end + +def _reduce_455(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end + +def _reduce_456(val, _values, result) + lexer.cmdarg.push false + result +end + +def _reduce_457(val, _values, result) + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop + self.env.unextend + + result +end + +def _reduce_458(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_459(val, _values, result) + result = new_when(val[2], val[4]) + result.line = val[1] + result << val[5] if val[5] + + result +end + +# reduce 460 omitted + +# reduce 461 omitted + +def _reduce_462(val, _values, result) + (_, line), klasses, var, _, body, rest = val + + klasses ||= s(:array) + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var + klasses.line line + + result = new_resbody(klasses, body) + result << rest if rest # UGH, rewritten above + + result +end + +def _reduce_463(val, _values, result) + result = nil + + result +end + +def _reduce_464(val, _values, result) + arg, = val + result = s(:array, arg).line arg.line + + result +end + +# reduce 465 omitted + +# reduce 466 omitted + +def _reduce_467(val, _values, result) + result = val[1] + + result +end + +# reduce 468 omitted + +def _reduce_469(val, _values, result) + (_, line), body = val + + result = body || s(:nil).line(line) + + result +end + +# reduce 470 omitted + +def _reduce_471(val, _values, result) + line = lexer.lineno + result = s(:lit, val[0]) + result.line = line + + result +end + +def _reduce_472(val, _values, result) + line = lexer.lineno + result = s(:lit, val[0]) + result.line = line + + result +end + +# reduce 473 omitted + +def _reduce_474(val, _values, result) + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str + + result +end + +def _reduce_475(val, _values, result) + debug20 23, val, result + + result +end + +# reduce 476 omitted + +def _reduce_477(val, _values, result) + result = self.literal_concat val[0], val[1] + + result +end + +def _reduce_478(val, _values, result) + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str + + result +end + +def _reduce_479(val, _values, result) + result = new_string val + + result +end + +def _reduce_480(val, _values, result) + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? + + result +end + +def _reduce_481(val, _values, result) + result = new_regexp val + + result +end + +def _reduce_482(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +def _reduce_483(val, _values, result) + result = val[1] + + result +end + +def _reduce_484(val, _values, result) + result = new_word_list + + result +end + +def _reduce_485(val, _values, result) + result = val[0].dup << new_word_list_entry(val) + + result +end + +# reduce 486 omitted + +def _reduce_487(val, _values, result) + result = self.literal_concat val[0], val[1] + + result +end + +def _reduce_488(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +def _reduce_489(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_490(val, _values, result) + _, line, list, _, = val + list.line = line + result = list + + result +end + +def _reduce_491(val, _values, result) + result = new_symbol_list.line lexer.lineno + + result +end + +def _reduce_492(val, _values, result) + list, * = val + result = list.dup << new_symbol_list_entry(val) + + result +end + +def _reduce_493(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +def _reduce_494(val, _values, result) + result = val[1] + + result +end + +def _reduce_495(val, _values, result) + result = s(:array).line lexer.lineno # FIX + + result +end + +def _reduce_496(val, _values, result) + result = val[1] + + result +end + +def _reduce_497(val, _values, result) + result = new_qword_list + + result +end + +def _reduce_498(val, _values, result) + result = val[0].dup << new_qword_list_entry(val) + + result +end + +def _reduce_499(val, _values, result) + result = new_qsym_list + + result +end + +def _reduce_500(val, _values, result) + result = val[0].dup << new_qsym_list_entry(val) + + result +end + +def _reduce_501(val, _values, result) + result = s(:str, "").line lexer.lineno + + result +end + +def _reduce_502(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + + result +end + +def _reduce_503(val, _values, result) + result = nil + + result +end + +def _reduce_504(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + + result +end + +def _reduce_505(val, _values, result) + result = nil + + result +end + +def _reduce_506(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + + result +end + +def _reduce_507(val, _values, result) + result = new_string val + + result +end + +def _reduce_508(val, _values, result) + result = lexer.lex_strterm + + lexer.lex_strterm = nil + lexer.lex_state = EXPR_BEG + + result +end + +def _reduce_509(val, _values, result) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line + + result +end + +def _reduce_510(val, _values, result) + result = [lexer.lex_strterm, + lexer.brace_nest, + lexer.string_nest, # TODO: remove + lexer.lex_state, + lexer.lineno, + ] + + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_strterm = nil + lexer.brace_nest = 0 + lexer.string_nest = 0 + + lexer.lex_state = EXPR_BEG + + result +end + +def _reduce_511(val, _values, result) + _, memo, stmt, _ = val + + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent + + lexer.lex_strterm = lex_strterm + lexer.brace_nest = brace_nest + lexer.string_nest = string_nest + + lexer.cmdarg.pop + lexer.cond.pop + + lexer.lex_state = oldlex_state + + case stmt + when Sexp then + case stmt.sexp_type + when :str, :dstr, :evstr then + result = stmt + else + result = s(:evstr, stmt).line line + end + when nil then + result = s(:evstr).line line + else + debug20 25 + raise "unknown string body: #{stmt.inspect}" + end + + result +end + +def _reduce_512(val, _values, result) + result = s(:gvar, val[0].to_sym).line lexer.lineno + result +end + +def _reduce_513(val, _values, result) + result = s(:ivar, val[0].to_sym).line lexer.lineno + result +end + +def _reduce_514(val, _values, result) + result = s(:cvar, val[0].to_sym).line lexer.lineno + result +end + +# reduce 515 omitted + +def _reduce_516(val, _values, result) + lexer.lex_state = EXPR_END + result = val[1].to_sym + + result +end + +def _reduce_517(val, _values, result) + result = val[0].to_sym + + result +end + +# reduce 518 omitted + +# reduce 519 omitted + +# reduce 520 omitted + +# reduce 521 omitted + +def _reduce_522(val, _values, result) + _, result, _ = val + + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno + + case result.sexp_type + when :dstr then + result.sexp_type = :dsym + when :str then + result = s(:lit, result.last.to_sym).line result.line + when :evstr then + result = s(:dsym, "", result).line result.line + else + debug20 26, val, result + end + + result +end + +# reduce 523 omitted + +def _reduce_524(val, _values, result) + result = -val[1] # TODO: pt_testcase + + result +end + +# reduce 525 omitted + +# reduce 526 omitted + +# reduce 527 omitted + +# reduce 528 omitted + +# reduce 529 omitted + +# reduce 530 omitted + +# reduce 531 omitted + +# reduce 532 omitted + +# reduce 533 omitted + +def _reduce_534(val, _values, result) + result = s(:nil).line lexer.lineno + result +end + +def _reduce_535(val, _values, result) + result = s(:self).line lexer.lineno + result +end + +def _reduce_536(val, _values, result) + result = s(:true).line lexer.lineno + result +end + +def _reduce_537(val, _values, result) + result = s(:false).line lexer.lineno + result +end + +def _reduce_538(val, _values, result) + result = s(:str, self.file).line lexer.lineno + result +end + +def _reduce_539(val, _values, result) + result = s(:lit, lexer.lineno).line lexer.lineno + result +end + +def _reduce_540(val, _values, result) + l = lexer.lineno + result = + if defined? Encoding then + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l + else + s(:str, "Unsupported!").line l + end + + result +end + +def _reduce_541(val, _values, result) + var = val[0] + result = Sexp === var ? var : self.gettable(var) + + result +end + +def _reduce_542(val, _values, result) + var = val[0] + result = Sexp === var ? var : self.gettable(var) + + result +end + +def _reduce_543(val, _values, result) + result = self.assignable val[0] + + result +end + +def _reduce_544(val, _values, result) + result = self.assignable val[0] + debug20 29, val, result + + result +end + +def _reduce_545(val, _values, result) + result = s(:nth_ref, val[0]).line lexer.lineno + result +end + +def _reduce_546(val, _values, result) + result = s(:back_ref, val[0]).line lexer.lineno + result +end + +def _reduce_547(val, _values, result) + lexer.lex_state = EXPR_BEG + lexer.command_start = true + + result +end + +def _reduce_548(val, _values, result) + result = val[2] + + result +end + +def _reduce_549(val, _values, result) + result = nil + + result +end + +def _reduce_550(val, _values, result) + result = val[1] + self.lexer.lex_state = EXPR_BEG + self.lexer.command_start = true + + result +end + +def _reduce_551(val, _values, result) + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + + result +end + +def _reduce_552(val, _values, result) + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true + + result +end + +def _reduce_553(val, _values, result) + result = args val + + result +end + +def _reduce_554(val, _values, result) + result = args val + + result +end + +def _reduce_555(val, _values, result) + result = args val + + result +end + +# reduce 556 omitted + +def _reduce_557(val, _values, result) + result = val[1] + + result +end + +def _reduce_558(val, _values, result) + result = nil + + result +end + +def _reduce_559(val, _values, result) + result = args val + + result +end + +def _reduce_560(val, _values, result) + result = args val + + result +end + +def _reduce_561(val, _values, result) + result = args val + + result +end + +def _reduce_562(val, _values, result) + result = args val + + result +end + +def _reduce_563(val, _values, result) + result = args val + + result +end + +def _reduce_564(val, _values, result) + result = args val + + result +end + +def _reduce_565(val, _values, result) + result = args val + + result +end + +def _reduce_566(val, _values, result) + result = args val + + result +end + +def _reduce_567(val, _values, result) + result = args val + + result +end + +def _reduce_568(val, _values, result) + result = args val + + result +end + +def _reduce_569(val, _values, result) + result = args val + + result +end + +def _reduce_570(val, _values, result) + result = args val + + result +end + +def _reduce_571(val, _values, result) + result = args val + + result +end + +def _reduce_572(val, _values, result) + result = args val + + result +end + +def _reduce_573(val, _values, result) + result = args val + + result +end + +def _reduce_574(val, _values, result) + yyerror "formal argument cannot be a constant" + + result +end + +def _reduce_575(val, _values, result) + yyerror "formal argument cannot be an instance variable" + + result +end + +def _reduce_576(val, _values, result) + yyerror "formal argument cannot be a global variable" + + result +end + +def _reduce_577(val, _values, result) + yyerror "formal argument cannot be a class variable" + + result +end + +# reduce 578 omitted + +def _reduce_579(val, _values, result) + identifier = val[0].to_sym + self.env[identifier] = :lvar + + result = identifier + + result +end + +# reduce 580 omitted + +# reduce 581 omitted + +def _reduce_582(val, _values, result) + result = val[1] + + result +end + +def _reduce_583(val, _values, result) + arg, = val + + case arg + when Symbol then + result = s(:args, arg).line lexer.lineno + when Sexp then + result = arg + else + debug20 32 + raise "Unknown f_arg type: #{val.inspect}" + end + + result +end + +def _reduce_584(val, _values, result) + list, _, item = val + + if list.sexp_type == :args then + result = list + else + result = s(:args, list).line list.line + end + + result << item + + result +end + +# reduce 585 omitted + +def _reduce_586(val, _values, result) + # TODO: new_kw_arg + (label, line), arg = val + + identifier = label.to_sym + self.env[identifier] = :lvar + + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line + + result +end + +def _reduce_587(val, _values, result) + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line + + result +end + +def _reduce_588(val, _values, result) + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id, expr).line(line)).line line + + result +end + +def _reduce_589(val, _values, result) + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line + + result +end + +# reduce 590 omitted + +def _reduce_591(val, _values, result) + list, _, item = val + result = list << item.last + + result +end + +# reduce 592 omitted + +def _reduce_593(val, _values, result) + result = args val + + result +end + +# reduce 594 omitted + +# reduce 595 omitted + +def _reduce_596(val, _values, result) + name = val[1].to_sym + self.assignable name + result = :"**#{name}" + + result +end + +def _reduce_597(val, _values, result) + result = :"**" + + result +end + +def _reduce_598(val, _values, result) + result = self.assignable val[0], val[2] + # TODO: detect duplicate names + + result +end + +def _reduce_599(val, _values, result) + result = self.assignable val[0], val[2] + + result +end + +def _reduce_600(val, _values, result) + optblk, = val + result = s(:block, optblk).line optblk.line + + result +end + +def _reduce_601(val, _values, result) + optarg, _, optblk = val + result = optarg + result << optblk + + result +end + +def _reduce_602(val, _values, result) + opt, = val + result = s(:block, opt).line opt.line + + result +end + +def _reduce_603(val, _values, result) + result = self.block_append val[0], val[2] + + result +end + +# reduce 604 omitted + +# reduce 605 omitted + +def _reduce_606(val, _values, result) + # TODO: differs from parse.y - needs tests + name = val[1].to_sym + self.assignable name + result = :"*#{name}" + + result +end + +def _reduce_607(val, _values, result) + name = :"*" + self.env[name] = :lvar + result = name + + result +end + +# reduce 608 omitted + +# reduce 609 omitted + +def _reduce_610(val, _values, result) + identifier = val[1].to_sym + + self.env[identifier] = :lvar + result = "&#{identifier}".to_sym + + result +end + +def _reduce_611(val, _values, result) + result = val[1] + + result +end + +def _reduce_612(val, _values, result) + result = nil + + result +end + +# reduce 613 omitted + +def _reduce_614(val, _values, result) + lexer.lex_state = EXPR_BEG + + result +end + +def _reduce_615(val, _values, result) + result = val[2] + yyerror "Can't define single method for literals." if + result.sexp_type == :lit + + result +end + +def _reduce_616(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +# reduce 617 omitted + +# reduce 618 omitted + +def _reduce_619(val, _values, result) + list = val[0].dup + more = val[2].sexp_body + list.push(*more) unless more.empty? + result = list + result.sexp_type = :hash + + result +end + +def _reduce_620(val, _values, result) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line + + result +end + +def _reduce_621(val, _values, result) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line + + result +end + +def _reduce_622(val, _values, result) + _, sym, _, value = val + sym.sexp_type = :dsym + result = s(:array, sym, value).line sym.line + + result +end + +def _reduce_623(val, _values, result) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line + + result +end + +# reduce 624 omitted + +# reduce 625 omitted + +# reduce 626 omitted + +# reduce 627 omitted + +# reduce 628 omitted + +# reduce 629 omitted + +# reduce 630 omitted + +# reduce 631 omitted + +# reduce 632 omitted + +# reduce 633 omitted + +# reduce 634 omitted + +# reduce 635 omitted + +# reduce 636 omitted + +# reduce 637 omitted + +# reduce 638 omitted + +# reduce 639 omitted + +# reduce 640 omitted + +# reduce 641 omitted + +# reduce 642 omitted + +# reduce 643 omitted + +# reduce 644 omitted + +# reduce 645 omitted + +# reduce 646 omitted + +# reduce 647 omitted + +# reduce 648 omitted + +def _reduce_649(val, _values, result) + yyerrok + result +end + +# reduce 650 omitted + +# reduce 651 omitted + +def _reduce_652(val, _values, result) + yyerrok + result +end + +def _reduce_653(val, _values, result) + result = nil; + result +end + +def _reduce_none(val, _values, result) + val[0] +end + +end # class Ruby26Parser diff -Nru ruby-ruby-parser-3.11.0/lib/ruby26_parser.y ruby-ruby-parser-3.15.1/lib/ruby26_parser.y --- ruby-ruby-parser-3.11.0/lib/ruby26_parser.y 1970-01-01 00:00:00.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby26_parser.y 2021-01-18 16:48:25.000000000 +0000 @@ -0,0 +1,2657 @@ +# -*- racc -*- + +class Ruby26Parser + +token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS + kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT + kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER + kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD + kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ + k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT + tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT + tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ + tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF + tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN + tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE + tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE + tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY + tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG + tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END + tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA + tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG + tRATIONAL tIMAGINARY + tLABEL_END + tLONELY + +preclow + nonassoc tLOWEST + nonassoc tLBRACE_ARG + nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD + left kOR kAND + right kNOT + nonassoc kDEFINED + right tEQL tOP_ASGN + left kRESCUE_MOD + right tEH tCOLON + nonassoc tDOT2 tDOT3 + left tOROP + left tANDOP + nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH + left tGT tGEQ tLT tLEQ + left tPIPE tCARET + left tAMPER2 + left tLSHFT tRSHFT + left tPLUS tMINUS + left tSTAR2 tDIVIDE tPERCENT # TODO: tSTAR2 -> tMULT + right tUMINUS_NUM tUMINUS + right tPOW + right tBANG tTILDE tUPLUS +prechigh + +rule + + program: { + self.lexer.lex_state = EXPR_BEG + } + top_compstmt + { + result = new_compstmt val + } + + top_compstmt: top_stmts opt_terms + { + stmt, _ = val + result = stmt + } + + top_stmts: none + | top_stmt + | top_stmts terms top_stmt + { + result = self.block_append val[0], val[2] + } + | error top_stmt + + top_stmt: stmt + | klBEGIN + { + if (self.in_def || self.in_single > 0) then + debug20 1 + yyerror "BEGIN in method" + end + self.env.extend + } + begin_block + { + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + } + + begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY + { + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt + } + + bodystmt: compstmt opt_rescue k_else + { + res = _values[-2] + yyerror "else without rescue is useless" unless res + } + compstmt + opt_ensure + { + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + } + | compstmt opt_rescue opt_ensure + { + body, resc, ens = val + + result = new_body [body, resc, nil, ens] + } + + compstmt: stmts opt_terms + { + result = new_compstmt val + } + + stmts: none + | stmt_or_begin # TODO: newline_node ? + | stmts terms stmt_or_begin + { + result = self.block_append val[0], val[2] + } + | error stmt + { + result = val[1] + debug20 2, val, result + } + + stmt_or_begin: stmt + | klBEGIN + { + yyerror "BEGIN is permitted only at toplevel" + } + + stmt: kALIAS fitem + { + lexer.lex_state = EXPR_FNAME + } + fitem + { + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line + } + | kALIAS tGVAR tGVAR + { + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line + } + | kALIAS tGVAR tBACK_REF + { + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line + } + | kALIAS tGVAR tNTH_REF + { + yyerror "can't make alias for the number variables" + } + | kUNDEF undef_list + { + result = val[1] + } + | stmt kIF_MOD expr_value + { + t, _, c = val + result = new_if c, t, nil + } + | stmt kUNLESS_MOD expr_value + { + f, _, c = val + result = new_if c, nil, f + } + | stmt kWHILE_MOD expr_value + { + e, _, c = val + result = new_while e, c, true + } + | stmt kUNTIL_MOD expr_value + { + e, _, c = val + result = new_until e, c, true + } + | stmt kRESCUE_MOD stmt + { + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody + } + | klEND tLCURLY compstmt tRCURLY + { + (_, line), _, stmt, _ = val + + if (self.in_def || self.in_single > 0) then + debug20 3 + yyerror "END in method; use at_exit" + end + + result = new_iter s(:postexe).line(line), 0, stmt + } + | command_asgn + | mlhs tEQL command_call + { + result = new_masgn val[0], val[2], :wrap + } + | lhs tEQL mrhs + { + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + } + | mlhs tEQL mrhs_arg + { + result = new_masgn val[0], val[2] + } + | expr + + command_asgn: lhs tEQL command_rhs + { + result = new_assign val[0], val[2] + } + # | lhs tEQL command_asgn + # { + # result = new_assign val[0], val[2] + # } + | var_lhs tOP_ASGN command_rhs + { + result = new_op_asgn val + } + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs + { + result = new_op_asgn1 val + } + | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs + { + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + } + | primary_value call_op tCONSTANT tOP_ASGN command_rhs + { + result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + } + | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs + { + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + } + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs + { + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + } + | backref tOP_ASGN command_rhs + { + self.backref_assign_error val[0] + } + + command_rhs: command_call =tOP_ASGN + { + expr, = val + result = value_expr expr + } + | command_call kRESCUE_MOD stmt + { + expr, (_, line), resbody = val + + expr = value_expr expr + ary = s(:array).line line + result = new_rescue(expr, new_resbody(ary, resbody)) + } + | command_asgn + + expr: command_call + | expr kAND expr + { + lhs, _, rhs = val + result = logical_op :and, lhs, rhs + } + | expr kOR expr + { + lhs, _, rhs = val + result = logical_op :or, lhs, rhs + } + | kNOT opt_nl expr + { + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op + } + | tBANG command_call + { + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y + } + | arg + + expr_value: expr + { + result = value_expr(val[0]) + } + + expr_value_do: { + lexer.cond.push true + } + expr_value do + { + lexer.cond.pop + } + { + _, expr, _, _ = val + result = expr + } + + command_call: command + | block_command + + block_command: block_call + | block_call call_op2 operation2 command_args + { + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line + } + + cmd_brace_block: tLBRACE_ARG + { + # self.env.extend(:dynamic) + result = self.lexer.lineno + } + brace_body tRCURLY + { + _, line, body, _ = val + + result = body + result.line = line + + # self.env.unextend + } + + fcall: operation + { + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno + } + + command: fcall command_args =tLOWEST + { + call, args = val + result = call.concat args.sexp_body + } + | fcall command_args cmd_brace_block + { + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result + result.insert 1, operation + end + } + | primary_value call_op operation2 command_args =tLOWEST + { + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop + } + | primary_value call_op operation2 command_args cmd_brace_block + { + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args, val[1] + + block_dup_check call, block + + block.insert 1, call + result = block + } + | primary_value tCOLON2 operation2 command_args =tLOWEST + { + result = new_call val[0], val[2].to_sym, val[3] + } + | primary_value tCOLON2 operation2 command_args cmd_brace_block + { + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args + + block_dup_check call, block + + block.insert 1, call + result = block + } + | kSUPER command_args + { + result = new_super val[1] + } + | kYIELD command_args + { + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield + } + | k_return call_args + { + line = val[0].last + result = s(:return, ret_args(val[1])).line(line) + } + | kBREAK call_args + { + (_, line), args = val + result = s(:break, ret_args(args)).line line + } + | kNEXT call_args + { + line = val[0].last + result = s(:next, ret_args(val[1])).line(line) + } + + mlhs: mlhs_basic + | tLPAREN mlhs_inner rparen + { + result = val[1] + } + + mlhs_inner: mlhs_basic + | tLPAREN mlhs_inner rparen + { + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l + } + + mlhs_basic: mlhs_head + { + head, = val + result = s(:masgn, head).line head.line + } + | mlhs_head mlhs_item + { + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line + } + | mlhs_head tSTAR mlhs_node + { + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line + } + | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post + { + ary1, _, splat, _, ary2 = val + + result = list_append ary1, s(:splat, splat).line(splat.line) + result.concat ary2.sexp_body + result = s(:masgn, result).line result.line + } + | mlhs_head tSTAR + { + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l + } + | mlhs_head tSTAR tCOMMA mlhs_post + { + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + } + | tSTAR mlhs_node + { + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l + } + | tSTAR mlhs_node tCOMMA mlhs_post + { + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + } + | tSTAR + { + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l + } + | tSTAR tCOMMA mlhs_post + { + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l + } + + mlhs_item: mlhs_node + | tLPAREN mlhs_inner rparen + { + result = val[1] + } + + mlhs_head: mlhs_item tCOMMA + { + lhs, _ = val + result = s(:array, lhs).line lhs.line + } + | mlhs_head mlhs_item tCOMMA + { + result = val[0] << val[1].compact + } + + mlhs_post: mlhs_item + { + item, = val + result = s(:array, item).line item.line + } + | mlhs_post tCOMMA mlhs_item + { + result = list_append val[0], val[2] + } + + mlhs_node: user_variable + { + result = self.assignable val[0] + } + | keyword_variable + { + result = self.assignable val[0] + } + | primary_value tLBRACK2 opt_call_args rbracket + { + result = self.aryset val[0], val[2] + } + | primary_value call_op tIDENTIFIER + { + result = new_attrasgn val[0], val[2], val[1] + } + | primary_value tCOLON2 tIDENTIFIER + { + recv, _, id = val + result = new_attrasgn recv, id + } + | primary_value call_op tCONSTANT + { + result = new_attrasgn val[0], val[2], val[1] + } + | primary_value tCOLON2 tCONSTANT + { + if (self.in_def || self.in_single > 0) then + debug20 7 + yyerror "dynamic constant assignment" + end + + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l + } + | tCOLON3 tCONSTANT + { + if (self.in_def || self.in_single > 0) then + debug20 8 + yyerror "dynamic constant assignment" + end + + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l + } + | backref + { + self.backref_assign_error val[0] + } + + lhs: user_variable + { + line = lexer.lineno + result = self.assignable val[0] + result.line = line + } + | keyword_variable + { + line = lexer.lineno + result = self.assignable val[0] + result.line = line + debug20 9, val, result + } + | primary_value tLBRACK2 opt_call_args rbracket + { + lhs, _, args, _ = val + result = self.aryset lhs, args + } + | primary_value call_op tIDENTIFIER # REFACTOR + { + lhs, op, id = val + result = new_attrasgn lhs, id, op + } + | primary_value tCOLON2 tIDENTIFIER + { + lhs, _, id = val + result = new_attrasgn lhs, id + } + | primary_value call_op tCONSTANT # REFACTOR? + { + result = new_attrasgn val[0], val[2], val[1] + } + | primary_value tCOLON2 tCONSTANT + { + expr, _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 10 + yyerror "dynamic constant assignment" + end + + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l + } + | tCOLON3 tCONSTANT + { + _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 11 + yyerror "dynamic constant assignment" + end + + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l + } + | backref + { + self.backref_assign_error val[0] + } + + cname: tIDENTIFIER + { + yyerror "class/module name must be CONSTANT" + } + | tCONSTANT + + cpath: tCOLON3 cname + { + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno + } + | cname + { + result = val[0].to_sym + } + | primary_value tCOLON2 cname + { + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line + } + + fname: tIDENTIFIER | tCONSTANT | tFID + | op + { + lexer.lex_state = EXPR_END + result = val[0] + } + + | reswords + { + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym + } + + fsym: fname | symbol + + fitem: fsym + { + id, = val + result = s(:lit, id.to_sym).line lexer.lineno + } + | dsym + + undef_list: fitem + { + result = new_undef val[0] + } + | + undef_list tCOMMA + { + lexer.lex_state = EXPR_FNAME + } + fitem + { + result = new_undef val[0], val[3] + } + + op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ + | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ + | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 + | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE + | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 + # TODO: tUBANG dead? + | tUBANG + + reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND + | kALIAS | kAND | kBEGIN | kBREAK | kCASE + | kCLASS | kDEF | kDEFINED | kDO | kELSE + | kELSIF | kEND | kENSURE | kFALSE | kFOR + | kIN | kMODULE | kNEXT | kNIL | kNOT + | kOR | kREDO | kRESCUE | kRETRY | kRETURN + | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF + | kWHEN | kYIELD | kIF | kUNLESS | kWHILE + | kUNTIL + + arg: lhs tEQL arg_rhs + { + result = new_assign val[0], val[2] + } + | var_lhs tOP_ASGN arg_rhs + { + result = new_op_asgn val + } + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs + { + result = new_op_asgn1 val + } + | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs + { + result = new_op_asgn2 val + } + | primary_value call_op tCONSTANT tOP_ASGN arg_rhs + { + result = new_op_asgn2 val + } + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs + { + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line + } + | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs + { + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] + } + | tCOLON3 tCONSTANT + { + result = self.lexer.lineno + } + tOP_ASGN arg_rhs + { + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] + } + | backref tOP_ASGN arg_rhs + { + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn + } + | arg tDOT2 arg + { + v1, v2 = val[0], val[2] + if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then + result = s(:lit, (v1.last)..(v2.last)).line v1.line + else + result = s(:dot2, v1, v2).line v1.line + end + } + | arg tDOT3 arg + { + v1, v2 = val[0], val[2] + if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then + result = s(:lit, (v1.last)...(v2.last)).line v1.line + else + result = s(:dot3, v1, v2).line v1.line + end + } + | arg tDOT2 + { + v1, _ = val + v2 = nil + + result = s(:dot2, v1, v2).line v1.line + } + | arg tDOT3 + { + v1, _ = val + v2 = nil + + result = s(:dot3, v1, v2).line v1.line + } + | arg tPLUS arg + { + result = new_call val[0], :+, argl(val[2]) + } + | arg tMINUS arg + { + result = new_call val[0], :-, argl(val[2]) + } + | arg tSTAR2 arg # TODO: rename + { + result = new_call val[0], :*, argl(val[2]) + } + | arg tDIVIDE arg + { + result = new_call val[0], :"/", argl(val[2]) + } + | arg tPERCENT arg + { + result = new_call val[0], :"%", argl(val[2]) + } + | arg tPOW arg + { + result = new_call val[0], :**, argl(val[2]) + } + | tUMINUS_NUM simple_numeric tPOW arg + { + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + + } + | tUPLUS arg + { + result = new_call val[1], :"+@" + } + | tUMINUS arg + { + result = new_call val[1], :"-@" + } + | arg tPIPE arg + { + result = new_call val[0], :"|", argl(val[2]) + } + | arg tCARET arg + { + result = new_call val[0], :"^", argl(val[2]) + } + | arg tAMPER2 arg + { + result = new_call val[0], :"&", argl(val[2]) + } + | arg tCMP arg + { + result = new_call val[0], :"<=>", argl(val[2]) + } + | rel_expr =tCMP + | arg tEQ arg + { + result = new_call val[0], :"==", argl(val[2]) + } + | arg tEQQ arg + { + result = new_call val[0], :"===", argl(val[2]) + } + | arg tNEQ arg + { + result = new_call val[0], :"!=", argl(val[2]) + } + | arg tMATCH arg + { + lhs, _, rhs = val + result = new_match lhs, rhs + } + | arg tNMATCH arg + { + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line + } + | tBANG arg + { + _, arg = val + result = new_call arg, :"!" + result.line arg.line + } + | tTILDE arg + { + result = new_call value_expr(val[1]), :"~" + } + | arg tLSHFT arg + { + val[0] = value_expr val[0] + val[2] = value_expr val[2] + result = new_call val[0], :"\<\<", argl(val[2]) + } + | arg tRSHFT arg + { + val[0] = value_expr val[0] + val[2] = value_expr val[2] + result = new_call val[0], :">>", argl(val[2]) + } + | arg tANDOP arg + { + result = logical_op :and, val[0], val[2] + } + | arg tOROP arg + { + result = logical_op :or, val[0], val[2] + } + | kDEFINED opt_nl arg + { + (_, line), _, arg = val + result = s(:defined, arg).line line + } + | arg tEH arg opt_nl tCOLON arg + { + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line + } + | primary + + relop: tGT + | tLT + | tGEQ + | tLEQ + + rel_expr: arg relop arg =tGT + { + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + } + | rel_expr relop arg =tGT + { + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + } + + arg_value: arg + { + result = value_expr(val[0]) + } + + aref_args: none + | args trailer + { + result = args [val[0]] + } + | args tCOMMA assocs trailer + { + result = args [val[0], array_to_hash(val[2])] + } + | assocs trailer + { + result = args [array_to_hash(val[0])] + } + + arg_rhs: arg =tOP_ASGN + | arg kRESCUE_MOD arg + { + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + } + + paren_args: tLPAREN2 opt_call_args rparen + { + _, args, _ = val + result = args + } + + opt_paren_args: none + | paren_args + + opt_call_args: none + | call_args + | args tCOMMA + { + result = args val + } + | args tCOMMA assocs tCOMMA + { + result = args [val[0], array_to_hash(val[2])] + } + | assocs tCOMMA + { + result = args [array_to_hash(val[0])] + } + + call_args: command + { + warning "parenthesize argument(s) for future version" + result = call_args val + } + | args opt_block_arg + { + result = call_args val + } + | assocs opt_block_arg + { + result = call_args [array_to_hash(val[0]), val[1]] + } + | args tCOMMA assocs opt_block_arg + { + result = call_args [val[0], array_to_hash(val[2]), val[3]] + } + | block_arg + { + result = call_args val + } + + command_args: { + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead + } + call_args + { + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args + } + + block_arg: tAMPER arg_value + { + _, arg = val + result = s(:block_pass, arg).line arg.line + } + + opt_block_arg: tCOMMA block_arg + { + result = val[1] + } + | none + + args: arg_value + { + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno + } + | tSTAR arg_value + { + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line + } + | args tCOMMA arg_value + { + args, _, id = val + result = self.list_append args, id + } + | args tCOMMA tSTAR arg_value + { + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) + } + + mrhs_arg: mrhs + { + result = new_masgn_arg val[0] + } + | arg_value + { + result = new_masgn_arg val[0], :wrap + } + + mrhs: args tCOMMA arg_value + { + result = val[0] << val[2] + } + | args tCOMMA tSTAR arg_value + { + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat + } + | tSTAR arg_value + { + _, arg = val + result = s(:splat, arg).line arg.line + } + + primary: literal + | strings + | xstring + | regexp + | words + | qwords + | symbols + | qsymbols + | var_ref + | backref + | tFID + { + msg, = val + result = new_call nil, msg.to_sym + } + | k_begin + { + lexer.cmdarg.push false + result = self.lexer.lineno + } + bodystmt k_end + { + lexer.cmdarg.pop + result = new_begin val + } + | tLPAREN_ARG + { + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno + } + rparen + { + _, line, _ = val + result = s(:begin).line line + } + | tLPAREN_ARG + stmt + { + lexer.lex_state = EXPR_ENDARG + } + rparen + { + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt + } + | tLPAREN compstmt tRPAREN + { + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno + result.paren = true + } + | primary_value tCOLON2 tCONSTANT + { + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line + } + | tCOLON3 tCONSTANT + { + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno + } + | tLBRACK { result = lexer.lineno } aref_args tRBRACK + { + _, line, args, _ = val + result = args || s(:array) + result.sexp_type = :array # aref_args is :args + result.line line + } + | tLBRACE + { + result = self.lexer.lineno + } + assoc_list tRCURLY + { + result = new_hash val + } + | k_return + { + (_, line), = val + result = s(:return).line line + } + | kYIELD tLPAREN2 call_args rparen + { + result = new_yield val[2] + } + | kYIELD tLPAREN2 rparen + { + result = new_yield + } + | kYIELD + { + result = new_yield + } + | kDEFINED opt_nl tLPAREN2 expr rparen + { + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line + } + | kNOT tLPAREN2 expr rparen + { + _, _, lhs, _ = val + result = new_call lhs, :"!" + } + | kNOT tLPAREN2 rparen + { + debug20 14, val, result + } + | fcall brace_block + { + call, iter = val + + iter.insert 1, call + result = iter + # FIX: probably not: call.line = iter.line + } + | method_call + | method_call brace_block + { + call, iter = val[0], val[1] + block_dup_check call, iter + iter.insert 1, call # FIX + result = iter + } + | tLAMBDA lambda + { + result = val[1] # TODO: fix lineno + } + | k_if expr_value then compstmt if_tail k_end + { + _, c, _, t, f, _ = val + result = new_if c, t, f + } + | k_unless expr_value then compstmt opt_else k_end + { + _, c, _, t, f, _ = val + result = new_if c, f, t + } + | k_while expr_value_do compstmt k_end + { + _, cond, body, _ = val + result = new_while body, cond, true + } + | k_until expr_value_do compstmt k_end + { + _, cond, body, _ = val + result = new_until body, cond, true + } + | k_case expr_value opt_terms case_body k_end + { + (_, line), expr, _, body, _ = val + result = new_case expr, body, line + } + | k_case opt_terms case_body k_end + { + (_, line), _, body, _ = val + result = new_case nil, body, line + } + | k_for for_var kIN expr_value_do compstmt k_end + { + _, var, _, iter, body, _ = val + result = new_for iter, var, body + } + | k_class + { + result = self.lexer.lineno + } + cpath superclass + { + self.comments.push self.lexer.comments + if (self.in_def || self.in_single > 0) then + yyerror "class definition in method body" + end + self.env.extend + } + bodystmt k_end + { + result = new_class val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + } + | k_class tLSHFT + { + result = self.lexer.lineno + } + expr + { + result = self.in_def + self.in_def = false + } + term + { + result = self.in_single + self.in_single = 0 + self.env.extend + } + bodystmt k_end + { + result = new_sclass val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + } + | k_module + { + result = self.lexer.lineno + } + cpath + { + self.comments.push self.lexer.comments + yyerror "module definition in method body" if + self.in_def or self.in_single > 0 + + self.env.extend + } + bodystmt k_end + { + result = new_module val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + } + | k_def fname + { + result = self.in_def + + self.in_def = true # group = local_push + self.env.extend + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments + } + f_arglist bodystmt { result = lexer.lineno } k_end + { + in_def = val[2] + + result = new_defn val + + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop + self.env.unextend + self.in_def = in_def + + self.lexer.comments # we don't care about comments in the body + } + | k_def singleton dot_or_colon + { + lexer.lex_state = EXPR_FNAME + } + fname + { + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push + self.env.extend + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments + } + f_arglist bodystmt k_end + { + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val + + result = new_defs val + + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop + self.env.unextend + self.in_def = in_def + + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + + self.lexer.comments # we don't care about comments in the body + } + | kBREAK + { + (_, line), = val + result = s(:break).line line + } + | kNEXT + { + (_, line), = val + result = s(:next).line line + } + | kREDO + { + (_, line), = val + result = s(:redo).line line + } + | kRETRY + { + (_, line), = val + result = s(:retry).line line + } + + primary_value: primary + { + result = value_expr(val[0]) + } + + # These are really stupid + k_begin: kBEGIN + k_if: kIF + k_unless: kUNLESS + k_while: kWHILE + k_until: kUNTIL + k_case: kCASE + k_for: kFOR + k_class: kCLASS + k_module: kMODULE + k_def: kDEF + k_do: kDO + k_do_block: kDO_BLOCK + k_rescue: kRESCUE + k_ensure: kENSURE + k_when: kWHEN + k_else: kELSE + k_elsif: kELSIF + k_end: kEND + k_return: kRETURN + + then: term + | kTHEN + | term kTHEN + + do: term + | kDO_COND + + if_tail: opt_else + | k_elsif expr_value then compstmt if_tail + { + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line + } + + opt_else: none + | kELSE compstmt + { + result = val[1] + } + + for_var: lhs + | mlhs + { + val[0].delete_at 1 if val[0][1].nil? # HACK + } + + f_marg: f_norm_arg + | tLPAREN f_margs rparen + { + result = val[1] + } + + f_marg_list: f_marg + { + sym, = val + + result = s(:array, sym).line lexer.lineno + } + | f_marg_list tCOMMA f_marg + { + result = list_append val[0], val[2] + } + + f_margs: f_marg_list + { + args, = val + + result = block_var args + } + | f_marg_list tCOMMA tSTAR f_norm_arg + { + args, _, _, splat = val + + result = block_var args, "*#{splat}".to_sym + } + | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list + { + args, _, _, splat, _, args2 = val + + result = block_var args, "*#{splat}".to_sym, args2 + } + | f_marg_list tCOMMA tSTAR + { + args, _, _ = val + + result = block_var args, :* + } + | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list + { + args, _, _, _, args2 = val + + result = block_var args, :*, args2 + } + | tSTAR f_norm_arg + { + _, splat = val + + result = block_var :"*#{splat}" + } + | tSTAR f_norm_arg tCOMMA f_marg_list + { + _, splat, _, args = val + + result = block_var :"*#{splat}", args + } + | tSTAR + { + result = block_var :* + } + | tSTAR tCOMMA f_marg_list + { + _, _, args = val + + result = block_var :*, args + } + + block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg + { + result = call_args val + } + | f_block_kwarg opt_f_block_arg + { + result = call_args val + } + | f_kwrest opt_f_block_arg + { + result = call_args val + } + | f_block_arg + { + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line + } + +opt_block_args_tail: tCOMMA block_args_tail + { + result = args val + } + | none + + block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail + { + result = args val + } + | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | f_arg tCOMMA f_block_optarg opt_block_args_tail + { + result = args val + } + | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | f_arg tCOMMA f_rest_arg opt_block_args_tail + { + result = args val + } + | f_arg tCOMMA + { + result = args(val) << nil + } + | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | f_arg opt_block_args_tail + { + result = args val + } + | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail + { + result = args val + } + | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | f_block_optarg opt_block_args_tail + { + result = args val + } + | f_block_optarg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | f_rest_arg opt_block_args_tail + { + result = args val + } + | f_rest_arg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | block_args_tail + { + result = args val + } + + opt_block_param: none { result = 0 } + | block_param_def + { + self.lexer.command_start = true + } + + block_param_def: tPIPE opt_bv_decl tPIPE + { + # TODO: current_arg = 0 + result = args val + } + | tOROP + { + result = s(:args).line lexer.lineno + } + | tPIPE block_param opt_bv_decl tPIPE + { + # TODO: current_arg = 0 + result = args val + } + + opt_bv_decl: opt_nl + | opt_nl tSEMI bv_decls opt_nl + { + result = args val + } + + bv_decls: bvar + { + result = args val + } + | bv_decls tCOMMA bvar + { + result = args val + } + + bvar: tIDENTIFIER + { + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line + } + | f_bad_arg + + lambda: { + self.env.extend :dynamic + result = [lexer.lineno, lexer.lpar_beg] + lexer.paren_nest += 1 + lexer.lpar_beg = lexer.paren_nest + } + f_larglist + { + lexer.cmdarg.push false + } + lambda_body + { + (line, lpar), args, _cmdarg, body = val + lexer.lpar_beg = lpar + + lexer.cmdarg.pop + + call = s(:lambda).line line + result = new_iter call, args, body + result.line = line + self.env.unextend # TODO: dynapush & dynapop + } + + f_larglist: tLPAREN2 f_args opt_bv_decl rparen + { + result = args val + } + | f_args + { + result = val[0] + result = 0 if result == s(:args) + } + + lambda_body: tLAMBEG compstmt tRCURLY + { + result = val[1] + } + | kDO_LAMBDA bodystmt kEND + { + result = val[1] + } + + do_block: k_do_block do_body kEND + { + (_, line), iter, _ = val + result = iter.line line + } + + block_call: command do_block + { + # TODO: + ## if (nd_type($1) == NODE_YIELD) { + ## compile_error(PARSER_ARG "block given to yield"); + + syntax_error "Both block arg and actual block given." if + val[0].block_pass? + + val = invert_block_call val if inverted? val + + cmd, blk = val + + result = blk + result.insert 1, cmd + } + | block_call call_op2 operation2 opt_paren_args + { + result = new_call val[0], val[2].to_sym, val[3] + } + | block_call call_op2 operation2 opt_paren_args brace_block + { + iter1, _, name, args, iter2 = val + + call = new_call iter1, name.to_sym, args + iter2.insert 1, call + + result = iter2 + } + | block_call call_op2 operation2 command_args do_block + { + iter1, _, name, args, iter2 = val + + call = new_call iter1, name.to_sym, args + iter2.insert 1, call + + result = iter2 + } + + method_call: fcall + { + result = self.lexer.lineno + } + paren_args + { + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno + } + | primary_value call_op operation2 opt_paren_args + { + result = new_call val[0], val[2].to_sym, val[3], val[1] + } + | primary_value tCOLON2 operation2 paren_args + { + result = new_call val[0], val[2].to_sym, val[3] + } + | primary_value tCOLON2 operation3 + { + result = new_call val[0], val[2].to_sym + } + | primary_value call_op paren_args + { + result = new_call val[0], :call, val[2], val[1] + } + | primary_value tCOLON2 paren_args + { + result = new_call val[0], :call, val[2] + } + | kSUPER paren_args + { + result = new_super val[1] + } + | kSUPER + { + result = s(:zsuper).line lexer.lineno + } + | primary_value tLBRACK2 opt_call_args rbracket + { + result = new_aref val + } + + brace_block: tLCURLY + { + self.env.extend :dynamic + result = self.lexer.lineno + } + brace_body tRCURLY + { + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + } + | k_do + { + self.env.extend :dynamic + result = self.lexer.lineno + } + do_body kEND + { + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + } + + brace_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { result = lexer.cmdarg.store(false) } + opt_block_param compstmt + { + line, cmdarg, param, cmpstmt = val + + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + } + + do_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { lexer.cmdarg.push false } + opt_block_param + bodystmt + { + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop + self.env.unextend + } + + case_body: k_when + { + result = self.lexer.lineno + } + args then compstmt cases + { + result = new_when(val[2], val[4]) + result.line = val[1] + result << val[5] if val[5] + } + + cases: opt_else | case_body + + opt_rescue: k_rescue exc_list exc_var then compstmt opt_rescue + { + (_, line), klasses, var, _, body, rest = val + + klasses ||= s(:array) + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var + klasses.line line + + result = new_resbody(klasses, body) + result << rest if rest # UGH, rewritten above + } + | + { + result = nil + } + + exc_list: arg_value + { + arg, = val + result = s(:array, arg).line arg.line + } + | mrhs + | none + + exc_var: tASSOC lhs + { + result = val[1] + } + | none + + opt_ensure: k_ensure compstmt + { + (_, line), body = val + + result = body || s(:nil).line(line) + } + | none + + literal: numeric + { + line = lexer.lineno + result = s(:lit, val[0]) + result.line = line + } + | symbol + { + line = lexer.lineno + result = s(:lit, val[0]) + result.line = line + } + | dsym + + strings: string + { + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str + } + + string: tCHAR + { + debug20 23, val, result + } + | string1 + | string string1 + { + result = self.literal_concat val[0], val[1] + } + + string1: tSTRING_BEG string_contents tSTRING_END + { + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str + } + | tSTRING + { + result = new_string val + } + + xstring: tXSTRING_BEG xstring_contents tSTRING_END + { + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? + } + + regexp: tREGEXP_BEG regexp_contents tREGEXP_END + { + result = new_regexp val + } + + words: tWORDS_BEG tSPACE tSTRING_END + { + result = s(:array).line lexer.lineno + } + | tWORDS_BEG word_list tSTRING_END + { + result = val[1] + } + + word_list: none + { + result = new_word_list + } + | word_list word tSPACE + { + result = val[0].dup << new_word_list_entry(val) + } + + word: string_content + | word string_content + { + result = self.literal_concat val[0], val[1] + } + + symbols: tSYMBOLS_BEG tSPACE tSTRING_END + { + result = s(:array).line lexer.lineno + } + | tSYMBOLS_BEG { result = lexer.lineno } symbol_list tSTRING_END + { + _, line, list, _, = val + list.line = line + result = list + } + + symbol_list: none + { + result = new_symbol_list.line lexer.lineno + } + | symbol_list word tSPACE + { + list, * = val + result = list.dup << new_symbol_list_entry(val) + } + + qwords: tQWORDS_BEG tSPACE tSTRING_END + { + result = s(:array).line lexer.lineno + } + | tQWORDS_BEG qword_list tSTRING_END + { + result = val[1] + } + + qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END + { + result = s(:array).line lexer.lineno # FIX + } + | tQSYMBOLS_BEG qsym_list tSTRING_END + { + result = val[1] + } + + qword_list: none + { + result = new_qword_list + } + | qword_list tSTRING_CONTENT tSPACE + { + result = val[0].dup << new_qword_list_entry(val) + } + + qsym_list: none + { + result = new_qsym_list + } + | qsym_list tSTRING_CONTENT tSPACE + { + result = val[0].dup << new_qsym_list_entry(val) + } + + string_contents: none + { + result = s(:str, "").line lexer.lineno + } + | string_contents string_content + { + v1, v2 = val + result = literal_concat v1, v2 + } + +xstring_contents: none + { + result = nil + } + | xstring_contents string_content + { + v1, v2 = val + result = literal_concat v1, v2 + } + +regexp_contents: none + { + result = nil + } + | regexp_contents string_content + { + v1, v2 = val + result = literal_concat v1, v2 + } + + string_content: tSTRING_CONTENT + { + result = new_string val + } + | tSTRING_DVAR + { + result = lexer.lex_strterm + + lexer.lex_strterm = nil + lexer.lex_state = EXPR_BEG + } + string_dvar + { + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line + } + | tSTRING_DBEG + { + result = [lexer.lex_strterm, + lexer.brace_nest, + lexer.string_nest, # TODO: remove + lexer.lex_state, + lexer.lineno, + ] + + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_strterm = nil + lexer.brace_nest = 0 + lexer.string_nest = 0 + + lexer.lex_state = EXPR_BEG + } + compstmt + tSTRING_DEND + { + _, memo, stmt, _ = val + + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent + + lexer.lex_strterm = lex_strterm + lexer.brace_nest = brace_nest + lexer.string_nest = string_nest + + lexer.cmdarg.pop + lexer.cond.pop + + lexer.lex_state = oldlex_state + + case stmt + when Sexp then + case stmt.sexp_type + when :str, :dstr, :evstr then + result = stmt + else + result = s(:evstr, stmt).line line + end + when nil then + result = s(:evstr).line line + else + debug20 25 + raise "unknown string body: #{stmt.inspect}" + end + } + + string_dvar: tGVAR { result = s(:gvar, val[0].to_sym).line lexer.lineno } + | tIVAR { result = s(:ivar, val[0].to_sym).line lexer.lineno } + | tCVAR { result = s(:cvar, val[0].to_sym).line lexer.lineno } + | backref + + symbol: tSYMBEG sym + { + lexer.lex_state = EXPR_END + result = val[1].to_sym + } + | tSYMBOL + { + result = val[0].to_sym + } + + sym: fname | tIVAR | tGVAR | tCVAR + + dsym: tSYMBEG xstring_contents tSTRING_END + { + _, result, _ = val + + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno + + case result.sexp_type + when :dstr then + result.sexp_type = :dsym + when :str then + result = s(:lit, result.last.to_sym).line result.line + when :evstr then + result = s(:dsym, "", result).line result.line + else + debug20 26, val, result + end + } + + numeric: simple_numeric + | tUMINUS_NUM simple_numeric + { + result = -val[1] # TODO: pt_testcase + } + + simple_numeric: tINTEGER + | tFLOAT + | tRATIONAL + | tIMAGINARY + + user_variable: tIDENTIFIER + | tIVAR + | tGVAR + | tCONSTANT + | tCVAR + +keyword_variable: kNIL { result = s(:nil).line lexer.lineno } + | kSELF { result = s(:self).line lexer.lineno } + | kTRUE { result = s(:true).line lexer.lineno } + | kFALSE { result = s(:false).line lexer.lineno } + | k__FILE__ { result = s(:str, self.file).line lexer.lineno } + | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno } + | k__ENCODING__ + { + l = lexer.lineno + result = + if defined? Encoding then + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l + else + s(:str, "Unsupported!").line l + end + } + + var_ref: user_variable + { + var = val[0] + result = Sexp === var ? var : self.gettable(var) + } + | keyword_variable + { + var = val[0] + result = Sexp === var ? var : self.gettable(var) + } + + var_lhs: user_variable + { + result = self.assignable val[0] + } + | keyword_variable + { + result = self.assignable val[0] + debug20 29, val, result + } + + backref: tNTH_REF { result = s(:nth_ref, val[0]).line lexer.lineno } + | tBACK_REF { result = s(:back_ref, val[0]).line lexer.lineno } + + superclass: tLT + { + lexer.lex_state = EXPR_BEG + lexer.command_start = true + } + expr_value term + { + result = val[2] + } + | none + { + result = nil + } + + f_arglist: tLPAREN2 f_args rparen + { + result = val[1] + self.lexer.lex_state = EXPR_BEG + self.lexer.command_start = true + } + | { + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + } + f_args term + { + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true + } + + args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg + { + result = args val + } + | f_kwarg opt_f_block_arg + { + result = args val + } + | f_kwrest opt_f_block_arg + { + result = args val + } + | f_block_arg + + opt_args_tail: tCOMMA args_tail + { + result = val[1] + } + | + { + result = nil + } + + f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail + { + result = args val + } + | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail + { + result = args val + } + | f_arg tCOMMA f_optarg opt_args_tail + { + result = args val + } + | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail + { + result = args val + } + | f_arg tCOMMA f_rest_arg opt_args_tail + { + result = args val + } + | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail + { + result = args val + } + | f_arg opt_args_tail + { + result = args val + } + | f_optarg tCOMMA f_rest_arg opt_args_tail + { + result = args val + } + | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail + { + result = args val + } + | f_optarg opt_args_tail + { + result = args val + } + | f_optarg tCOMMA f_arg opt_args_tail + { + result = args val + } + | f_rest_arg opt_args_tail + { + result = args val + } + | f_rest_arg tCOMMA f_arg opt_args_tail + { + result = args val + } + | args_tail + { + result = args val + } + | + { + result = args val + } + + f_bad_arg: tCONSTANT + { + yyerror "formal argument cannot be a constant" + } + | tIVAR + { + yyerror "formal argument cannot be an instance variable" + } + | tGVAR + { + yyerror "formal argument cannot be a global variable" + } + | tCVAR + { + yyerror "formal argument cannot be a class variable" + } + + f_norm_arg: f_bad_arg + | tIDENTIFIER + { + identifier = val[0].to_sym + self.env[identifier] = :lvar + + result = identifier + } + + f_arg_asgn: f_norm_arg + + f_arg_item: f_arg_asgn + | tLPAREN f_margs rparen + { + result = val[1] + } + + f_arg: f_arg_item + { + arg, = val + + case arg + when Symbol then + result = s(:args, arg).line lexer.lineno + when Sexp then + result = arg + else + debug20 32 + raise "Unknown f_arg type: #{val.inspect}" + end + } + | f_arg tCOMMA f_arg_item + { + list, _, item = val + + if list.sexp_type == :args then + result = list + else + result = s(:args, list).line list.line + end + + result << item + } + + f_label: tLABEL + + f_kw: f_label arg_value + { + # TODO: new_kw_arg + (label, line), arg = val + + identifier = label.to_sym + self.env[identifier] = :lvar + + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line + } + | f_label + { + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line + } + + f_block_kw: f_label primary_value + { + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id, expr).line(line)).line line + } + | f_label + { + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line + } + + f_block_kwarg: f_block_kw + | f_block_kwarg tCOMMA f_block_kw + { + list, _, item = val + result = list << item.last + } + + f_kwarg: f_kw + | f_kwarg tCOMMA f_kw + { + result = args val + } + + kwrest_mark: tPOW + | tDSTAR + + f_kwrest: kwrest_mark tIDENTIFIER + { + name = val[1].to_sym + self.assignable name + result = :"**#{name}" + } + | kwrest_mark + { + result = :"**" + } + + f_opt: f_arg_asgn tEQL arg_value + { + result = self.assignable val[0], val[2] + # TODO: detect duplicate names + } + + f_block_opt: f_arg_asgn tEQL primary_value + { + result = self.assignable val[0], val[2] + } + + f_block_optarg: f_block_opt + { + optblk, = val + result = s(:block, optblk).line optblk.line + } + | f_block_optarg tCOMMA f_block_opt + { + optarg, _, optblk = val + result = optarg + result << optblk + } + + f_optarg: f_opt + { + opt, = val + result = s(:block, opt).line opt.line + } + | f_optarg tCOMMA f_opt + { + result = self.block_append val[0], val[2] + } + + restarg_mark: tSTAR2 | tSTAR + + f_rest_arg: restarg_mark tIDENTIFIER + { + # TODO: differs from parse.y - needs tests + name = val[1].to_sym + self.assignable name + result = :"*#{name}" + } + | restarg_mark + { + name = :"*" + self.env[name] = :lvar + result = name + } + + blkarg_mark: tAMPER2 | tAMPER + + f_block_arg: blkarg_mark tIDENTIFIER + { + identifier = val[1].to_sym + + self.env[identifier] = :lvar + result = "&#{identifier}".to_sym + } + + opt_f_block_arg: tCOMMA f_block_arg + { + result = val[1] + } + | + { + result = nil + } + + singleton: var_ref + | tLPAREN2 + { + lexer.lex_state = EXPR_BEG + } + expr rparen + { + result = val[2] + yyerror "Can't define single method for literals." if + result.sexp_type == :lit + } + + assoc_list: none + { + result = s(:array).line lexer.lineno + } + | assocs trailer + + assocs: assoc + | assocs tCOMMA assoc + { + list = val[0].dup + more = val[2].sexp_body + list.push(*more) unless more.empty? + result = list + result.sexp_type = :hash + } + + assoc: arg_value tASSOC arg_value + { + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line + } + | tLABEL arg_value + { + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line + } + | tSTRING_BEG string_contents tLABEL_END arg_value + { + _, sym, _, value = val + sym.sexp_type = :dsym + result = s(:array, sym, value).line sym.line + } + | tDSTAR arg_value + { + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line + } + + operation: tIDENTIFIER | tCONSTANT | tFID + operation2: tIDENTIFIER | tCONSTANT | tFID | op + operation3: tIDENTIFIER | tFID | op + dot_or_colon: tDOT | tCOLON2 + call_op: tDOT + | tLONELY # TODO: rename tANDDOT? + + call_op2: call_op + | tCOLON2 + + opt_terms: | terms + opt_nl: | tNL + rparen: opt_nl tRPAREN + rbracket: opt_nl tRBRACK + trailer: | tNL | tCOMMA + + term: tSEMI { yyerrok } + | tNL + + terms: term + | terms tSEMI { yyerrok } + + none: { result = nil; } +end + +---- inner + +require "ruby_lexer" +require "ruby_parser_extras" +include RubyLexer::State::Values + +# :stopdoc: + +# Local Variables: ** +# racc-token-length-max:14 ** +# End: ** diff -Nru ruby-ruby-parser-3.11.0/lib/ruby27_parser.rb ruby-ruby-parser-3.15.1/lib/ruby27_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby27_parser.rb 1970-01-01 00:00:00.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby27_parser.rb 2021-01-18 16:48:25.000000000 +0000 @@ -0,0 +1,7224 @@ +# +# DO NOT MODIFY!!!! +# This file is automatically generated by Racc 1.5.0 +# from Racc grammar file "". +# + +require 'racc/parser.rb' +class Ruby27Parser < RubyParser::Parser + + +require "ruby_lexer" +require "ruby_parser_extras" +include RubyLexer::State::Values + +# :stopdoc: + +# Local Variables: ** +# racc-token-length-max:14 ** +# End: ** +##### State transition tables begin ### + +clist = [ +'-631,285,285,-116,587,-115,285,-631,-631,-631,-116,-110,832,-631,-631', +'590,-631,-539,861,-104,-110,832,235,236,-539,-631,1046,285,-102,273', +'274,231,-111,-113,-94,236,-631,-631,281,-631,-631,-631,-631,-631,992', +'-109,831,-114,598,597,-80,-101,-108,-103,763,831,509,-111,236,-115,850', +'602,602,-108,272,271,851,-631,-631,-631,-631,-631,-631,-631,-631,-631', +'-631,-631,-631,-631,-631,-113,591,-631,-631,-631,-104,676,287,287,235', +'-631,-438,287,-631,-102,232,225,226,-631,480,-631,602,-631,-631,-631', +'-631,-631,-631,-631,-106,-631,-631,-631,287,-107,-101,-116,-101,-627', +'-103,-104,-116,860,-104,-628,-631,-631,-306,-103,-102,-631,-112,-102', +'-110,-306,-306,-306,-631,-110,-104,-306,-306,-631,-306,-112,-111,-113', +'602,-102,-100,-111,-113,-101,128,-103,-101,-99,-103,127,602,-114,-102', +'-109,-306,-306,-114,-306,-306,-306,-306,-306,-101,-115,-103,128,128', +'-108,-115,967,127,127,-108,-112,-114,651,-104,236,225,226,225,226,225', +'226,-213,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306', +'-306,-306,479,-627,-306,-306,-306,632,675,128,637,128,-306,648,127,-306', +'127,632,106,107,-306,1004,-306,95,-306,-306,-306,-306,-306,-306,-306', +'96,-306,632,-306,106,107,729,1005,-112,728,650,-627,-628,-112,-115,-529', +'-306,-306,-631,-306,670,-306,-529,824,128,-631,-631,-631,-306,127,477', +'-631,-631,-306,-631,-114,128,634,633,-109,236,127,236,-631,-109,647', +'-625,634,633,630,-103,-105,478,729,-631,-631,731,-631,-631,-631,-631', +'-631,-104,634,633,652,108,109,703,887,582,609,579,578,577,-532,580,1017', +'-113,823,632,-113,-532,108,109,-631,-631,-631,-631,-631,-631,-631,-631', +'-631,-631,-631,-631,-631,-631,-532,231,-631,-631,-631,427,676,-532,778', +'-544,-631,-116,-625,-631,-543,632,-532,780,-631,632,-631,920,-631,-631', +'-631,-631,-631,-631,-631,422,-631,-631,-631,582,-625,579,578,577,-111', +'580,670,-624,634,633,725,-631,-631,-529,-631,1015,-631,793,598,597,-529', +'-529,-529,-631,587,-529,-529,-529,-631,-529,-112,-532,232,-109,725,590', +'787,-529,-108,-529,-529,-529,634,633,405,-110,634,633,640,-529,-529', +'913,-529,-529,-529,-529,-529,810,-541,-538,-529,225,226,-542,-113,-541', +'-538,-529,598,597,-542,632,-624,402,-541,400,-529,880,669,-542,-529', +'-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,-624', +'810,-529,-529,-529,-101,-529,-529,591,1035,-529,233,128,-529,-529,397', +'-529,127,-529,632,-529,-110,-529,-529,-529,-529,-529,-529,-529,-541', +'-529,-529,-529,1038,-542,850,128,231,634,633,796,127,-111,632,613,-529', +'-529,-529,-529,669,-529,-213,-529,611,-543,128,-540,-529,-306,-110,127', +'-537,-529,-540,-529,-306,-306,-306,-537,-116,-306,-306,-306,582,-306', +'579,578,577,587,580,634,633,635,-534,-306,-306,-306,128,373,590,-534', +'-102,127,-106,-306,-306,-99,-306,-306,-306,-306,-306,232,231,634,633', +'630,-111,231,-115,541,585,-108,775,1044,230,-544,776,233,539,595,594', +'598,597,228,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306,-306', +'-306,-306,236,-535,-306,-306,-306,-536,826,-306,-535,1047,-306,955,-536', +'-306,-306,955,-306,591,-306,-100,-306,-107,-306,-306,-306,-306,-306', +'-306,-306,232,-306,128,-306,955,232,-109,127,-116,582,1052,579,578,577', +'587,580,-306,-306,-306,-306,627,-306,1017,-306,231,590,339,628,-306', +'-532,740,475,1061,-306,1063,-114,-532,-532,-532,1065,476,-532,-532,-532', +'1067,-532,582,585,579,578,577,256,580,-532,1067,-532,-532,-532,598,597', +'231,729,-631,722,731,-532,-532,662,-532,-532,-532,-532,-532,338,-306', +'276,660,729,231,1017,731,-306,725,253,749,1043,-628,255,254,232,-306', +'725,591,752,1041,227,-532,-532,-532,-532,-532,-532,-532,-532,-532,-532', +'-532,-532,-532,-532,225,226,-532,-532,-532,-631,-532,-532,883,887,-532', +'-628,-631,-532,-532,232,-532,-627,-532,256,-532,-631,-532,-532,-532', +'-532,-532,-532,-532,-306,-532,424,-532,232,883,887,426,425,582,-631', +'579,578,577,587,580,-532,-532,-532,-532,-627,-532,253,-532,231,590,255', +'254,-532,-306,236,1037,224,-532,223,-532,-306,-306,-306,222,780,-631', +'-306,-306,955,-306,-350,585,1008,1017,579,578,577,-350,580,1090,595', +'594,598,597,-307,1067,-350,1067,1067,-306,-306,-307,-306,-306,-306,-306', +'-306,124,-307,236,-307,1067,-297,231,-94,-307,706,236,236,-297,551,236', +'687,232,-307,554,591,717,-297,476,-306,-306,-306,-306,-306,-306,-306', +'-306,-306,-306,-306,-306,-306,-306,-306,-350,-306,-306,-306,718,675', +'-306,722,725,-306,236,-628,-306,732,-307,-306,733,-306,524,-306,737', +'-306,-306,-306,-306,-306,-306,-306,-307,-306,740,-306,-297,232,231,741', +'1008,743,579,578,577,1037,580,745,-306,-306,-631,-105,747,-306,780,755', +'756,-631,-631,-631,-306,757,-631,-631,-631,-306,-631,-114,-306,131,132', +'133,134,135,759,-631,-631,-631,-631,908,909,725,725,910,122,123,-631', +'-631,609,-631,-631,-631,-631,-631,582,725,579,578,577,256,580,782,256', +'232,787,582,256,579,578,577,797,580,131,132,133,134,135,-631,-631,-631', +'-631,-631,-631,-631,-631,-631,-631,-631,-631,-631,-631,798,749,-631', +'-631,-631,256,825,-631,256,-280,-631,680,749,-631,-631,290,-631,256', +'-631,811,-631,752,-631,-631,-631,-631,-631,-631,-631,668,-631,-631,-631', +'266,267,667,236,253,509,663,509,255,254,251,252,-631,-631,-631,-631', +'253,-631,259,-631,255,254,251,252,-631,-446,257,659,258,-631,236,-112', +'-446,-446,-446,828,276,-446,-446,-446,582,-446,579,578,577,587,580,658', +'837,839,-446,-446,-446,522,524,-279,590,656,717,236,649,-446,-446,290', +'-446,-446,-446,-446,-446,290,717,646,643,582,256,579,578,577,585,580', +'582,639,579,578,577,236,580,595,594,598,597,878,-446,-446,-446,-446', +'-446,-446,-446,-446,-446,-446,-446,-446,-446,-446,236,256,-446,-446', +'-446,749,887,-446,725,290,-446,236,749,-446,-446,615,-446,591,-446,614', +'-446,960,-446,-446,-446,-446,-446,-446,-446,415,-446,-446,-446,253,609', +'236,256,255,254,251,252,914,-281,236,549,-446,-446,-653,-446,545,-446', +'919,3,290,-653,-653,-653,-446,236,-653,-653,-653,-446,-653,582,293,579', +'578,577,587,580,542,-653,-653,131,132,133,134,135,256,590,936,717,-653', +'-653,-279,-653,-653,-653,-653,-653,941,256,535,534,266,267,131,132,133', +'134,135,585,946,236,740,949,951,266,267,953,253,955,598,597,255,254', +'251,252,955,236,961,725,236,253,-653,259,-633,255,254,251,252,-653,-79', +'-633,-633,-633,290,-653,-633,-633,-633,725,-633,725,256,524,591,236', +'522,519,725,-633,-633,-633,-633,236,979,-282,-653,-653,266,267,-633', +'-633,290,-633,-633,-633,-633,-633,980,740,-653,983,986,988,253,-653', +'259,990,255,254,251,252,-653,,257,,258,-653,,,,-633,-633,-633,-633,-633', +'-633,-633,-633,-633,-633,-633,-633,-633,-633,,,-633,-633,-633,,,-633', +',,-633,,,-633,-633,,-633,,-633,,-633,,-633,-633,-633,-633,-633,-633', +'-633,,-633,-633,-633,582,,579,578,577,587,580,,,,,,-633,-633,-633,-633', +'590,-633,-632,-633,,,,,-633,-632,-632,-632,,-633,-632,-632,-632,,-632', +'256,,,585,,,,,-632,-632,-632,-632,,,598,597,266,267,,-632,-632,,-632', +'-632,-632,-632,-632,582,,579,578,577,253,580,259,,255,254,251,252,,582', +',579,578,577,,580,591,,-632,-632,-632,-632,-632,-632,-632,-632,-632', +'-632,-632,-632,-632,-632,,749,-632,-632,-632,,,-632,,,-632,,,-632,-632', +'749,-632,,-632,,-632,,-632,-632,-632,-632,-632,-632,-632,,-632,-632', +'-632,582,,579,578,577,587,580,,,,,,-632,-632,-632,-632,590,-632,-653', +'-632,,,,,-632,-653,-653,-653,,-632,-653,-653,-653,582,-653,579,578,577', +'585,580,,,,-653,-653,-653,,595,594,598,597,,,,-653,-653,,-653,-653,-653', +'-653,-653,,,,,,,,,,749,,,,,,,,,,,,591,,-653,-653,-653,-653,-653,-653', +'-653,-653,-653,-653,-653,-653,-653,-653,,,-653,-653,-653,,,-653,,290', +'-653,,,-653,-653,,-653,,-653,,-653,,-653,-653,-653,-653,-653,-653,-653', +',-653,-653,-653,,,,,,,,,,,,,-653,-653,-298,-653,,-653,,,,-298,-298,-298', +'-653,,-298,-298,-298,-653,-298,,,,,,,,,,-298,-298,-298,,,,,,,,-298,-298', +',-298,-298,-298,-298,-298,,,,,,,,,,,,,,,,,,,,,,,,-298,-298,-298,-298', +'-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,,,-298,-298,-298,', +',-298,,,-298,,,-298,-298,,-298,,-298,,-298,,-298,-298,-298,-298,-298', +'-298,-298,,-298,,-298,582,,579,578,577,587,580,,,,,,-298,-298,-298,-298', +'590,-298,-315,-298,,,,,-298,-315,-315,-315,,-298,-315,-315,-315,,-315', +',,,585,,,,,,-315,-315,,595,594,598,597,,,,-315,-315,,-315,-315,-315', +'-315,-315,,,,,,,,,,,,,,,,,,,,,,591,,-315,-315,-315,-315,-315,-315,-315', +'-315,-315,-315,-315,-315,-315,-315,,,-315,-315,-315,,,-315,,293,-315', +',,-315,-315,,-315,,-315,,-315,,-315,-315,-315,-315,-315,-315,-315,,-315', +',-315,,,,,,,,,,,,,-315,-315,,-315,,-315,8,85,86,87,12,78,-315,,,79,80', +'-315,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,', +',,,664,11,49,10,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,', +',266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271', +'257,23,258,,,,103,95,97,98,99,101,,,,96,104,,270,,-254,,,66,,,93,100', +'102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,664,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263', +'273,274,268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38', +'253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101', +',,,96,104,,270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266', +'267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257', +'23,258,,,,103,95,97,98,99,101,,,,96,104,236,270,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,249,250,,,266,267,,43,,,316,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79', +'80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,', +',,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266', +'267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257', +'23,258,,,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102,,,108', +'109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273,274', +'268,269,264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259', +'48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104', +',270,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +'256,260,261,262,263,273,274,268,269,264,265,,249,250,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,270,,,,,66,,,93,100,102,,,108,109', +'312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,256,260,261,262,263,273,274,268,269', +'264,265,,249,250,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255', +'254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,270', +',,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256', +'-654,-654,-654,-654,273,274,,,-654,-654,,,,,,266,267,,43,,,36,,,62,63', +',,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,8,85,86,87,12,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,11,49,10,13,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,256,260,261,262,263,273,274,268,269,264,265,,-654,-654', +',,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272', +'271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,260,261,262,263,273', +'274,268,269,264,265,,-654,-654,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,256,-654,-654,-654,-654,273,274,,,-654,-654,,,,,,266,267,,43,', +',36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,256,260,261,262,263,273,274,268,,264,265', +',,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272', +'271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,256,-654,-654,-654,-654', +'273,274,,,-654,-654,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259', +'48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256', +'-654,-654,-654,-654,273,274,,,-654,-654,,,,,,266,267,,43,,,36,,,62,63', +',,64,,38,253,,259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,', +'106,107,,45,46,44,256,260,261,262,263,273,274,,,264,265,,,,,,266,267', +',43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251,252,272,271,257,23', +'258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109', +'312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,256,-654,-654,-654,-654,273,274,,,-654', +'-654,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253,,259,48,255,254,251', +'252,272,271,257,23,258,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,256,-654,-654,-654', +'-654,273,274,,,-654,-654,,,,,,266,267,,43,,,36,,,62,63,,,64,,38,253', +',259,48,255,254,251,252,272,271,257,23,258,,,,103,95,97,98,99,101,,', +',96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80', +',,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,', +'11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,43,,,316,,,62,63,,,64,,38,,,,48,,,,,,,,23,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312', +'85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,', +'38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43', +',,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49', +'314,13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86', +'87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,', +',,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'316,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', +'36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,312,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314', +'13,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,', +',,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,312,85,86,87', +'12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,11,49,314,13,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,700,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,', +',,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331', +'332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,', +',,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302', +',300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,', +',49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334', +'116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,320', +',,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,247,,,62,63', +',,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,337,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77', +',,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,', +'247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,', +',,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,', +',83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,', +',,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,', +'103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,128,,,,,127,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,367,,,36,,,62,63', +',,64,,38,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77', +',,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,994,,,247', +',,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,10,13,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,415,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,', +',83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49', +',,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,', +',,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31', +'30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,', +',,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,', +',62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,314,13,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,415,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,432,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,432,,', +',48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,', +'93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,', +',,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,', +',,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +'236,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,', +'335,,,,,,,,,,,,,,,,,,,,994,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48', +',,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,', +',49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46', +'44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,236,,,,,,66,,306,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +'305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,', +',,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,', +',,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,12,78,,,,79,80,,,,83,,81', +'82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,11,49,,13', +'120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,', +',,,,,,,,,,,,,,43,,,36,,,62,63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,22', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,23,,', +',,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,,,335,,,,,,,,,,,,,,,,,,,,325,,,247,,,62,63,,,64,,,,,,,,,,', +',,,,,,,,103,95,97,98,99,101,,,,96,104,,,,537,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81', +'82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325', +',,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119', +'121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,', +',,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99', +'101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80', +',,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,554,,62,63,,,64', +',,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,', +'247,,,62,63,,,64,,302,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96', +'104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,', +'81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49', +',,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44', +',,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103', +'303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117', +'118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30', +'116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305', +'114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,', +',,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120', +'119,121,616,60,112,111,617,,114,122,123,,106,107,,,,335,,,,,,,,,,,,', +',,,,,,,618,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'329,,,120,119,121,616,60,112,111,617,,114,122,123,,106,107,,,,335,,', +',,,,,,,,,,,,,,,,,618,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,302,,,,48,,,,,', +',,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,303,97,98,99,101', +',,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,', +',,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,', +',,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,,,48,,,,,,,,246', +',,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109', +'85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334', +'116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114', +'122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64', +',432,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93', +'100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77', +',,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,', +',,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,', +'329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,,335,,', +',,,,,,,,,,,,,,,,,325,,,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97', +'98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,', +'79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,', +',,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101', +',,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83', +',81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,', +',120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,', +',,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95', +'97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104', +',,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,', +',,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,300,,48,,,,,,,,246,,,,,103', +'303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86', +'87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115', +'117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,', +',108,109,85,86,87,12,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88', +'31,30,116,115,117,118,,,22,,,,,,11,49,,13,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,62', +'63,,,64,,38,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,', +'66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34', +'76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,', +',241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97,98,99', +'101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,45', +'46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,', +',,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,', +',,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,', +',,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112', +'111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,', +',,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115,117,118,', +',248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116', +'115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122', +'123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,802', +',,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100', +'102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,', +',88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76', +'77,,,,,,88,31,30,116,115,117,118,,,22,,,,,,,49,,,120,119,121,110,60', +'112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,', +',247,,,62,63,,,64,,,,,,48,,,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104', +',,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107', +',45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246', +',,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85', +'86,87,,78,,,,79,80,,,,83,,81,82,84,33,34,76,77,,,,,,88,31,30,116,115', +'117,118,,,22,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123', +',106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48', +',,,,,,,23,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,', +'108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62', +'63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66', +',,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,329,,,120,119,121', +'110,60,112,111,113,,114,122,123,,106,107,,,,335,,,,,,,,,,,,,,,,,,,,325', +',,321,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103,95,97,98,99,101,,,,96,104,', +',,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84', +'33,34,76,77,,,,,,88,31,30,116,115,117,118,,,248,,,,,,,49,,,120,119,121', +'110,60,112,111,113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,', +',,,,,241,,,247,,,62,63,,,64,,302,,300,,48,,,,,,,,246,,,,,103,303,97', +'98,99,101,,,,96,104,,,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78', +',,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118', +',,248,,,,,,,49,,,120,119,121,110,60,112,111,113,305,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,700,,300,,48', +',,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104,,,,,,,66,,306,93,100,102', +',,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88', +'328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111', +'113,305,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247', +',,62,63,,,64,,,,300,,48,,,,,,,,246,,,,,103,303,97,98,99,101,,,,96,104', +',,,,,,66,,306,93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82', +'84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120', +'119,121,110,60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,', +',,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98', +'99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,,78,,,,79', +'80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117,118,,,248', +',,,,,,329,,,120,119,121,110,60,112,111,113,,114,122,123,,106,107,,,', +'335,,,,,,,,,,,,,,,,,,,,1001,,,247,,,62,63,,,64,,,,,,,,,,,,,,,,,,,103', +'95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108,109,85,86,87,', +'78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328,334,116,115,117', +'118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113,,114,122,123,,106', +'107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63,,,64,,,,,,48,,,,', +',,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,,,93,100,102,,,108', +'109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332,76,77,,,,,,88,328', +'334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110,60,112,111,113', +',114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241,,,247,,,62,63', +',,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96,104,,,,,,,66,', +',93,100,102,,,108,109,85,86,87,,78,,,,79,80,,,,83,,81,82,84,331,332', +'76,77,,,,,,88,328,334,116,115,117,118,,,248,,,,,,,49,,,120,119,121,110', +'60,112,111,113,,114,122,123,,106,107,,45,46,44,,,,,,,,,,,,,,,,,,,,241', +',,247,,,62,63,,,64,,,,,,48,,,,,,,,246,,,,,103,95,97,98,99,101,,,,96', +'104,,,,,,,66,,,93,100,102,,,108,109,189,200,190,213,186,206,196,195', +'216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208', +'215,210,382,381,383,380,185,204,203,,,,,,184,191,182,183,377,378,379', +'375,141,112,111,376,,114,,,,,,,173,174,,169,151,152,153,160,157,159', +',,154,155,,,,175,176,161,162,,,,,,389,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,,,,,,,,170,,,,,178,189', +'200,190,213,186,206,196,195,216,217,211,194,193,188,214,218,219,198', +'187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203,', +',,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169,151', +'152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165', +',150,172,168,167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,,104', +',,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211,194', +'193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209,202', +'212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140,', +',,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161', +'162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,103,,,,,,,,,,104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196', +'195,216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192', +',,,208,215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179', +'180,181,139,141,412,411,140,,413,,,,,,,173,174,,169,151,152,153,160', +'157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,,,,,,,,,,,,,,,,,,,,170,,,,,178', +'189,200,190,213,186,206,196,195,216,217,211,194,193,188,214,218,219', +'198,187,201,205,207,199,192,,,,208,215,210,209,202,212,197,185,204,203', +',,,,,184,191,182,183,179,180,181,139,141,,,140,,,,,,,,,173,174,,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,103,,,,,,,,,', +'104,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195,216,217,211', +'194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208,215,210,209', +'202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181,139,141,,,140', +',,,,,,,,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161', +'162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,,,,,,,,,,,170,,,,,178,189,200,190,213,186,206,196,195', +'216,217,211,194,193,188,214,218,219,198,187,201,205,207,199,192,,,,208', +'215,210,209,202,212,197,185,204,203,,,,,,184,191,182,183,179,180,181', +'139,141,138,,140,,,,,,,,,173,174,,169,151,152,153,160,157,159,,,154', +'155,,,,175,176,161,162,,,,,,,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,103,,,,,,,,,,104,,507,459,,,508,,,170,,,,', +'178,173,174,,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,462,466,,,461,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,455,459,,,456', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,894,466,,,895,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,', +',807,466,,,806,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,', +'154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167', +'163,164,158,156,148,171,149,,,177,,,,,,,,,,681,459,,,682,,,,,,170,,', +'173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,683,466,,,684,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,804,459,,,805', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,713,466,,,714,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,582,177,579,578', +'577,587,580,,,,,507,459,,,508,590,,,,,170,,,173,174,178,169,151,152', +'153,160,157,159,,,154,155,585,,,175,176,161,162,,,,,598,597,,,,,,,,166', +'165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,591,683', +'466,,,684,,,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155', +',,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164', +'158,156,148,171,149,,,177,,,,,,,,,,681,459,,,682,,,,,,170,,,173,174', +'178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290', +',,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,,', +',,,,,,,710,459,,,711,,,,,,170,,,173,174,178,169,151,152,153,160,157', +'159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168', +'167,163,164,158,156,148,171,149,,,177,,,,,,,,,,772,466,,,773,,,,,,170', +',,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175,176,161,162', +',,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149', +',,177,,,,,,,,,,770,459,,,771,,,,,,170,,,173,174,178,169,151,152,153', +'160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,,,166,165,,150', +'172,168,167,163,164,158,156,148,171,149,,,177,,,,,,,,,,1071,466,,,1070', +',,,,,170,,,173,174,178,169,151,152,153,160,157,159,,,154,155,,,,175', +'176,161,162,,,,,,290,,,,,,,,166,165,,150,172,168,167,163,164,158,156', +'148,171,149,,,177,,,,,,,,,,1074,459,,,1075,,,,,,170,,,173,174,178,169', +'151,152,153,160,157,159,,,154,155,,,,175,176,161,162,,,,,,290,,,,,,', +',166,165,,150,172,168,167,163,164,158,156,148,171,149,,,177,582,,579', +'578,577,587,580,,,1076,466,,,1077,,,590,,,170,,,173,174,178,169,151', +'152,153,160,157,159,,,154,155,,,585,175,176,161,162,,,,,,290,598,597', +',,,,,166,165,,150,172,168,167,163,164,158,156,148,171,149,,582,177,579', +'578,577,587,580,,,,,,591,,,,590,,,,,170,,,,582,178,579,578,577,587,580', +',,,,,,585,,582,590,579,578,577,587,580,595,594,598,597,,,,,582,590,579', +'578,577,587,580,,585,,,,,,,,590,,,598,597,,,585,568,,,,591,,,,595,594', +'598,597,,,585,582,,579,578,577,587,580,,595,594,598,597,,,591,582,590', +'579,578,577,587,580,,,,,,,,591,582,590,579,578,577,587,580,,585,,,,', +',591,,590,,,598,597,,,585,582,,579,578,577,587,580,,,,598,597,,,585', +'582,590,579,578,577,587,580,,,,598,597,,,591,582,590,579,578,577,587', +'580,,585,,,,,,591,,590,595,594,598,597,,,585,,,,,,591,,,595,594,598', +'597,,,585,582,,579,578,577,587,580,,595,594,598,597,,,591,,590,,,,,', +',,,,,,,591,,,,,,,236,,585,,,,,,591,,,,,598,597,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,591' ] + racc_action_table = arr = ::Array.new(26358, nil) + idx = 0 + clist.each do |str| + str.split(',', -1).each do |i| + arr[idx] = i.to_i unless i.empty? + idx += 1 + end + end + +clist = [ +'462,690,65,1002,980,614,330,462,462,462,368,892,688,462,462,980,462', +'377,735,711,1088,838,22,1006,377,462,1006,29,710,47,47,27,1074,1075', +'705,930,462,462,27,462,462,462,462,462,931,365,688,1077,980,980,705', +'844,364,713,604,838,282,770,22,1044,721,964,891,998,47,47,721,462,462', +'462,462,462,462,462,462,462,462,462,462,462,462,771,980,462,462,462', +'711,462,690,65,248,462,29,330,462,710,27,790,790,462,244,462,357,462', +'462,462,462,462,462,462,614,462,462,462,29,368,892,1002,844,713,713', +'711,1002,735,711,1077,462,462,806,462,710,462,1076,710,1088,806,806', +'806,462,1088,711,806,806,462,806,462,1074,1075,940,710,365,1074,1075', +'844,604,713,844,364,713,604,356,1077,770,999,806,806,1077,806,806,806', +'806,806,844,1044,713,964,891,998,1044,891,964,891,998,772,773,406,771', +'790,720,720,471,471,784,784,477,806,806,806,806,806,806,806,806,806', +'806,806,806,806,806,243,1076,806,806,806,395,806,357,395,5,806,403,357', +'806,5,526,335,335,806,944,806,92,806,806,806,806,806,806,806,92,806', +'408,806,44,44,560,945,1076,560,406,772,773,1076,477,375,806,806,807', +'806,456,806,375,682,940,807,807,807,806,940,241,807,807,806,807,806', +'356,395,395,999,720,356,471,807,999,403,617,526,526,526,772,773,242', +'565,807,807,565,807,807,807,807,807,456,408,408,408,335,335,526,1020', +'960,1020,960,960,960,376,960,962,456,681,641,682,376,44,44,807,807,807', +'807,807,807,807,807,807,807,807,807,807,807,617,620,807,807,807,220', +'807,617,620,240,807,242,617,807,239,795,617,620,807,398,807,827,807', +'807,807,807,807,807,807,136,807,807,807,752,617,752,752,752,681,752', +'805,616,641,641,971,807,807,110,807,960,807,641,740,740,110,110,110', +'807,737,110,110,110,807,110,807,617,620,240,975,737,978,110,239,110', +'110,110,795,795,102,827,398,398,398,110,110,795,110,110,110,110,110', +'665,322,378,616,355,355,323,805,322,378,616,737,737,323,644,616,101', +'322,100,616,752,804,323,110,110,110,110,110,110,110,110,110,110,110', +'110,110,110,616,916,110,110,110,665,110,110,737,991,110,439,904,110', +'110,99,110,904,110,393,110,665,110,110,110,110,110,110,110,322,110,616', +'110,994,323,996,361,366,644,644,644,361,804,391,366,110,110,110,110', +'455,110,339,110,366,41,900,379,110,684,916,900,380,110,379,110,684,684', +'684,380,439,684,684,684,949,684,949,949,949,949,949,393,393,393,381', +'684,684,684,972,73,949,381,455,972,339,684,684,41,684,684,684,684,684', +'366,324,391,391,391,455,19,339,324,949,41,618,1001,19,42,618,20,324', +'949,949,949,949,19,684,684,684,684,684,684,684,684,684,684,684,684,684', +'684,49,382,684,684,684,383,684,684,382,1010,684,1011,383,684,684,1012', +'684,949,684,42,684,20,684,684,684,684,684,684,684,324,684,309,684,1013', +'19,42,309,20,1090,1014,1090,1090,1090,1090,1090,684,684,684,684,385', +'684,1016,684,238,1090,43,385,684,113,1026,238,1029,684,1030,684,113', +'113,113,1031,238,113,113,113,1032,113,749,1090,749,749,749,484,749,113', +'1034,113,113,113,1090,1090,438,561,894,1040,561,113,113,438,113,113', +'113,113,113,40,895,25,438,858,1000,1053,858,895,1058,484,749,1000,895', +'484,484,238,895,1059,1090,749,1000,18,113,113,113,113,113,113,113,113', +'113,113,113,113,113,113,17,17,113,113,113,894,113,113,758,758,113,1070', +'894,113,113,438,113,894,113,483,113,894,113,113,113,113,113,113,113', +'895,113,138,113,1000,1054,1054,138,138,787,894,787,787,787,787,787,113', +'113,113,113,1071,113,483,113,993,787,483,483,113,461,1073,993,16,113', +'15,113,461,461,461,13,993,894,461,461,1079,461,50,787,1046,1080,1046', +'1046,1046,50,1046,1084,787,787,787,787,542,1085,50,1086,1087,461,461', +'542,461,461,461,461,461,3,776,532,542,1095,326,341,533,776,536,538,516', +'326,341,515,504,993,776,543,787,546,326,341,461,461,461,461,461,461', +'461,461,461,461,461,461,461,461,714,50,461,461,461,548,461,714,555,556', +'461,557,714,461,562,542,714,563,461,566,461,570,461,461,461,461,461', +'461,461,776,461,571,461,326,341,1036,573,946,574,946,946,946,1036,946', +'575,461,461,683,461,584,461,1036,592,596,683,683,683,461,599,683,683', +'683,461,683,461,714,531,531,531,531,531,601,683,683,683,683,791,791', +'605,606,791,791,791,683,683,607,683,683,683,683,683,1052,608,1052,1052', +'1052,488,1052,622,487,1036,625,585,486,585,585,585,648,585,9,9,9,9,9', +'683,683,683,683,683,683,683,683,683,683,683,683,683,683,651,1052,683', +'683,683,498,683,683,485,657,683,473,585,683,683,463,683,552,683,666', +'683,585,683,683,683,683,683,683,683,454,683,683,683,552,552,453,450', +'498,671,440,677,498,498,498,498,683,683,683,683,552,683,552,683,552', +'552,552,552,683,30,552,436,552,683,685,683,30,30,30,686,689,30,30,30', +'568,30,568,568,568,568,568,433,692,694,30,30,30,697,699,431,568,428', +'707,709,405,30,30,712,30,30,30,30,30,715,716,402,400,880,719,880,880', +'880,568,880,878,397,878,878,878,736,878,568,568,568,568,751,30,30,30', +'30,30,30,30,30,30,30,30,30,30,30,753,499,30,30,30,880,760,30,766,30', +'30,769,878,30,30,369,30,568,30,367,30,878,30,30,30,30,30,30,30,363,30', +'30,30,499,362,349,343,499,499,499,499,799,801,803,340,30,30,506,30,336', +'30,812,1,334,506,506,506,30,329,506,506,506,30,506,1067,328,1067,1067', +'1067,1067,1067,325,506,506,348,348,348,348,348,491,1067,836,843,506', +'506,854,506,506,506,506,506,855,490,319,318,491,491,313,313,313,313', +'313,1067,862,863,864,868,869,490,490,871,491,872,1067,1067,491,491,491', +'491,874,877,879,882,317,490,506,490,467,490,490,490,490,506,315,467', +'467,467,506,506,467,467,467,888,467,893,503,301,1067,897,298,297,901', +'467,467,467,467,903,912,915,506,506,503,503,467,467,286,467,467,467', +'467,467,922,923,506,925,926,927,503,506,503,929,503,503,503,503,506', +',503,,503,506,,,,467,467,467,467,467,467,467,467,467,467,467,467,467', +'467,,,467,467,467,,,467,,,467,,,467,467,,467,,467,,467,,467,467,467', +'467,467,467,467,,467,467,467,951,,951,951,951,951,951,,,,,,467,467,467', +'467,951,467,466,467,,,,,467,466,466,466,,467,466,466,466,,466,489,,', +'951,,,,,466,466,466,466,,,951,951,489,489,,466,466,,466,466,466,466', +'466,1015,,1015,1015,1015,489,1015,489,,489,489,489,489,,1017,,1017,1017', +'1017,,1017,951,,466,466,466,466,466,466,466,466,466,466,466,466,466', +'466,,1015,466,466,466,,,466,,,466,,,466,466,1017,466,,466,,466,,466', +'466,466,466,466,466,466,,466,466,466,741,,741,741,741,741,741,,,,,,466', +'466,466,466,741,466,457,466,,,,,466,457,457,457,,466,457,457,457,961', +'457,961,961,961,741,961,,,,457,457,457,,741,741,741,741,,,,457,457,', +'457,457,457,457,457,,,,,,,,,,961,,,,,,,,,,,,741,,457,457,457,457,457', +'457,457,457,457,457,457,457,457,457,,,457,457,457,,,457,,457,457,,,457', +'457,,457,,457,,457,,457,457,457,457,457,457,457,,457,457,457,,,,,,,', +',,,,,457,457,60,457,,457,,,,60,60,60,457,,60,60,60,457,60,,,,,,,,,,60', +'60,60,,,,,,,,60,60,,60,60,60,60,60,,,,,,,,,,,,,,,,,,,,,,,,60,60,60,60', +'60,60,60,60,60,60,60,60,60,60,,,60,60,60,,,60,,,60,,,60,60,,60,,60,', +'60,,60,60,60,60,60,60,60,,60,,60,743,,743,743,743,743,743,,,,,,60,60', +'60,60,743,60,31,60,,,,,60,31,31,31,,60,31,31,31,,31,,,,743,,,,,,31,31', +',743,743,743,743,,,,31,31,,31,31,31,31,31,,,,,,,,,,,,,,,,,,,,,,743,', +'31,31,31,31,31,31,31,31,31,31,31,31,31,31,,,31,31,31,,,31,,31,31,,,31', +'31,,31,,31,,31,,31,31,31,31,31,31,31,,31,,31,,,,,,,,,,,,,31,31,,31,', +'31,653,653,653,653,653,653,31,,,653,653,31,,,653,,653,653,653,653,653', +'653,653,,,,,,653,653,653,653,653,653,653,,,653,,,,,443,653,653,653,653', +'653,653,653,653,653,653,653,653,,653,653,653,,653,653,,653,653,653,443', +'443,443,443,443,443,443,443,443,443,443,,443,443,,,443,443,,653,,,653', +',,653,653,,,653,,653,443,,443,653,443,443,443,443,443,443,443,653,443', +',,,653,653,653,653,653,653,,,,653,653,,443,,443,,,653,,,653,653,653', +',,653,653,898,898,898,898,898,898,,,,898,898,,,,898,,898,898,898,898', +'898,898,898,,,,,,898,898,898,898,898,898,898,,,898,,,,,449,898,898,898', +'898,898,898,898,898,898,898,898,898,,898,898,898,,898,898,,898,898,898', +'449,449,449,449,449,449,449,449,449,449,449,,449,449,,,449,449,,898', +',,898,,,898,898,,,898,,898,449,,449,898,449,449,449,449,449,449,449', +'898,449,,,,898,898,898,898,898,898,,,,898,898,,449,,,,,898,,,898,898', +'898,,,898,898,222,222,222,222,222,222,,,,222,222,,,,222,,222,222,222', +'222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,222,222', +'222,222,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222', +'222,502,502,502,502,502,502,502,502,502,502,502,,502,502,,,502,502,', +'222,,,222,,,222,222,,,222,,222,502,,502,222,502,502,502,502,502,502', +'502,222,502,,,,222,222,222,222,222,222,,,,222,222,502,502,,,,,222,,', +'222,222,222,,,222,222,36,36,36,36,36,36,,,,36,36,,,,36,,36,36,36,36', +'36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36,36,36,36,36,36,36', +'36,36,36,36,,36,36,36,,36,36,,36,36,36,553,553,553,553,553,553,553,553', +'553,553,553,,553,553,,,553,553,,36,,,36,,,36,36,,,36,,36,553,,553,36', +'553,553,553,553,553,553,553,36,553,,,,36,36,36,36,36,36,,,,36,36,,553', +',,,,36,,,36,36,36,,,36,36,785,785,785,785,785,785,,,,785,785,,,,785', +',785,785,785,785,785,785,785,,,,,,785,785,785,785,785,785,785,,,785', +',,,,,785,785,785,785,785,785,785,785,785,785,785,785,,785,785,785,,785', +'785,,785,785,785,295,295,295,295,295,295,295,295,295,295,295,,295,295', +',,295,295,,785,,,785,,,785,785,,,785,,785,295,,295,785,295,295,295,295', +'295,295,295,785,295,,,,785,785,785,785,785,785,,,,785,785,,295,,,,,785', +',,785,785,785,,,785,785,1025,1025,1025,1025,1025,1025,,,,1025,1025,', +',,1025,,1025,1025,1025,1025,1025,1025,1025,,,,,,1025,1025,1025,1025', +'1025,1025,1025,,,1025,,,,,,1025,1025,1025,1025,1025,1025,1025,1025,1025', +'1025,1025,1025,,1025,1025,1025,,1025,1025,,1025,1025,1025,921,921,921', +'921,921,921,921,921,921,921,921,,921,921,,,921,921,,1025,,,1025,,,1025', +'1025,,,1025,,1025,921,,921,1025,921,921,921,921,921,921,921,1025,921', +',,,1025,1025,1025,1025,1025,1025,,,,1025,1025,,921,,,,,1025,,,1025,1025', +'1025,,,1025,1025,937,937,937,937,937,937,,,,937,937,,,,937,,937,937', +'937,937,937,937,937,,,,,,937,937,937,937,937,937,937,,,937,,,,,,937', +'937,937,937,937,937,937,937,937,937,937,937,,937,937,937,,937,937,,937', +'937,937,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,937,,,937,', +',937,937,,,937,,937,24,,24,937,24,24,24,24,24,24,24,937,24,,,,937,937', +'937,937,937,937,,,,937,937,,24,,,,,937,,,937,937,937,,,937,937,247,247', +'247,247,247,247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,', +'247,247,247,247,247,247,247,,,247,,,,,,247,247,247,247,247,247,247,247', +'247,247,247,247,,247,247,247,,247,247,,247,247,247,809,809,809,809,809', +'809,809,809,809,809,809,,809,809,,,809,809,,247,,,247,,,247,247,,,247', +',247,809,,809,247,809,809,809,809,809,809,809,247,809,,,,247,247,247', +'247,247,247,,,,247,247,,809,,,,,247,,,247,247,247,,,247,247,1023,1023', +'1023,1023,1023,1023,,,,1023,1023,,,,1023,,1023,1023,1023,1023,1023,1023', +'1023,,,,,,1023,1023,1023,1023,1023,1023,1023,,,1023,,,,,,1023,1023,1023', +'1023,1023,1023,1023,1023,1023,1023,1023,1023,,1023,1023,1023,,1023,1023', +',1023,1023,1023,497,497,497,497,497,497,497,,,497,497,,,,,,497,497,', +'1023,,,1023,,,1023,1023,,,1023,,1023,497,,497,1023,497,497,497,497,497', +'497,497,1023,497,,,,1023,1023,1023,1023,1023,1023,,,,1023,1023,,,,,', +',1023,,,1023,1023,1023,,,1023,1023,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2', +'2,2,2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2', +'2,,2,2,2,482,482,482,482,482,482,482,482,482,482,482,,482,482,,,482', +'482,,2,,,2,,,2,2,,,2,,2,482,,482,2,482,482,482,482,482,482,482,2,482', +',,,2,2,2,2,2,2,,,,2,2,,,,,,,2,,,2,2,2,,,2,2,938,938,938,938,938,938', +',,,938,938,,,,938,,938,938,938,938,938,938,938,,,,,,938,938,938,938', +'938,938,938,,,938,,,,,,938,938,938,938,938,938,938,938,938,938,938,938', +',938,938,938,,938,938,,938,938,938,481,481,481,481,481,481,481,481,481', +'481,481,,481,481,,,481,481,,938,,,938,,,938,938,,,938,,938,481,,481', +'938,481,481,481,481,481,481,481,938,481,,,,938,938,938,938,938,938,', +',,938,938,,,,,,,938,,,938,938,938,,,938,938,1018,1018,1018,1018,1018', +'1018,,,,1018,1018,,,,1018,,1018,1018,1018,1018,1018,1018,1018,,,,,,1018', +'1018,1018,1018,1018,1018,1018,,,1018,,,,,,1018,1018,1018,1018,1018,1018', +'1018,1018,1018,1018,1018,1018,,1018,1018,1018,,1018,1018,,1018,1018', +'1018,496,496,496,496,496,496,496,,,496,496,,,,,,496,496,,1018,,,1018', +',,1018,1018,,,1018,,1018,496,,496,1018,496,496,496,496,496,496,496,1018', +'496,,,,1018,1018,1018,1018,1018,1018,,,,1018,1018,,,,,,,1018,,,1018', +'1018,1018,,,1018,1018,833,833,833,833,833,833,,,,833,833,,,,833,,833', +'833,833,833,833,833,833,,,,,,833,833,833,833,833,833,833,,,833,,,,,', +'833,833,833,833,833,833,833,833,833,833,833,833,,833,833,833,,833,833', +',833,833,833,501,501,501,501,501,501,501,501,,501,501,,,,,,501,501,', +'833,,,833,,,833,833,,,833,,833,501,,501,833,501,501,501,501,501,501', +'501,833,501,,,,833,833,833,833,833,833,,,,833,833,,,,,,,833,,,833,833', +'833,,,833,833,774,774,774,774,774,774,,,,774,774,,,,774,,774,774,774', +'774,774,774,774,,,,,,774,774,774,774,774,774,774,,,774,,,,,,774,774', +'774,774,774,774,774,774,774,774,774,774,,774,774,774,,774,774,,774,774', +'774,495,495,495,495,495,495,495,,,495,495,,,,,,495,495,,774,,,774,,', +'774,774,,,774,,774,495,,495,774,495,495,495,495,495,495,495,774,495', +',,,774,774,774,774,774,774,,,,774,774,,,,,,,774,,,774,774,774,,,774', +'774,792,792,792,792,792,792,,,,792,792,,,,792,,792,792,792,792,792,792', +'792,,,,,,792,792,792,792,792,792,792,,,792,,,,,,792,792,792,792,792', +'792,792,792,792,792,792,792,,792,792,792,,792,792,,792,792,792,494,494', +'494,494,494,494,494,,,494,494,,,,,,494,494,,792,,,792,,,792,792,,,792', +',792,494,,494,792,494,494,494,494,494,494,494,792,494,,,,792,792,792', +'792,792,792,,,,792,792,,,,,,,792,,,792,792,792,,,792,792,600,600,600', +'600,600,600,,,,600,600,,,,600,,600,600,600,600,600,600,600,,,,,,600', +'600,600,600,600,600,600,,,600,,,,,,600,600,600,600,600,600,600,600,600', +'600,600,600,,600,600,600,,600,600,,600,600,600,500,500,500,500,500,500', +'500,,,500,500,,,,,,500,500,,600,,,600,,,600,600,,,600,,600,500,,500', +'600,500,500,500,500,500,500,500,600,500,,,,600,600,600,600,600,600,', +',,600,600,,,,,,,600,,,600,600,600,,,600,600,786,786,786,786,786,786', +',,,786,786,,,,786,,786,786,786,786,786,786,786,,,,,,786,786,786,786', +'786,786,786,,,786,,,,,,786,786,786,786,786,786,786,786,786,786,786,786', +',786,786,786,,786,786,,786,786,786,493,493,493,493,493,493,493,,,493', +'493,,,,,,493,493,,786,,,786,,,786,786,,,786,,786,493,,493,786,493,493', +'493,493,493,493,493,786,493,,,,786,786,786,786,786,786,,,,786,786,,', +',,,,786,,,786,786,786,,,786,786,852,852,852,852,852,852,,,,852,852,', +',,852,,852,852,852,852,852,852,852,,,,,,852,852,852,852,852,852,852', +',,852,,,,,,852,852,852,852,852,852,852,852,852,852,852,852,,852,852', +'852,,852,852,,852,852,852,492,492,492,492,492,492,492,,,492,492,,,,', +',492,492,,852,,,852,,,852,852,,,852,,852,492,,492,852,492,492,492,492', +'492,492,492,852,492,,,,852,852,852,852,852,852,,,,852,852,,,,,,,852', +',,852,852,852,,,852,852,321,321,321,321,321,321,,,,321,321,,,,321,,321', +'321,321,321,321,321,321,,,,,,321,321,321,321,321,321,321,,,321,,,,,', +'321,321,321,321,321,321,321,321,321,321,321,321,,321,321,321,,321,321', +',321,321,321,,,,,,,,,,,,,,,,,,,,321,,,321,,,321,321,,,321,,321,,,,321', +',,,,,,,321,,,,,321,321,321,321,321,321,,,,321,321,,,,,,,321,,,321,321', +'321,,,321,321,997,997,997,997,997,997,,,,997,997,,,,997,,997,997,997', +'997,997,997,997,,,,,,997,997,997,997,997,997,997,,,997,,,,,,997,997', +'997,997,997,997,997,997,997,997,997,997,,997,997,997,,997,997,,997,997', +'997,,,,,,,,,,,,,,,,,,,,997,,,997,,,997,997,,,997,,997,,,,997,,,,,,,', +'997,,,,,997,997,997,997,997,997,,,,997,997,,,,,,,997,,,997,997,997,', +',997,997,360,360,360,360,360,360,,,,360,360,,,,360,,360,360,360,360', +'360,360,360,,,,,,360,360,360,360,360,360,360,,,360,,,,,,360,360,360', +'360,360,360,360,360,360,360,360,360,,360,360,360,,360,360,,360,360,360', +',,,,,,,,,,,,,,,,,,,360,,,360,,,360,360,,,360,,360,,,,360,,,,,,,,360', +',,,,360,360,360,360,360,360,,,,360,360,,,,,,,360,,,360,360,360,,,360', +'360,860,860,860,860,860,860,,,,860,860,,,,860,,860,860,860,860,860,860', +'860,,,,,,860,860,860,860,860,860,860,,,860,,,,,,860,860,860,860,860', +'860,860,860,860,860,860,860,,860,860,860,,860,860,,860,860,860,,,,,', +',,,,,,,,,,,,,,860,,,860,,,860,860,,,860,,860,,,,860,,,,,,,,860,,,,,860', +'860,860,860,860,860,,,,860,860,,,,,,,860,,,860,860,860,,,860,860,861', +'861,861,861,861,861,,,,861,861,,,,861,,861,861,861,861,861,861,861,', +',,,,861,861,861,861,861,861,861,,,861,,,,,,861,861,861,861,861,861,861', +'861,861,861,861,861,,861,861,861,,861,861,,861,861,861,,,,,,,,,,,,,', +',,,,,,861,,,861,,,861,861,,,861,,861,,,,861,,,,,,,,861,,,,,861,861,861', +'861,861,861,,,,861,861,,,,,,,861,,,861,861,861,,,861,861,316,316,316', +'316,316,316,,,,316,316,,,,316,,316,316,316,316,316,316,316,,,,,,316', +'316,316,316,316,316,316,,,316,,,,,,316,316,316,316,316,316,316,316,316', +'316,316,316,,316,316,316,,316,316,,316,316,316,,,,,,,,,,,,,,,,,,,,316', +',,316,,,316,316,,,316,,316,,,,316,,,,,,,,316,,,,,316,316,316,316,316', +'316,,,,316,316,,,,,,,316,,,316,316,316,,,316,316,887,887,887,887,887', +'887,,,,887,887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887,887', +'887,887,887,887,,,887,,,,,,887,887,887,887,887,887,887,887,887,887,887', +'887,,887,887,887,,887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887', +',,887,887,,,887,,887,,,,887,,,,,,,,887,,,,,887,887,887,887,887,887,', +',,887,887,,,,,,,887,,,887,887,887,,,887,887,359,359,359,359,359,359', +',,,359,359,,,,359,,359,359,359,359,359,359,359,,,,,,359,359,359,359', +'359,359,359,,,359,,,,,,359,359,359,359,359,359,359,359,359,359,359,359', +',359,359,359,,359,359,,359,359,359,,,,,,,,,,,,,,,,,,,,359,,,359,,,359', +'359,,,359,,359,,,,359,,,,,,,,359,,,,,359,359,359,359,359,359,,,,359', +'359,,,,,,,359,,,359,359,359,,,359,359,347,347,347,347,347,347,,,,347', +'347,,,,347,,347,347,347,347,347,347,347,,,,,,347,347,347,347,347,347', +'347,,,347,,,,,,347,347,347,347,347,347,347,347,347,347,347,347,,347', +'347,347,,347,347,,347,347,347,,,,,,,,,,,,,,,,,,,,347,,,347,,,347,347', +',,347,,347,,,,347,,,,,,,,347,,,,,347,347,347,347,347,347,,,,347,347', +',,,,,,347,,,347,347,347,,,347,347,603,603,603,603,603,603,,,,603,603', +',,,603,,603,603,603,603,603,603,603,,,,,,603,603,603,603,603,603,603', +',,603,,,,,,603,603,603,603,603,603,603,603,603,603,603,603,,603,603', +'603,,603,603,,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603,603,,,603', +',603,,,,603,,,,,,,,603,,,,,603,603,603,603,603,603,,,,603,603,,,,,,', +'603,,,603,603,603,,,603,603,968,968,968,968,968,968,,,,968,968,,,,968', +',968,968,968,968,968,968,968,,,,,,968,968,968,968,968,968,968,,,968', +',,,,,968,968,968,968,968,968,968,968,968,968,968,968,,968,968,968,,968', +'968,,968,968,968,,,,,,,,,,,,,,,,,,,,968,,,968,,,968,968,,,968,,968,', +',,968,,,,,,,,968,,,,,968,968,968,968,968,968,,,,968,968,,,,,,,968,,', +'968,968,968,,,968,968,967,967,967,,967,,,,967,967,,,,967,,967,967,967', +'967,967,967,967,,,,,,967,967,967,967,967,967,967,,,967,,,,,,,967,,,967', +'967,967,967,967,967,967,967,,967,967,967,,967,967,,967,967,967,,,,,', +',,,,,,,,,,,,,,967,,,967,,,967,967,,,967,,967,,,,967,,,,,,,,967,,,,,967', +'967,967,967,967,967,,,,967,967,,,,,,,967,,,967,967,967,,,967,967,537', +'537,537,,537,,,,537,537,,,,537,,537,537,537,537,537,537,537,,,,,,537', +'537,537,537,537,537,537,,,537,,,,,,,537,,,537,537,537,537,537,537,537', +'537,,537,537,537,,537,537,,,,537,,,,,,,,,,,,,,,,,,,,537,,,537,,,537', +'537,,,537,,,,,,,,,,,,,,,,,,,537,537,537,537,537,537,,,,537,537,,,,,', +',537,,,537,537,537,,,537,537,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,', +',,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8,,8,8,,8,8,8', +',,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8,8,8,8', +',,,8,8,,,,,,,8,,,8,8,8,,,8,8,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23', +'23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23', +'23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23', +',,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,,,23', +'23,23,,,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,', +',32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32', +'32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,', +'32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32', +',,32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33', +'33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,', +'33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33', +',,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33', +'33,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34', +'34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34', +',34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,', +',34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37', +'37,37,,37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37', +'37,,,37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,', +',,,,,,,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37', +'37,37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,', +'38,,38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38', +'38,38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,', +'38,,,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,', +',38,,,38,38,38,,,38,38,1041,1041,1041,,1041,,,,1041,1041,,,,1041,,1041', +'1041,1041,1041,1041,1041,1041,,,,,,1041,1041,1041,1041,1041,1041,1041', +',,1041,,,,,,,1041,,,1041,1041,1041,1041,1041,1041,1041,1041,1041,1041', +'1041,1041,,1041,1041,,1041,1041,1041,,,,,,,,,,,,,,,,,,,,1041,,,1041', +',,1041,1041,,,1041,,1041,,1041,,1041,,,,,,,,1041,,,,,1041,1041,1041', +'1041,1041,1041,,,,1041,1041,,,,,,,1041,,1041,1041,1041,1041,,,1041,1041', +'45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45,45,45,,,,,,45,45,45,45,45', +'45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45,45,,45,45,45,,45,45,,45,45', +'45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45,,,,,,45,,,,,,,,45,,,,,45', +'45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45,,,45,45,46,46,46,,46,,,', +'46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46,46,46,46,46,46,,,46,,,', +',,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46,46,,46,46,46,,,,,,,,,', +',,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,,46,,,,,46,46,46,46,46', +'46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,48,48,48,,48,,,,48,48,,,,48', +',48,48,48,48,48,48,48,,,,,,48,48,48,48,48,48,48,,,48,,,,,,,48,,,48,48', +'48,48,48,48,48,48,,48,48,48,,48,48,,48,48,48,,,,,,,,,,,,,,,,,,,,48,', +',48,,,48,48,,,48,,,,,,48,,,,,,,,48,,,,,48,48,48,48,48,48,,,,48,48,,', +',,,,48,,,48,48,48,,,48,48,62,62,62,62,62,,,,62,62,,,,62,,62,62,62,62', +'62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,62,62,,62,62,62,62,62,62', +'62,62,62,,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62,,,62', +'62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,,,,62', +',,62,62,62,,,62,62,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67', +',,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67', +'67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,', +'67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,,,67', +'67,68,68,68,,68,,,,68,68,,,,68,,68,68,68,68,68,68,68,,,,,,68,68,68,68', +'68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68,68,68,,68,68,68,,68,68,,68', +'68,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68,,,,,,68,,,,,,,,68,,,,', +'68,68,68,68,68,68,,,,68,68,,,,,,,68,,,68,68,68,,,68,68,71,71,71,,71', +',,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71', +',,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,71,71,71,,,,,,', +',,,,,,,,,,,,,71,,,71,,,71,71,,,71,,,,,,71,,,,,,,,71,,,,,71,71,71,71', +'71,71,,,,71,71,71,,,,,71,71,,,71,71,71,,,71,71,72,72,72,,72,,,,72,72', +',,,72,,72,72,72,72,72,72,72,,,,,,72,72,72,72,72,72,72,,,72,,,,,,,72', +',,72,72,72,72,72,72,72,72,,72,72,72,,72,72,,,,72,,,,,,,,,,,,,,,,,,,', +'72,,,72,,,72,72,,,72,,72,,,,,,,,,,,,,,,,,72,72,72,72,72,72,,,,72,72', +',,,,,,72,,,72,72,72,,,72,72,992,992,992,,992,,,,992,992,,,,992,,992', +'992,992,992,992,992,992,,,,,,992,992,992,992,992,992,992,,,992,,,,,', +',992,,,992,992,992,992,992,992,992,992,,992,992,992,,992,992,,,,992', +',,,,,,,,,,,,,,,,,,,992,,,992,,,992,992,,,992,,,,,,,,,,,,,,,,,,,992,992', +'992,992,992,992,,,,992,992,,,,,,,992,,,992,992,992,,,992,992,126,126', +'126,126,126,,,,126,126,,,,126,,126,126,126,126,126,126,126,,,,,,126', +'126,126,126,126,126,126,,,126,,,,,,126,126,126,126,126,126,126,126,126', +'126,126,126,,126,126,126,,126,126,,126,126,126,,,,,,,,,,,,,,,,,,,,126', +',,126,,,126,126,,,126,,126,,,,126,,,,,,,,126,,,,,126,126,126,126,126', +'126,,,,126,126,,,,,,126,126,,,126,126,126,,,126,126,131,131,131,,131', +',,,131,131,,,,131,,131,131,131,131,131,131,131,,,,,,131,131,131,131', +'131,131,131,,,131,,,,,,,131,,,131,131,131,131,131,131,131,131,,131,131', +'131,,131,131,,131,131,131,,,,,,,,,,,,,,,,,,,,131,,,131,,,131,131,,,131', +',,,,,131,,,,,,,,131,,,,,131,131,131,131,131,131,,,,131,131,,,,,,,131', +',,131,131,131,,,131,131,132,132,132,,132,,,,132,132,,,,132,,132,132', +'132,132,132,132,132,,,,,,132,132,132,132,132,132,132,,,132,,,,,,,132', +',,132,132,132,132,132,132,132,132,,132,132,132,,132,132,,132,132,132', +',,,,,,,,,,,,,,,,,,,132,,,132,,,132,132,,,132,,,,,,132,,,,,,,,132,,,', +',132,132,132,132,132,132,,,,132,132,,,,,,,132,,,132,132,132,,,132,132', +'133,133,133,,133,,,,133,133,,,,133,,133,133,133,133,133,133,133,,,,', +',133,133,133,133,133,133,133,,,133,,,,,,,133,,,133,133,133,133,133,133', +'133,133,,133,133,133,,133,133,,133,133,133,,,,,,,,,,,,,,,,,,,,133,,', +'133,,,133,133,,,133,,,,,,133,,,,,,,,133,,,,,133,133,133,133,133,133', +',,,133,133,,,,,,,133,,,133,133,133,,,133,133,134,134,134,,134,,,,134', +'134,,,,134,,134,134,134,134,134,134,134,,,,,,134,134,134,134,134,134', +'134,,,134,,,,,,,134,,,134,134,134,134,134,134,134,134,,134,134,134,', +'134,134,,134,134,134,,,,,,,,,,,,,,,,,,,,134,,,134,,,134,134,,,134,,', +',,,134,,,,,,,,134,,,,,134,134,134,134,134,134,,,,134,134,,,,,,,134,', +',134,134,134,,,134,134,135,135,135,135,135,,,,135,135,,,,135,,135,135', +'135,135,135,135,135,,,,,,135,135,135,135,135,135,135,,,135,,,,,,135', +'135,,135,135,135,135,135,135,135,135,135,,135,135,135,,135,135,,135', +'135,135,,,,,,,,,,,,,,,,,,,,135,,,135,,,135,135,,,135,,135,,,,135,,,', +',,,,135,,,,,135,135,135,135,135,135,,,,135,135,,,,,,,135,,,135,135,135', +',,135,135,530,530,530,530,530,,,,530,530,,,,530,,530,530,530,530,530', +'530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,,530,530,530,530', +'530,530,530,530,530,530,530,530,,530,530,530,,530,530,,530,530,530,', +',,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,530,,,,530,,,,,,,,530,', +',,,530,530,530,530,530,530,,,,530,530,,,,,,530,530,,,530,530,530,,,530', +'530,223,223,223,,223,,,,223,223,,,,223,,223,223,223,223,223,223,223', +',,,,,223,223,223,223,223,223,223,,,223,,,,,,,223,,,223,223,223,223,223', +'223,223,223,,223,223,223,,223,223,,223,223,223,,,,,,,,,,,,,,,,,,,,223', +',,223,,,223,223,,,223,,223,,,,223,,,,,,,,223,,,,,223,223,223,223,223', +'223,,,,223,223,,,,,,,223,,,223,223,223,,,223,223,224,224,224,,224,,', +',224,224,,,,224,,224,224,224,224,224,224,224,,,,,,224,224,224,224,224', +'224,224,,,224,,,,,,,224,,,224,224,224,224,224,224,224,224,,224,224,224', +',224,224,,224,224,224,,,,,,,,,,,,,,,,,,,,224,,,224,,,224,224,,,224,', +'224,,,,224,,,,,,,,224,,,,,224,224,224,224,224,224,,,,224,224,,,,,,,224', +',,224,224,224,,,224,224,225,225,225,,225,,,,225,225,,,,225,,225,225', +'225,225,225,225,225,,,,,,225,225,225,225,225,225,225,,,225,,,,,,,225', +',,225,225,225,225,225,225,225,225,,225,225,225,,225,225,,225,225,225', +',,,,,,,,,,,,,,,,,,,225,,,225,,,225,225,,,225,,,,,,225,,,,,,,,225,,,', +',225,225,225,225,225,225,,,,225,225,,,,,,,225,,,225,225,225,,,225,225', +'226,226,226,,226,,,,226,226,,,,226,,226,226,226,226,226,226,226,,,,', +',226,226,226,226,226,226,226,,,226,,,,,,,226,,,226,226,226,226,226,226', +'226,226,,226,226,226,,226,226,,226,226,226,,,,,,,,,,,,,,,,,,,,226,,', +'226,,,226,226,,,226,,,,,,226,,,,,,,,226,,,,,226,226,226,226,226,226', +',,,226,226,,,,,,,226,,,226,226,226,,,226,226,227,227,227,,227,,,,227', +'227,,,,227,,227,227,227,227,227,227,227,,,,,,227,227,227,227,227,227', +'227,,,227,,,,,,,227,,,227,227,227,227,227,227,227,227,,227,227,227,', +'227,227,,227,227,227,,,,,,,,,,,,,,,,,,,,227,,,227,,,227,227,,,227,,', +',,,227,,,,,,,,227,,,,,227,227,227,227,227,227,,,,227,227,,,,,,,227,', +',227,227,227,,,227,227,228,228,228,,228,,,,228,228,,,,228,,228,228,228', +'228,228,228,228,,,,,,228,228,228,228,228,228,228,,,228,,,,,,,228,,,228', +'228,228,228,228,228,228,228,228,228,228,228,,228,228,,228,228,228,,', +',,,,,,,,,,,,,,,,,228,,,228,,,228,228,,,228,,228,,228,,228,,,,,,,,228', +',,,,228,228,228,228,228,228,,,,228,228,,,,,,,228,,228,228,228,228,,', +'228,228,233,233,233,,233,,,,233,233,,,,233,,233,233,233,233,233,233', +'233,,,,,,233,233,233,233,233,233,233,,,233,,,,,,,233,,,233,233,233,233', +'233,233,233,233,,233,233,233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,', +',,233,,,233,,,233,233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233', +'233,233,,,,233,233,,,,,,,233,,,233,233,233,,,233,233,234,234,234,,234', +',,,234,234,,,,234,,234,234,234,234,234,234,234,,,,,,234,234,234,234', +'234,234,234,,,234,,,,,,,234,,,234,234,234,234,234,234,234,234,,234,234', +'234,,234,234,,234,234,234,,,,,,,,,,,,,,,,,,,,234,,,234,,,234,234,,,234', +',,,,,234,,,,,,,,234,,,,,234,234,234,234,234,234,,,,234,234,,,,,,,234', +',,234,234,234,,,234,234,235,235,235,,235,,,,235,235,,,,235,,235,235', +'235,235,235,235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,,,235', +',,235,235,235,235,235,235,235,235,,235,235,235,,235,235,,235,235,235', +',,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,,,235,,,', +',235,235,235,235,235,235,,,,235,235,235,,,,,,235,,,235,235,235,,,235', +'235,251,251,251,,251,,,,251,251,,,,251,,251,251,251,251,251,251,251', +',,,,,251,251,251,251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251', +'251,251,251,,251,251,251,,251,251,,251,251,251,,,,,,,,,,,,,,,,,,,,251', +',,251,,,251,251,,,251,,,,,,251,,,,,,,,251,,,,,251,251,251,251,251,251', +',,,251,251,,,,,,,251,,,251,251,251,,,251,251,252,252,252,,252,,,,252', +'252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252,252,252', +'252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,252,252,', +'252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,', +',,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252,252,,,,,,,252,', +',252,252,252,,,252,252,253,253,253,,253,,,,253,253,,,,253,,253,253,253', +'253,253,253,253,,,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253', +'253,253,253,253,253,253,253,,253,253,253,,253,253,,253,253,253,,,,,', +',,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,,,253', +'253,253,253,253,253,,,,253,253,,,,,,,253,,,253,253,253,,,253,253,254', +'254,254,,254,,,,254,254,,,,254,,254,254,254,254,254,254,254,,,,,,254', +'254,254,254,254,254,254,,,254,,,,,,,254,,,254,254,254,254,254,254,254', +'254,,254,254,254,,254,254,,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254', +',,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254', +'254,,,,,,,254,,,254,254,254,,,254,254,255,255,255,,255,,,,255,255,,', +',255,,255,255,255,255,255,255,255,,,,,,255,255,255,255,255,255,255,', +',255,,,,,,,255,,,255,255,255,255,255,255,255,255,,255,255,255,,255,255', +',255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,,,,,255,', +',,,,,,255,,,,,255,255,255,255,255,255,,,,255,255,,,,,,,255,,,255,255', +'255,,,255,255,256,256,256,,256,,,,256,256,,,,256,,256,256,256,256,256', +'256,256,,,,,,256,256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256', +'256,256,256,256,256,,256,256,256,,256,256,,256,256,256,,,,,,,,,,,,,', +',,,,,,256,,,256,,,256,256,,,256,,,,,,256,,,,,,,,256,,,,,256,256,256', +'256,256,256,,,,256,256,,,,,,,256,,,256,256,256,,,256,256,257,257,257', +',257,,,,257,257,,,,257,,257,257,257,257,257,257,257,,,,,,257,257,257', +'257,257,257,257,,,257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257', +'257,257,,257,257,,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257', +',,257,,,,,,257,,,,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,,,', +',,,257,,,257,257,257,,,257,257,258,258,258,,258,,,,258,258,,,,258,,258', +'258,258,258,258,258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,', +',258,,,258,258,258,258,258,258,258,258,,258,258,258,,258,258,,258,258', +'258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258', +',,,,258,258,258,258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258', +'258,259,259,259,,259,,,,259,259,,,,259,,259,259,259,259,259,259,259', +',,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259', +'259,259,259,,259,259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259', +',,259,,,259,259,,,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259', +',,,259,259,,,,,,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260', +'260,,,,260,,260,260,260,260,260,260,260,,,,,,260,260,260,260,260,260', +'260,,,260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260,260,260,', +'260,260,,260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,', +',,,260,,,,,,,,260,,,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,', +',260,260,260,,,260,260,261,261,261,,261,,,,261,261,,,,261,,261,261,261', +'261,261,261,261,,,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261', +'261,261,261,261,261,261,261,,261,261,261,,261,261,,261,261,261,,,,,', +',,,,,,,,,,,,,,261,,,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261', +'261,261,261,261,261,,,,261,261,,,,,,,261,,,261,261,261,,,261,261,262', +'262,262,,262,,,,262,262,,,,262,,262,262,262,262,262,262,262,,,,,,262', +'262,262,262,262,262,262,,,262,,,,,,,262,,,262,262,262,262,262,262,262', +'262,,262,262,262,,262,262,,262,262,262,,,,,,,,,,,,,,,,,,,,262,,,262', +',,262,262,,,262,,,,,,262,,,,,,,,262,,,,,262,262,262,262,262,262,,,,262', +'262,,,,,,,262,,,262,262,262,,,262,262,263,263,263,,263,,,,263,263,,', +',263,,263,263,263,263,263,263,263,,,,,,263,263,263,263,263,263,263,', +',263,,,,,,,263,,,263,263,263,263,263,263,263,263,,263,263,263,,263,263', +',263,263,263,,,,,,,,,,,,,,,,,,,,263,,,263,,,263,263,,,263,,,,,,263,', +',,,,,,263,,,,,263,263,263,263,263,263,,,,263,263,,,,,,,263,,,263,263', +'263,,,263,263,264,264,264,,264,,,,264,264,,,,264,,264,264,264,264,264', +'264,264,,,,,,264,264,264,264,264,264,264,,,264,,,,,,,264,,,264,264,264', +'264,264,264,264,264,,264,264,264,,264,264,,264,264,264,,,,,,,,,,,,,', +',,,,,,264,,,264,,,264,264,,,264,,,,,,264,,,,,,,,264,,,,,264,264,264', +'264,264,264,,,,264,264,,,,,,,264,,,264,264,264,,,264,264,265,265,265', +',265,,,,265,265,,,,265,,265,265,265,265,265,265,265,,,,,,265,265,265', +'265,265,265,265,,,265,,,,,,,265,,,265,265,265,265,265,265,265,265,,265', +'265,265,,265,265,,265,265,265,,,,,,,,,,,,,,,,,,,,265,,,265,,,265,265', +',,265,,,,,,265,,,,,,,,265,,,,,265,265,265,265,265,265,,,,265,265,,,', +',,,265,,,265,265,265,,,265,265,266,266,266,,266,,,,266,266,,,,266,,266', +'266,266,266,266,266,266,,,,,,266,266,266,266,266,266,266,,,266,,,,,', +',266,,,266,266,266,266,266,266,266,266,,266,266,266,,266,266,,266,266', +'266,,,,,,,,,,,,,,,,,,,,266,,,266,,,266,266,,,266,,,,,,266,,,,,,,,266', +',,,,266,266,266,266,266,266,,,,266,266,,,,,,,266,,,266,266,266,,,266', +'266,267,267,267,,267,,,,267,267,,,,267,,267,267,267,267,267,267,267', +',,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267,267,267,267,267', +'267,267,267,,267,267,267,,267,267,,267,267,267,,,,,,,,,,,,,,,,,,,,267', +',,267,,,267,267,,,267,,,,,,267,,,,,,,,267,,,,,267,267,267,267,267,267', +',,,267,267,,,,,,,267,,,267,267,267,,,267,267,268,268,268,,268,,,,268', +'268,,,,268,,268,268,268,268,268,268,268,,,,,,268,268,268,268,268,268', +'268,,,268,,,,,,,268,,,268,268,268,268,268,268,268,268,,268,268,268,', +'268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268,,,268,268,,,268,,', +',,,268,,,,,,,,268,,,,,268,268,268,268,268,268,,,,268,268,,,,,,,268,', +',268,268,268,,,268,268,269,269,269,,269,,,,269,269,,,,269,,269,269,269', +'269,269,269,269,,,,,,269,269,269,269,269,269,269,,,269,,,,,,,269,,,269', +'269,269,269,269,269,269,269,,269,269,269,,269,269,,269,269,269,,,,,', +',,,,,,,,,,,,,,269,,,269,,,269,269,,,269,,,,,,269,,,,,,,,269,,,,,269', +'269,269,269,269,269,,,,269,269,,,,,,,269,,,269,269,269,,,269,269,270', +'270,270,,270,,,,270,270,,,,270,,270,270,270,270,270,270,270,,,,,,270', +'270,270,270,270,270,270,,,270,,,,,,,270,,,270,270,270,270,270,270,270', +'270,,270,270,270,,270,270,,270,270,270,,,,,,,,,,,,,,,,,,,,270,,,270', +',,270,270,,,270,,,,,,270,,,,,,,,270,,,,,270,270,270,270,270,270,,,,270', +'270,,,,,,,270,,,270,270,270,,,270,270,275,275,275,,275,,,,275,275,,', +',275,,275,275,275,275,275,275,275,,,,,,275,275,275,275,275,275,275,', +',275,,,,,,,275,,,275,275,275,275,275,275,275,275,,275,275,275,,275,275', +',275,275,275,,,,,,,,,,,,,,,,,,,,275,,,275,,,275,275,,,275,,,,,,275,', +',,,,,,275,,,,,275,275,275,275,275,275,,,,275,275,,,,,,,275,,,275,275', +'275,,,275,275,932,932,932,,932,,,,932,932,,,,932,,932,932,932,932,932', +'932,932,,,,,,932,932,932,932,932,932,932,,,932,,,,,,,932,,,932,932,932', +'932,932,932,932,932,,932,932,932,,932,932,,,,932,,,,,,,,,,,,,,,,,,,', +'932,,,932,,,932,932,,,932,,,,,,,,,,,,,,,,,,,932,932,932,932,932,932', +',,,932,932,,,,,,,932,,,932,932,932,,,932,932,283,283,283,,283,,,,283', +'283,,,,283,,283,283,283,283,283,283,283,,,,,,283,283,283,283,283,283', +'283,,,283,,,,,,,283,,,283,283,283,283,283,283,283,283,283,283,283,283', +',283,283,,283,283,283,,,,,,,,,,,,,,,,,,,,283,,,283,,,283,283,,,283,', +'283,,283,,283,,,,,,,,283,,,,,283,283,283,283,283,283,,,,283,283,,,,', +',,283,,283,283,283,283,,,283,283,920,920,920,,920,,,,920,920,,,,920', +',920,920,920,920,920,920,920,,,,,,920,920,920,920,920,920,920,,,920', +',,,,,,920,,,920,920,920,920,920,920,920,920,,920,920,920,,920,920,,920', +'920,920,,,,,,,,,,,,,,,,,,,,920,,,920,,,920,920,,,920,,,,,,920,,,,,,', +',920,,,,,920,920,920,920,920,920,,,,920,920,,,,,,,920,,,920,920,920', +',,920,920,290,290,290,,290,,,,290,290,,,,290,,290,290,290,290,290,290', +'290,,,,,,290,290,290,290,290,290,290,,,290,,,,,,,290,,,290,290,290,290', +'290,290,290,290,290,290,290,290,,290,290,,290,290,290,,,,,,,,,,,,,,', +',,,,,290,,,290,,,290,290,,,290,,290,,290,,290,,,,,,,,290,,,,,290,290', +'290,290,290,290,,,,290,290,,,,,,,290,,290,290,290,290,,,290,290,293', +'293,293,,293,,,,293,293,,,,293,,293,293,293,293,293,293,293,,,,,,293', +'293,293,293,293,293,293,,,293,,,,,,,293,,,293,293,293,293,293,293,293', +'293,293,293,293,293,,293,293,,293,293,293,,,,,,,,,,,,,,,,,,,,293,,,293', +',,293,293,,,293,,293,,293,,293,,,,,,,,293,,,,,293,293,293,293,293,293', +',,,293,293,293,,,,,,293,,293,293,293,293,,,293,293,919,919,919,,919', +',,,919,919,,,,919,,919,919,919,919,919,919,919,,,,,,919,919,919,919', +'919,919,919,,,919,,,,,,,919,,,919,919,919,919,919,919,919,919,919,919', +'919,919,,919,919,,919,919,919,,,,,,,,,,,,,,,,,,,,919,,,919,,,919,919', +',,919,,,,919,,919,,,,,,,,919,,,,,919,919,919,919,919,919,,,,919,919', +',,,,,,919,,919,919,919,919,,,919,919,899,899,899,,899,,,,899,899,,,', +'899,,899,899,899,899,899,899,899,,,,,,899,899,899,899,899,899,899,,', +'899,,,,,,,899,,,899,899,899,899,899,899,899,899,,899,899,899,,899,899', +',899,899,899,,,,,,,,,,,,,,,,,,,,899,,,899,,,899,899,,,899,,,,,,899,', +',,,,,,899,,,,,899,899,899,899,899,899,,,,899,899,,,,,,,899,,,899,899', +'899,,,899,899,300,300,300,,300,,,,300,300,,,,300,,300,300,300,300,300', +'300,300,,,,,,300,300,300,300,300,300,300,,,300,,,,,,,300,,,300,300,300', +'300,300,300,300,300,,300,300,300,,300,300,,300,300,300,,,,,,,,,,,,,', +',,,,,,300,,,300,,,300,300,,,300,,,,,,300,,,,,,,,300,,,,,300,300,300', +'300,300,300,,,,300,300,,,,,,,300,,,300,300,300,,,300,300,302,302,302', +',302,,,,302,302,,,,302,,302,302,302,302,302,302,302,,,,,,302,302,302', +'302,302,302,302,,,302,,,,,,,302,,,302,302,302,302,302,302,302,302,,302', +'302,302,,302,302,,302,302,302,,,,,,,,,,,,,,,,,,,,302,,,302,,,302,302', +',,302,,,,,,302,,,,,,,,302,,,,,302,302,302,302,302,302,,,,302,302,,,', +',,,302,,,302,302,302,,,302,302,305,305,305,,305,,,,305,305,,,,305,,305', +'305,305,305,305,305,305,,,,,,305,305,305,305,305,305,305,,,305,,,,,', +',305,,,305,305,305,305,305,305,305,305,,305,305,305,,305,305,,305,305', +'305,,,,,,,,,,,,,,,,,,,,305,,,305,,,305,305,,,305,,,,,,305,,,,,,,,305', +',,,,305,305,305,305,305,305,,,,305,305,,,,,,,305,,,305,305,305,,,305', +'305,306,306,306,,306,,,,306,306,,,,306,,306,306,306,306,306,306,306', +',,,,,306,306,306,306,306,306,306,,,306,,,,,,,306,,,306,306,306,306,306', +'306,306,306,,306,306,306,,306,306,,306,306,306,,,,,,,,,,,,,,,,,,,,306', +',,306,,,306,306,,,306,,,,,,306,,,,,,,,306,,,,,306,306,306,306,306,306', +',,,306,306,,,,,,,306,,,306,306,306,,,306,306,312,312,312,312,312,,,', +'312,312,,,,312,,312,312,312,312,312,312,312,,,,,,312,312,312,312,312', +'312,312,,,312,,,,,,312,312,,312,312,312,312,312,312,312,312,312,,312', +'312,312,,312,312,,312,312,312,,,,,,,,,,,,,,,,,,,,312,,,312,,,312,312', +',,312,,312,,,,312,,,,,,,,312,,,,,312,312,312,312,312,312,,,,312,312', +',,,,,,312,,,312,312,312,,,312,312,885,885,885,,885,,,,885,885,,,,885', +',885,885,885,885,885,885,885,,,,,,885,885,885,885,885,885,885,,,885', +',,,,,,885,,,885,885,885,885,885,885,885,885,,885,885,885,,885,885,,885', +'885,885,,,,,,,,,,,,,,,,,,,,885,,,885,,,885,885,,,885,,,,,,885,,,,,,', +',885,,,,,885,885,885,885,885,885,,,,885,885,,,,,,,885,,,885,885,885', +',,885,885,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320', +'320,,,,,,320,320,320,320,320,320,320,,,320,,,,,,,320,,,320,320,320,320', +'320,320,320,320,,320,320,320,,320,320,,,,320,,,,,,,,,,,,,,,,,,,,320', +',,320,,,320,320,,,320,,,,,,,,,,,,,,,,,,,320,320,320,320,320,320,,,,320', +'320,,,,320,,,320,,,320,320,320,,,320,320,828,828,828,,828,,,,828,828', +',,,828,,828,828,828,828,828,828,828,,,,,,828,828,828,828,828,828,828', +',,828,,,,,,,828,,,828,828,828,828,828,828,828,828,,828,828,828,,828', +'828,,828,828,828,,,,,,,,,,,,,,,,,,,,828,,,828,,,828,828,,,828,,,,,,828', +',,,,,,,828,,,,,828,828,828,828,828,828,,,,828,828,,,,,,,828,,,828,828', +'828,,,828,828,826,826,826,,826,,,,826,826,,,,826,,826,826,826,826,826', +'826,826,,,,,,826,826,826,826,826,826,826,,,826,,,,,,,826,,,826,826,826', +'826,826,826,826,826,,826,826,826,,826,826,,826,826,826,,,,,,,,,,,,,', +',,,,,,826,,,826,,,826,826,,,826,,,,,,826,,,,,,,,826,,,,,826,826,826', +'826,826,826,,,,826,826,,,,,,,826,,,826,826,826,,,826,826,825,825,825', +',825,,,,825,825,,,,825,,825,825,825,825,825,825,825,,,,,,825,825,825', +'825,825,825,825,,,825,,,,,,,825,,,825,825,825,825,825,825,825,825,,825', +'825,825,,825,825,,825,825,825,,,,,,,,,,,,,,,,,,,,825,,,825,,,825,825', +',,825,,,,,,825,,,,,,,,825,,,,,825,825,825,825,825,825,,,,825,825,,,', +',,,825,,,825,825,825,,,825,825,824,824,824,,824,,,,824,824,,,,824,,824', +'824,824,824,824,824,824,,,,,,824,824,824,824,824,824,824,,,824,,,,,', +',824,,,824,824,824,824,824,824,824,824,,824,824,824,,824,824,,824,824', +'824,,,,,,,,,,,,,,,,,,,,824,,,824,,,824,824,,,824,,,,,,824,,,,,,,,824', +',,,,824,824,824,824,824,824,,,,824,824,,,,,,,824,,,824,824,824,,,824', +'824,823,823,823,,823,,,,823,823,,,,823,,823,823,823,823,823,823,823', +',,,,,823,823,823,823,823,823,823,,,823,,,,,,,823,,,823,823,823,823,823', +'823,823,823,,823,823,823,,823,823,,823,823,823,,,,,,,,,,,,,,,,,,,,823', +',,823,,,823,823,,,823,,,,,,823,,,,,,,,823,,,,,823,823,823,823,823,823', +',,,823,823,,,,,,,823,,,823,823,823,,,823,823,810,810,810,,810,,,,810', +'810,,,,810,,810,810,810,810,810,810,810,,,,,,810,810,810,810,810,810', +'810,,,810,,,,,,,810,,,810,810,810,810,810,810,810,810,,810,810,810,', +'810,810,,810,810,810,,,,,,,,,,,,,,,,,,,,810,,,810,,,810,810,,,810,,', +',,,810,,,,,,,,810,,,,,810,810,810,810,810,810,,,,810,810,,,,,,,810,', +',810,810,810,,,810,810,337,337,337,,337,,,,337,337,,,,337,,337,337,337', +'337,337,337,337,,,,,,337,337,337,337,337,337,337,,,337,,,,,,,337,,,337', +'337,337,337,337,337,337,337,,337,337,337,,337,337,,,,337,,,,,,,,,,,', +',,,,,,,,337,,,337,,,337,337,,,337,,,,,,,,,,,,,,,,,,,337,337,337,337', +'337,337,,,,337,337,,,,,,,337,,,337,337,337,,,337,337,802,802,802,,802', +',,,802,802,,,,802,,802,802,802,802,802,802,802,,,,,,802,802,802,802', +'802,802,802,,,802,,,,,,,802,,,802,802,802,802,802,802,802,802,,802,802', +'802,,802,802,,802,802,802,,,,,,,,,,,,,,,,,,,,802,,,802,,,802,802,,,802', +',,,,,802,,,,,,,,802,,,,,802,802,802,802,802,802,,,,802,802,,,,,,,802', +',,802,802,802,,,802,802,344,344,344,,344,,,,344,344,,,,344,,344,344', +'344,344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344', +',,344,344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344', +',,,,,,,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344,,,', +',344,344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344,344', +'346,346,346,,346,,,,346,346,,,,346,,346,346,346,346,346,346,346,,,,', +',346,346,346,346,346,346,346,,,346,,,,,,,346,,,346,346,346,346,346,346', +'346,346,,346,346,346,,346,346,,346,346,346,,,,,,,,,,,,,,,,,,,,346,,', +'346,346,,346,346,,,346,,,,,,346,,,,,,,,346,,,,,346,346,346,346,346,346', +',,,346,346,,,,,,,346,,,346,346,346,,,346,346,350,350,350,,350,,,,350', +'350,,,,350,,350,350,350,350,350,350,350,,,,,,350,350,350,350,350,350', +'350,,,350,,,,,,,350,,,350,350,350,350,350,350,350,350,350,350,350,350', +',350,350,,350,350,350,,,,,,,,,,,,,,,,,,,,350,,,350,,,350,350,,,350,', +'350,,,,350,,,,,,,,350,,,,,350,350,350,350,350,350,,,,350,350,,,,,,,350', +',350,350,350,350,,,350,350,351,351,351,,351,,,,351,351,,,,351,,351,351', +'351,351,351,351,351,,,,,,351,351,351,351,351,351,351,,,351,,,,,,,351', +',,351,351,351,351,351,351,351,351,351,351,351,351,,351,351,,351,351', +'351,,,,,,,,,,,,,,,,,,,,351,,,351,,,351,351,,,351,,,,,,351,,,,,,,,351', +',,,,351,351,351,351,351,351,,,,351,351,,,,,,,351,,351,351,351,351,,', +'351,351,358,358,358,,358,,,,358,358,,,,358,,358,358,358,358,358,358', +'358,,,,,,358,358,358,358,358,358,358,,,358,,,,,,,358,,,358,358,358,358', +'358,358,358,358,,358,358,358,,358,358,,358,358,358,,,,,,,,,,,,,,,,,', +',,358,,,358,,,358,358,,,358,,,,,,358,,,,,,,,358,,,,,358,358,358,358', +'358,358,,,,358,358,,,,,,,358,,,358,358,358,,,358,358,780,780,780,,780', +',,,780,780,,,,780,,780,780,780,780,780,780,780,,,,,,780,780,780,780', +'780,780,780,,,780,,,,,,,780,,,780,780,780,780,780,780,780,780,780,780', +'780,780,,780,780,,780,780,780,,,,,,,,,,,,,,,,,,,,780,,,780,,,780,780', +',,780,,780,,780,,780,,,,,,,,780,,,,,780,780,780,780,780,780,,,,780,780', +',,,,,,780,,780,780,780,780,,,780,780,372,372,372,,372,,,,372,372,,,', +'372,,372,372,372,372,372,372,372,,,,,,372,372,372,372,372,372,372,,', +'372,,,,,,,372,,,372,372,372,372,372,372,372,372,,372,372,372,,372,372', +',,,372,,,,,,,,,,,,,,,,,,,,372,,,372,,,372,372,,,372,,,,,,,,,,,,,,,,', +',,372,372,372,372,372,372,,,,372,372,,,,,,,372,,,372,372,372,,,372,372', +'374,374,374,,374,,,,374,374,,,,374,,374,374,374,374,374,374,374,,,,', +',374,374,374,374,374,374,374,,,374,,,,,,,374,,,374,374,374,374,374,374', +'374,374,,374,374,374,,374,374,,,,374,,,,,,,,,,,,,,,,,,,,374,,,374,,', +'374,374,,,374,,,,,,,,,,,,,,,,,,,374,374,374,374,374,374,,,,374,374,', +',,,,,374,,,374,374,374,,,374,374,768,768,768,,768,,,,768,768,,,,768', +',768,768,768,768,768,768,768,,,,,,768,768,768,768,768,768,768,,,768', +',,,,,,768,,,768,768,768,768,768,768,768,768,,768,768,768,,768,768,,768', +'768,768,,,,,,,,,,,,,,,,,,,,768,,,768,,,768,768,,,768,,768,,,,768,,,', +',,,,768,,,,,768,768,768,768,768,768,,,,768,768,,,,,,,768,,,768,768,768', +',,768,768,747,747,747,,747,,,,747,747,,,,747,,747,747,747,747,747,747', +'747,,,,,,747,747,747,747,747,747,747,,,747,,,,,,,747,,,747,747,747,747', +'747,747,747,747,,747,747,747,,747,747,,747,747,747,,,,,,,,,,,,,,,,,', +',,747,,,747,,,747,747,,,747,,,,,,747,,,,,,,,747,,,,,747,747,747,747', +'747,747,,,,747,747,,,,,,,747,,,747,747,747,,,747,747,731,731,731,,731', +',,,731,731,,,,731,,731,731,731,731,731,731,731,,,,,,731,731,731,731', +'731,731,731,,,731,,,,,,,731,,,731,731,731,731,731,731,731,731,731,731', +'731,731,,731,731,,731,731,731,,,,,,,,,,,,,,,,,,,,731,,,731,,,731,731', +',,731,,,,,,731,,,,,,,,731,,,,,731,731,731,731,731,731,,,,731,731,,,', +',,,731,,731,731,731,731,,,731,731,728,728,728,,728,,,,728,728,,,,728', +',728,728,728,728,728,728,728,,,,,,728,728,728,728,728,728,728,,,728', +',,,,,,728,,,728,728,728,728,728,728,728,728,728,728,728,728,,728,728', +',728,728,728,,,,,,,,,,,,,,,,,,,,728,,,728,,,728,728,,,728,,728,,,,728', +',,,,,,,728,,,,,728,728,728,728,728,728,,,,728,728,,,,,,,728,,728,728', +'728,728,,,728,728,723,723,723,,723,,,,723,723,,,,723,,723,723,723,723', +'723,723,723,,,,,,723,723,723,723,723,723,723,,,723,,,,,,,723,,,723,723', +'723,723,723,723,723,723,,723,723,723,,723,723,,723,723,723,,,,,,,,,', +',,,,,,,,,,723,,,723,,,723,723,,,723,,723,,,,723,,,,,,,,723,,,,,723,723', +'723,723,723,723,,,,723,723,,,,,,,723,,,723,723,723,,,723,723,718,718', +'718,,718,,,,718,718,,,,718,,718,718,718,718,718,718,718,,,,,,718,718', +'718,718,718,718,718,,,718,,,,,,,718,,,718,718,718,718,718,718,718,718', +',718,718,718,,718,718,,718,718,718,,,,,,,,,,,,,,,,,,,,718,,,718,,,718', +'718,,,718,,,,,,718,,,,,,,,718,,,,,718,718,718,718,718,718,,,,718,718', +',,,,,,718,,,718,718,718,,,718,718,717,717,717,,717,,,,717,717,,,,717', +',717,717,717,717,717,717,717,,,,,,717,717,717,717,717,717,717,,,717', +',,,,,,717,,,717,717,717,717,717,717,717,717,,717,717,717,,717,717,,', +',717,,,,,,,,,,,,,,,,,,,,717,,,717,,,717,717,,,717,,,,,,,,,,,,,,,,,,', +'717,717,717,717,717,717,,,,717,717,,,,,,,717,,,717,717,717,,,717,717', +'706,706,706,,706,,,,706,706,,,,706,,706,706,706,706,706,706,706,,,,', +',706,706,706,706,706,706,706,,,706,,,,,,,706,,,706,706,706,706,706,706', +'706,706,,706,706,706,,706,706,,,,706,,,,,,,,,,,,,,,,,,,,706,,,706,,', +'706,706,,,706,,,,,,,,,,,,,,,,,,,706,706,706,706,706,706,,,,706,706,', +',,,,,706,,,706,706,706,,,706,706,703,703,703,,703,,,,703,703,,,,703', +',703,703,703,703,703,703,703,,,,,,703,703,703,703,703,703,703,,,703', +',,,,,,703,,,703,703,703,703,703,703,703,703,,703,703,703,,703,703,,703', +'703,703,,,,,,,,,,,,,,,,,,,,703,,,703,,,703,703,,,703,,,,,,703,,,,,,', +',703,,,,,703,703,703,703,703,703,,,,703,703,,,,,,,703,,,703,703,703', +',,703,703,700,700,700,,700,,,,700,700,,,,700,,700,700,700,700,700,700', +'700,,,,,,700,700,700,700,700,700,700,,,700,,,,,,,700,,,700,700,700,700', +'700,700,700,700,,700,700,700,,700,700,,700,700,700,,,,,,,,,,,,,,,,,', +',,700,,,700,,,700,700,,,700,,,,,,700,,,,,,,,700,,,,,700,700,700,700', +'700,700,,,,700,700,,,,,,,700,,,700,700,700,,,700,700,432,432,432,,432', +',,,432,432,,,,432,,432,432,432,432,432,432,432,,,,,,432,432,432,432', +'432,432,432,,,432,,,,,,,432,,,432,432,432,432,432,432,432,432,,432,432', +'432,,432,432,,432,432,432,,,,,,,,,,,,,,,,,,,,432,,,432,,,432,432,,,432', +',,,,,432,,,,,,,,432,,,,,432,432,432,432,432,432,,,,432,432,,,,,,,432', +',,432,432,432,,,432,432,676,676,676,,676,,,,676,676,,,,676,,676,676', +'676,676,676,676,676,,,,,,676,676,676,676,676,676,676,,,676,,,,,,,676', +',,676,676,676,676,676,676,676,676,,676,676,676,,676,676,,676,676,676', +',,,,,,,,,,,,,,,,,,,676,,,676,,,676,676,,,676,,,,,,676,,,,,,,,676,,,', +',676,676,676,676,676,676,,,,676,676,,,,,,,676,,,676,676,676,,,676,676', +'675,675,675,,675,,,,675,675,,,,675,,675,675,675,675,675,675,675,,,,', +',675,675,675,675,675,675,675,,,675,,,,,,,675,,,675,675,675,675,675,675', +'675,675,,675,675,675,,675,675,,675,675,675,,,,,,,,,,,,,,,,,,,,675,,', +'675,,,675,675,,,675,,,,,,675,,,,,,,,675,,,,,675,675,675,675,675,675', +',,,675,675,,,,,,,675,,,675,675,675,,,675,675,670,670,670,,670,,,,670', +'670,,,,670,,670,670,670,670,670,670,670,,,,,,670,670,670,670,670,670', +'670,,,670,,,,,,,670,,,670,670,670,670,670,670,670,670,,670,670,670,', +'670,670,,670,670,670,,,,,,,,,,,,,,,,,,,,670,,,670,,,670,670,,,670,,', +',,,670,,,,,,,,670,,,,,670,670,670,670,670,670,,,,670,670,,,,,,,670,', +',670,670,670,,,670,670,669,669,669,,669,,,,669,669,,,,669,,669,669,669', +'669,669,669,669,,,,,,669,669,669,669,669,669,669,,,669,,,,,,,669,,,669', +'669,669,669,669,669,669,669,,669,669,669,,669,669,,669,669,669,,,,,', +',,,,,,,,,,,,,,669,,,669,,,669,669,,,669,,,,,,669,,,,,,,,669,,,,,669', +'669,669,669,669,669,,,,669,669,,,,,,,669,,,669,669,669,,,669,669,668', +'668,668,,668,,,,668,668,,,,668,,668,668,668,668,668,668,668,,,,,,668', +'668,668,668,668,668,668,,,668,,,,,,,668,,,668,668,668,668,668,668,668', +'668,668,668,668,668,,668,668,,668,668,668,,,,,,,,,,,,,,,,,,,,668,,,668', +',,668,668,,,668,,,,668,,668,,,,,,,,668,,,,,668,668,668,668,668,668,', +',,668,668,,,,,,,668,,668,668,668,668,,,668,668,667,667,667,,667,,,,667', +'667,,,,667,,667,667,667,667,667,667,667,,,,,,667,667,667,667,667,667', +'667,,,667,,,,,,,667,,,667,667,667,667,667,667,667,667,667,667,667,667', +',667,667,,667,667,667,,,,,,,,,,,,,,,,,,,,667,,,667,,,667,667,,,667,', +'667,,667,,667,,,,,,,,667,,,,,667,667,667,667,667,667,,,,667,667,,,,', +',,667,,667,667,667,667,,,667,667,664,664,664,,664,,,,664,664,,,,664', +',664,664,664,664,664,664,664,,,,,,664,664,664,664,664,664,664,,,664', +',,,,,,664,,,664,664,664,664,664,664,664,664,,664,664,664,,664,664,,664', +'664,664,,,,,,,,,,,,,,,,,,,,664,,,664,,,664,664,,,664,,,,,,664,,,,,,', +',664,,,,,664,664,664,664,664,664,,,,664,664,,,,,,,664,,,664,664,664', +',,664,664,663,663,663,663,663,,,,663,663,,,,663,,663,663,663,663,663', +'663,663,,,,,,663,663,663,663,663,663,663,,,663,,,,,,663,663,,663,663', +'663,663,663,663,663,663,663,,663,663,663,,663,663,,663,663,663,,,,,', +',,,,,,,,,,,,,,663,,,663,,,663,663,,,663,,663,,,,663,,,,,,,,663,,,,,663', +'663,663,663,663,663,,,,663,663,,,,,,,663,,,663,663,663,,,663,663,476', +'476,476,,476,,,,476,476,,,,476,,476,476,476,476,476,476,476,,,,,,476', +'476,476,476,476,476,476,,,476,,,,,,,476,,,476,476,476,476,476,476,476', +'476,476,476,476,476,,476,476,,476,476,476,,,,,,,,,,,,,,,,,,,,476,,,476', +',,476,476,,,476,,476,,476,,476,,,,,,,,476,,,,,476,476,476,476,476,476', +',,,476,476,,,,,,,476,,476,476,476,476,,,476,476,478,478,478,,478,,,', +'478,478,,,,478,,478,478,478,478,478,478,478,,,,,,478,478,478,478,478', +'478,478,,,478,,,,,,,478,,,478,478,478,478,478,478,478,478,,478,478,478', +',478,478,,478,478,478,,,,,,,,,,,,,,,,,,,,478,,,478,,,478,478,,,478,', +',,,,478,,,,,,,,478,,,,,478,478,478,478,478,478,,,,478,478,,,,,,,478', +',,478,478,478,,,478,478,479,479,479,,479,,,,479,479,,,,479,,479,479', +'479,479,479,479,479,,,,,,479,479,479,479,479,479,479,,,479,,,,,,,479', +',,479,479,479,479,479,479,479,479,,479,479,479,,479,479,,479,479,479', +',,,,,,,,,,,,,,,,,,,479,,,479,,,479,479,,,479,,,,,,479,,,,,,,,479,,,', +',479,479,479,479,479,479,,,,479,479,,,,,,,479,,,479,479,479,,,479,479', +'480,480,480,,480,,,,480,480,,,,480,,480,480,480,480,480,480,480,,,,', +',480,480,480,480,480,480,480,,,480,,,,,,,480,,,480,480,480,480,480,480', +'480,480,,480,480,480,,480,480,,480,480,480,,,,,,,,,,,,,,,,,,,,480,,', +'480,,,480,480,,,480,,,,,,480,,,,,,,,480,,,,,480,480,480,480,480,480', +',,,480,480,,,,,,,480,,,480,480,480,,,480,480,660,660,660,,660,,,,660', +'660,,,,660,,660,660,660,660,660,660,660,,,,,,660,660,660,660,660,660', +'660,,,660,,,,,,,660,,,660,660,660,660,660,660,660,660,660,660,660,660', +',660,660,,660,660,660,,,,,,,,,,,,,,,,,,,,660,,,660,,,660,660,,,660,', +'660,,660,,660,,,,,,,,660,,,,,660,660,660,660,660,660,,,,660,660,,,,', +',,660,,660,660,660,660,,,660,660,659,659,659,,659,,,,659,659,,,,659', +',659,659,659,659,659,659,659,,,,,,659,659,659,659,659,659,659,,,659', +',,,,,,659,,,659,659,659,659,659,659,659,659,,659,659,659,,659,659,,659', +'659,659,,,,,,,,,,,,,,,,,,,,659,,,659,,,659,659,,,659,,,,,,659,,,,,,', +',659,,,,,659,659,659,659,659,659,,,,659,659,,,,,,,659,,,659,659,659', +',,659,659,658,658,658,,658,,,,658,658,,,,658,,658,658,658,658,658,658', +'658,,,,,,658,658,658,658,658,658,658,,,658,,,,,,,658,,,658,658,658,658', +'658,658,658,658,,658,658,658,,658,658,,658,658,658,,,,,,,,,,,,,,,,,', +',,658,,,658,,,658,658,,,658,,658,,,,658,,,,,,,,658,,,,,658,658,658,658', +'658,658,,,,658,658,,,,,,,658,,,658,658,658,,,658,658,629,629,629,,629', +',,,629,629,,,,629,,629,629,629,629,629,629,629,,,,,,629,629,629,629', +'629,629,629,,,629,,,,,,,629,,,629,629,629,629,629,629,629,629,,629,629', +'629,,629,629,,629,629,629,,,,,,,,,,,,,,,,,,,,629,,,629,,,629,629,,,629', +',,,,,629,,,,,,,,629,,,,,629,629,629,629,629,629,,,,629,629,,,,,,,629', +',,629,629,629,,,629,629,623,623,623,,623,,,,623,623,,,,623,,623,623', +'623,623,623,623,623,,,,,,623,623,623,623,623,623,623,,,623,,,,,,,623', +',,623,623,623,623,623,623,623,623,,623,623,623,,623,623,,623,623,623', +',,,,,,,,,,,,,,,,,,,623,,,623,,,623,623,,,623,,,,,,623,,,,,,,,623,,,', +',623,623,623,623,623,623,,,,623,623,,,,,,,623,,,623,623,623,,,623,623', +'611,611,611,,611,,,,611,611,,,,611,,611,611,611,611,611,611,611,,,,', +',611,611,611,611,611,611,611,,,611,,,,,,,611,,,611,611,611,611,611,611', +'611,611,611,611,611,611,,611,611,,611,611,611,,,,,,,,,,,,,,,,,,,,611', +',,611,,,611,611,,,611,,611,,611,,611,,,,,,,,611,,,,,611,611,611,611', +'611,611,,,,611,611,,,,,,,611,,611,611,611,611,,,611,611,588,588,588', +',588,,,,588,588,,,,588,,588,588,588,588,588,588,588,,,,,,588,588,588', +'588,588,588,588,,,588,,,,,,,588,,,588,588,588,588,588,588,588,588,,588', +'588,588,,588,588,,588,588,588,,,,,,,,,,,,,,,,,,,,588,,,588,,,588,588', +',,588,,,,,,588,,,,,,,,588,,,,,588,588,588,588,588,588,,,,588,588,,,', +',,,588,,,588,588,588,,,588,588,554,554,554,,554,,,,554,554,,,,554,,554', +'554,554,554,554,554,554,,,,,,554,554,554,554,554,554,554,,,554,,,,,', +',554,,,554,554,554,554,554,554,554,554,,554,554,554,,554,554,,554,554', +'554,,,,,,,,,,,,,,,,,,,,554,,,554,,,554,554,,,554,,,,,,554,,,,,,,,554', +',,,,554,554,554,554,554,554,,,,554,554,,,,,,,554,,,554,554,554,,,554', +'554,549,549,549,,549,,,,549,549,,,,549,,549,549,549,549,549,549,549', +',,,,,549,549,549,549,549,549,549,,,549,,,,,,,549,,,549,549,549,549,549', +'549,549,549,,549,549,549,,549,549,,549,549,549,,,,,,,,,,,,,,,,,,,,549', +',,549,,,549,549,,,549,,,,,,549,,,,,,,,549,,,,,549,549,549,549,549,549', +',,,549,549,,,,,,,549,,,549,549,549,,,549,549,545,545,545,,545,,,,545', +'545,,,,545,,545,545,545,545,545,545,545,,,,,,545,545,545,545,545,545', +'545,,,545,,,,,,,545,,,545,545,545,545,545,545,545,545,,545,545,545,', +'545,545,,,,545,,,,,,,,,,,,,,,,,,,,545,,,545,,,545,545,,,545,,,,,,,,', +',,,,,,,,,,545,545,545,545,545,545,,,,545,545,,,,,,,545,,,545,545,545', +',,545,545,539,539,539,,539,,,,539,539,,,,539,,539,539,539,539,539,539', +'539,,,,,,539,539,539,539,539,539,539,,,539,,,,,,,539,,,539,539,539,539', +'539,539,539,539,539,539,539,539,,539,539,,539,539,539,,,,,,,,,,,,,,', +',,,,,539,,,539,,,539,539,,,539,,539,,539,,539,,,,,,,,539,,,,,539,539', +'539,539,539,539,,,,539,539,,,,,,,539,,539,539,539,539,,,539,539,519', +'519,519,,519,,,,519,519,,,,519,,519,519,519,519,519,519,519,,,,,,519', +'519,519,519,519,519,519,,,519,,,,,,,519,,,519,519,519,519,519,519,519', +'519,519,519,519,519,,519,519,,519,519,519,,,,,,,,,,,,,,,,,,,,519,,,519', +',,519,519,,,519,,519,,519,,519,,,,,,,,519,,,,,519,519,519,519,519,519', +',,,519,519,,,,,,,519,,519,519,519,519,,,519,519,522,522,522,,522,,,', +'522,522,,,,522,,522,522,522,522,522,522,522,,,,,,522,522,522,522,522', +'522,522,,,522,,,,,,,522,,,522,522,522,522,522,522,522,522,522,522,522', +'522,,522,522,,522,522,522,,,,,,,,,,,,,,,,,,,,522,,,522,,,522,522,,,522', +',,,522,,522,,,,,,,,522,,,,,522,522,522,522,522,522,,,,522,522,,,,,,', +'522,,522,522,522,522,,,522,522,524,524,524,,524,,,,524,524,,,,524,,524', +'524,524,524,524,524,524,,,,,,524,524,524,524,524,524,524,,,524,,,,,', +',524,,,524,524,524,524,524,524,524,524,,524,524,524,,524,524,,524,524', +'524,,,,,,,,,,,,,,,,,,,,524,,,524,,,524,524,,,524,,,,,,524,,,,,,,,524', +',,,,524,524,524,524,524,524,,,,524,524,,,,,,,524,,,524,524,524,,,524', +'524,941,941,941,,941,,,,941,941,,,,941,,941,941,941,941,941,941,941', +',,,,,941,941,941,941,941,941,941,,,941,,,,,,,941,,,941,941,941,941,941', +'941,941,941,,941,941,941,,941,941,,,,941,,,,,,,,,,,,,,,,,,,,941,,,941', +',,941,941,,,941,,,,,,,,,,,,,,,,,,,941,941,941,941,941,941,,,,941,941', +',,,,,,941,,,941,941,941,,,941,941,246,246,246,,246,,,,246,246,,,,246', +',246,246,246,246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246', +',,,,,,246,,,246,246,246,246,246,246,246,246,,246,246,246,,246,246,,246', +'246,246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,', +',246,,,,,246,246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246', +',,246,246,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249,249', +'249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249,249', +'249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,,,,,', +',,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249,249', +'249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250,,250', +',,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250,250', +'250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250,250', +'250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250', +',,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,,,,,250', +',,250,250,250,,,250,250,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75', +'75,75,75,75,75,75,75,75,75,,,,75,75,75,75,75,75,75,75,75,75,,,,,,75', +'75,75,75,75,75,75,75,75,75,75,75,,75,,,,,,,75,75,,75,75,75,75,75,75', +'75,,,75,75,,,,75,75,75,75,,,,,,75,,,,,,,,75,75,,75,75,75,75,75,75,75', +'75,75,75,75,,,75,,,,,,,,,,,,,,,,,,,,75,,,,,75,12,12,12,12,12,12,12,12', +'12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12', +'12,12,12,12,,,,,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12', +'12,12,12,12,12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12', +'12,12,12,12,12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,,,,,12,423,423,423', +'423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423', +'423,423,423,423,,,,423,423,423,423,423,423,423,423,423,423,,,,,,423', +'423,423,423,423,423,423,423,423,,,423,,,,,,,,,423,423,,423,423,423,423', +'423,423,423,,,423,423,,,,423,423,423,423,,,,,,,,,,,,,,423,423,,423,423', +'423,423,423,423,423,423,423,423,423,,,423,423,,,,,,,,,,423,,,,,,,,,423', +',,,,423,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103', +'103,103,103,103,103,103,103,103,103,,,,103,103,103,103,103,103,103,103', +'103,103,,,,,,103,103,103,103,103,103,103,103,103,103,103,103,,103,,', +',,,,103,103,,103,103,103,103,103,103,103,,,103,103,,,,103,103,103,103', +',,,,,,,,,,,,,103,103,,103,103,103,103,103,103,103,103,103,103,103,,', +'103,,,,,,,,,,,,,,,,,,,,103,,,,,103,655,655,655,655,655,655,655,655,655', +'655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,,,,655,655', +'655,655,655,655,655,655,655,655,,,,,,655,655,655,655,655,655,655,655', +'655,,,655,,,,,,,,,655,655,,655,655,655,655,655,655,655,,,655,655,,,', +'655,655,655,655,,,,,,,,,,,,,,655,655,,655,655,655,655,655,655,655,655', +'655,655,655,,,655,655,,,,,,,,,,655,,,,,,,,,655,,,,,655,789,789,789,789', +'789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789', +'789,789,789,,,,789,789,789,789,789,789,789,789,789,789,,,,,,789,789', +'789,789,789,789,789,789,789,,,789,,,,,,,,,789,789,,789,789,789,789,789', +'789,789,,,789,789,,,,789,789,789,789,,,,,,,,,,,,,,789,789,,789,789,789', +'789,789,789,789,789,789,789,789,,,789,,,,,,,,,,,,,,,,,,,,789,,,,,789', +'11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11', +'11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11', +'11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,', +',,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,', +'11,,779,779,,,779,,,11,,,,,11,779,779,,779,779,779,779,779,779,779,', +',779,779,,,,779,779,779,779,,,,,,779,,,,,,,,779,779,,779,779,779,779', +'779,779,779,779,779,779,779,,,779,,,,,,,,,,230,230,,,230,,,,,,779,,', +'230,230,779,230,230,230,230,230,230,230,,,230,230,,,,230,230,230,230', +',,,,,230,,,,,,,,230,230,,230,230,230,230,230,230,230,230,230,230,230', +',,230,,,,,,,,,,229,229,,,229,,,,,,230,,,229,229,230,229,229,229,229', +'229,229,229,,,229,229,,,,229,229,229,229,,,,,,229,,,,,,,,229,229,,229', +'229,229,229,229,229,229,229,229,229,229,,,229,,,,,,,,,,778,778,,,778', +',,,,,229,,,778,778,229,778,778,778,778,778,778,778,,,778,778,,,,778', +'778,778,778,,,,,,778,,,,,,,,778,778,,778,778,778,778,778,778,778,778', +'778,778,778,,,778,,,,,,,,,,662,662,,,662,,,,,,778,,,662,662,778,662', +'662,662,662,662,662,662,,,662,662,,,,662,662,662,662,,,,,,662,,,,,,', +',662,662,,662,662,662,662,662,662,662,662,662,662,662,,,662,,,,,,,,', +',474,474,,,474,,,,,,662,,,474,474,662,474,474,474,474,474,474,474,,', +'474,474,,,,474,474,474,474,,,,,,474,,,,,,,,474,474,,474,474,474,474', +'474,474,474,474,474,474,474,,,474,,,,,,,,,,475,475,,,475,,,,,,474,,', +'475,475,474,475,475,475,475,475,475,475,,,475,475,,,,475,475,475,475', +',,,,,475,,,,,,,,475,475,,475,475,475,475,475,475,475,475,475,475,475', +',,475,,,,,,,,,,661,661,,,661,,,,,,475,,,661,661,475,661,661,661,661', +'661,661,661,,,661,661,,,,661,661,661,661,,,,,,661,,,,,,,,661,661,,661', +'661,661,661,661,661,661,661,661,661,661,,,661,,,,,,,,,,541,541,,,541', +',,,,,661,,,541,541,661,541,541,541,541,541,541,541,,,541,541,,,,541', +'541,541,541,,,,,,541,,,,,,,,541,541,,541,541,541,541,541,541,541,541', +'541,541,541,,1065,541,1065,1065,1065,1065,1065,,,,,279,279,,,279,1065', +',,,,541,,,279,279,541,279,279,279,279,279,279,279,,,279,279,1065,,,279', +'279,279,279,,,,,1065,1065,,,,,,,,279,279,,279,279,279,279,279,279,279', +'279,279,279,279,,,279,,,,,,,,,1065,551,551,,,551,,,,,,279,,,551,551', +'279,551,551,551,551,551,551,551,,,551,551,,,,551,551,551,551,,,,,,551', +',,,,,,,551,551,,551,551,551,551,551,551,551,551,551,551,551,,,551,,', +',,,,,,,550,550,,,550,,,,,,551,,,550,550,551,550,550,550,550,550,550', +'550,,,550,550,,,,550,550,550,550,,,,,,550,,,,,,,,550,550,,550,550,550', +'550,550,550,550,550,550,550,550,,,550,,,,,,,,,,540,540,,,540,,,,,,550', +',,540,540,550,540,540,540,540,540,540,540,,,540,540,,,,540,540,540,540', +',,,,,540,,,,,,,,540,540,,540,540,540,540,540,540,540,540,540,540,540', +',,540,,,,,,,,,,613,613,,,613,,,,,,540,,,613,613,540,613,613,613,613', +'613,613,613,,,613,613,,,,613,613,613,613,,,,,,613,,,,,,,,613,613,,613', +'613,613,613,613,613,613,613,613,613,613,,,613,,,,,,,,,,612,612,,,612', +',,,,,613,,,612,612,613,612,612,612,612,612,612,612,,,612,612,,,,612', +'612,612,612,,,,,,612,,,,,,,,612,612,,612,612,612,612,612,612,612,612', +'612,612,612,,,612,,,,,,,,,,1037,1037,,,1037,,,,,,612,,,1037,1037,612', +'1037,1037,1037,1037,1037,1037,1037,,,1037,1037,,,,1037,1037,1037,1037', +',,,,,1037,,,,,,,,1037,1037,,1037,1037,1037,1037,1037,1037,1037,1037', +'1037,1037,1037,,,1037,,,,,,,,,,1042,1042,,,1042,,,,,,1037,,,1042,1042', +'1037,1042,1042,1042,1042,1042,1042,1042,,,1042,1042,,,,1042,1042,1042', +'1042,,,,,,1042,,,,,,,,1042,1042,,1042,1042,1042,1042,1042,1042,1042', +'1042,1042,1042,1042,,,1042,745,,745,745,745,745,745,,,1043,1043,,,1043', +',,745,,,1042,,,1043,1043,1042,1043,1043,1043,1043,1043,1043,1043,,,1043', +'1043,,,745,1043,1043,1043,1043,,,,,,1043,745,745,,,,,,1043,1043,,1043', +'1043,1043,1043,1043,1043,1043,1043,1043,1043,1043,,1061,1043,1061,1061', +'1061,1061,1061,,,,,,745,,,,1061,,,,,1043,,,,953,1043,953,953,953,953', +'953,,,,,,,1061,,354,953,354,354,354,354,354,1061,1061,1061,1061,,,,', +'788,354,788,788,788,788,788,,953,,,,,,,,788,,,953,953,,,354,354,,,,1061', +',,,354,354,354,354,,,788,955,,955,955,955,955,955,,788,788,788,788,', +',953,1047,955,1047,1047,1047,1047,1047,,,,,,,,354,988,1047,988,988,988', +'988,988,,955,,,,,,788,,988,,,955,955,,,1047,986,,986,986,986,986,986', +',,,1047,1047,,,988,983,986,983,983,983,983,983,,,,988,988,,,955,831', +'983,831,831,831,831,831,,986,,,,,,1047,,831,986,986,986,986,,,983,,', +',,,988,,,983,983,983,983,,,831,1063,,1063,1063,1063,1063,1063,,831,831', +'831,831,,,986,,1063,,,,,,,,,,,,,983,,,,,,,831,,1063,,,,,,831,,,,,1063', +'1063,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1063' ] + racc_action_check = arr = ::Array.new(26358, nil) + idx = 0 + clist.each do |str| + str.split(',', -1).each do |i| + arr[idx] = i.to_i unless i.empty? + idx += 1 + end + end + +racc_action_pointer = [ + nil, 1201, 3200, 845, nil, 92, nil, nil, 6299, 952, + nil, 24627, 23937, 699, nil, 661, 659, 707, 641, 495, + 496, nil, -68, 6439, 2777, 681, nil, -47, nil, 2, + 1068, 1800, 6579, 6719, 6859, nil, 2354, 6999, 7139, nil, + 577, 432, 494, 604, 181, 7419, 7559, -43, 7699, 478, + 740, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 1668, nil, 7839, nil, nil, -23, nil, 7979, 8119, nil, + nil, 8259, 8399, 470, nil, 23799, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 114, nil, nil, nil, nil, nil, nil, 350, + 316, 314, 285, 24213, nil, nil, nil, nil, nil, nil, + 384, nil, nil, 662, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 8679, nil, nil, nil, + nil, 8819, 8959, 9099, 9239, 9379, 254, nil, 721, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 213, nil, 2213, 9659, 9799, 9939, 10079, 10219, 10359, 24849, + 24776, nil, nil, 10499, 10639, 10779, nil, nil, 579, 264, + 259, 213, 203, 64, 13, nil, 23379, 2918, 0, 23519, + 23659, 10919, 11059, 11199, 11339, 11479, 11619, 11759, 11899, 12039, + 12179, 12319, 12459, 12599, 12739, 12879, 13019, 13159, 13299, 13439, + 13579, nil, nil, nil, nil, 13719, nil, nil, nil, 25360, + nil, nil, -41, 13999, nil, nil, 1224, nil, nil, nil, + 14279, nil, nil, 14419, nil, 2495, nil, 1170, 1169, nil, + 14839, 1207, 14979, nil, nil, 15119, 15259, nil, nil, 509, + nil, nil, 15399, 1207, nil, 1137, 5174, 1146, 1152, 1113, + 15679, 4469, 351, 356, 490, 1165, 772, nil, 1124, 1081, + -19, nil, nil, nil, 1112, 164, 1069, 16659, nil, 429, + 1126, 773, nil, 1118, 16939, nil, 17079, 5597, 1184, 1058, + 17219, 17359, nil, nil, 26046, 396, 148, 90, 17499, 5456, + 4751, 375, 1167, 1047, 28, 21, 424, 1113, -14, 1140, + nil, nil, 17779, nil, 17919, 175, 235, -61, 352, 443, + 448, 470, 527, 531, nil, 575, nil, nil, nil, nil, + nil, 448, nil, 424, nil, 154, nil, 1001, 296, nil, + 992, nil, 991, 160, nil, 980, 125, nil, 180, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 24075, nil, nil, nil, nil, 987, nil, + nil, 969, 19459, 961, nil, nil, 925, nil, 615, 389, + 1006, nil, nil, 1931, nil, nil, nil, nil, nil, 2072, + 920, nil, nil, 916, 910, 427, 171, 1540, nil, nil, + nil, 801, 0, 935, nil, nil, 1408, 1276, nil, nil, + nil, 154, nil, 930, 25068, 25141, 20719, 107, 20859, 20999, + 21139, 3341, 3200, 695, 617, 951, 918, 914, 911, 1358, + 1174, 1161, 4328, 4187, 3905, 3764, 3482, 3059, 948, 1083, + 4046, 3623, 2213, 1227, 851, nil, 1196, nil, nil, nil, + nil, nil, nil, nil, nil, 733, 730, nil, nil, 22819, + nil, nil, 22959, nil, 23099, nil, 164, nil, nil, nil, + 9519, 909, 721, 723, nil, nil, 725, 6159, 729, 22679, + 25579, 25287, 754, 773, nil, 22539, 736, nil, 800, 22399, + 25506, 25433, 960, 2354, 22259, 883, 882, 767, nil, nil, + 118, 568, 801, 786, nil, 165, 813, nil, 1032, nil, + 774, 784, nil, 789, 791, 797, nil, nil, nil, nil, + nil, nil, nil, nil, 786, 933, nil, nil, 22119, nil, + nil, nil, 883, nil, nil, nil, 884, nil, nil, 889, + 4046, 941, nil, 5738, 28, 951, 952, 951, 965, nil, + nil, 21979, 25725, 25652, -19, nil, 353, 259, 527, nil, + 260, nil, 873, 21839, nil, 893, nil, nil, nil, 21699, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 258, nil, nil, 382, nil, nil, nil, 859, nil, + nil, 880, nil, 1931, nil, 24351, nil, 890, 21559, 21419, + 21279, 25214, 24995, 20579, 20439, 341, 934, 20299, 20159, 20019, + 19879, 951, nil, nil, nil, 19739, 19599, 953, nil, nil, + nil, 230, 174, 929, 523, 947, 950, nil, -63, 1052, + -24, nil, 978, nil, 1083, nil, nil, 967, nil, 1009, + 19319, nil, nil, 19179, nil, -95, 19039, 972, nil, 976, + 4, -5, 1016, 29, 804, 1022, 984, 18899, 18759, 1050, + 152, 52, nil, 18619, nil, nil, nil, nil, 18479, nil, + nil, 18339, nil, nil, nil, -10, 1002, 339, nil, nil, + 289, 1471, nil, 1731, nil, 25935, nil, 18199, nil, 628, + nil, 1005, 319, 1023, nil, nil, nil, nil, 738, nil, + 1141, nil, nil, nil, nil, nil, 1148, nil, 18059, 1034, + 33, 57, 159, 160, 3764, nil, 768, nil, 24922, 24703, + 17639, nil, nil, nil, 156, 2495, 4187, 730, 26061, 24489, + 61, 905, 3905, nil, nil, 292, nil, nil, nil, 1077, + nil, 1062, 16799, 1066, 362, 290, 128, 256, nil, 2918, + 16519, nil, 1071, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 16379, 16239, 16099, 15959, 271, 15819, nil, + nil, 26184, nil, 3623, nil, nil, 1117, nil, -54, nil, + nil, nil, nil, 1102, 27, nil, nil, nil, nil, nil, + nil, nil, 4328, nil, 1105, 1152, nil, nil, 584, nil, + 4892, 5033, 1121, 1127, 1125, nil, nil, nil, 1126, 1127, + nil, 1130, 1132, nil, 1139, nil, nil, 1143, 1072, 1141, + 1065, nil, 1262, nil, nil, 15539, nil, 5315, 1282, nil, + nil, 50, -13, 1284, 670, 629, nil, 1171, 2072, 14699, + 394, 1291, nil, 1179, 351, nil, nil, nil, nil, nil, + nil, nil, 1168, nil, nil, 1178, 379, nil, nil, 14559, + 14139, 2636, 1191, 1192, nil, 1194, 1195, 1196, nil, 1220, + -91, -101, 13859, nil, nil, nil, nil, 2777, 3341, nil, + 136, 23239, nil, nil, 115, 236, 868, nil, nil, 487, + nil, 1339, nil, 26031, nil, 26100, nil, nil, nil, nil, + 257, 1504, 186, nil, 49, nil, nil, 6019, 5879, nil, + nil, 372, 426, nil, nil, 396, nil, nil, 317, nil, + -52, nil, nil, 26169, nil, nil, 26154, nil, 26130, nil, + nil, 365, 8539, 718, 443, nil, 492, 4610, 51, 151, + 633, 524, -9, nil, nil, nil, -103, nil, nil, nil, + 484, 486, 490, 508, 514, 1401, 526, 1415, 3482, nil, + 293, nil, nil, 3059, nil, 2636, 534, nil, nil, 536, + 538, 543, 548, nil, 558, nil, 839, 25798, nil, nil, + 689, 7279, 25871, 25944, 47, nil, 769, 26115, nil, nil, + nil, nil, 922, 583, 764, nil, nil, nil, 706, 715, + nil, 26006, nil, 26223, nil, 25349, nil, 1162, nil, nil, + 664, 702, nil, 676, 20, 21, 120, 35, nil, 687, + 692, nil, nil, nil, 698, 704, 706, 707, 8, nil, + 591, nil, nil, nil, nil, 720, nil ] + +racc_action_default = [ + -1, -654, -653, -654, -2, -640, -4, -5, -654, -8, + -9, -654, -654, -654, -35, -654, -654, -39, -654, -654, + -297, -51, -642, -654, -56, -61, -62, -63, -67, -274, + -274, -274, -312, -346, -347, -79, -653, -83, -91, -93, + -654, -541, -542, -654, -654, -654, -654, -233, -654, -642, + -247, -288, -289, -290, -291, -292, -293, -294, -295, -296, + -626, -299, -301, -308, -310, -320, -426, -654, -654, -58, + -58, -640, -654, -330, -337, -654, -348, -349, -351, -352, + -353, -354, -355, -356, -357, -358, -359, -360, -369, -471, + -472, -473, -474, -475, -476, -653, -479, -653, -653, -653, + -489, -653, -653, -653, -517, -523, -525, -526, -527, -528, + -624, -530, -531, -625, -533, -534, -535, -536, -537, -538, + -539, -540, -545, -546, 1097, -3, -641, -649, -650, -651, + -7, -654, -654, -654, -654, -654, -654, -23, -654, -122, + -123, -124, -125, -126, -127, -128, -129, -130, -134, -135, + -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, + -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, + -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, + -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, + -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, + -186, -187, -188, -189, -190, -191, -192, -193, -194, -195, + -196, -197, -198, -199, -200, -201, -202, -203, -204, -205, + -28, -131, -653, -654, -654, -654, -654, -654, -653, -654, + -654, -636, -637, -654, -654, -642, -643, -55, -654, -541, + -542, -654, -297, -654, -654, -239, -654, -653, -654, -218, + -219, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -248, -249, -250, -251, -654, -362, -455, -434, -654, + -638, -639, -68, -654, -319, -361, -654, -448, -450, -74, + -653, -445, -75, -642, -76, -254, -269, -653, -653, -273, + -654, -279, -654, -653, -618, -654, -654, -77, -78, -640, + -17, -18, -654, -21, -22, -81, -653, -642, -654, -84, + -87, -653, -99, -100, -654, -654, -107, -312, -315, -642, + -438, -346, -347, -350, -446, -654, -89, -654, -95, -307, + -524, -654, -227, -228, -654, -240, -654, -653, -303, -642, + -653, -653, -321, -322, -573, -57, -654, -654, -654, -653, + -653, -640, -654, -641, -541, -542, -654, -654, -297, -654, + -379, -380, -654, -333, -654, -122, -123, -165, -166, -167, + -183, -188, -195, -198, -340, -654, -541, -542, -613, -614, + -477, -654, -501, -654, -503, -654, -505, -654, -654, -484, + -654, -653, -654, -654, -497, -654, -654, -499, -654, -516, + -518, -519, -520, -521, -6, -652, -29, -30, -31, -32, + -33, -10, -11, -654, -25, -26, -27, -132, -654, -36, + -38, -284, -654, -654, -283, -37, -654, -40, -654, -297, + -48, -50, -206, -259, -279, -52, -53, -41, -207, -259, + -642, -264, -265, -653, -653, -627, -628, -274, -443, -629, + -630, -628, -627, -274, -442, -444, -629, -630, -47, -215, + -54, -642, -318, -654, -654, -654, -653, -307, -654, -654, + -654, -216, -217, -220, -221, -222, -223, -224, -225, -229, + -230, -231, -232, -234, -235, -236, -237, -238, -241, -242, + -243, -244, -642, -252, -654, -456, -274, -627, -628, -65, + -69, -275, -439, -452, -455, -642, -642, -314, -270, -654, + -278, -271, -654, -276, -654, -280, -654, -621, -623, -16, + -641, -20, -642, -80, -305, -96, -85, -654, -642, -653, + -654, -654, -106, -654, -524, -654, -92, -97, -654, -654, + -654, -654, -253, -245, -654, -463, -654, -642, -302, -255, + -646, -646, -654, -654, -616, -646, -654, -427, -573, -430, + -612, -612, -556, -558, -558, -558, -572, -574, -575, -576, + -577, -578, -579, -580, -581, -654, -583, -585, -587, -592, + -594, -595, -597, -602, -604, -605, -607, -608, -609, -654, + -653, -370, -371, -653, -654, -654, -654, -654, -654, -365, + -458, -653, -654, -654, -307, -58, -117, -118, -654, -120, + -654, -297, -653, -654, -338, -551, -343, -634, -635, -654, + -478, -502, -507, -508, -510, -480, -504, -481, -506, -482, + -483, -654, -486, -488, -654, -491, -493, -494, -654, -495, + -496, -654, -522, -653, -24, -654, -34, -287, -654, -654, + -653, -654, -654, -654, -654, -447, -654, -266, -268, -654, + -654, -70, -262, -263, -440, -654, -654, -72, -441, -317, + -644, -627, -628, -627, -628, -642, -654, -433, -653, -64, + -435, -452, -654, -453, -654, -261, -313, -653, -277, -281, + -654, -619, -620, -654, -19, -82, -654, -88, -94, -642, + -627, -628, -653, -631, -105, -654, -90, -654, -654, -226, + -642, -653, -363, -653, -300, -368, -304, -256, -648, -647, + -258, -648, -309, -311, -617, -654, -642, -654, -554, -555, + -654, -654, -565, -654, -568, -654, -570, -654, -381, -654, + -383, -385, -392, -642, -586, -596, -606, -610, -653, -372, + -653, -59, -373, -374, -325, -326, -654, -328, -654, -642, + -627, -628, -631, -306, -653, -117, -118, -119, -654, -654, + -653, -331, -547, -549, -334, -653, -653, -573, -573, -654, + -642, -654, -653, -485, -487, -654, -490, -498, -500, -654, + -133, -285, -654, -642, -627, -628, -628, -627, -49, -260, + -654, -645, -653, -43, -209, -44, -210, -71, -45, -212, + -46, -211, -73, -654, -654, -654, -654, -447, -654, -415, + -416, -642, -418, -653, -437, -436, -654, -449, -653, -451, + -272, -282, -622, -86, -447, -98, -214, -316, -13, -15, + -364, -366, -653, -470, -464, -653, -465, -466, -646, -428, + -653, -653, -420, -642, -612, -593, -611, -557, -558, -558, + -584, -558, -558, -603, -558, -581, -598, -642, -654, -390, + -654, -582, -654, -367, -375, -654, -377, -653, -654, -60, + -327, -654, -447, -654, -117, -118, -121, -642, -653, -654, + -654, -654, -341, -642, -654, -344, -615, -509, -512, -513, + -514, -515, -654, -492, -12, -286, -447, -42, -208, -267, + -654, -246, -612, -612, -397, -653, -653, -653, -414, -654, + -642, -581, -589, -590, -600, -457, -66, -653, -653, -469, + -654, -654, -468, -257, -654, -654, -654, -429, -553, -654, + -561, -654, -563, -654, -566, -654, -569, -571, -382, -384, + -388, -654, -393, -323, -654, -378, -324, -654, -653, -329, + -447, -654, -654, -335, -339, -654, -550, -552, -551, -511, + -654, -395, -396, -405, -399, -407, -654, -410, -654, -412, + -417, -654, -654, -588, -654, -454, -653, -653, -541, -542, + -654, -654, -297, -467, -431, -432, -642, -422, -424, -425, + -558, -558, -558, -558, -386, -654, -391, -654, -653, -281, + -653, -332, -548, -653, -342, -653, -612, -591, -398, -653, + -653, -653, -653, -601, -653, -419, -599, -654, -307, -14, + -463, -653, -654, -654, -307, -421, -654, -654, -559, -562, + -564, -567, -654, -389, -653, -459, -460, -461, -654, -654, + -394, -654, -402, -654, -404, -654, -408, -654, -411, -413, + -306, -631, -462, -642, -627, -628, -631, -306, -423, -558, + -387, -376, -336, -345, -653, -653, -653, -653, -447, -560, + -654, -400, -403, -406, -409, -653, -401 ] + +clist = [ +'6,608,234,384,450,296,296,296,229,356,357,4,291,361,352,278,280,29,319', +'318,137,221,521,29,556,142,142,359,360,346,721,410,297,297,297,786,129', +'569,29,600,603,882,434,435,282,289,292,29,29,29,441,29,510,441,355,355', +'701,126,355,441,237,457,463,125,145,145,515,147,147,546,333,333,584', +'416,417,418,419,29,870,317,576,849,29,29,336,504,29,340,863,142,298', +'298,298,392,888,394,396,399,641,404,407,394,129,391,665,333,315,294', +'307,308,447,506,692,873,777,753,468,142,355,355,355,355,1033,698,926', +'833,698,130,636,362,638,738,739,642,1007,727,730,625,962,393,734,29', +'959,636,975,408,29,29,29,29,29,789,978,1009,9,622,761,624,928,423,9', +'430,371,930,220,704,1006,567,859,354,735,938,513,514,838,688,1055,768', +'521,855,940,390,395,929,398,848,644,401,403,406,907,791,792,409,899', +'653,136,1033,868,421,865,296,701,1027,629,428,344,2,562,655,690,458', +'445,446,348,388,748,563,353,1016,691,470,471,433,433,1,451,474,369,781', +'318,279,889,385,1078,626,347,29,29,29,29,29,29,29,467,414,766,349,29', +'29,29,736,685,1009,557,350,296,351,372,898,429,440,29,296,440,701,296', +'623,512,707,440,698,698,1053,896,937,1029,716,9,877,900,959,991,297', +'1023,374,584,420,451,785,836,,870,297,576,520,520,,29,318,604,392,,', +'318,29,457,463,29,543,1080,526,,540,,709,291,,547,873,870,869,694,871', +',,,29,,,550,29,,742,744,746,29,1081,,827,129,298,605,606,795,355,,,559', +'564,560,298,,333,1056,612,1039,,511,532,,530,29,844,538,,536,529,516', +',333,448,712,29,29,29,794,469,544,642,748,,712,879,,,315,769,1025,,', +'315,129,,,,,,,645,,,,,870,333,864,333,561,565,,927,,,,,,,,607,,840,', +'892,,948,,661,,,666,,654,943,,,803,142,843,673,,817,,,712,678,,822,', +'296,,520,520,701,,672,458,916,,584,,584,901,902,531,,,,,,903,904,671', +',451,,145,,677,147,,,686,981,982,441,,,673,467,,29,,457,463,441,441', +',,,923,441,441,,672,584,584,,,748,935,748,296,576,576,1072,,,547,,,689', +'458,698,,,547,,,1010,794,866,458,,866,,840,451,945,,,720,856,,,29,,', +',931,,970,813,815,29,467,897,,818,820,,,,1030,,467,1031,,,29,333,,,774', +'968,971,,697,333,,,,,758,296,,760,1060,,,,1014,748,,458,,,,,,,,,,,,', +',,451,784,712,,,,29,790,,29,,783,,469,997,448,924,29,467,950,952,,954', +'956,296,957,762,441,,29,835,,1084,,458,29,,748,1018,748,1026,,6,923', +',,923,,923,451,1057,,,799,,800,666,,584,29,142,,,,,29,29,467,,29,834', +',,,748,29,29,829,547,,666,29,29,,917,673,520,440,678,845,,1058,931,1059', +',931,,440,440,145,,672,147,440,440,,,862,905,,853,,857,,433,,812,,1088', +',,923,,923,,923,,923,,,333,,,,,,,,,,666,333,,,296,,,886,893,886,923', +',458,,,,,,,891,,1048,1049,1050,1051,866,912,,924,451,931,924,,924,666', +',,858,,,29,,,467,,,29,,,,,29,29,,142,,9,,29,,,520,862,,814,816,808,', +'1073,,819,821,,,,,29,,964,,,,,,,,939,829,,932,1089,,972,,944,,724,,440', +'29,,,,,942,,924,,924,,924,,924,846,,,,,29,,,965,,355,,712,29,29,666', +',,,,,,924,,355,,,,,,,,764,765,,767,,,29,,29,872,,874,,,,,862,,19,29', +'29,,,,19,,995,996,,984,984,984,,,,,,973,,238,,977,,,,,,,238,238,238', +',19,324,324,,,1020,29,29,918,,,,,,,,,,,333,,814,816,821,819,,19,,333', +',,238,238,,1040,238,366,29,,,1045,932,,1042,932,925,,932,853,932,,,', +',,1054,,1022,,,,,,,,,29,,296,,,,886,,,,,,458,333,,984,984,984,984,,984', +'29,,,19,,29,451,29,238,238,238,238,19,,,,472,,467,886,666,41,890,29', +'467,,,41,,,,918,,,,932,,932,,932,,932,,,,,,,,984,984,984,984,,,41,322', +'322,,,984,,,,932,,,,,,,,,,517,,1011,,1012,,1013,41,,,,,,,,,,364,,,386', +',,,533,19,238,438,238,238,438,238,,,,,438,238,238,1032,,1034,985,987', +'989,,,,,,19,,,,431,444,558,,,,,,,,963,,,,,,966,41,,,,969,,,,,41,,,974', +',,238,,,,,,,238,,,238,,,,1079,,,,,,,,,,,,,,1085,19,1086,,1087,19,,,', +'324,19,,,,,,,523,,525,,,527,528,,,324,,,1095,,,1062,1064,1066,1068,19', +'1069,,1021,,,,1024,,,,238,19,19,,,32,41,,,,,32,,,620,,620,679,,,,566', +',,,,32,,,,,41,,,,32,32,32,,32,1091,1092,1093,1094,,,,,,,,1096,,,,,,', +',,,695,696,,,32,,,,,32,32,,,32,,,,705,1082,1083,,,,708,,,,,,,,,,,,41', +',,,41,,657,726,322,41,,,,,,,,,,,,,238,,,322,,,,,,,,32,,41,,,32,32,32', +'32,32,,,,,41,41,,,,,,,,,,,,386,,386,,,,,,,,,,,,,,19,,18,,,,,324,18,238', +',,,,,324,,699,,,566,,702,,238,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,32,32,32', +'32,32,32,32,,,18,,32,32,32,,,,19,,,19,,,,,32,,,238,,,,,754,,,,,,,238', +'847,,,,,238,,,,,,,,,,,,,,,32,,,,,,,32,,19,32,,18,881,,438,238,,,19,', +'18,,,,438,438,,41,32,,438,438,32,,322,,,32,,,,801,322,,,,,,,906,699', +'566,,,,,,,,,,324,,32,,,,,,,,,324,,32,32,32,,,,,,,841,,,842,,,,,,,,,', +',41,,,41,,,,,,854,18,,18,,699,18,,566,,,,18,,,,947,,,,,,,19,876,,18', +',,238,958,,,,19,19,,,,,,19,,,41,444,16,,,,,,16,,41,,976,,,438,,,,,,', +',,,,,,,,,,,,,915,16,,19,,,,32,,,,,18,,,,18,,322,,,18,19,,,,,16,,322', +'19,19,,,,,,370,,,,,,,,,,18,,,,,,,,238,,19,,18,18,32,,,,,,,19,238,32', +',,,,,,,,,,,,,,32,41,,,,,16,,,,,,41,41,,16,,993,,41,,,19,19,,,1000,,', +',,,566,,,,,,,,,,,,,,32,,,32,,,,19,,,,32,,,41,,,,,,,,,32,,,,,,32,,1036', +',41,1019,,19,,,,,41,41,,,,,,,,,,,32,,,16,19,436,32,32,436,19,32,19,', +',436,41,32,32,,,,,32,32,,,41,238,16,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,', +',386,,,,,41,41,,,998,,,,,,,,,,,,,,,,,,,,,,,,16,,,41,16,,,,,16,,,,,,', +',,,,,,,18,,,18,386,32,,,,41,,32,16,,,,32,32,,,,,,32,16,16,,,,,41,,,', +',41,,41,42,,,32,,,42,,,,,,,,,18,,,,,,18,,,,18,32,,,,,18,18,,42,323,323', +'18,18,,,,,,,32,,,,,,,,32,32,,,,,,42,,,,,,,,,,365,,,387,,,,,32,,32,,', +',,,,,,,,32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,32,32,,42,,,18', +',,,,,,,,,,18,18,,,,,,18,,,16,,,,32,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,32', +',,,,18,,,,,,,,20,,,,,,20,,32,,,18,,32,,32,,42,,18,18,,,,16,,,16,,,,32', +',,20,326,326,,,,,,42,,,,18,,,,,,,,,,,18,,,20,,,,,,,,,,368,,,,,,,16,', +',,,,436,,,,16,,,,,,436,436,,18,18,,436,436,,,,,,,42,,,,42,,,,323,42', +',,,,,,,20,,,18,,,,,323,20,,,,,,,,,42,,,,,,,,,,,,42,42,18,,,,,,,,,,,387', +',387,,,,,,,,18,,,,,18,,18,,,,,,,,,,,,,,16,,,,,,,,,,,16,16,,,,,,16,,', +',20,,439,,,439,,,,,,439,,,436,,,,,,,,,,,20,,,,,,,,,,,,16,,,,,,,,,,,', +',,,,,,,16,,,,,,,,16,16,,,,,,,,,,,,,,,,,,,,,,,,,20,16,,,20,,,,326,20', +',,16,,,42,,,,,,,323,,,326,,,,,323,,,,,20,,,,,,,,,,,,20,20,,,16,16,,', +'1003,,,,,621,,621,,,,,,,,,,,,,,,,,,,,16,,,42,,,42,,,,,,,,,,,,,,,,,,', +',,,,16,,,,,,,,,,,,,,,,,,,,,16,,,,,16,42,16,,,,,,,,,42,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,323,,,,,,,,,,,323,,,,,,,,,,,,,,,,20,,,,', +',,326,,,,,,,,326,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,42,42,,,,,,42', +',,,,,,,,,,20,,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,42', +',,,20,,,,42,42,439,,,,20,,,,,,439,439,,,,,439,439,,,245,,,,,42,,,,295', +'295,295,,,,,42,,,,,,342,343,,345,,326,,,,,,,,,,,326,,,,,,,,,,,,387,', +',,,42,42,,,999,,,,,,,,,,,,,,,,,,,,,,,,,,,42,,,,,,,,,20,,,,,,,,,,,20', +'20,,,387,,911,20,,42,,,,,,,,,,,,,,,,439,,,,,42,,,,,42,,42,,,,,,,,,,', +'20,,,,,,,,,,,,,,,,,,,20,,,,,,,,20,20,,,,,,,,,,,,,,,,,,295,443,,,449', +'295,,,20,,449,,,,,,,,,20,,,,245,,,481,482,483,484,485,486,487,488,489', +'490,491,492,493,494,495,496,497,498,499,500,501,502,,,,,503,621,,,,', +'20,20,295,,1002,,,,,295,,,295,,,,,,,295,,295,,,295,295,,,,,,20,,,,,', +',,,,,,,,,,,,,,,,,,621,,,,,20,,,552,,553,,,,295,295,,,,,,,,,,,20,,,,', +'20,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',295,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,449,449,449,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,295,,295,,,,,,,,,,,,,,,295', +',,,,,,,,,719,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,,,,,,', +',,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,449,295', +',,,809,,,295,295,449,449,,,,,449,449,,,,,,,,,,,,,,,,,,,,,,,,295,,,295', +',,,,,,,,,,,,,,449,,,,,295,,,,,295,,,295,,,,,,,,,,,,,,,,295,,,,,,,,,', +',,,,,,,,,,,295,,,,,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,449,,', +',,,,,,,,,,449,449,449,449,,921,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,449,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,295' ] + racc_goto_table = arr = ::Array.new(3977, nil) + idx = 0 + clist.each do |str| + str.split(',', -1).each do |i| + arr[idx] = i.to_i unless i.empty? + idx += 1 + end + end + +clist = [ +'6,115,39,69,35,45,45,45,37,23,23,2,87,23,104,173,37,53,62,14,21,21,89', +'53,12,70,70,41,41,39,15,69,84,84,84,123,120,172,53,108,108,109,28,28', +'50,50,50,53,53,53,24,53,51,24,30,30,221,8,30,24,26,49,49,5,73,73,35', +'74,74,64,79,79,210,23,23,23,23,53,211,59,205,17,53,53,63,174,53,77,164', +'70,86,86,86,6,111,6,6,6,194,6,6,6,120,190,36,79,58,57,57,57,32,49,52', +'216,67,150,32,70,30,30,30,30,217,90,160,162,90,7,195,5,195,155,155,195', +'166,85,85,138,151,191,85,53,148,195,139,191,53,53,53,53,53,140,141,167', +'9,68,42,68,152,31,9,29,25,158,22,20,165,168,169,170,171,18,177,178,180', +'182,183,184,89,185,186,189,192,164,193,16,196,197,198,199,200,201,202', +'203,204,13,11,217,209,10,213,45,221,214,220,14,80,3,83,75,88,87,30,30', +'9,100,149,103,106,151,54,30,30,84,84,1,6,37,117,119,14,48,44,124,166', +'125,126,53,53,53,53,53,53,53,70,7,115,127,53,53,53,172,35,167,128,129', +'45,130,131,132,26,26,53,45,26,221,45,133,87,64,26,90,90,151,67,162,160', +'64,9,150,134,148,164,84,135,136,210,9,6,137,52,,211,84,205,6,6,,53,14', +'23,6,,,14,53,49,49,53,39,151,190,,37,,35,87,,62,216,211,161,174,161', +',,,53,,,37,53,,208,208,208,53,109,,36,120,86,14,14,194,30,,,6,6,84,86', +',79,111,37,17,,57,59,,8,53,36,59,,63,5,57,,79,76,49,53,53,53,195,76', +'77,195,149,,49,149,,,58,35,123,,,58,120,,,,,,,6,,,,,211,79,154,79,86', +'86,,161,,,,,,,,5,,89,,36,,155,,37,,,39,,21,85,,,35,70,64,87,,51,,,49', +'87,,51,,45,,6,6,221,,6,87,36,,210,,210,12,12,9,,,,,,172,172,50,,6,,73', +',50,74,,,39,155,155,24,,,87,70,,53,,49,49,24,24,,,,154,24,24,,6,210', +'210,,,149,12,149,45,205,205,15,,,62,,,50,87,90,,,62,,,161,195,156,87', +',156,,89,6,12,,,30,28,,,53,,,,210,,36,32,32,53,70,35,,32,32,,,,161,', +'70,161,,,53,79,,,41,108,12,,86,79,,,,,14,45,,14,155,,,,149,149,,87,', +',,,,,,,,,,,,,6,30,49,,,,53,30,,53,,6,,76,108,76,156,53,70,208,208,,208', +'208,45,208,120,24,,53,104,,161,,87,53,,149,108,149,154,,6,154,,,154', +',154,6,115,,,2,,21,39,,210,53,70,,,,,53,53,70,,53,173,,,,149,53,53,6', +'62,,39,53,53,,32,87,6,26,87,62,,12,210,12,,210,,26,26,73,,6,74,26,26', +',,39,69,,6,,6,,84,,86,,36,,,154,,154,,154,,154,,,79,,,,,,,,,,39,79,', +',45,,,6,14,6,154,,87,,,,,,,84,,208,208,208,208,156,14,,156,6,210,156', +',156,39,,,86,,,53,,,70,,,53,,,,,53,53,,70,,9,,53,,,6,39,,76,76,9,,35', +',76,76,,,,,53,,23,,,,,,,,14,6,,212,208,,23,,14,,102,,26,53,,,,,6,,156', +',156,,156,,156,76,,,,,53,,,14,,30,,49,53,53,39,,,,,,,156,,30,,,,,,,', +'102,102,,102,,,53,,53,159,,159,,,,,39,,34,53,53,,,,34,,14,14,,6,6,6', +',,,,,120,,34,,120,,,,,,,34,34,34,,34,34,34,,,14,53,53,76,,,,,,,,,,,79', +',76,76,76,76,,34,,79,,,34,34,,14,34,34,53,,,39,212,,37,212,159,,212', +'6,212,,,,,,14,,120,,,,,,,,,53,,45,,,,6,,,,,,87,79,,6,6,6,6,,6,53,,,34', +',53,6,53,34,34,34,34,34,,,,60,,70,6,39,65,102,53,70,,,65,,,,76,,,,212', +',212,,212,,212,,,,,,,,6,6,6,6,,,65,65,65,,,6,,,,212,,,,,,,,,,60,,159', +',159,,159,65,,,,,,,,,,65,,,65,,,,60,34,34,34,34,34,34,34,,,,,34,34,34', +'159,,159,157,157,157,,,,,,34,,,,82,82,60,,,,,,,,102,,,,,,102,65,,,,102', +',,,,65,,,102,,,34,,,,,,,34,,,34,,,,159,,,,,,,,,,,,,,159,34,159,,159', +'34,,,,34,34,,,,,,,82,,82,,,82,82,,,34,,,159,,,157,157,157,157,34,157', +',102,,,,102,,,,34,34,34,,,56,65,,,,,56,,,34,,34,60,,,,82,,,,,56,,,,', +'65,,,,56,56,56,,56,157,157,157,157,,,,,,,,157,,,,,,,,,,60,60,,,56,,', +',,56,56,,,56,,,,60,102,102,,,,60,,,,,,,,,,,,65,,,,65,,82,60,65,65,,', +',,,,,,,,,,34,,,65,,,,,,,,56,,65,,,56,56,56,56,56,,,,,65,65,,,,,,,,,', +',,65,,65,,,,,,,,,,,,,,34,,33,,,,,34,33,34,,,,,,34,,82,,,82,,82,,34,', +',,,,,,,,,,33,,,,,,,,,,,,,,,,,56,56,56,56,56,56,56,,,33,,56,56,56,,,', +'34,,,34,,,,,56,,,34,,,,,82,,,,,,,34,60,,,,,34,,,,,,,,,,,,,,,56,,,,,', +',56,,34,56,,33,60,,34,34,,,34,,33,,,,34,34,,65,56,,34,34,56,,65,,,56', +',,,82,65,,,,,,,60,82,82,,,,,,,,,,34,,56,,,,,,,,,34,,56,56,56,,,,,,,82', +',,82,,,,,,,,,,,65,,,65,,,,,,82,33,,33,,82,33,,82,,,,33,,,,60,,,,,,,34', +'82,,33,,,34,60,,,,34,34,,,,,,34,,,65,82,27,,,,,,27,,65,,60,,,34,,,,', +',,,,,,,,,,,,,,,82,27,,34,,,,56,,,,,33,,,,33,,65,,,33,34,,,,,27,,65,34', +'34,,,,,,27,,,,,,,,,,33,,,,,,,,34,,34,,33,33,56,,,,,,,34,34,56,,,,,,', +',,,,,,,,56,65,,,,,27,,,,,,65,65,,27,,34,,65,,,34,34,,,34,,,,,,82,,,', +',,,,,,,,,,56,,,56,,,,34,,,,56,,,65,,,,,,,,,56,,,,,,56,,34,,65,82,,34', +',,,,65,65,,,,,,,,,,,56,,,27,34,27,56,56,27,34,56,34,,,27,65,56,56,,', +',,56,56,,,65,34,27,,,,,,,,,,,,,,,,,,33,,,,,,,,,,,,,,65,,,,,65,65,,,65', +',,,,,,,,,,,,,,,,,,,,,,,27,,,65,27,,,,,27,,,,,,,,,,,,,,33,,,33,65,56', +',,,65,,56,27,,,,56,56,,,,,,56,27,27,,,,,65,,,,,65,,65,66,,,56,,,66,', +',,,,,,,33,,,,,,33,,,,33,56,,,,,33,33,,66,66,66,33,33,,,,,,,56,,,,,,', +',56,56,,,,,,66,,,,,,,,,,66,,,66,,,,,56,,56,,,,,,,,,,,56,56,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,66,,,,,,56,56,,66,,,33,,,,,,,,,,,33,33,,,,,,33', +',,27,,,,56,,,,,,,,,,,33,,,,,,,,,,,,,,,,,,56,,,,,33,,,,,,,,38,,,,,,38', +',56,,,33,,56,,56,,66,,33,33,,,,27,,,27,,,,56,,,38,38,38,,,,,,66,,,,33', +',,,,,,,,,,33,,,38,,,,,,,,,,38,,,,,,,27,,,,,,27,,,,27,,,,,,27,27,,33', +'33,,27,27,,,,,,,66,,,,66,,,,66,66,,,,,,,,38,,,33,,,,,66,38,,,,,,,,,66', +',,,,,,,,,,,66,66,33,,,,,,,,,,,66,,66,,,,,,,,33,,,,,33,,33,,,,,,,,,,', +',,,27,,,,,,,,,,,27,27,,,,,,27,,,,38,,38,,,38,,,,,,38,,,27,,,,,,,,,,', +'38,,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,27,,,,,,,,27,27,,,,,,,,,,,,,,,,,', +',,,,,,,38,27,,,38,,,,38,38,,,27,,,66,,,,,,,66,,,38,,,,,66,,,,,38,,,', +',,,,,,,,38,38,,,27,27,,,27,,,,,38,,38,,,,,,,,,,,,,,,,,,,,27,,,66,,,66', +',,,,,,,,,,,,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,,,27,,,,,27,66,27,,,,,,,', +',66,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,,,66,,,,,,', +',,,,,,,,,38,,,,,,,38,,,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,', +',66,66,,,,,,66,,,,,,,,,,,38,,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,', +',,,,,,,,,,,,66,,,,38,,,,66,66,38,,,,38,,,,,,38,38,,,,,38,38,,,40,,,', +',66,,,,40,40,40,,,,,66,,,,,,40,40,,40,,38,,,,,,,,,,,38,,,,,,,,,,,,66', +',,,,66,66,,,66,,,,,,,,,,,,,,,,,,,,,,,,,,,66,,,,,,,,,38,,,,,,,,,,,38', +'38,,,66,,38,38,,66,,,,,,,,,,,,,,,,38,,,,,66,,,,,66,,66,,,,,,,,,,,38', +',,,,,,,,,,,,,,,,,,38,,,,,,,,38,38,,,,,,,,,,,,,,,,,,40,40,,,40,40,,,38', +',40,,,,,,,,,38,,,,40,,,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40', +'40,40,40,40,40,40,40,,,,,40,38,,,,,38,38,40,,38,,,,,40,,,40,,,,,,,40', +',40,,,40,40,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,38,,,,,38,,,40,,40,,,,40', +'40,,,,,,,,,,,38,,,,,38,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40', +',40,40,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,40,,40,,,,,,,,', +',,,,,,40,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,', +',,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40', +'40,40,,,,40,,,40,40,40,40,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,40,,,40,', +',,,,,,,,,,,,,40,,,,,40,,,,,40,,,40,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,', +',,,,,40,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,40,,,,,,,,,,,,', +'40,40,40,40,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40' ] + racc_goto_check = arr = ::Array.new(3977, nil) + idx = 0 + clist.each do |str| + str.split(',', -1).each do |i| + arr[idx] = i.to_i unless i.empty? + idx += 1 + end + end + +racc_goto_pointer = [ + nil, 225, 9, 207, nil, 58, -2, 119, 52, 152, + 63, 186, -323, -227, -17, -525, -536, -640, -677, nil, + -365, 9, 152, -58, -174, 90, 37, 1705, -181, -62, + -13, 22, -117, 1440, 910, -224, -346, -11, 2279, -20, + 2935, -42, -448, nil, -529, -27, nil, nil, 204, -168, + 15, -230, -401, 15, -289, nil, 1271, 75, 70, 43, + 814, nil, -19, 46, -268, 1052, 2076, -504, -217, -72, + 14, nil, nil, 53, 56, -218, 144, 43, nil, 33, + 159, nil, 938, -142, 0, -425, 58, -18, -296, -276, + -396, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 140, nil, 289, -134, -51, nil, 152, nil, -317, -717, + nil, -666, nil, nil, nil, -361, nil, 156, nil, -393, + 31, nil, nil, -590, 158, -150, 175, 185, -94, 192, + 193, 185, -522, -106, -504, -689, 211, -335, -247, -758, + -475, -753, nil, nil, nil, nil, nil, nil, -736, -369, + -470, -742, -673, nil, -331, -439, -206, 224, -668, 160, + -707, -420, -563, nil, -648, -780, -812, -793, -187, -567, + 103, -397, -317, -10, -192, nil, nil, -115, -115, nil, + -519, nil, -330, -844, -433, -544, -675, nil, nil, 89, + 8, 42, 84, 85, -300, -265, -215, 87, 87, 87, + -601, -442, -442, 90, -588, -274, nil, nil, -240, -543, + -282, -663, 7, -537, -777, nil, -630, -864, nil, nil, + -185, -466 ] + +racc_goto_default = [ + nil, nil, nil, nil, 5, nil, 310, 7, 363, 313, + nil, nil, nil, nil, 555, nil, nil, nil, nil, 309, + 311, nil, nil, nil, 14, 15, 21, 243, nil, nil, + 17, nil, 437, 244, 341, nil, nil, 779, 242, 473, + 24, nil, nil, 358, nil, 25, 26, 27, nil, 715, + nil, nil, nil, 330, nil, 28, 327, 452, 35, nil, + nil, 37, 40, 39, nil, 239, 240, 619, nil, 144, + 460, 143, 146, 90, 91, nil, 442, 105, 47, 50, + 275, 548, 301, nil, 453, nil, 454, 465, 674, 518, + 299, 283, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 61, nil, nil, 284, 65, nil, 67, nil, nil, + 68, 884, 69, 70, 71, nil, 72, nil, 73, nil, + 601, 74, 75, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 288, 277, 723, 852, 610, 885, 750, 583, + nil, 751, 1028, 922, 571, nil, 572, nil, nil, 573, + nil, 575, nil, 830, nil, nil, nil, 581, nil, nil, + nil, nil, nil, nil, nil, 464, 286, nil, nil, 693, + nil, 505, nil, nil, nil, nil, nil, 89, 92, 94, + nil, nil, nil, nil, nil, 631, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 867, 788, 570, nil, 574, + 875, 586, 588, 589, 933, 592, 593, 934, 596, 599, + nil, 304 ] + +racc_reduce_table = [ + 0, 0, :racc_error, + 0, 149, :_reduce_1, + 2, 147, :_reduce_2, + 2, 148, :_reduce_3, + 1, 150, :_reduce_none, + 1, 150, :_reduce_none, + 3, 150, :_reduce_6, + 2, 150, :_reduce_none, + 1, 153, :_reduce_none, + 0, 157, :_reduce_9, + 3, 153, :_reduce_10, + 0, 159, :_reduce_11, + 4, 156, :_reduce_12, + 0, 164, :_reduce_13, + 6, 158, :_reduce_14, + 3, 158, :_reduce_15, + 2, 160, :_reduce_16, + 1, 165, :_reduce_none, + 1, 165, :_reduce_none, + 3, 165, :_reduce_19, + 2, 165, :_reduce_20, + 1, 166, :_reduce_none, + 1, 166, :_reduce_22, + 0, 177, :_reduce_23, + 4, 155, :_reduce_24, + 3, 155, :_reduce_25, + 3, 155, :_reduce_26, + 3, 155, :_reduce_27, + 2, 155, :_reduce_28, + 3, 155, :_reduce_29, + 3, 155, :_reduce_30, + 3, 155, :_reduce_31, + 3, 155, :_reduce_32, + 3, 155, :_reduce_33, + 4, 155, :_reduce_34, + 1, 155, :_reduce_none, + 3, 155, :_reduce_36, + 3, 155, :_reduce_37, + 3, 155, :_reduce_38, + 1, 155, :_reduce_none, + 3, 170, :_reduce_40, + 3, 170, :_reduce_41, + 6, 170, :_reduce_42, + 5, 170, :_reduce_43, + 5, 170, :_reduce_44, + 5, 170, :_reduce_45, + 5, 170, :_reduce_46, + 3, 170, :_reduce_47, + 1, 178, :_reduce_48, + 3, 178, :_reduce_49, + 1, 178, :_reduce_none, + 1, 176, :_reduce_none, + 3, 176, :_reduce_52, + 3, 176, :_reduce_53, + 3, 176, :_reduce_54, + 2, 176, :_reduce_55, + 1, 176, :_reduce_none, + 1, 169, :_reduce_57, + 0, 189, :_reduce_58, + 0, 190, :_reduce_59, + 4, 187, :_reduce_60, + 1, 172, :_reduce_none, + 1, 172, :_reduce_none, + 1, 192, :_reduce_none, + 4, 192, :_reduce_64, + 0, 200, :_reduce_65, + 4, 197, :_reduce_66, + 1, 199, :_reduce_67, + 2, 191, :_reduce_68, + 3, 191, :_reduce_69, + 4, 191, :_reduce_70, + 5, 191, :_reduce_71, + 4, 191, :_reduce_72, + 5, 191, :_reduce_73, + 2, 191, :_reduce_74, + 2, 191, :_reduce_75, + 2, 191, :_reduce_76, + 2, 191, :_reduce_77, + 2, 191, :_reduce_78, + 1, 171, :_reduce_none, + 3, 171, :_reduce_80, + 1, 205, :_reduce_none, + 3, 205, :_reduce_82, + 1, 204, :_reduce_83, + 2, 204, :_reduce_84, + 3, 204, :_reduce_85, + 5, 204, :_reduce_86, + 2, 204, :_reduce_87, + 4, 204, :_reduce_88, + 2, 204, :_reduce_89, + 4, 204, :_reduce_90, + 1, 204, :_reduce_91, + 3, 204, :_reduce_92, + 1, 208, :_reduce_none, + 3, 208, :_reduce_94, + 2, 207, :_reduce_95, + 3, 207, :_reduce_96, + 1, 210, :_reduce_97, + 3, 210, :_reduce_98, + 1, 209, :_reduce_99, + 1, 209, :_reduce_100, + 4, 209, :_reduce_101, + 3, 209, :_reduce_102, + 3, 209, :_reduce_103, + 3, 209, :_reduce_104, + 3, 209, :_reduce_105, + 2, 209, :_reduce_106, + 1, 209, :_reduce_107, + 1, 173, :_reduce_108, + 1, 173, :_reduce_109, + 4, 173, :_reduce_110, + 3, 173, :_reduce_111, + 3, 173, :_reduce_112, + 3, 173, :_reduce_113, + 3, 173, :_reduce_114, + 2, 173, :_reduce_115, + 1, 173, :_reduce_116, + 1, 213, :_reduce_117, + 1, 213, :_reduce_none, + 2, 214, :_reduce_119, + 1, 214, :_reduce_120, + 3, 214, :_reduce_121, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_none, + 1, 215, :_reduce_125, + 1, 215, :_reduce_126, + 1, 218, :_reduce_none, + 1, 218, :_reduce_none, + 1, 167, :_reduce_129, + 1, 167, :_reduce_none, + 1, 168, :_reduce_131, + 0, 221, :_reduce_132, + 4, 168, :_reduce_133, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 216, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 1, 217, :_reduce_none, + 3, 186, :_reduce_206, + 3, 186, :_reduce_207, + 6, 186, :_reduce_208, + 5, 186, :_reduce_209, + 5, 186, :_reduce_210, + 5, 186, :_reduce_211, + 5, 186, :_reduce_212, + 0, 227, :_reduce_213, + 5, 186, :_reduce_214, + 3, 186, :_reduce_215, + 3, 186, :_reduce_216, + 3, 186, :_reduce_217, + 2, 186, :_reduce_218, + 2, 186, :_reduce_219, + 3, 186, :_reduce_220, + 3, 186, :_reduce_221, + 3, 186, :_reduce_222, + 3, 186, :_reduce_223, + 3, 186, :_reduce_224, + 3, 186, :_reduce_225, + 4, 186, :_reduce_226, + 2, 186, :_reduce_227, + 2, 186, :_reduce_228, + 3, 186, :_reduce_229, + 3, 186, :_reduce_230, + 3, 186, :_reduce_231, + 3, 186, :_reduce_232, + 1, 186, :_reduce_none, + 3, 186, :_reduce_234, + 3, 186, :_reduce_235, + 3, 186, :_reduce_236, + 3, 186, :_reduce_237, + 3, 186, :_reduce_238, + 2, 186, :_reduce_239, + 2, 186, :_reduce_240, + 3, 186, :_reduce_241, + 3, 186, :_reduce_242, + 3, 186, :_reduce_243, + 3, 186, :_reduce_244, + 3, 186, :_reduce_245, + 6, 186, :_reduce_246, + 1, 186, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 1, 226, :_reduce_none, + 3, 224, :_reduce_252, + 3, 224, :_reduce_253, + 1, 228, :_reduce_254, + 1, 229, :_reduce_none, + 2, 229, :_reduce_256, + 4, 229, :_reduce_257, + 2, 229, :_reduce_258, + 1, 222, :_reduce_none, + 3, 222, :_reduce_260, + 3, 233, :_reduce_261, + 1, 234, :_reduce_none, + 1, 234, :_reduce_none, + 1, 181, :_reduce_none, + 1, 181, :_reduce_none, + 2, 181, :_reduce_266, + 4, 181, :_reduce_267, + 2, 181, :_reduce_268, + 1, 203, :_reduce_269, + 2, 203, :_reduce_270, + 2, 203, :_reduce_271, + 4, 203, :_reduce_272, + 1, 203, :_reduce_273, + 0, 237, :_reduce_274, + 2, 196, :_reduce_275, + 2, 236, :_reduce_276, + 2, 235, :_reduce_277, + 1, 235, :_reduce_none, + 1, 230, :_reduce_279, + 2, 230, :_reduce_280, + 3, 230, :_reduce_281, + 4, 230, :_reduce_282, + 1, 175, :_reduce_283, + 1, 175, :_reduce_284, + 3, 174, :_reduce_285, + 4, 174, :_reduce_286, + 2, 174, :_reduce_287, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_none, + 1, 225, :_reduce_298, + 0, 272, :_reduce_299, + 4, 225, :_reduce_300, + 0, 273, :_reduce_301, + 3, 225, :_reduce_302, + 0, 274, :_reduce_303, + 4, 225, :_reduce_304, + 3, 225, :_reduce_305, + 3, 225, :_reduce_306, + 2, 225, :_reduce_307, + 0, 275, :_reduce_308, + 4, 225, :_reduce_309, + 0, 276, :_reduce_310, + 4, 225, :_reduce_311, + 1, 225, :_reduce_312, + 4, 225, :_reduce_313, + 3, 225, :_reduce_314, + 1, 225, :_reduce_315, + 5, 225, :_reduce_316, + 4, 225, :_reduce_317, + 3, 225, :_reduce_318, + 2, 225, :_reduce_319, + 1, 225, :_reduce_none, + 2, 225, :_reduce_321, + 2, 225, :_reduce_322, + 6, 225, :_reduce_323, + 6, 225, :_reduce_324, + 4, 225, :_reduce_325, + 4, 225, :_reduce_326, + 5, 225, :_reduce_327, + 4, 225, :_reduce_328, + 6, 225, :_reduce_329, + 0, 277, :_reduce_330, + 0, 278, :_reduce_331, + 7, 225, :_reduce_332, + 0, 279, :_reduce_333, + 0, 280, :_reduce_334, + 0, 281, :_reduce_335, + 9, 225, :_reduce_336, + 0, 282, :_reduce_337, + 0, 283, :_reduce_338, + 6, 225, :_reduce_339, + 0, 284, :_reduce_340, + 0, 285, :_reduce_341, + 7, 225, :_reduce_342, + 0, 286, :_reduce_343, + 0, 287, :_reduce_344, + 9, 225, :_reduce_345, + 1, 225, :_reduce_346, + 1, 225, :_reduce_347, + 1, 225, :_reduce_348, + 1, 225, :_reduce_349, + 1, 180, :_reduce_350, + 1, 247, :_reduce_none, + 1, 253, :_reduce_none, + 1, 256, :_reduce_none, + 1, 258, :_reduce_none, + 1, 259, :_reduce_none, + 1, 260, :_reduce_none, + 1, 262, :_reduce_none, + 1, 264, :_reduce_none, + 1, 267, :_reduce_none, + 1, 268, :_reduce_none, + 1, 288, :_reduce_none, + 1, 289, :_reduce_none, + 1, 290, :_reduce_none, + 1, 291, :_reduce_none, + 1, 292, :_reduce_none, + 1, 162, :_reduce_none, + 1, 293, :_reduce_none, + 1, 248, :_reduce_none, + 1, 202, :_reduce_none, + 1, 254, :_reduce_none, + 1, 254, :_reduce_none, + 2, 254, :_reduce_none, + 1, 188, :_reduce_none, + 1, 188, :_reduce_none, + 1, 255, :_reduce_none, + 5, 255, :_reduce_376, + 1, 257, :_reduce_none, + 2, 257, :_reduce_378, + 1, 263, :_reduce_none, + 1, 263, :_reduce_380, + 1, 294, :_reduce_none, + 3, 294, :_reduce_382, + 1, 297, :_reduce_383, + 3, 297, :_reduce_384, + 1, 296, :_reduce_385, + 4, 296, :_reduce_386, + 6, 296, :_reduce_387, + 3, 296, :_reduce_388, + 5, 296, :_reduce_389, + 2, 296, :_reduce_390, + 4, 296, :_reduce_391, + 1, 296, :_reduce_392, + 3, 296, :_reduce_393, + 4, 298, :_reduce_394, + 2, 298, :_reduce_395, + 2, 298, :_reduce_396, + 1, 298, :_reduce_397, + 2, 303, :_reduce_398, + 1, 303, :_reduce_none, + 6, 304, :_reduce_400, + 8, 304, :_reduce_401, + 4, 304, :_reduce_402, + 6, 304, :_reduce_403, + 4, 304, :_reduce_404, + 2, 304, :_reduce_405, + 6, 304, :_reduce_406, + 2, 304, :_reduce_407, + 4, 304, :_reduce_408, + 6, 304, :_reduce_409, + 2, 304, :_reduce_410, + 4, 304, :_reduce_411, + 2, 304, :_reduce_412, + 4, 304, :_reduce_413, + 1, 304, :_reduce_414, + 1, 308, :_reduce_415, + 1, 308, :_reduce_416, + 3, 309, :_reduce_417, + 1, 309, :_reduce_418, + 4, 309, :_reduce_419, + 1, 310, :_reduce_none, + 4, 310, :_reduce_421, + 1, 311, :_reduce_422, + 3, 311, :_reduce_423, + 1, 312, :_reduce_424, + 1, 312, :_reduce_none, + 0, 316, :_reduce_426, + 0, 317, :_reduce_427, + 4, 252, :_reduce_428, + 4, 314, :_reduce_429, + 1, 314, :_reduce_430, + 3, 315, :_reduce_431, + 3, 315, :_reduce_432, + 3, 319, :_reduce_433, + 2, 193, :_reduce_434, + 4, 193, :_reduce_435, + 5, 193, :_reduce_436, + 5, 193, :_reduce_437, + 0, 322, :_reduce_438, + 3, 251, :_reduce_439, + 4, 251, :_reduce_440, + 4, 251, :_reduce_441, + 3, 251, :_reduce_442, + 3, 251, :_reduce_443, + 3, 251, :_reduce_444, + 2, 251, :_reduce_445, + 1, 251, :_reduce_446, + 4, 251, :_reduce_447, + 0, 323, :_reduce_448, + 4, 250, :_reduce_449, + 0, 324, :_reduce_450, + 4, 250, :_reduce_451, + 0, 325, :_reduce_452, + 0, 326, :_reduce_453, + 4, 198, :_reduce_454, + 0, 327, :_reduce_455, + 0, 328, :_reduce_456, + 4, 320, :_reduce_457, + 0, 330, :_reduce_458, + 6, 261, :_reduce_459, + 1, 329, :_reduce_none, + 1, 329, :_reduce_none, + 6, 161, :_reduce_462, + 0, 161, :_reduce_463, + 1, 331, :_reduce_464, + 1, 331, :_reduce_none, + 1, 331, :_reduce_none, + 2, 332, :_reduce_467, + 1, 332, :_reduce_none, + 2, 163, :_reduce_469, + 1, 163, :_reduce_none, + 1, 238, :_reduce_471, + 1, 238, :_reduce_472, + 1, 238, :_reduce_none, + 1, 239, :_reduce_474, + 1, 334, :_reduce_475, + 1, 334, :_reduce_none, + 2, 334, :_reduce_477, + 3, 335, :_reduce_478, + 1, 335, :_reduce_479, + 3, 240, :_reduce_480, + 3, 241, :_reduce_481, + 3, 242, :_reduce_482, + 3, 242, :_reduce_483, + 1, 339, :_reduce_484, + 3, 339, :_reduce_485, + 1, 340, :_reduce_none, + 2, 340, :_reduce_487, + 3, 244, :_reduce_488, + 0, 343, :_reduce_489, + 4, 244, :_reduce_490, + 1, 342, :_reduce_491, + 3, 342, :_reduce_492, + 3, 243, :_reduce_493, + 3, 243, :_reduce_494, + 3, 245, :_reduce_495, + 3, 245, :_reduce_496, + 1, 344, :_reduce_497, + 3, 344, :_reduce_498, + 1, 345, :_reduce_499, + 3, 345, :_reduce_500, + 1, 336, :_reduce_501, + 2, 336, :_reduce_502, + 1, 337, :_reduce_503, + 2, 337, :_reduce_504, + 1, 338, :_reduce_505, + 2, 338, :_reduce_506, + 1, 341, :_reduce_507, + 0, 347, :_reduce_508, + 3, 341, :_reduce_509, + 0, 348, :_reduce_510, + 4, 341, :_reduce_511, + 1, 346, :_reduce_512, + 1, 346, :_reduce_513, + 1, 346, :_reduce_514, + 1, 346, :_reduce_none, + 2, 219, :_reduce_516, + 1, 219, :_reduce_517, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 1, 349, :_reduce_none, + 3, 220, :_reduce_522, + 1, 333, :_reduce_none, + 2, 333, :_reduce_524, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 223, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 211, :_reduce_none, + 1, 212, :_reduce_534, + 1, 212, :_reduce_535, + 1, 212, :_reduce_536, + 1, 212, :_reduce_537, + 1, 212, :_reduce_538, + 1, 212, :_reduce_539, + 1, 212, :_reduce_540, + 1, 246, :_reduce_541, + 1, 246, :_reduce_542, + 1, 179, :_reduce_543, + 1, 179, :_reduce_544, + 1, 184, :_reduce_545, + 1, 184, :_reduce_546, + 0, 350, :_reduce_547, + 4, 265, :_reduce_548, + 1, 265, :_reduce_549, + 3, 269, :_reduce_550, + 0, 352, :_reduce_551, + 3, 269, :_reduce_552, + 4, 351, :_reduce_553, + 2, 351, :_reduce_554, + 2, 351, :_reduce_555, + 1, 351, :_reduce_none, + 2, 354, :_reduce_557, + 0, 354, :_reduce_558, + 6, 318, :_reduce_559, + 8, 318, :_reduce_560, + 4, 318, :_reduce_561, + 6, 318, :_reduce_562, + 4, 318, :_reduce_563, + 6, 318, :_reduce_564, + 2, 318, :_reduce_565, + 4, 318, :_reduce_566, + 6, 318, :_reduce_567, + 2, 318, :_reduce_568, + 4, 318, :_reduce_569, + 2, 318, :_reduce_570, + 4, 318, :_reduce_571, + 1, 318, :_reduce_572, + 0, 318, :_reduce_573, + 1, 313, :_reduce_574, + 1, 313, :_reduce_575, + 1, 313, :_reduce_576, + 1, 313, :_reduce_577, + 1, 295, :_reduce_none, + 1, 295, :_reduce_579, + 1, 356, :_reduce_none, + 1, 357, :_reduce_none, + 3, 357, :_reduce_582, + 1, 305, :_reduce_583, + 3, 305, :_reduce_584, + 1, 358, :_reduce_none, + 2, 359, :_reduce_586, + 1, 359, :_reduce_587, + 2, 360, :_reduce_588, + 1, 360, :_reduce_589, + 1, 299, :_reduce_none, + 3, 299, :_reduce_591, + 1, 353, :_reduce_none, + 3, 353, :_reduce_593, + 1, 361, :_reduce_none, + 1, 361, :_reduce_none, + 2, 300, :_reduce_596, + 1, 300, :_reduce_597, + 3, 362, :_reduce_598, + 3, 363, :_reduce_599, + 1, 306, :_reduce_600, + 3, 306, :_reduce_601, + 1, 355, :_reduce_602, + 3, 355, :_reduce_603, + 1, 364, :_reduce_none, + 1, 364, :_reduce_none, + 2, 307, :_reduce_606, + 1, 307, :_reduce_607, + 1, 365, :_reduce_none, + 1, 365, :_reduce_none, + 2, 302, :_reduce_610, + 2, 301, :_reduce_611, + 0, 301, :_reduce_612, + 1, 270, :_reduce_none, + 0, 366, :_reduce_614, + 4, 270, :_reduce_615, + 1, 249, :_reduce_616, + 2, 249, :_reduce_none, + 1, 232, :_reduce_none, + 3, 232, :_reduce_619, + 3, 367, :_reduce_620, + 2, 367, :_reduce_621, + 4, 367, :_reduce_622, + 2, 367, :_reduce_623, + 1, 201, :_reduce_none, + 1, 201, :_reduce_none, + 1, 201, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 195, :_reduce_none, + 1, 321, :_reduce_none, + 1, 321, :_reduce_none, + 1, 321, :_reduce_none, + 1, 271, :_reduce_none, + 1, 271, :_reduce_none, + 1, 183, :_reduce_none, + 1, 183, :_reduce_none, + 1, 194, :_reduce_none, + 1, 194, :_reduce_none, + 0, 151, :_reduce_none, + 1, 151, :_reduce_none, + 0, 185, :_reduce_none, + 1, 185, :_reduce_none, + 2, 206, :_reduce_none, + 2, 182, :_reduce_none, + 0, 231, :_reduce_none, + 1, 231, :_reduce_none, + 1, 231, :_reduce_none, + 1, 266, :_reduce_649, + 1, 266, :_reduce_none, + 1, 154, :_reduce_none, + 2, 154, :_reduce_652, + 0, 152, :_reduce_653 ] + +racc_reduce_n = 654 + +racc_shift_n = 1097 + +racc_token_table = { + false => 0, + :error => 1, + :kCLASS => 2, + :kMODULE => 3, + :kDEF => 4, + :kUNDEF => 5, + :kBEGIN => 6, + :kRESCUE => 7, + :kENSURE => 8, + :kEND => 9, + :kIF => 10, + :kUNLESS => 11, + :kTHEN => 12, + :kELSIF => 13, + :kELSE => 14, + :kCASE => 15, + :kWHEN => 16, + :kWHILE => 17, + :kUNTIL => 18, + :kFOR => 19, + :kBREAK => 20, + :kNEXT => 21, + :kREDO => 22, + :kRETRY => 23, + :kIN => 24, + :kDO => 25, + :kDO_COND => 26, + :kDO_BLOCK => 27, + :kDO_LAMBDA => 28, + :kRETURN => 29, + :kYIELD => 30, + :kSUPER => 31, + :kSELF => 32, + :kNIL => 33, + :kTRUE => 34, + :kFALSE => 35, + :kAND => 36, + :kOR => 37, + :kNOT => 38, + :kIF_MOD => 39, + :kUNLESS_MOD => 40, + :kWHILE_MOD => 41, + :kUNTIL_MOD => 42, + :kRESCUE_MOD => 43, + :kALIAS => 44, + :kDEFINED => 45, + :klBEGIN => 46, + :klEND => 47, + :k__LINE__ => 48, + :k__FILE__ => 49, + :k__ENCODING__ => 50, + :tIDENTIFIER => 51, + :tFID => 52, + :tGVAR => 53, + :tIVAR => 54, + :tCONSTANT => 55, + :tLABEL => 56, + :tCVAR => 57, + :tNTH_REF => 58, + :tBACK_REF => 59, + :tSTRING_CONTENT => 60, + :tINTEGER => 61, + :tFLOAT => 62, + :tREGEXP_END => 63, + :tUPLUS => 64, + :tUMINUS => 65, + :tUMINUS_NUM => 66, + :tPOW => 67, + :tCMP => 68, + :tEQ => 69, + :tEQQ => 70, + :tNEQ => 71, + :tGEQ => 72, + :tLEQ => 73, + :tANDOP => 74, + :tOROP => 75, + :tMATCH => 76, + :tNMATCH => 77, + :tDOT => 78, + :tDOT2 => 79, + :tDOT3 => 80, + :tAREF => 81, + :tASET => 82, + :tLSHFT => 83, + :tRSHFT => 84, + :tCOLON2 => 85, + :tCOLON3 => 86, + :tOP_ASGN => 87, + :tASSOC => 88, + :tLPAREN => 89, + :tLPAREN2 => 90, + :tRPAREN => 91, + :tLPAREN_ARG => 92, + :tLBRACK => 93, + :tLBRACK2 => 94, + :tRBRACK => 95, + :tLBRACE => 96, + :tLBRACE_ARG => 97, + :tSTAR => 98, + :tSTAR2 => 99, + :tAMPER => 100, + :tAMPER2 => 101, + :tTILDE => 102, + :tPERCENT => 103, + :tDIVIDE => 104, + :tPLUS => 105, + :tMINUS => 106, + :tLT => 107, + :tGT => 108, + :tPIPE => 109, + :tBANG => 110, + :tCARET => 111, + :tLCURLY => 112, + :tRCURLY => 113, + :tBACK_REF2 => 114, + :tSYMBEG => 115, + :tSTRING_BEG => 116, + :tXSTRING_BEG => 117, + :tREGEXP_BEG => 118, + :tWORDS_BEG => 119, + :tQWORDS_BEG => 120, + :tSTRING_DBEG => 121, + :tSTRING_DVAR => 122, + :tSTRING_END => 123, + :tSTRING => 124, + :tSYMBOL => 125, + :tNL => 126, + :tEH => 127, + :tCOLON => 128, + :tCOMMA => 129, + :tSPACE => 130, + :tSEMI => 131, + :tLAMBDA => 132, + :tLAMBEG => 133, + :tDSTAR => 134, + :tCHAR => 135, + :tSYMBOLS_BEG => 136, + :tQSYMBOLS_BEG => 137, + :tSTRING_DEND => 138, + :tUBANG => 139, + :tRATIONAL => 140, + :tIMAGINARY => 141, + :tLABEL_END => 142, + :tLONELY => 143, + :tLOWEST => 144, + :tEQL => 145 } + +racc_nt_base = 146 + +racc_use_result_var = true + +Racc_arg = [ + racc_action_table, + racc_action_check, + racc_action_default, + racc_action_pointer, + racc_goto_table, + racc_goto_check, + racc_goto_default, + racc_goto_pointer, + racc_nt_base, + racc_reduce_table, + racc_token_table, + racc_shift_n, + racc_reduce_n, + racc_use_result_var ] + +Racc_token_to_s_table = [ + "$end", + "error", + "kCLASS", + "kMODULE", + "kDEF", + "kUNDEF", + "kBEGIN", + "kRESCUE", + "kENSURE", + "kEND", + "kIF", + "kUNLESS", + "kTHEN", + "kELSIF", + "kELSE", + "kCASE", + "kWHEN", + "kWHILE", + "kUNTIL", + "kFOR", + "kBREAK", + "kNEXT", + "kREDO", + "kRETRY", + "kIN", + "kDO", + "kDO_COND", + "kDO_BLOCK", + "kDO_LAMBDA", + "kRETURN", + "kYIELD", + "kSUPER", + "kSELF", + "kNIL", + "kTRUE", + "kFALSE", + "kAND", + "kOR", + "kNOT", + "kIF_MOD", + "kUNLESS_MOD", + "kWHILE_MOD", + "kUNTIL_MOD", + "kRESCUE_MOD", + "kALIAS", + "kDEFINED", + "klBEGIN", + "klEND", + "k__LINE__", + "k__FILE__", + "k__ENCODING__", + "tIDENTIFIER", + "tFID", + "tGVAR", + "tIVAR", + "tCONSTANT", + "tLABEL", + "tCVAR", + "tNTH_REF", + "tBACK_REF", + "tSTRING_CONTENT", + "tINTEGER", + "tFLOAT", + "tREGEXP_END", + "tUPLUS", + "tUMINUS", + "tUMINUS_NUM", + "tPOW", + "tCMP", + "tEQ", + "tEQQ", + "tNEQ", + "tGEQ", + "tLEQ", + "tANDOP", + "tOROP", + "tMATCH", + "tNMATCH", + "tDOT", + "tDOT2", + "tDOT3", + "tAREF", + "tASET", + "tLSHFT", + "tRSHFT", + "tCOLON2", + "tCOLON3", + "tOP_ASGN", + "tASSOC", + "tLPAREN", + "tLPAREN2", + "tRPAREN", + "tLPAREN_ARG", + "tLBRACK", + "tLBRACK2", + "tRBRACK", + "tLBRACE", + "tLBRACE_ARG", + "tSTAR", + "tSTAR2", + "tAMPER", + "tAMPER2", + "tTILDE", + "tPERCENT", + "tDIVIDE", + "tPLUS", + "tMINUS", + "tLT", + "tGT", + "tPIPE", + "tBANG", + "tCARET", + "tLCURLY", + "tRCURLY", + "tBACK_REF2", + "tSYMBEG", + "tSTRING_BEG", + "tXSTRING_BEG", + "tREGEXP_BEG", + "tWORDS_BEG", + "tQWORDS_BEG", + "tSTRING_DBEG", + "tSTRING_DVAR", + "tSTRING_END", + "tSTRING", + "tSYMBOL", + "tNL", + "tEH", + "tCOLON", + "tCOMMA", + "tSPACE", + "tSEMI", + "tLAMBDA", + "tLAMBEG", + "tDSTAR", + "tCHAR", + "tSYMBOLS_BEG", + "tQSYMBOLS_BEG", + "tSTRING_DEND", + "tUBANG", + "tRATIONAL", + "tIMAGINARY", + "tLABEL_END", + "tLONELY", + "tLOWEST", + "tEQL", + "$start", + "program", + "top_compstmt", + "@1", + "top_stmts", + "opt_terms", + "none", + "top_stmt", + "terms", + "stmt", + "begin_block", + "@2", + "bodystmt", + "@3", + "compstmt", + "opt_rescue", + "k_else", + "opt_ensure", + "@4", + "stmts", + "stmt_or_begin", + "fitem", + "undef_list", + "expr_value", + "command_asgn", + "mlhs", + "command_call", + "lhs", + "mrhs", + "mrhs_arg", + "expr", + "@5", + "command_rhs", + "var_lhs", + "primary_value", + "opt_call_args", + "rbracket", + "call_op", + "backref", + "opt_nl", + "arg", + "expr_value_do", + "do", + "@6", + "@7", + "command", + "block_command", + "block_call", + "call_op2", + "operation2", + "command_args", + "cmd_brace_block", + "brace_body", + "fcall", + "@8", + "operation", + "k_return", + "call_args", + "mlhs_basic", + "mlhs_inner", + "rparen", + "mlhs_head", + "mlhs_item", + "mlhs_node", + "mlhs_post", + "user_variable", + "keyword_variable", + "cname", + "cpath", + "fname", + "op", + "reswords", + "fsym", + "symbol", + "dsym", + "@9", + "arg_rhs", + "simple_numeric", + "rel_expr", + "primary", + "relop", + "@10", + "arg_value", + "aref_args", + "args", + "trailer", + "assocs", + "paren_args", + "opt_paren_args", + "opt_block_arg", + "block_arg", + "@11", + "literal", + "strings", + "xstring", + "regexp", + "words", + "qwords", + "symbols", + "qsymbols", + "var_ref", + "k_begin", + "k_end", + "assoc_list", + "brace_block", + "method_call", + "lambda", + "k_if", + "then", + "if_tail", + "k_unless", + "opt_else", + "k_while", + "k_until", + "k_case", + "case_body", + "k_for", + "for_var", + "k_class", + "superclass", + "term", + "k_module", + "k_def", + "f_arglist", + "singleton", + "dot_or_colon", + "@12", + "@13", + "@14", + "@15", + "@16", + "@17", + "@18", + "@19", + "@20", + "@21", + "@22", + "@23", + "@24", + "@25", + "@26", + "@27", + "k_do", + "k_do_block", + "k_rescue", + "k_ensure", + "k_when", + "k_elsif", + "f_marg", + "f_norm_arg", + "f_margs", + "f_marg_list", + "block_args_tail", + "f_block_kwarg", + "f_kwrest", + "opt_f_block_arg", + "f_block_arg", + "opt_block_args_tail", + "block_param", + "f_arg", + "f_block_optarg", + "f_rest_arg", + "opt_block_param", + "block_param_def", + "opt_bv_decl", + "bv_decls", + "bvar", + "f_bad_arg", + "f_larglist", + "lambda_body", + "@28", + "@29", + "f_args", + "do_block", + "do_body", + "operation3", + "@30", + "@31", + "@32", + "@33", + "@34", + "@35", + "@36", + "cases", + "@37", + "exc_list", + "exc_var", + "numeric", + "string", + "string1", + "string_contents", + "xstring_contents", + "regexp_contents", + "word_list", + "word", + "string_content", + "symbol_list", + "@38", + "qword_list", + "qsym_list", + "string_dvar", + "@39", + "@40", + "sym", + "@41", + "args_tail", + "@42", + "f_kwarg", + "opt_args_tail", + "f_optarg", + "f_arg_asgn", + "f_arg_item", + "f_label", + "f_kw", + "f_block_kw", + "kwrest_mark", + "f_opt", + "f_block_opt", + "restarg_mark", + "blkarg_mark", + "@43", + "assoc" ] + +Racc_debug_parser = false + +##### State transition tables end ##### + +# reduce 0 omitted + +def _reduce_1(val, _values, result) + self.lexer.lex_state = EXPR_BEG + + result +end + +def _reduce_2(val, _values, result) + result = new_compstmt val + + result +end + +def _reduce_3(val, _values, result) + stmt, _ = val + result = stmt + + result +end + +# reduce 4 omitted + +# reduce 5 omitted + +def _reduce_6(val, _values, result) + result = self.block_append val[0], val[2] + + result +end + +# reduce 7 omitted + +# reduce 8 omitted + +def _reduce_9(val, _values, result) + if (self.in_def || self.in_single > 0) then + debug20 1 + yyerror "BEGIN in method" + end + self.env.extend + + result +end + +def _reduce_10(val, _values, result) + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + + result +end + +def _reduce_11(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_12(val, _values, result) + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt + + result +end + +def _reduce_13(val, _values, result) + res = _values[-2] + yyerror "else without rescue is useless" unless res + + result +end + +def _reduce_14(val, _values, result) + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + + result +end + +def _reduce_15(val, _values, result) + body, resc, ens = val + + result = new_body [body, resc, nil, ens] + + result +end + +def _reduce_16(val, _values, result) + result = new_compstmt val + + result +end + +# reduce 17 omitted + +# reduce 18 omitted + +def _reduce_19(val, _values, result) + result = self.block_append val[0], val[2] + + result +end + +def _reduce_20(val, _values, result) + result = val[1] + debug20 2, val, result + + result +end + +# reduce 21 omitted + +def _reduce_22(val, _values, result) + yyerror "BEGIN is permitted only at toplevel" + + result +end + +def _reduce_23(val, _values, result) + lexer.lex_state = EXPR_FNAME + + result +end + +def _reduce_24(val, _values, result) + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line + + result +end + +def _reduce_25(val, _values, result) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line + + result +end + +def _reduce_26(val, _values, result) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line + + result +end + +def _reduce_27(val, _values, result) + yyerror "can't make alias for the number variables" + + result +end + +def _reduce_28(val, _values, result) + result = val[1] + + result +end + +def _reduce_29(val, _values, result) + t, _, c = val + result = new_if c, t, nil + + result +end + +def _reduce_30(val, _values, result) + f, _, c = val + result = new_if c, nil, f + + result +end + +def _reduce_31(val, _values, result) + e, _, c = val + result = new_while e, c, true + + result +end + +def _reduce_32(val, _values, result) + e, _, c = val + result = new_until e, c, true + + result +end + +def _reduce_33(val, _values, result) + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody + + result +end + +def _reduce_34(val, _values, result) + (_, line), _, stmt, _ = val + + if (self.in_def || self.in_single > 0) then + debug20 3 + yyerror "END in method; use at_exit" + end + + result = new_iter s(:postexe).line(line), 0, stmt + + result +end + +# reduce 35 omitted + +def _reduce_36(val, _values, result) + result = new_masgn val[0], val[2], :wrap + + result +end + +def _reduce_37(val, _values, result) + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + + result +end + +def _reduce_38(val, _values, result) + result = new_masgn val[0], val[2] + + result +end + +# reduce 39 omitted + +def _reduce_40(val, _values, result) + result = new_assign val[0], val[2] + + result +end + +def _reduce_41(val, _values, result) + result = new_op_asgn val + + result +end + +def _reduce_42(val, _values, result) + result = new_op_asgn1 val + + result +end + +def _reduce_43(val, _values, result) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + + result +end + +def _reduce_44(val, _values, result) + result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + + result +end + +def _reduce_45(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + + result +end + +def _reduce_46(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + + result +end + +def _reduce_47(val, _values, result) + self.backref_assign_error val[0] + + result +end + +def _reduce_48(val, _values, result) + expr, = val + result = value_expr expr + + result +end + +def _reduce_49(val, _values, result) + expr, (_, line), resbody = val + + expr = value_expr expr + ary = s(:array).line line + result = new_rescue(expr, new_resbody(ary, resbody)) + + result +end + +# reduce 50 omitted + +# reduce 51 omitted + +def _reduce_52(val, _values, result) + lhs, _, rhs = val + result = logical_op :and, lhs, rhs + + result +end + +def _reduce_53(val, _values, result) + lhs, _, rhs = val + result = logical_op :or, lhs, rhs + + result +end + +def _reduce_54(val, _values, result) + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op + + result +end + +def _reduce_55(val, _values, result) + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y + + result +end + +# reduce 56 omitted + +def _reduce_57(val, _values, result) + result = value_expr(val[0]) + + result +end + +def _reduce_58(val, _values, result) + lexer.cond.push true + + result +end + +def _reduce_59(val, _values, result) + lexer.cond.pop + + result +end + +def _reduce_60(val, _values, result) + _, expr, _, _ = val + result = expr + + result +end + +# reduce 61 omitted + +# reduce 62 omitted + +# reduce 63 omitted + +def _reduce_64(val, _values, result) + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line + + result +end + +def _reduce_65(val, _values, result) + # self.env.extend(:dynamic) + result = self.lexer.lineno + + result +end + +def _reduce_66(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + # self.env.unextend + + result +end + +def _reduce_67(val, _values, result) + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno + + result +end + +def _reduce_68(val, _values, result) + call, args = val + result = call.concat args.sexp_body + + result +end + +def _reduce_69(val, _values, result) + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result + result.insert 1, operation + end + + result +end + +def _reduce_70(val, _values, result) + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop + + result +end + +def _reduce_71(val, _values, result) + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args, val[1] + + block_dup_check call, block + + block.insert 1, call + result = block + + result +end + +def _reduce_72(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3] + + result +end + +def _reduce_73(val, _values, result) + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args + + block_dup_check call, block + + block.insert 1, call + result = block + + result +end + +def _reduce_74(val, _values, result) + result = new_super val[1] + + result +end + +def _reduce_75(val, _values, result) + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield + + result +end + +def _reduce_76(val, _values, result) + line = val[0].last + result = s(:return, ret_args(val[1])).line(line) + + result +end + +def _reduce_77(val, _values, result) + (_, line), args = val + result = s(:break, ret_args(args)).line line + + result +end + +def _reduce_78(val, _values, result) + line = val[0].last + result = s(:next, ret_args(val[1])).line(line) + + result +end + +# reduce 79 omitted + +def _reduce_80(val, _values, result) + result = val[1] + + result +end + +# reduce 81 omitted + +def _reduce_82(val, _values, result) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l + + result +end + +def _reduce_83(val, _values, result) + head, = val + result = s(:masgn, head).line head.line + + result +end + +def _reduce_84(val, _values, result) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line + + result +end + +def _reduce_85(val, _values, result) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line + + result +end + +def _reduce_86(val, _values, result) + ary1, _, splat, _, ary2 = val + + result = list_append ary1, s(:splat, splat).line(splat.line) + result.concat ary2.sexp_body + result = s(:masgn, result).line result.line + + result +end + +def _reduce_87(val, _values, result) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l + + result +end + +def _reduce_88(val, _values, result) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + + result +end + +def _reduce_89(val, _values, result) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l + + result +end + +def _reduce_90(val, _values, result) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + + result +end + +def _reduce_91(val, _values, result) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l + + result +end + +def _reduce_92(val, _values, result) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l + + result +end + +# reduce 93 omitted + +def _reduce_94(val, _values, result) + result = val[1] + + result +end + +def _reduce_95(val, _values, result) + lhs, _ = val + result = s(:array, lhs).line lhs.line + + result +end + +def _reduce_96(val, _values, result) + result = val[0] << val[1].compact + + result +end + +def _reduce_97(val, _values, result) + item, = val + result = s(:array, item).line item.line + + result +end + +def _reduce_98(val, _values, result) + result = list_append val[0], val[2] + + result +end + +def _reduce_99(val, _values, result) + result = self.assignable val[0] + + result +end + +def _reduce_100(val, _values, result) + result = self.assignable val[0] + + result +end + +def _reduce_101(val, _values, result) + result = self.aryset val[0], val[2] + + result +end + +def _reduce_102(val, _values, result) + result = new_attrasgn val[0], val[2], val[1] + + result +end + +def _reduce_103(val, _values, result) + recv, _, id = val + result = new_attrasgn recv, id + + result +end + +def _reduce_104(val, _values, result) + result = new_attrasgn val[0], val[2], val[1] + + result +end + +def _reduce_105(val, _values, result) + if (self.in_def || self.in_single > 0) then + debug20 7 + yyerror "dynamic constant assignment" + end + + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l + + result +end + +def _reduce_106(val, _values, result) + if (self.in_def || self.in_single > 0) then + debug20 8 + yyerror "dynamic constant assignment" + end + + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l + + result +end + +def _reduce_107(val, _values, result) + self.backref_assign_error val[0] + + result +end + +def _reduce_108(val, _values, result) + line = lexer.lineno + result = self.assignable val[0] + result.line = line + + result +end + +def _reduce_109(val, _values, result) + line = lexer.lineno + result = self.assignable val[0] + result.line = line + debug20 9, val, result + + result +end + +def _reduce_110(val, _values, result) + lhs, _, args, _ = val + result = self.aryset lhs, args + + result +end + +def _reduce_111(val, _values, result) + lhs, op, id = val + result = new_attrasgn lhs, id, op + + result +end + +def _reduce_112(val, _values, result) + lhs, _, id = val + result = new_attrasgn lhs, id + + result +end + +def _reduce_113(val, _values, result) + result = new_attrasgn val[0], val[2], val[1] + + result +end + +def _reduce_114(val, _values, result) + expr, _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 10 + yyerror "dynamic constant assignment" + end + + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l + + result +end + +def _reduce_115(val, _values, result) + _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 11 + yyerror "dynamic constant assignment" + end + + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l + + result +end + +def _reduce_116(val, _values, result) + self.backref_assign_error val[0] + + result +end + +def _reduce_117(val, _values, result) + yyerror "class/module name must be CONSTANT" + + result +end + +# reduce 118 omitted + +def _reduce_119(val, _values, result) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno + + result +end + +def _reduce_120(val, _values, result) + result = val[0].to_sym + + result +end + +def _reduce_121(val, _values, result) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line + + result +end + +# reduce 122 omitted + +# reduce 123 omitted + +# reduce 124 omitted + +def _reduce_125(val, _values, result) + lexer.lex_state = EXPR_END + result = val[0] + + result +end + +def _reduce_126(val, _values, result) + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym + + result +end + +# reduce 127 omitted + +# reduce 128 omitted + +def _reduce_129(val, _values, result) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno + + result +end + +# reduce 130 omitted + +def _reduce_131(val, _values, result) + result = new_undef val[0] + + result +end + +def _reduce_132(val, _values, result) + lexer.lex_state = EXPR_FNAME + + result +end + +def _reduce_133(val, _values, result) + result = new_undef val[0], val[3] + + result +end + +# reduce 134 omitted + +# reduce 135 omitted + +# reduce 136 omitted + +# reduce 137 omitted + +# reduce 138 omitted + +# reduce 139 omitted + +# reduce 140 omitted + +# reduce 141 omitted + +# reduce 142 omitted + +# reduce 143 omitted + +# reduce 144 omitted + +# reduce 145 omitted + +# reduce 146 omitted + +# reduce 147 omitted + +# reduce 148 omitted + +# reduce 149 omitted + +# reduce 150 omitted + +# reduce 151 omitted + +# reduce 152 omitted + +# reduce 153 omitted + +# reduce 154 omitted + +# reduce 155 omitted + +# reduce 156 omitted + +# reduce 157 omitted + +# reduce 158 omitted + +# reduce 159 omitted + +# reduce 160 omitted + +# reduce 161 omitted + +# reduce 162 omitted + +# reduce 163 omitted + +# reduce 164 omitted + +# reduce 165 omitted + +# reduce 166 omitted + +# reduce 167 omitted + +# reduce 168 omitted + +# reduce 169 omitted + +# reduce 170 omitted + +# reduce 171 omitted + +# reduce 172 omitted + +# reduce 173 omitted + +# reduce 174 omitted + +# reduce 175 omitted + +# reduce 176 omitted + +# reduce 177 omitted + +# reduce 178 omitted + +# reduce 179 omitted + +# reduce 180 omitted + +# reduce 181 omitted + +# reduce 182 omitted + +# reduce 183 omitted + +# reduce 184 omitted + +# reduce 185 omitted + +# reduce 186 omitted + +# reduce 187 omitted + +# reduce 188 omitted + +# reduce 189 omitted + +# reduce 190 omitted + +# reduce 191 omitted + +# reduce 192 omitted + +# reduce 193 omitted + +# reduce 194 omitted + +# reduce 195 omitted + +# reduce 196 omitted + +# reduce 197 omitted + +# reduce 198 omitted + +# reduce 199 omitted + +# reduce 200 omitted + +# reduce 201 omitted + +# reduce 202 omitted + +# reduce 203 omitted + +# reduce 204 omitted + +# reduce 205 omitted + +def _reduce_206(val, _values, result) + result = new_assign val[0], val[2] + + result +end + +def _reduce_207(val, _values, result) + result = new_op_asgn val + + result +end + +def _reduce_208(val, _values, result) + result = new_op_asgn1 val + + result +end + +def _reduce_209(val, _values, result) + result = new_op_asgn2 val + + result +end + +def _reduce_210(val, _values, result) + result = new_op_asgn2 val + + result +end + +def _reduce_211(val, _values, result) + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line + + result +end + +def _reduce_212(val, _values, result) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] + + result +end + +def _reduce_213(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_214(val, _values, result) + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] + + result +end + +def _reduce_215(val, _values, result) + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn + + result +end + +def _reduce_216(val, _values, result) + v1, v2 = val[0], val[2] + if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then + result = s(:lit, (v1.last)..(v2.last)).line v1.line + else + result = s(:dot2, v1, v2).line v1.line + end + + result +end + +def _reduce_217(val, _values, result) + v1, v2 = val[0], val[2] + if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then + result = s(:lit, (v1.last)...(v2.last)).line v1.line + else + result = s(:dot3, v1, v2).line v1.line + end + + result +end + +def _reduce_218(val, _values, result) + v1, _ = val + v2 = nil + + result = s(:dot2, v1, v2).line v1.line + + result +end + +def _reduce_219(val, _values, result) + v1, _ = val + v2 = nil + + result = s(:dot3, v1, v2).line v1.line + + result +end + +def _reduce_220(val, _values, result) + result = new_call val[0], :+, argl(val[2]) + + result +end + +def _reduce_221(val, _values, result) + result = new_call val[0], :-, argl(val[2]) + + result +end + +def _reduce_222(val, _values, result) + result = new_call val[0], :*, argl(val[2]) + + result +end + +def _reduce_223(val, _values, result) + result = new_call val[0], :"/", argl(val[2]) + + result +end + +def _reduce_224(val, _values, result) + result = new_call val[0], :"%", argl(val[2]) + + result +end + +def _reduce_225(val, _values, result) + result = new_call val[0], :**, argl(val[2]) + + result +end + +def _reduce_226(val, _values, result) + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + + + result +end + +def _reduce_227(val, _values, result) + result = new_call val[1], :"+@" + + result +end + +def _reduce_228(val, _values, result) + result = new_call val[1], :"-@" + + result +end + +def _reduce_229(val, _values, result) + result = new_call val[0], :"|", argl(val[2]) + + result +end + +def _reduce_230(val, _values, result) + result = new_call val[0], :"^", argl(val[2]) + + result +end + +def _reduce_231(val, _values, result) + result = new_call val[0], :"&", argl(val[2]) + + result +end + +def _reduce_232(val, _values, result) + result = new_call val[0], :"<=>", argl(val[2]) + + result +end + +# reduce 233 omitted + +def _reduce_234(val, _values, result) + result = new_call val[0], :"==", argl(val[2]) + + result +end + +def _reduce_235(val, _values, result) + result = new_call val[0], :"===", argl(val[2]) + + result +end + +def _reduce_236(val, _values, result) + result = new_call val[0], :"!=", argl(val[2]) + + result +end + +def _reduce_237(val, _values, result) + lhs, _, rhs = val + result = new_match lhs, rhs + + result +end + +def _reduce_238(val, _values, result) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line + + result +end + +def _reduce_239(val, _values, result) + _, arg = val + result = new_call arg, :"!" + result.line arg.line + + result +end + +def _reduce_240(val, _values, result) + result = new_call value_expr(val[1]), :"~" + + result +end + +def _reduce_241(val, _values, result) + val[0] = value_expr val[0] + val[2] = value_expr val[2] + result = new_call val[0], :"\<\<", argl(val[2]) + + result +end + +def _reduce_242(val, _values, result) + val[0] = value_expr val[0] + val[2] = value_expr val[2] + result = new_call val[0], :">>", argl(val[2]) + + result +end + +def _reduce_243(val, _values, result) + result = logical_op :and, val[0], val[2] + + result +end + +def _reduce_244(val, _values, result) + result = logical_op :or, val[0], val[2] + + result +end + +def _reduce_245(val, _values, result) + (_, line), _, arg = val + result = s(:defined, arg).line line + + result +end + +def _reduce_246(val, _values, result) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line + + result +end + +# reduce 247 omitted + +# reduce 248 omitted + +# reduce 249 omitted + +# reduce 250 omitted + +# reduce 251 omitted + +def _reduce_252(val, _values, result) + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_253(val, _values, result) + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + + result +end + +def _reduce_254(val, _values, result) + result = value_expr(val[0]) + + result +end + +# reduce 255 omitted + +def _reduce_256(val, _values, result) + result = args [val[0]] + + result +end + +def _reduce_257(val, _values, result) + result = args [val[0], array_to_hash(val[2])] + + result +end + +def _reduce_258(val, _values, result) + result = args [array_to_hash(val[0])] + + result +end + +# reduce 259 omitted + +def _reduce_260(val, _values, result) + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + + result +end + +def _reduce_261(val, _values, result) + _, args, _ = val + result = args + + result +end + +# reduce 262 omitted + +# reduce 263 omitted + +# reduce 264 omitted + +# reduce 265 omitted + +def _reduce_266(val, _values, result) + result = args val + + result +end + +def _reduce_267(val, _values, result) + result = args [val[0], array_to_hash(val[2])] + + result +end + +def _reduce_268(val, _values, result) + result = args [array_to_hash(val[0])] + + result +end + +def _reduce_269(val, _values, result) + warning "parenthesize argument(s) for future version" + result = call_args val + + result +end + +def _reduce_270(val, _values, result) + result = call_args val + + result +end + +def _reduce_271(val, _values, result) + result = call_args [array_to_hash(val[0]), val[1]] + + result +end + +def _reduce_272(val, _values, result) + result = call_args [val[0], array_to_hash(val[2]), val[3]] + + result +end + +def _reduce_273(val, _values, result) + result = call_args val + + result +end + +def _reduce_274(val, _values, result) + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead + + result +end + +def _reduce_275(val, _values, result) + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args + + result +end + +def _reduce_276(val, _values, result) + _, arg = val + result = s(:block_pass, arg).line arg.line + + result +end + +def _reduce_277(val, _values, result) + result = val[1] + + result +end + +# reduce 278 omitted + +def _reduce_279(val, _values, result) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno + + result +end + +def _reduce_280(val, _values, result) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line + + result +end + +def _reduce_281(val, _values, result) + args, _, id = val + result = self.list_append args, id + + result +end + +def _reduce_282(val, _values, result) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) + + result +end + +def _reduce_283(val, _values, result) + result = new_masgn_arg val[0] + + result +end + +def _reduce_284(val, _values, result) + result = new_masgn_arg val[0], :wrap + + result +end + +def _reduce_285(val, _values, result) + result = val[0] << val[2] + + result +end + +def _reduce_286(val, _values, result) + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat + + result +end + +def _reduce_287(val, _values, result) + _, arg = val + result = s(:splat, arg).line arg.line + + result +end + +# reduce 288 omitted + +# reduce 289 omitted + +# reduce 290 omitted + +# reduce 291 omitted + +# reduce 292 omitted + +# reduce 293 omitted + +# reduce 294 omitted + +# reduce 295 omitted + +# reduce 296 omitted + +# reduce 297 omitted + +def _reduce_298(val, _values, result) + msg, = val + result = new_call nil, msg.to_sym + + result +end + +def _reduce_299(val, _values, result) + lexer.cmdarg.push false + result = self.lexer.lineno + + result +end + +def _reduce_300(val, _values, result) + lexer.cmdarg.pop + result = new_begin val + + result +end + +def _reduce_301(val, _values, result) + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno + + result +end + +def _reduce_302(val, _values, result) + _, line, _ = val + result = s(:begin).line line + + result +end + +def _reduce_303(val, _values, result) + lexer.lex_state = EXPR_ENDARG + + result +end + +def _reduce_304(val, _values, result) + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt + + result +end + +def _reduce_305(val, _values, result) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno + result.paren = true + + result +end + +def _reduce_306(val, _values, result) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line + + result +end + +def _reduce_307(val, _values, result) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno + + result +end + +def _reduce_308(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_309(val, _values, result) + _, line, args, _ = val + result = args || s(:array) + result.sexp_type = :array # aref_args is :args + result.line line + + result +end + +def _reduce_310(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_311(val, _values, result) + result = new_hash val + + result +end + +def _reduce_312(val, _values, result) + (_, line), = val + result = s(:return).line line + + result +end + +def _reduce_313(val, _values, result) + result = new_yield val[2] + + result +end + +def _reduce_314(val, _values, result) + result = new_yield + + result +end + +def _reduce_315(val, _values, result) + result = new_yield + + result +end + +def _reduce_316(val, _values, result) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line + + result +end + +def _reduce_317(val, _values, result) + _, _, lhs, _ = val + result = new_call lhs, :"!" + + result +end + +def _reduce_318(val, _values, result) + debug20 14, val, result + + result +end + +def _reduce_319(val, _values, result) + call, iter = val + + iter.insert 1, call + result = iter + # FIX: probably not: call.line = iter.line + + result +end + +# reduce 320 omitted + +def _reduce_321(val, _values, result) + call, iter = val[0], val[1] + block_dup_check call, iter + iter.insert 1, call # FIX + result = iter + + result +end + +def _reduce_322(val, _values, result) + result = val[1] # TODO: fix lineno + + result +end + +def _reduce_323(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, t, f + + result +end + +def _reduce_324(val, _values, result) + _, c, _, t, f, _ = val + result = new_if c, f, t + + result +end + +def _reduce_325(val, _values, result) + _, cond, body, _ = val + result = new_while body, cond, true + + result +end + +def _reduce_326(val, _values, result) + _, cond, body, _ = val + result = new_until body, cond, true + + result +end + +def _reduce_327(val, _values, result) + (_, line), expr, _, body, _ = val + result = new_case expr, body, line + + result +end + +def _reduce_328(val, _values, result) + (_, line), _, body, _ = val + result = new_case nil, body, line + + result +end + +def _reduce_329(val, _values, result) + _, var, _, iter, body, _ = val + result = new_for iter, var, body + + result +end + +def _reduce_330(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_331(val, _values, result) + self.comments.push self.lexer.comments + if (self.in_def || self.in_single > 0) then + yyerror "class definition in method body" + end + self.env.extend + + result +end + +def _reduce_332(val, _values, result) + result = new_class val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + + result +end + +def _reduce_333(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_334(val, _values, result) + result = self.in_def + self.in_def = false + + result +end + +def _reduce_335(val, _values, result) + result = self.in_single + self.in_single = 0 + self.env.extend + + result +end + +def _reduce_336(val, _values, result) + result = new_sclass val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + + result +end + +def _reduce_337(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_338(val, _values, result) + self.comments.push self.lexer.comments + yyerror "module definition in method body" if + self.in_def or self.in_single > 0 + + self.env.extend + + result +end + +def _reduce_339(val, _values, result) + result = new_module val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + + result +end + +def _reduce_340(val, _values, result) + result = self.in_def + + self.in_def = true # group = local_push + self.env.extend + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments + + result +end + +def _reduce_341(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_342(val, _values, result) + in_def = val[2] + + result = new_defn val + + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop + self.env.unextend + self.in_def = in_def + + self.lexer.comments # we don't care about comments in the body + + result +end + +def _reduce_343(val, _values, result) + lexer.lex_state = EXPR_FNAME + + result +end + +def _reduce_344(val, _values, result) + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push + self.env.extend + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments + + result +end + +def _reduce_345(val, _values, result) + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val + + result = new_defs val + + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop + self.env.unextend + self.in_def = in_def + + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + + self.lexer.comments # we don't care about comments in the body + + result +end + +def _reduce_346(val, _values, result) + (_, line), = val + result = s(:break).line line + + result +end + +def _reduce_347(val, _values, result) + (_, line), = val + result = s(:next).line line + + result +end + +def _reduce_348(val, _values, result) + (_, line), = val + result = s(:redo).line line + + result +end + +def _reduce_349(val, _values, result) + (_, line), = val + result = s(:retry).line line + + result +end + +def _reduce_350(val, _values, result) + result = value_expr(val[0]) + + result +end + +# reduce 351 omitted + +# reduce 352 omitted + +# reduce 353 omitted + +# reduce 354 omitted + +# reduce 355 omitted + +# reduce 356 omitted + +# reduce 357 omitted + +# reduce 358 omitted + +# reduce 359 omitted + +# reduce 360 omitted + +# reduce 361 omitted + +# reduce 362 omitted + +# reduce 363 omitted + +# reduce 364 omitted + +# reduce 365 omitted + +# reduce 366 omitted + +# reduce 367 omitted + +# reduce 368 omitted + +# reduce 369 omitted + +# reduce 370 omitted + +# reduce 371 omitted + +# reduce 372 omitted + +# reduce 373 omitted + +# reduce 374 omitted + +# reduce 375 omitted + +def _reduce_376(val, _values, result) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line + + result +end + +# reduce 377 omitted + +def _reduce_378(val, _values, result) + result = val[1] + + result +end + +# reduce 379 omitted + +def _reduce_380(val, _values, result) + val[0].delete_at 1 if val[0][1].nil? # HACK + + result +end + +# reduce 381 omitted + +def _reduce_382(val, _values, result) + result = val[1] + + result +end + +def _reduce_383(val, _values, result) + sym, = val + + result = s(:array, sym).line lexer.lineno + + result +end + +def _reduce_384(val, _values, result) + result = list_append val[0], val[2] + + result +end + +def _reduce_385(val, _values, result) + args, = val + + result = block_var args + + result +end + +def _reduce_386(val, _values, result) + args, _, _, splat = val + + result = block_var args, "*#{splat}".to_sym + + result +end + +def _reduce_387(val, _values, result) + args, _, _, splat, _, args2 = val + + result = block_var args, "*#{splat}".to_sym, args2 + + result +end + +def _reduce_388(val, _values, result) + args, _, _ = val + + result = block_var args, :* + + result +end + +def _reduce_389(val, _values, result) + args, _, _, _, args2 = val + + result = block_var args, :*, args2 + + result +end + +def _reduce_390(val, _values, result) + _, splat = val + + result = block_var :"*#{splat}" + + result +end + +def _reduce_391(val, _values, result) + _, splat, _, args = val + + result = block_var :"*#{splat}", args + + result +end + +def _reduce_392(val, _values, result) + result = block_var :* + + result +end + +def _reduce_393(val, _values, result) + _, _, args = val + + result = block_var :*, args + + result +end + +def _reduce_394(val, _values, result) + result = call_args val + + result +end + +def _reduce_395(val, _values, result) + result = call_args val + + result +end + +def _reduce_396(val, _values, result) + result = call_args val + + result +end + +def _reduce_397(val, _values, result) + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line + + result +end + +def _reduce_398(val, _values, result) + result = args val + + result +end + +# reduce 399 omitted + +def _reduce_400(val, _values, result) + result = args val + + result +end + +def _reduce_401(val, _values, result) + result = args val + + result +end + +def _reduce_402(val, _values, result) + result = args val + + result +end + +def _reduce_403(val, _values, result) + result = args val + + result +end + +def _reduce_404(val, _values, result) + result = args val + + result +end + +def _reduce_405(val, _values, result) + result = args(val) << nil + + result +end + +def _reduce_406(val, _values, result) + result = args val + + result +end + +def _reduce_407(val, _values, result) + result = args val + + result +end + +def _reduce_408(val, _values, result) + result = args val + + result +end + +def _reduce_409(val, _values, result) + result = args val + + result +end + +def _reduce_410(val, _values, result) + result = args val + + result +end + +def _reduce_411(val, _values, result) + result = args val + + result +end + +def _reduce_412(val, _values, result) + result = args val + + result +end + +def _reduce_413(val, _values, result) + result = args val + + result +end + +def _reduce_414(val, _values, result) + result = args val + + result +end + +def _reduce_415(val, _values, result) + result = 0 + result +end + +def _reduce_416(val, _values, result) + self.lexer.command_start = true + + result +end + +def _reduce_417(val, _values, result) + # TODO: current_arg = 0 + result = args val + + result +end + +def _reduce_418(val, _values, result) + result = s(:args).line lexer.lineno + + result +end + +def _reduce_419(val, _values, result) + # TODO: current_arg = 0 + result = args val + + result +end + +# reduce 420 omitted + +def _reduce_421(val, _values, result) + result = args val + + result +end + +def _reduce_422(val, _values, result) + result = args val + + result +end + +def _reduce_423(val, _values, result) + result = args val + + result +end + +def _reduce_424(val, _values, result) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line + + result +end + +# reduce 425 omitted + +def _reduce_426(val, _values, result) + self.env.extend :dynamic + result = [lexer.lineno, lexer.lpar_beg] + lexer.paren_nest += 1 + lexer.lpar_beg = lexer.paren_nest + + result +end + +def _reduce_427(val, _values, result) + lexer.cmdarg.push false + + result +end + +def _reduce_428(val, _values, result) + (line, lpar), args, _cmdarg, body = val + lexer.lpar_beg = lpar + + lexer.cmdarg.pop + + call = s(:lambda).line line + result = new_iter call, args, body + result.line = line + self.env.unextend # TODO: dynapush & dynapop + + result +end + +def _reduce_429(val, _values, result) + result = args val + + result +end + +def _reduce_430(val, _values, result) + result = val[0] + result = 0 if result == s(:args) + + result +end + +def _reduce_431(val, _values, result) + result = val[1] + + result +end + +def _reduce_432(val, _values, result) + result = val[1] + + result +end + +def _reduce_433(val, _values, result) + (_, line), iter, _ = val + result = iter.line line + + result +end + +def _reduce_434(val, _values, result) + # TODO: + ## if (nd_type($1) == NODE_YIELD) { + ## compile_error(PARSER_ARG "block given to yield"); + + syntax_error "Both block arg and actual block given." if + val[0].block_pass? + + val = invert_block_call val if inverted? val + + cmd, blk = val + + result = blk + result.insert 1, cmd + + result +end + +def _reduce_435(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3] + + result +end + +def _reduce_436(val, _values, result) + iter1, _, name, args, iter2 = val + + call = new_call iter1, name.to_sym, args + iter2.insert 1, call + + result = iter2 + + result +end + +def _reduce_437(val, _values, result) + iter1, _, name, args, iter2 = val + + call = new_call iter1, name.to_sym, args + iter2.insert 1, call + + result = iter2 + + result +end + +def _reduce_438(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_439(val, _values, result) + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno + + result +end + +def _reduce_440(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3], val[1] + + result +end + +def _reduce_441(val, _values, result) + result = new_call val[0], val[2].to_sym, val[3] + + result +end + +def _reduce_442(val, _values, result) + result = new_call val[0], val[2].to_sym + + result +end + +def _reduce_443(val, _values, result) + result = new_call val[0], :call, val[2], val[1] + + result +end + +def _reduce_444(val, _values, result) + result = new_call val[0], :call, val[2] + + result +end + +def _reduce_445(val, _values, result) + result = new_super val[1] + + result +end + +def _reduce_446(val, _values, result) + result = s(:zsuper).line lexer.lineno + + result +end + +def _reduce_447(val, _values, result) + result = new_aref val + + result +end + +def _reduce_448(val, _values, result) + self.env.extend :dynamic + result = self.lexer.lineno + + result +end + +def _reduce_449(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + + result +end + +def _reduce_450(val, _values, result) + self.env.extend :dynamic + result = self.lexer.lineno + + result +end + +def _reduce_451(val, _values, result) + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + + result +end + +def _reduce_452(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end + +def _reduce_453(val, _values, result) + result = lexer.cmdarg.store(false) + result +end + +def _reduce_454(val, _values, result) + line, cmdarg, param, cmpstmt = val + + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + + result +end + +def _reduce_455(val, _values, result) + self.env.extend :dynamic; result = self.lexer.lineno + result +end + +def _reduce_456(val, _values, result) + lexer.cmdarg.push false + result +end + +def _reduce_457(val, _values, result) + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop + self.env.unextend + + result +end + +def _reduce_458(val, _values, result) + result = self.lexer.lineno + + result +end + +def _reduce_459(val, _values, result) + result = new_when(val[2], val[4]) + result.line = val[1] + result << val[5] if val[5] + + result +end + +# reduce 460 omitted + +# reduce 461 omitted + +def _reduce_462(val, _values, result) + (_, line), klasses, var, _, body, rest = val + + klasses ||= s(:array) + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var + klasses.line line + + result = new_resbody(klasses, body) + result << rest if rest # UGH, rewritten above + + result +end + +def _reduce_463(val, _values, result) + result = nil + + result +end + +def _reduce_464(val, _values, result) + arg, = val + result = s(:array, arg).line arg.line + + result +end + +# reduce 465 omitted + +# reduce 466 omitted + +def _reduce_467(val, _values, result) + result = val[1] + + result +end + +# reduce 468 omitted + +def _reduce_469(val, _values, result) + (_, line), body = val + + result = body || s(:nil).line(line) + + result +end + +# reduce 470 omitted + +def _reduce_471(val, _values, result) + line = lexer.lineno + result = s(:lit, val[0]) + result.line = line + + result +end + +def _reduce_472(val, _values, result) + line = lexer.lineno + result = s(:lit, val[0]) + result.line = line + + result +end + +# reduce 473 omitted + +def _reduce_474(val, _values, result) + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str + + result +end + +def _reduce_475(val, _values, result) + debug20 23, val, result + + result +end + +# reduce 476 omitted + +def _reduce_477(val, _values, result) + result = self.literal_concat val[0], val[1] + + result +end + +def _reduce_478(val, _values, result) + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str + + result +end + +def _reduce_479(val, _values, result) + result = new_string val + + result +end + +def _reduce_480(val, _values, result) + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? + + result +end + +def _reduce_481(val, _values, result) + result = new_regexp val + + result +end + +def _reduce_482(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +def _reduce_483(val, _values, result) + result = val[1] + + result +end + +def _reduce_484(val, _values, result) + result = new_word_list + + result +end + +def _reduce_485(val, _values, result) + result = val[0].dup << new_word_list_entry(val) + + result +end + +# reduce 486 omitted + +def _reduce_487(val, _values, result) + result = self.literal_concat val[0], val[1] + + result +end + +def _reduce_488(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +def _reduce_489(val, _values, result) + result = lexer.lineno + result +end + +def _reduce_490(val, _values, result) + _, line, list, _, = val + list.line = line + result = list + + result +end + +def _reduce_491(val, _values, result) + result = new_symbol_list.line lexer.lineno + + result +end + +def _reduce_492(val, _values, result) + list, * = val + result = list.dup << new_symbol_list_entry(val) + + result +end + +def _reduce_493(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +def _reduce_494(val, _values, result) + result = val[1] + + result +end + +def _reduce_495(val, _values, result) + result = s(:array).line lexer.lineno # FIX + + result +end + +def _reduce_496(val, _values, result) + result = val[1] + + result +end + +def _reduce_497(val, _values, result) + result = new_qword_list + + result +end + +def _reduce_498(val, _values, result) + result = val[0].dup << new_qword_list_entry(val) + + result +end + +def _reduce_499(val, _values, result) + result = new_qsym_list + + result +end + +def _reduce_500(val, _values, result) + result = val[0].dup << new_qsym_list_entry(val) + + result +end + +def _reduce_501(val, _values, result) + result = s(:str, "").line lexer.lineno + + result +end + +def _reduce_502(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + + result +end + +def _reduce_503(val, _values, result) + result = nil + + result +end + +def _reduce_504(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + + result +end + +def _reduce_505(val, _values, result) + result = nil + + result +end + +def _reduce_506(val, _values, result) + v1, v2 = val + result = literal_concat v1, v2 + + result +end + +def _reduce_507(val, _values, result) + result = new_string val + + result +end + +def _reduce_508(val, _values, result) + result = lexer.lex_strterm + + lexer.lex_strterm = nil + lexer.lex_state = EXPR_BEG + + result +end + +def _reduce_509(val, _values, result) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line + + result +end + +def _reduce_510(val, _values, result) + result = [lexer.lex_strterm, + lexer.brace_nest, + lexer.string_nest, # TODO: remove + lexer.lex_state, + lexer.lineno, + ] + + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_strterm = nil + lexer.brace_nest = 0 + lexer.string_nest = 0 + + lexer.lex_state = EXPR_BEG + + result +end + +def _reduce_511(val, _values, result) + _, memo, stmt, _ = val + + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent + + lexer.lex_strterm = lex_strterm + lexer.brace_nest = brace_nest + lexer.string_nest = string_nest + + lexer.cmdarg.pop + lexer.cond.pop + + lexer.lex_state = oldlex_state + + case stmt + when Sexp then + case stmt.sexp_type + when :str, :dstr, :evstr then + result = stmt + else + result = s(:evstr, stmt).line line + end + when nil then + result = s(:evstr).line line + else + debug20 25 + raise "unknown string body: #{stmt.inspect}" + end + + result +end + +def _reduce_512(val, _values, result) + result = s(:gvar, val[0].to_sym).line lexer.lineno + result +end + +def _reduce_513(val, _values, result) + result = s(:ivar, val[0].to_sym).line lexer.lineno + result +end + +def _reduce_514(val, _values, result) + result = s(:cvar, val[0].to_sym).line lexer.lineno + result +end + +# reduce 515 omitted + +def _reduce_516(val, _values, result) + lexer.lex_state = EXPR_END + result = val[1].to_sym + + result +end + +def _reduce_517(val, _values, result) + result = val[0].to_sym + + result +end + +# reduce 518 omitted + +# reduce 519 omitted + +# reduce 520 omitted + +# reduce 521 omitted + +def _reduce_522(val, _values, result) + _, result, _ = val + + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno + + case result.sexp_type + when :dstr then + result.sexp_type = :dsym + when :str then + result = s(:lit, result.last.to_sym).line result.line + when :evstr then + result = s(:dsym, "", result).line result.line + else + debug20 26, val, result + end + + result +end + +# reduce 523 omitted + +def _reduce_524(val, _values, result) + result = -val[1] # TODO: pt_testcase + + result +end + +# reduce 525 omitted + +# reduce 526 omitted + +# reduce 527 omitted + +# reduce 528 omitted + +# reduce 529 omitted + +# reduce 530 omitted + +# reduce 531 omitted + +# reduce 532 omitted + +# reduce 533 omitted + +def _reduce_534(val, _values, result) + result = s(:nil).line lexer.lineno + result +end + +def _reduce_535(val, _values, result) + result = s(:self).line lexer.lineno + result +end + +def _reduce_536(val, _values, result) + result = s(:true).line lexer.lineno + result +end + +def _reduce_537(val, _values, result) + result = s(:false).line lexer.lineno + result +end + +def _reduce_538(val, _values, result) + result = s(:str, self.file).line lexer.lineno + result +end + +def _reduce_539(val, _values, result) + result = s(:lit, lexer.lineno).line lexer.lineno + result +end + +def _reduce_540(val, _values, result) + l = lexer.lineno + result = + if defined? Encoding then + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l + else + s(:str, "Unsupported!").line l + end + + result +end + +def _reduce_541(val, _values, result) + var = val[0] + result = Sexp === var ? var : self.gettable(var) + + result +end + +def _reduce_542(val, _values, result) + var = val[0] + result = Sexp === var ? var : self.gettable(var) + + result +end + +def _reduce_543(val, _values, result) + result = self.assignable val[0] + + result +end + +def _reduce_544(val, _values, result) + result = self.assignable val[0] + debug20 29, val, result + + result +end + +def _reduce_545(val, _values, result) + result = s(:nth_ref, val[0]).line lexer.lineno + result +end + +def _reduce_546(val, _values, result) + result = s(:back_ref, val[0]).line lexer.lineno + result +end + +def _reduce_547(val, _values, result) + lexer.lex_state = EXPR_BEG + lexer.command_start = true + + result +end + +def _reduce_548(val, _values, result) + result = val[2] + + result +end + +def _reduce_549(val, _values, result) + result = nil + + result +end + +def _reduce_550(val, _values, result) + result = val[1] + self.lexer.lex_state = EXPR_BEG + self.lexer.command_start = true + + result +end + +def _reduce_551(val, _values, result) + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + + result +end + +def _reduce_552(val, _values, result) + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true + + result +end + +def _reduce_553(val, _values, result) + result = args val + + result +end + +def _reduce_554(val, _values, result) + result = args val + + result +end + +def _reduce_555(val, _values, result) + result = args val + + result +end + +# reduce 556 omitted + +def _reduce_557(val, _values, result) + result = val[1] + + result +end + +def _reduce_558(val, _values, result) + result = nil + + result +end + +def _reduce_559(val, _values, result) + result = args val + + result +end + +def _reduce_560(val, _values, result) + result = args val + + result +end + +def _reduce_561(val, _values, result) + result = args val + + result +end + +def _reduce_562(val, _values, result) + result = args val + + result +end + +def _reduce_563(val, _values, result) + result = args val + + result +end + +def _reduce_564(val, _values, result) + result = args val + + result +end + +def _reduce_565(val, _values, result) + result = args val + + result +end + +def _reduce_566(val, _values, result) + result = args val + + result +end + +def _reduce_567(val, _values, result) + result = args val + + result +end + +def _reduce_568(val, _values, result) + result = args val + + result +end + +def _reduce_569(val, _values, result) + result = args val + + result +end + +def _reduce_570(val, _values, result) + result = args val + + result +end + +def _reduce_571(val, _values, result) + result = args val + + result +end + +def _reduce_572(val, _values, result) + result = args val + + result +end + +def _reduce_573(val, _values, result) + result = args val + + result +end + +def _reduce_574(val, _values, result) + yyerror "formal argument cannot be a constant" + + result +end + +def _reduce_575(val, _values, result) + yyerror "formal argument cannot be an instance variable" + + result +end + +def _reduce_576(val, _values, result) + yyerror "formal argument cannot be a global variable" + + result +end + +def _reduce_577(val, _values, result) + yyerror "formal argument cannot be a class variable" + + result +end + +# reduce 578 omitted + +def _reduce_579(val, _values, result) + identifier = val[0].to_sym + self.env[identifier] = :lvar + + result = identifier + + result +end + +# reduce 580 omitted + +# reduce 581 omitted + +def _reduce_582(val, _values, result) + result = val[1] + + result +end + +def _reduce_583(val, _values, result) + arg, = val + + case arg + when Symbol then + result = s(:args, arg).line lexer.lineno + when Sexp then + result = arg + else + debug20 32 + raise "Unknown f_arg type: #{val.inspect}" + end + + result +end + +def _reduce_584(val, _values, result) + list, _, item = val + + if list.sexp_type == :args then + result = list + else + result = s(:args, list).line list.line + end + + result << item + + result +end + +# reduce 585 omitted + +def _reduce_586(val, _values, result) + # TODO: new_kw_arg + (label, line), arg = val + + identifier = label.to_sym + self.env[identifier] = :lvar + + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line + + result +end + +def _reduce_587(val, _values, result) + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line + + result +end + +def _reduce_588(val, _values, result) + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id, expr).line(line)).line line + + result +end + +def _reduce_589(val, _values, result) + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line + + result +end + +# reduce 590 omitted + +def _reduce_591(val, _values, result) + list, _, item = val + result = list << item.last + + result +end + +# reduce 592 omitted + +def _reduce_593(val, _values, result) + result = args val + + result +end + +# reduce 594 omitted + +# reduce 595 omitted + +def _reduce_596(val, _values, result) + name = val[1].to_sym + self.assignable name + result = :"**#{name}" + + result +end + +def _reduce_597(val, _values, result) + result = :"**" + + result +end + +def _reduce_598(val, _values, result) + result = self.assignable val[0], val[2] + # TODO: detect duplicate names + + result +end + +def _reduce_599(val, _values, result) + result = self.assignable val[0], val[2] + + result +end + +def _reduce_600(val, _values, result) + optblk, = val + result = s(:block, optblk).line optblk.line + + result +end + +def _reduce_601(val, _values, result) + optarg, _, optblk = val + result = optarg + result << optblk + + result +end + +def _reduce_602(val, _values, result) + opt, = val + result = s(:block, opt).line opt.line + + result +end + +def _reduce_603(val, _values, result) + result = self.block_append val[0], val[2] + + result +end + +# reduce 604 omitted + +# reduce 605 omitted + +def _reduce_606(val, _values, result) + # TODO: differs from parse.y - needs tests + name = val[1].to_sym + self.assignable name + result = :"*#{name}" + + result +end + +def _reduce_607(val, _values, result) + name = :"*" + self.env[name] = :lvar + result = name + + result +end + +# reduce 608 omitted + +# reduce 609 omitted + +def _reduce_610(val, _values, result) + identifier = val[1].to_sym + + self.env[identifier] = :lvar + result = "&#{identifier}".to_sym + + result +end + +def _reduce_611(val, _values, result) + result = val[1] + + result +end + +def _reduce_612(val, _values, result) + result = nil + + result +end + +# reduce 613 omitted + +def _reduce_614(val, _values, result) + lexer.lex_state = EXPR_BEG + + result +end + +def _reduce_615(val, _values, result) + result = val[2] + yyerror "Can't define single method for literals." if + result.sexp_type == :lit + + result +end + +def _reduce_616(val, _values, result) + result = s(:array).line lexer.lineno + + result +end + +# reduce 617 omitted + +# reduce 618 omitted + +def _reduce_619(val, _values, result) + list = val[0].dup + more = val[2].sexp_body + list.push(*more) unless more.empty? + result = list + result.sexp_type = :hash + + result +end + +def _reduce_620(val, _values, result) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line + + result +end + +def _reduce_621(val, _values, result) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line + + result +end + +def _reduce_622(val, _values, result) + _, sym, _, value = val + sym.sexp_type = :dsym + result = s(:array, sym, value).line sym.line + + result +end + +def _reduce_623(val, _values, result) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line + + result +end + +# reduce 624 omitted + +# reduce 625 omitted + +# reduce 626 omitted + +# reduce 627 omitted + +# reduce 628 omitted + +# reduce 629 omitted + +# reduce 630 omitted + +# reduce 631 omitted + +# reduce 632 omitted + +# reduce 633 omitted + +# reduce 634 omitted + +# reduce 635 omitted + +# reduce 636 omitted + +# reduce 637 omitted + +# reduce 638 omitted + +# reduce 639 omitted + +# reduce 640 omitted + +# reduce 641 omitted + +# reduce 642 omitted + +# reduce 643 omitted + +# reduce 644 omitted + +# reduce 645 omitted + +# reduce 646 omitted + +# reduce 647 omitted + +# reduce 648 omitted + +def _reduce_649(val, _values, result) + yyerrok + result +end + +# reduce 650 omitted + +# reduce 651 omitted + +def _reduce_652(val, _values, result) + yyerrok + result +end + +def _reduce_653(val, _values, result) + result = nil; + result +end + +def _reduce_none(val, _values, result) + val[0] +end + +end # class Ruby27Parser diff -Nru ruby-ruby-parser-3.11.0/lib/ruby27_parser.y ruby-ruby-parser-3.15.1/lib/ruby27_parser.y --- ruby-ruby-parser-3.11.0/lib/ruby27_parser.y 1970-01-01 00:00:00.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby27_parser.y 2021-01-18 16:48:25.000000000 +0000 @@ -0,0 +1,2657 @@ +# -*- racc -*- + +class Ruby27Parser + +token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS + kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT + kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER + kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD + kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ + k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT + tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT + tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ + tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF + tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN + tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE + tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE + tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY + tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG + tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END + tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA + tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG + tRATIONAL tIMAGINARY + tLABEL_END + tLONELY + +preclow + nonassoc tLOWEST + nonassoc tLBRACE_ARG + nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD + left kOR kAND + right kNOT + nonassoc kDEFINED + right tEQL tOP_ASGN + left kRESCUE_MOD + right tEH tCOLON + nonassoc tDOT2 tDOT3 + left tOROP + left tANDOP + nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH + left tGT tGEQ tLT tLEQ + left tPIPE tCARET + left tAMPER2 + left tLSHFT tRSHFT + left tPLUS tMINUS + left tSTAR2 tDIVIDE tPERCENT # TODO: tSTAR2 -> tMULT + right tUMINUS_NUM tUMINUS + right tPOW + right tBANG tTILDE tUPLUS +prechigh + +rule + + program: { + self.lexer.lex_state = EXPR_BEG + } + top_compstmt + { + result = new_compstmt val + } + + top_compstmt: top_stmts opt_terms + { + stmt, _ = val + result = stmt + } + + top_stmts: none + | top_stmt + | top_stmts terms top_stmt + { + result = self.block_append val[0], val[2] + } + | error top_stmt + + top_stmt: stmt + | klBEGIN + { + if (self.in_def || self.in_single > 0) then + debug20 1 + yyerror "BEGIN in method" + end + self.env.extend + } + begin_block + { + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + } + + begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY + { + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt + } + + bodystmt: compstmt opt_rescue k_else + { + res = _values[-2] + yyerror "else without rescue is useless" unless res + } + compstmt + opt_ensure + { + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + } + | compstmt opt_rescue opt_ensure + { + body, resc, ens = val + + result = new_body [body, resc, nil, ens] + } + + compstmt: stmts opt_terms + { + result = new_compstmt val + } + + stmts: none + | stmt_or_begin # TODO: newline_node ? + | stmts terms stmt_or_begin + { + result = self.block_append val[0], val[2] + } + | error stmt + { + result = val[1] + debug20 2, val, result + } + + stmt_or_begin: stmt + | klBEGIN + { + yyerror "BEGIN is permitted only at toplevel" + } + + stmt: kALIAS fitem + { + lexer.lex_state = EXPR_FNAME + } + fitem + { + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line + } + | kALIAS tGVAR tGVAR + { + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line + } + | kALIAS tGVAR tBACK_REF + { + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line + } + | kALIAS tGVAR tNTH_REF + { + yyerror "can't make alias for the number variables" + } + | kUNDEF undef_list + { + result = val[1] + } + | stmt kIF_MOD expr_value + { + t, _, c = val + result = new_if c, t, nil + } + | stmt kUNLESS_MOD expr_value + { + f, _, c = val + result = new_if c, nil, f + } + | stmt kWHILE_MOD expr_value + { + e, _, c = val + result = new_while e, c, true + } + | stmt kUNTIL_MOD expr_value + { + e, _, c = val + result = new_until e, c, true + } + | stmt kRESCUE_MOD stmt + { + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody + } + | klEND tLCURLY compstmt tRCURLY + { + (_, line), _, stmt, _ = val + + if (self.in_def || self.in_single > 0) then + debug20 3 + yyerror "END in method; use at_exit" + end + + result = new_iter s(:postexe).line(line), 0, stmt + } + | command_asgn + | mlhs tEQL command_call + { + result = new_masgn val[0], val[2], :wrap + } + | lhs tEQL mrhs + { + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + } + | mlhs tEQL mrhs_arg + { + result = new_masgn val[0], val[2] + } + | expr + + command_asgn: lhs tEQL command_rhs + { + result = new_assign val[0], val[2] + } + # | lhs tEQL command_asgn + # { + # result = new_assign val[0], val[2] + # } + | var_lhs tOP_ASGN command_rhs + { + result = new_op_asgn val + } + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs + { + result = new_op_asgn1 val + } + | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs + { + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + } + | primary_value call_op tCONSTANT tOP_ASGN command_rhs + { + result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + if val[1] == '&.' + result.sexp_type = :safe_op_asgn + end + result.line = val[0].line + } + | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs + { + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + } + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs + { + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) + } + | backref tOP_ASGN command_rhs + { + self.backref_assign_error val[0] + } + + command_rhs: command_call =tOP_ASGN + { + expr, = val + result = value_expr expr + } + | command_call kRESCUE_MOD stmt + { + expr, (_, line), resbody = val + + expr = value_expr expr + ary = s(:array).line line + result = new_rescue(expr, new_resbody(ary, resbody)) + } + | command_asgn + + expr: command_call + | expr kAND expr + { + lhs, _, rhs = val + result = logical_op :and, lhs, rhs + } + | expr kOR expr + { + lhs, _, rhs = val + result = logical_op :or, lhs, rhs + } + | kNOT opt_nl expr + { + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op + } + | tBANG command_call + { + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y + } + | arg + + expr_value: expr + { + result = value_expr(val[0]) + } + + expr_value_do: { + lexer.cond.push true + } + expr_value do + { + lexer.cond.pop + } + { + _, expr, _, _ = val + result = expr + } + + command_call: command + | block_command + + block_command: block_call + | block_call call_op2 operation2 command_args + { + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line + } + + cmd_brace_block: tLBRACE_ARG + { + # self.env.extend(:dynamic) + result = self.lexer.lineno + } + brace_body tRCURLY + { + _, line, body, _ = val + + result = body + result.line = line + + # self.env.unextend + } + + fcall: operation + { + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno + } + + command: fcall command_args =tLOWEST + { + call, args = val + result = call.concat args.sexp_body + } + | fcall command_args cmd_brace_block + { + call, args, block = val + + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result + result.insert 1, operation + end + } + | primary_value call_op operation2 command_args =tLOWEST + { + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop + } + | primary_value call_op operation2 command_args cmd_brace_block + { + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args, val[1] + + block_dup_check call, block + + block.insert 1, call + result = block + } + | primary_value tCOLON2 operation2 command_args =tLOWEST + { + result = new_call val[0], val[2].to_sym, val[3] + } + | primary_value tCOLON2 operation2 command_args cmd_brace_block + { + recv, _, msg, args, block = val + call = new_call recv, msg.to_sym, args + + block_dup_check call, block + + block.insert 1, call + result = block + } + | kSUPER command_args + { + result = new_super val[1] + } + | kYIELD command_args + { + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield + } + | k_return call_args + { + line = val[0].last + result = s(:return, ret_args(val[1])).line(line) + } + | kBREAK call_args + { + (_, line), args = val + result = s(:break, ret_args(args)).line line + } + | kNEXT call_args + { + line = val[0].last + result = s(:next, ret_args(val[1])).line(line) + } + + mlhs: mlhs_basic + | tLPAREN mlhs_inner rparen + { + result = val[1] + } + + mlhs_inner: mlhs_basic + | tLPAREN mlhs_inner rparen + { + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l + } + + mlhs_basic: mlhs_head + { + head, = val + result = s(:masgn, head).line head.line + } + | mlhs_head mlhs_item + { + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line + } + | mlhs_head tSTAR mlhs_node + { + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line + } + | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post + { + ary1, _, splat, _, ary2 = val + + result = list_append ary1, s(:splat, splat).line(splat.line) + result.concat ary2.sexp_body + result = s(:masgn, result).line result.line + } + | mlhs_head tSTAR + { + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l + } + | mlhs_head tSTAR tCOMMA mlhs_post + { + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + } + | tSTAR mlhs_node + { + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l + } + | tSTAR mlhs_node tCOMMA mlhs_post + { + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line + } + | tSTAR + { + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l + } + | tSTAR tCOMMA mlhs_post + { + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l + } + + mlhs_item: mlhs_node + | tLPAREN mlhs_inner rparen + { + result = val[1] + } + + mlhs_head: mlhs_item tCOMMA + { + lhs, _ = val + result = s(:array, lhs).line lhs.line + } + | mlhs_head mlhs_item tCOMMA + { + result = val[0] << val[1].compact + } + + mlhs_post: mlhs_item + { + item, = val + result = s(:array, item).line item.line + } + | mlhs_post tCOMMA mlhs_item + { + result = list_append val[0], val[2] + } + + mlhs_node: user_variable + { + result = self.assignable val[0] + } + | keyword_variable + { + result = self.assignable val[0] + } + | primary_value tLBRACK2 opt_call_args rbracket + { + result = self.aryset val[0], val[2] + } + | primary_value call_op tIDENTIFIER + { + result = new_attrasgn val[0], val[2], val[1] + } + | primary_value tCOLON2 tIDENTIFIER + { + recv, _, id = val + result = new_attrasgn recv, id + } + | primary_value call_op tCONSTANT + { + result = new_attrasgn val[0], val[2], val[1] + } + | primary_value tCOLON2 tCONSTANT + { + if (self.in_def || self.in_single > 0) then + debug20 7 + yyerror "dynamic constant assignment" + end + + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l + } + | tCOLON3 tCONSTANT + { + if (self.in_def || self.in_single > 0) then + debug20 8 + yyerror "dynamic constant assignment" + end + + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l + } + | backref + { + self.backref_assign_error val[0] + } + + lhs: user_variable + { + line = lexer.lineno + result = self.assignable val[0] + result.line = line + } + | keyword_variable + { + line = lexer.lineno + result = self.assignable val[0] + result.line = line + debug20 9, val, result + } + | primary_value tLBRACK2 opt_call_args rbracket + { + lhs, _, args, _ = val + result = self.aryset lhs, args + } + | primary_value call_op tIDENTIFIER # REFACTOR + { + lhs, op, id = val + result = new_attrasgn lhs, id, op + } + | primary_value tCOLON2 tIDENTIFIER + { + lhs, _, id = val + result = new_attrasgn lhs, id + } + | primary_value call_op tCONSTANT # REFACTOR? + { + result = new_attrasgn val[0], val[2], val[1] + } + | primary_value tCOLON2 tCONSTANT + { + expr, _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 10 + yyerror "dynamic constant assignment" + end + + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l + } + | tCOLON3 tCONSTANT + { + _, id = val + + if (self.in_def || self.in_single > 0) then + debug20 11 + yyerror "dynamic constant assignment" + end + + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l + } + | backref + { + self.backref_assign_error val[0] + } + + cname: tIDENTIFIER + { + yyerror "class/module name must be CONSTANT" + } + | tCONSTANT + + cpath: tCOLON3 cname + { + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno + } + | cname + { + result = val[0].to_sym + } + | primary_value tCOLON2 cname + { + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line + } + + fname: tIDENTIFIER | tCONSTANT | tFID + | op + { + lexer.lex_state = EXPR_END + result = val[0] + } + + | reswords + { + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym + } + + fsym: fname | symbol + + fitem: fsym + { + id, = val + result = s(:lit, id.to_sym).line lexer.lineno + } + | dsym + + undef_list: fitem + { + result = new_undef val[0] + } + | + undef_list tCOMMA + { + lexer.lex_state = EXPR_FNAME + } + fitem + { + result = new_undef val[0], val[3] + } + + op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ + | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ + | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 + | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE + | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 + # TODO: tUBANG dead? + | tUBANG + + reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND + | kALIAS | kAND | kBEGIN | kBREAK | kCASE + | kCLASS | kDEF | kDEFINED | kDO | kELSE + | kELSIF | kEND | kENSURE | kFALSE | kFOR + | kIN | kMODULE | kNEXT | kNIL | kNOT + | kOR | kREDO | kRESCUE | kRETRY | kRETURN + | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF + | kWHEN | kYIELD | kIF | kUNLESS | kWHILE + | kUNTIL + + arg: lhs tEQL arg_rhs + { + result = new_assign val[0], val[2] + } + | var_lhs tOP_ASGN arg_rhs + { + result = new_op_asgn val + } + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs + { + result = new_op_asgn1 val + } + | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs + { + result = new_op_asgn2 val + } + | primary_value call_op tCONSTANT tOP_ASGN arg_rhs + { + result = new_op_asgn2 val + } + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs + { + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line + } + | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs + { + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] + } + | tCOLON3 tCONSTANT + { + result = self.lexer.lineno + } + tOP_ASGN arg_rhs + { + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] + } + | backref tOP_ASGN arg_rhs + { + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn + } + | arg tDOT2 arg + { + v1, v2 = val[0], val[2] + if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then + result = s(:lit, (v1.last)..(v2.last)).line v1.line + else + result = s(:dot2, v1, v2).line v1.line + end + } + | arg tDOT3 arg + { + v1, v2 = val[0], val[2] + if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then + result = s(:lit, (v1.last)...(v2.last)).line v1.line + else + result = s(:dot3, v1, v2).line v1.line + end + } + | arg tDOT2 + { + v1, _ = val + v2 = nil + + result = s(:dot2, v1, v2).line v1.line + } + | arg tDOT3 + { + v1, _ = val + v2 = nil + + result = s(:dot3, v1, v2).line v1.line + } + | arg tPLUS arg + { + result = new_call val[0], :+, argl(val[2]) + } + | arg tMINUS arg + { + result = new_call val[0], :-, argl(val[2]) + } + | arg tSTAR2 arg # TODO: rename + { + result = new_call val[0], :*, argl(val[2]) + } + | arg tDIVIDE arg + { + result = new_call val[0], :"/", argl(val[2]) + } + | arg tPERCENT arg + { + result = new_call val[0], :"%", argl(val[2]) + } + | arg tPOW arg + { + result = new_call val[0], :**, argl(val[2]) + } + | tUMINUS_NUM simple_numeric tPOW arg + { + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + + } + | tUPLUS arg + { + result = new_call val[1], :"+@" + } + | tUMINUS arg + { + result = new_call val[1], :"-@" + } + | arg tPIPE arg + { + result = new_call val[0], :"|", argl(val[2]) + } + | arg tCARET arg + { + result = new_call val[0], :"^", argl(val[2]) + } + | arg tAMPER2 arg + { + result = new_call val[0], :"&", argl(val[2]) + } + | arg tCMP arg + { + result = new_call val[0], :"<=>", argl(val[2]) + } + | rel_expr =tCMP + | arg tEQ arg + { + result = new_call val[0], :"==", argl(val[2]) + } + | arg tEQQ arg + { + result = new_call val[0], :"===", argl(val[2]) + } + | arg tNEQ arg + { + result = new_call val[0], :"!=", argl(val[2]) + } + | arg tMATCH arg + { + lhs, _, rhs = val + result = new_match lhs, rhs + } + | arg tNMATCH arg + { + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line + } + | tBANG arg + { + _, arg = val + result = new_call arg, :"!" + result.line arg.line + } + | tTILDE arg + { + result = new_call value_expr(val[1]), :"~" + } + | arg tLSHFT arg + { + val[0] = value_expr val[0] + val[2] = value_expr val[2] + result = new_call val[0], :"\<\<", argl(val[2]) + } + | arg tRSHFT arg + { + val[0] = value_expr val[0] + val[2] = value_expr val[2] + result = new_call val[0], :">>", argl(val[2]) + } + | arg tANDOP arg + { + result = logical_op :and, val[0], val[2] + } + | arg tOROP arg + { + result = logical_op :or, val[0], val[2] + } + | kDEFINED opt_nl arg + { + (_, line), _, arg = val + result = s(:defined, arg).line line + } + | arg tEH arg opt_nl tCOLON arg + { + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line + } + | primary + + relop: tGT + | tLT + | tGEQ + | tLEQ + + rel_expr: arg relop arg =tGT + { + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + } + | rel_expr relop arg =tGT + { + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + } + + arg_value: arg + { + result = value_expr(val[0]) + } + + aref_args: none + | args trailer + { + result = args [val[0]] + } + | args tCOMMA assocs trailer + { + result = args [val[0], array_to_hash(val[2])] + } + | assocs trailer + { + result = args [array_to_hash(val[0])] + } + + arg_rhs: arg =tOP_ASGN + | arg kRESCUE_MOD arg + { + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + } + + paren_args: tLPAREN2 opt_call_args rparen + { + _, args, _ = val + result = args + } + + opt_paren_args: none + | paren_args + + opt_call_args: none + | call_args + | args tCOMMA + { + result = args val + } + | args tCOMMA assocs tCOMMA + { + result = args [val[0], array_to_hash(val[2])] + } + | assocs tCOMMA + { + result = args [array_to_hash(val[0])] + } + + call_args: command + { + warning "parenthesize argument(s) for future version" + result = call_args val + } + | args opt_block_arg + { + result = call_args val + } + | assocs opt_block_arg + { + result = call_args [array_to_hash(val[0]), val[1]] + } + | args tCOMMA assocs opt_block_arg + { + result = call_args [val[0], array_to_hash(val[2]), val[3]] + } + | block_arg + { + result = call_args val + } + + command_args: { + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead + } + call_args + { + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args + } + + block_arg: tAMPER arg_value + { + _, arg = val + result = s(:block_pass, arg).line arg.line + } + + opt_block_arg: tCOMMA block_arg + { + result = val[1] + } + | none + + args: arg_value + { + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno + } + | tSTAR arg_value + { + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line + } + | args tCOMMA arg_value + { + args, _, id = val + result = self.list_append args, id + } + | args tCOMMA tSTAR arg_value + { + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) + } + + mrhs_arg: mrhs + { + result = new_masgn_arg val[0] + } + | arg_value + { + result = new_masgn_arg val[0], :wrap + } + + mrhs: args tCOMMA arg_value + { + result = val[0] << val[2] + } + | args tCOMMA tSTAR arg_value + { + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat + } + | tSTAR arg_value + { + _, arg = val + result = s(:splat, arg).line arg.line + } + + primary: literal + | strings + | xstring + | regexp + | words + | qwords + | symbols + | qsymbols + | var_ref + | backref + | tFID + { + msg, = val + result = new_call nil, msg.to_sym + } + | k_begin + { + lexer.cmdarg.push false + result = self.lexer.lineno + } + bodystmt k_end + { + lexer.cmdarg.pop + result = new_begin val + } + | tLPAREN_ARG + { + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno + } + rparen + { + _, line, _ = val + result = s(:begin).line line + } + | tLPAREN_ARG + stmt + { + lexer.lex_state = EXPR_ENDARG + } + rparen + { + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt + } + | tLPAREN compstmt tRPAREN + { + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno + result.paren = true + } + | primary_value tCOLON2 tCONSTANT + { + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line + } + | tCOLON3 tCONSTANT + { + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno + } + | tLBRACK { result = lexer.lineno } aref_args tRBRACK + { + _, line, args, _ = val + result = args || s(:array) + result.sexp_type = :array # aref_args is :args + result.line line + } + | tLBRACE + { + result = self.lexer.lineno + } + assoc_list tRCURLY + { + result = new_hash val + } + | k_return + { + (_, line), = val + result = s(:return).line line + } + | kYIELD tLPAREN2 call_args rparen + { + result = new_yield val[2] + } + | kYIELD tLPAREN2 rparen + { + result = new_yield + } + | kYIELD + { + result = new_yield + } + | kDEFINED opt_nl tLPAREN2 expr rparen + { + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line + } + | kNOT tLPAREN2 expr rparen + { + _, _, lhs, _ = val + result = new_call lhs, :"!" + } + | kNOT tLPAREN2 rparen + { + debug20 14, val, result + } + | fcall brace_block + { + call, iter = val + + iter.insert 1, call + result = iter + # FIX: probably not: call.line = iter.line + } + | method_call + | method_call brace_block + { + call, iter = val[0], val[1] + block_dup_check call, iter + iter.insert 1, call # FIX + result = iter + } + | tLAMBDA lambda + { + result = val[1] # TODO: fix lineno + } + | k_if expr_value then compstmt if_tail k_end + { + _, c, _, t, f, _ = val + result = new_if c, t, f + } + | k_unless expr_value then compstmt opt_else k_end + { + _, c, _, t, f, _ = val + result = new_if c, f, t + } + | k_while expr_value_do compstmt k_end + { + _, cond, body, _ = val + result = new_while body, cond, true + } + | k_until expr_value_do compstmt k_end + { + _, cond, body, _ = val + result = new_until body, cond, true + } + | k_case expr_value opt_terms case_body k_end + { + (_, line), expr, _, body, _ = val + result = new_case expr, body, line + } + | k_case opt_terms case_body k_end + { + (_, line), _, body, _ = val + result = new_case nil, body, line + } + | k_for for_var kIN expr_value_do compstmt k_end + { + _, var, _, iter, body, _ = val + result = new_for iter, var, body + } + | k_class + { + result = self.lexer.lineno + } + cpath superclass + { + self.comments.push self.lexer.comments + if (self.in_def || self.in_single > 0) then + yyerror "class definition in method body" + end + self.env.extend + } + bodystmt k_end + { + result = new_class val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + } + | k_class tLSHFT + { + result = self.lexer.lineno + } + expr + { + result = self.in_def + self.in_def = false + } + term + { + result = self.in_single + self.in_single = 0 + self.env.extend + } + bodystmt k_end + { + result = new_sclass val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + } + | k_module + { + result = self.lexer.lineno + } + cpath + { + self.comments.push self.lexer.comments + yyerror "module definition in method body" if + self.in_def or self.in_single > 0 + + self.env.extend + } + bodystmt k_end + { + result = new_module val + self.env.unextend + self.lexer.comments # we don't care about comments in the body + } + | k_def fname + { + result = self.in_def + + self.in_def = true # group = local_push + self.env.extend + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments + } + f_arglist bodystmt { result = lexer.lineno } k_end + { + in_def = val[2] + + result = new_defn val + + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop + self.env.unextend + self.in_def = in_def + + self.lexer.comments # we don't care about comments in the body + } + | k_def singleton dot_or_colon + { + lexer.lex_state = EXPR_FNAME + } + fname + { + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push + self.env.extend + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments + } + f_arglist bodystmt k_end + { + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val + + result = new_defs val + + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop + self.env.unextend + self.in_def = in_def + + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + + self.lexer.comments # we don't care about comments in the body + } + | kBREAK + { + (_, line), = val + result = s(:break).line line + } + | kNEXT + { + (_, line), = val + result = s(:next).line line + } + | kREDO + { + (_, line), = val + result = s(:redo).line line + } + | kRETRY + { + (_, line), = val + result = s(:retry).line line + } + + primary_value: primary + { + result = value_expr(val[0]) + } + + # These are really stupid + k_begin: kBEGIN + k_if: kIF + k_unless: kUNLESS + k_while: kWHILE + k_until: kUNTIL + k_case: kCASE + k_for: kFOR + k_class: kCLASS + k_module: kMODULE + k_def: kDEF + k_do: kDO + k_do_block: kDO_BLOCK + k_rescue: kRESCUE + k_ensure: kENSURE + k_when: kWHEN + k_else: kELSE + k_elsif: kELSIF + k_end: kEND + k_return: kRETURN + + then: term + | kTHEN + | term kTHEN + + do: term + | kDO_COND + + if_tail: opt_else + | k_elsif expr_value then compstmt if_tail + { + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line + } + + opt_else: none + | kELSE compstmt + { + result = val[1] + } + + for_var: lhs + | mlhs + { + val[0].delete_at 1 if val[0][1].nil? # HACK + } + + f_marg: f_norm_arg + | tLPAREN f_margs rparen + { + result = val[1] + } + + f_marg_list: f_marg + { + sym, = val + + result = s(:array, sym).line lexer.lineno + } + | f_marg_list tCOMMA f_marg + { + result = list_append val[0], val[2] + } + + f_margs: f_marg_list + { + args, = val + + result = block_var args + } + | f_marg_list tCOMMA tSTAR f_norm_arg + { + args, _, _, splat = val + + result = block_var args, "*#{splat}".to_sym + } + | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list + { + args, _, _, splat, _, args2 = val + + result = block_var args, "*#{splat}".to_sym, args2 + } + | f_marg_list tCOMMA tSTAR + { + args, _, _ = val + + result = block_var args, :* + } + | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list + { + args, _, _, _, args2 = val + + result = block_var args, :*, args2 + } + | tSTAR f_norm_arg + { + _, splat = val + + result = block_var :"*#{splat}" + } + | tSTAR f_norm_arg tCOMMA f_marg_list + { + _, splat, _, args = val + + result = block_var :"*#{splat}", args + } + | tSTAR + { + result = block_var :* + } + | tSTAR tCOMMA f_marg_list + { + _, _, args = val + + result = block_var :*, args + } + + block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg + { + result = call_args val + } + | f_block_kwarg opt_f_block_arg + { + result = call_args val + } + | f_kwrest opt_f_block_arg + { + result = call_args val + } + | f_block_arg + { + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line + } + +opt_block_args_tail: tCOMMA block_args_tail + { + result = args val + } + | none + + block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail + { + result = args val + } + | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | f_arg tCOMMA f_block_optarg opt_block_args_tail + { + result = args val + } + | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | f_arg tCOMMA f_rest_arg opt_block_args_tail + { + result = args val + } + | f_arg tCOMMA + { + result = args(val) << nil + } + | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | f_arg opt_block_args_tail + { + result = args val + } + | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail + { + result = args val + } + | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | f_block_optarg opt_block_args_tail + { + result = args val + } + | f_block_optarg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | f_rest_arg opt_block_args_tail + { + result = args val + } + | f_rest_arg tCOMMA f_arg opt_block_args_tail + { + result = args val + } + | block_args_tail + { + result = args val + } + + opt_block_param: none { result = 0 } + | block_param_def + { + self.lexer.command_start = true + } + + block_param_def: tPIPE opt_bv_decl tPIPE + { + # TODO: current_arg = 0 + result = args val + } + | tOROP + { + result = s(:args).line lexer.lineno + } + | tPIPE block_param opt_bv_decl tPIPE + { + # TODO: current_arg = 0 + result = args val + } + + opt_bv_decl: opt_nl + | opt_nl tSEMI bv_decls opt_nl + { + result = args val + } + + bv_decls: bvar + { + result = args val + } + | bv_decls tCOMMA bvar + { + result = args val + } + + bvar: tIDENTIFIER + { + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line + } + | f_bad_arg + + lambda: { + self.env.extend :dynamic + result = [lexer.lineno, lexer.lpar_beg] + lexer.paren_nest += 1 + lexer.lpar_beg = lexer.paren_nest + } + f_larglist + { + lexer.cmdarg.push false + } + lambda_body + { + (line, lpar), args, _cmdarg, body = val + lexer.lpar_beg = lpar + + lexer.cmdarg.pop + + call = s(:lambda).line line + result = new_iter call, args, body + result.line = line + self.env.unextend # TODO: dynapush & dynapop + } + + f_larglist: tLPAREN2 f_args opt_bv_decl rparen + { + result = args val + } + | f_args + { + result = val[0] + result = 0 if result == s(:args) + } + + lambda_body: tLAMBEG compstmt tRCURLY + { + result = val[1] + } + | kDO_LAMBDA bodystmt kEND + { + result = val[1] + } + + do_block: k_do_block do_body kEND + { + (_, line), iter, _ = val + result = iter.line line + } + + block_call: command do_block + { + # TODO: + ## if (nd_type($1) == NODE_YIELD) { + ## compile_error(PARSER_ARG "block given to yield"); + + syntax_error "Both block arg and actual block given." if + val[0].block_pass? + + val = invert_block_call val if inverted? val + + cmd, blk = val + + result = blk + result.insert 1, cmd + } + | block_call call_op2 operation2 opt_paren_args + { + result = new_call val[0], val[2].to_sym, val[3] + } + | block_call call_op2 operation2 opt_paren_args brace_block + { + iter1, _, name, args, iter2 = val + + call = new_call iter1, name.to_sym, args + iter2.insert 1, call + + result = iter2 + } + | block_call call_op2 operation2 command_args do_block + { + iter1, _, name, args, iter2 = val + + call = new_call iter1, name.to_sym, args + iter2.insert 1, call + + result = iter2 + } + + method_call: fcall + { + result = self.lexer.lineno + } + paren_args + { + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno + } + | primary_value call_op operation2 opt_paren_args + { + result = new_call val[0], val[2].to_sym, val[3], val[1] + } + | primary_value tCOLON2 operation2 paren_args + { + result = new_call val[0], val[2].to_sym, val[3] + } + | primary_value tCOLON2 operation3 + { + result = new_call val[0], val[2].to_sym + } + | primary_value call_op paren_args + { + result = new_call val[0], :call, val[2], val[1] + } + | primary_value tCOLON2 paren_args + { + result = new_call val[0], :call, val[2] + } + | kSUPER paren_args + { + result = new_super val[1] + } + | kSUPER + { + result = s(:zsuper).line lexer.lineno + } + | primary_value tLBRACK2 opt_call_args rbracket + { + result = new_aref val + } + + brace_block: tLCURLY + { + self.env.extend :dynamic + result = self.lexer.lineno + } + brace_body tRCURLY + { + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + } + | k_do + { + self.env.extend :dynamic + result = self.lexer.lineno + } + do_body kEND + { + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend + } + + brace_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { result = lexer.cmdarg.store(false) } + opt_block_param compstmt + { + line, cmdarg, param, cmpstmt = val + + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + } + + do_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { lexer.cmdarg.push false } + opt_block_param + bodystmt + { + line, _cmdarg, param, cmpstmt = val + + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop + self.env.unextend + } + + case_body: k_when + { + result = self.lexer.lineno + } + args then compstmt cases + { + result = new_when(val[2], val[4]) + result.line = val[1] + result << val[5] if val[5] + } + + cases: opt_else | case_body + + opt_rescue: k_rescue exc_list exc_var then compstmt opt_rescue + { + (_, line), klasses, var, _, body, rest = val + + klasses ||= s(:array) + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var + klasses.line line + + result = new_resbody(klasses, body) + result << rest if rest # UGH, rewritten above + } + | + { + result = nil + } + + exc_list: arg_value + { + arg, = val + result = s(:array, arg).line arg.line + } + | mrhs + | none + + exc_var: tASSOC lhs + { + result = val[1] + } + | none + + opt_ensure: k_ensure compstmt + { + (_, line), body = val + + result = body || s(:nil).line(line) + } + | none + + literal: numeric + { + line = lexer.lineno + result = s(:lit, val[0]) + result.line = line + } + | symbol + { + line = lexer.lineno + result = s(:lit, val[0]) + result.line = line + } + | dsym + + strings: string + { + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str + } + + string: tCHAR + { + debug20 23, val, result + } + | string1 + | string string1 + { + result = self.literal_concat val[0], val[1] + } + + string1: tSTRING_BEG string_contents tSTRING_END + { + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str + } + | tSTRING + { + result = new_string val + } + + xstring: tXSTRING_BEG xstring_contents tSTRING_END + { + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? + } + + regexp: tREGEXP_BEG regexp_contents tREGEXP_END + { + result = new_regexp val + } + + words: tWORDS_BEG tSPACE tSTRING_END + { + result = s(:array).line lexer.lineno + } + | tWORDS_BEG word_list tSTRING_END + { + result = val[1] + } + + word_list: none + { + result = new_word_list + } + | word_list word tSPACE + { + result = val[0].dup << new_word_list_entry(val) + } + + word: string_content + | word string_content + { + result = self.literal_concat val[0], val[1] + } + + symbols: tSYMBOLS_BEG tSPACE tSTRING_END + { + result = s(:array).line lexer.lineno + } + | tSYMBOLS_BEG { result = lexer.lineno } symbol_list tSTRING_END + { + _, line, list, _, = val + list.line = line + result = list + } + + symbol_list: none + { + result = new_symbol_list.line lexer.lineno + } + | symbol_list word tSPACE + { + list, * = val + result = list.dup << new_symbol_list_entry(val) + } + + qwords: tQWORDS_BEG tSPACE tSTRING_END + { + result = s(:array).line lexer.lineno + } + | tQWORDS_BEG qword_list tSTRING_END + { + result = val[1] + } + + qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END + { + result = s(:array).line lexer.lineno # FIX + } + | tQSYMBOLS_BEG qsym_list tSTRING_END + { + result = val[1] + } + + qword_list: none + { + result = new_qword_list + } + | qword_list tSTRING_CONTENT tSPACE + { + result = val[0].dup << new_qword_list_entry(val) + } + + qsym_list: none + { + result = new_qsym_list + } + | qsym_list tSTRING_CONTENT tSPACE + { + result = val[0].dup << new_qsym_list_entry(val) + } + + string_contents: none + { + result = s(:str, "").line lexer.lineno + } + | string_contents string_content + { + v1, v2 = val + result = literal_concat v1, v2 + } + +xstring_contents: none + { + result = nil + } + | xstring_contents string_content + { + v1, v2 = val + result = literal_concat v1, v2 + } + +regexp_contents: none + { + result = nil + } + | regexp_contents string_content + { + v1, v2 = val + result = literal_concat v1, v2 + } + + string_content: tSTRING_CONTENT + { + result = new_string val + } + | tSTRING_DVAR + { + result = lexer.lex_strterm + + lexer.lex_strterm = nil + lexer.lex_state = EXPR_BEG + } + string_dvar + { + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line + } + | tSTRING_DBEG + { + result = [lexer.lex_strterm, + lexer.brace_nest, + lexer.string_nest, # TODO: remove + lexer.lex_state, + lexer.lineno, + ] + + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_strterm = nil + lexer.brace_nest = 0 + lexer.string_nest = 0 + + lexer.lex_state = EXPR_BEG + } + compstmt + tSTRING_DEND + { + _, memo, stmt, _ = val + + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent + + lexer.lex_strterm = lex_strterm + lexer.brace_nest = brace_nest + lexer.string_nest = string_nest + + lexer.cmdarg.pop + lexer.cond.pop + + lexer.lex_state = oldlex_state + + case stmt + when Sexp then + case stmt.sexp_type + when :str, :dstr, :evstr then + result = stmt + else + result = s(:evstr, stmt).line line + end + when nil then + result = s(:evstr).line line + else + debug20 25 + raise "unknown string body: #{stmt.inspect}" + end + } + + string_dvar: tGVAR { result = s(:gvar, val[0].to_sym).line lexer.lineno } + | tIVAR { result = s(:ivar, val[0].to_sym).line lexer.lineno } + | tCVAR { result = s(:cvar, val[0].to_sym).line lexer.lineno } + | backref + + symbol: tSYMBEG sym + { + lexer.lex_state = EXPR_END + result = val[1].to_sym + } + | tSYMBOL + { + result = val[0].to_sym + } + + sym: fname | tIVAR | tGVAR | tCVAR + + dsym: tSYMBEG xstring_contents tSTRING_END + { + _, result, _ = val + + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno + + case result.sexp_type + when :dstr then + result.sexp_type = :dsym + when :str then + result = s(:lit, result.last.to_sym).line result.line + when :evstr then + result = s(:dsym, "", result).line result.line + else + debug20 26, val, result + end + } + + numeric: simple_numeric + | tUMINUS_NUM simple_numeric + { + result = -val[1] # TODO: pt_testcase + } + + simple_numeric: tINTEGER + | tFLOAT + | tRATIONAL + | tIMAGINARY + + user_variable: tIDENTIFIER + | tIVAR + | tGVAR + | tCONSTANT + | tCVAR + +keyword_variable: kNIL { result = s(:nil).line lexer.lineno } + | kSELF { result = s(:self).line lexer.lineno } + | kTRUE { result = s(:true).line lexer.lineno } + | kFALSE { result = s(:false).line lexer.lineno } + | k__FILE__ { result = s(:str, self.file).line lexer.lineno } + | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno } + | k__ENCODING__ + { + l = lexer.lineno + result = + if defined? Encoding then + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l + else + s(:str, "Unsupported!").line l + end + } + + var_ref: user_variable + { + var = val[0] + result = Sexp === var ? var : self.gettable(var) + } + | keyword_variable + { + var = val[0] + result = Sexp === var ? var : self.gettable(var) + } + + var_lhs: user_variable + { + result = self.assignable val[0] + } + | keyword_variable + { + result = self.assignable val[0] + debug20 29, val, result + } + + backref: tNTH_REF { result = s(:nth_ref, val[0]).line lexer.lineno } + | tBACK_REF { result = s(:back_ref, val[0]).line lexer.lineno } + + superclass: tLT + { + lexer.lex_state = EXPR_BEG + lexer.command_start = true + } + expr_value term + { + result = val[2] + } + | none + { + result = nil + } + + f_arglist: tLPAREN2 f_args rparen + { + result = val[1] + self.lexer.lex_state = EXPR_BEG + self.lexer.command_start = true + } + | { + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + } + f_args term + { + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true + } + + args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg + { + result = args val + } + | f_kwarg opt_f_block_arg + { + result = args val + } + | f_kwrest opt_f_block_arg + { + result = args val + } + | f_block_arg + + opt_args_tail: tCOMMA args_tail + { + result = val[1] + } + | + { + result = nil + } + + f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail + { + result = args val + } + | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail + { + result = args val + } + | f_arg tCOMMA f_optarg opt_args_tail + { + result = args val + } + | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail + { + result = args val + } + | f_arg tCOMMA f_rest_arg opt_args_tail + { + result = args val + } + | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail + { + result = args val + } + | f_arg opt_args_tail + { + result = args val + } + | f_optarg tCOMMA f_rest_arg opt_args_tail + { + result = args val + } + | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail + { + result = args val + } + | f_optarg opt_args_tail + { + result = args val + } + | f_optarg tCOMMA f_arg opt_args_tail + { + result = args val + } + | f_rest_arg opt_args_tail + { + result = args val + } + | f_rest_arg tCOMMA f_arg opt_args_tail + { + result = args val + } + | args_tail + { + result = args val + } + | + { + result = args val + } + + f_bad_arg: tCONSTANT + { + yyerror "formal argument cannot be a constant" + } + | tIVAR + { + yyerror "formal argument cannot be an instance variable" + } + | tGVAR + { + yyerror "formal argument cannot be a global variable" + } + | tCVAR + { + yyerror "formal argument cannot be a class variable" + } + + f_norm_arg: f_bad_arg + | tIDENTIFIER + { + identifier = val[0].to_sym + self.env[identifier] = :lvar + + result = identifier + } + + f_arg_asgn: f_norm_arg + + f_arg_item: f_arg_asgn + | tLPAREN f_margs rparen + { + result = val[1] + } + + f_arg: f_arg_item + { + arg, = val + + case arg + when Symbol then + result = s(:args, arg).line lexer.lineno + when Sexp then + result = arg + else + debug20 32 + raise "Unknown f_arg type: #{val.inspect}" + end + } + | f_arg tCOMMA f_arg_item + { + list, _, item = val + + if list.sexp_type == :args then + result = list + else + result = s(:args, list).line list.line + end + + result << item + } + + f_label: tLABEL + + f_kw: f_label arg_value + { + # TODO: new_kw_arg + (label, line), arg = val + + identifier = label.to_sym + self.env[identifier] = :lvar + + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line + } + | f_label + { + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line + } + + f_block_kw: f_label primary_value + { + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id, expr).line(line)).line line + } + | f_label + { + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar + + result = s(:array, s(:kwarg, id).line(line)).line line + } + + f_block_kwarg: f_block_kw + | f_block_kwarg tCOMMA f_block_kw + { + list, _, item = val + result = list << item.last + } + + f_kwarg: f_kw + | f_kwarg tCOMMA f_kw + { + result = args val + } + + kwrest_mark: tPOW + | tDSTAR + + f_kwrest: kwrest_mark tIDENTIFIER + { + name = val[1].to_sym + self.assignable name + result = :"**#{name}" + } + | kwrest_mark + { + result = :"**" + } + + f_opt: f_arg_asgn tEQL arg_value + { + result = self.assignable val[0], val[2] + # TODO: detect duplicate names + } + + f_block_opt: f_arg_asgn tEQL primary_value + { + result = self.assignable val[0], val[2] + } + + f_block_optarg: f_block_opt + { + optblk, = val + result = s(:block, optblk).line optblk.line + } + | f_block_optarg tCOMMA f_block_opt + { + optarg, _, optblk = val + result = optarg + result << optblk + } + + f_optarg: f_opt + { + opt, = val + result = s(:block, opt).line opt.line + } + | f_optarg tCOMMA f_opt + { + result = self.block_append val[0], val[2] + } + + restarg_mark: tSTAR2 | tSTAR + + f_rest_arg: restarg_mark tIDENTIFIER + { + # TODO: differs from parse.y - needs tests + name = val[1].to_sym + self.assignable name + result = :"*#{name}" + } + | restarg_mark + { + name = :"*" + self.env[name] = :lvar + result = name + } + + blkarg_mark: tAMPER2 | tAMPER + + f_block_arg: blkarg_mark tIDENTIFIER + { + identifier = val[1].to_sym + + self.env[identifier] = :lvar + result = "&#{identifier}".to_sym + } + + opt_f_block_arg: tCOMMA f_block_arg + { + result = val[1] + } + | + { + result = nil + } + + singleton: var_ref + | tLPAREN2 + { + lexer.lex_state = EXPR_BEG + } + expr rparen + { + result = val[2] + yyerror "Can't define single method for literals." if + result.sexp_type == :lit + } + + assoc_list: none + { + result = s(:array).line lexer.lineno + } + | assocs trailer + + assocs: assoc + | assocs tCOMMA assoc + { + list = val[0].dup + more = val[2].sexp_body + list.push(*more) unless more.empty? + result = list + result.sexp_type = :hash + } + + assoc: arg_value tASSOC arg_value + { + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line + } + | tLABEL arg_value + { + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line + } + | tSTRING_BEG string_contents tLABEL_END arg_value + { + _, sym, _, value = val + sym.sexp_type = :dsym + result = s(:array, sym, value).line sym.line + } + | tDSTAR arg_value + { + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line + } + + operation: tIDENTIFIER | tCONSTANT | tFID + operation2: tIDENTIFIER | tCONSTANT | tFID | op + operation3: tIDENTIFIER | tFID | op + dot_or_colon: tDOT | tCOLON2 + call_op: tDOT + | tLONELY # TODO: rename tANDDOT? + + call_op2: call_op + | tCOLON2 + + opt_terms: | terms + opt_nl: | tNL + rparen: opt_nl tRPAREN + rbracket: opt_nl tRBRACK + trailer: | tNL | tCOMMA + + term: tSEMI { yyerrok } + | tNL + + terms: term + | terms tSEMI { yyerrok } + + none: { result = nil; } +end + +---- inner + +require "ruby_lexer" +require "ruby_parser_extras" +include RubyLexer::State::Values + +# :stopdoc: + +# Local Variables: ** +# racc-token-length-max:14 ** +# End: ** diff -Nru ruby-ruby-parser-3.11.0/lib/ruby_lexer.rb ruby-ruby-parser-3.15.1/lib/ruby_lexer.rb --- ruby-ruby-parser-3.11.0/lib/ruby_lexer.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby_lexer.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,38 +1,12 @@ +# frozen_string_literal: true # encoding: UTF-8 $DEBUG = true if ENV["DEBUG"] class RubyLexer - # :stopdoc: - HAS_ENC = "".respond_to? :encoding - - IDENT_CHAR = if HAS_ENC then - /[\w\u0080-\u{10ffff}]/u - else - /[\w\x80-\xFF]/n - end - EOF = :eof_haha! - # ruby constants for strings (should this be moved somewhere else?) - - STR_FUNC_BORING = 0x00 - STR_FUNC_ESCAPE = 0x01 # TODO: remove and replace with REGEXP - STR_FUNC_EXPAND = 0x02 - STR_FUNC_REGEXP = 0x04 - STR_FUNC_QWORDS = 0x08 - STR_FUNC_SYMBOL = 0x10 - STR_FUNC_INDENT = 0x20 # <<-HEREDOC - STR_FUNC_ICNTNT = 0x40 # <<~HEREDOC - - STR_SQUOTE = STR_FUNC_BORING - STR_DQUOTE = STR_FUNC_BORING | STR_FUNC_EXPAND - STR_XQUOTE = STR_FUNC_BORING | STR_FUNC_EXPAND - STR_REGEXP = STR_FUNC_REGEXP | STR_FUNC_ESCAPE | STR_FUNC_EXPAND - STR_SSYM = STR_FUNC_SYMBOL - STR_DSYM = STR_FUNC_SYMBOL | STR_FUNC_EXPAND - ESCAPES = { "a" => "\007", "b" => "\010", @@ -49,6 +23,8 @@ "c\?" => 127.chr, } + HAS_ENC = "".respond_to? :encoding + TOKENS = { "!" => :tBANG, "!=" => :tNEQ, @@ -65,18 +41,31 @@ "->" => :tLAMBDA, } - TAB_WIDTH = 8 - - @@regexp_cache = Hash.new { |h,k| h[k] = Regexp.new(Regexp.escape(k)) } + @@regexp_cache = Hash.new { |h, k| h[k] = Regexp.new(Regexp.escape(k)) } @@regexp_cache[nil] = nil + if $DEBUG then + attr_reader :lex_state + + def lex_state= o + return if @lex_state == o + raise ArgumentError, "bad state: %p" % [o] unless State === o + + warn "lex_state: %p -> %p" % [lex_state, o] + + @lex_state = o + end + end + # :startdoc: + attr_accessor :lex_state unless $DEBUG + attr_accessor :lineno # we're bypassing oedipus' lineno handling. attr_accessor :brace_nest attr_accessor :cmdarg attr_accessor :command_start - attr_accessor :command_state + attr_accessor :cmd_state # temporary--ivar to avoid passing everywhere attr_accessor :last_state attr_accessor :cond attr_accessor :extra_lineno @@ -85,7 +74,6 @@ # Additional context surrounding tokens that both the lexer and # grammar use. - attr_accessor :lex_state attr_accessor :lex_strterm attr_accessor :lpar_beg attr_accessor :paren_nest @@ -94,50 +82,38 @@ attr_accessor :string_buffer attr_accessor :string_nest - if $DEBUG then - alias lex_state= lex_state= - def lex_state=o - return if @lex_state == o - c = caller.first - c = caller[1] if c =~ /\bresult\b/ - warn "lex_state: %p -> %p from %s" % [@lex_state, o, c.clean_caller] - @lex_state = o - end - end - # Last token read via next_token. attr_accessor :token - ## - # What version of ruby to parse. 18 and 19 are the only valid values - # currently supported. - - attr_accessor :version - attr_writer :comments - def initialize v = 18 - self.version = v - @lex_state = :expr_none + def initialize _ = nil + @lex_state = nil # remove one warning under $DEBUG + self.lex_state = EXPR_NONE - self.cmdarg = RubyParserStuff::StackState.new(:cmdarg, $DEBUG) self.cond = RubyParserStuff::StackState.new(:cond, $DEBUG) + self.cmdarg = RubyParserStuff::StackState.new(:cmdarg, $DEBUG) reset end def arg_ambiguous - self.warning("Ambiguous first argument. make sure.") + self.warning "Ambiguous first argument. make sure." end def arg_state - in_arg_state? ? :expr_arg : :expr_beg + is_after_operator? ? EXPR_ARG : EXPR_BEG end def beginning_of_line? ss.bol? end - alias :bol? :beginning_of_line? # to make .rex file more readable + + alias bol? beginning_of_line? # to make .rex file more readable + + def check re + ss.check re + end def comments # TODO: remove this... maybe comment_string + attr_accessor c = @comments.join @@ -145,30 +121,41 @@ c end + def eat_whitespace + r = scan(/\s+/) + self.extra_lineno += r.count("\n") if r + r + end + def end_of_stream? ss.eos? end def expr_dot? - lex_state == :expr_dot + lex_state =~ EXPR_DOT end - def expr_fname? - lex_state == :expr_fname + def expr_fname? # REFACTOR + lex_state =~ EXPR_FNAME end def expr_result token, text cond.push false cmdarg.push false - result :expr_beg, token, text + result EXPR_BEG, token, text + end + + def fixup_lineno extra = 0 + self.lineno += self.extra_lineno + extra + self.extra_lineno = 0 end def heredoc here # TODO: rewrite / remove _, eos, func, last_line = here - indent = (func & STR_FUNC_INDENT) != 0 ? "[ \t]*" : nil - content_indent = (func & STR_FUNC_ICNTNT) != 0 - expand = (func & STR_FUNC_EXPAND) != 0 + indent = func =~ STR_FUNC_INDENT ? "[ \t]*" : nil + expand = func =~ STR_FUNC_EXPAND + eol = last_line && last_line.end_with?("\r\n") ? "\r\n" : "\n" eos_re = /#{indent}#{Regexp.escape eos}(\r*\n|\z)/ err_msg = "can't match #{eos_re.inspect} anywhere in " @@ -177,30 +164,35 @@ if beginning_of_line? && scan(eos_re) then self.lineno += 1 ss.unread_many last_line # TODO: figure out how to remove this - return :tSTRING_END, eos + return :tSTRING_END, [eos, func] # TODO: calculate squiggle width at lex? end self.string_buffer = [] if expand then case - when scan(/#[$@]/) then - ss.pos -= 1 # FIX omg stupid + when scan(/#(?=\$(-.|[a-zA-Z_0-9~\*\$\?!@\/\\;,\.=:<>\"\&\`\'+]))/) then + # TODO: !ISASCII + # ?! see parser_peek_variable_name + return :tSTRING_DVAR, matched + when scan(/#(?=\@\@?[a-zA-Z_])/) then + # TODO: !ISASCII return :tSTRING_DVAR, matched when scan(/#[{]/) then + self.command_start = true return :tSTRING_DBEG, matched when scan(/#/) then - string_buffer << '#' + string_buffer << "#" end begin - c = tokadd_string func, "\n", nil + c = tokadd_string func, eol, nil rb_compile_error err_msg if c == RubyLexer::EOF - if c != "\n" then - return :tSTRING_CONTENT, string_buffer.join.delete("\r") + if c != eol then + return :tSTRING_CONTENT, string_buffer.join else string_buffer << scan(/\n/) end @@ -216,64 +208,26 @@ self.lex_strterm = [:heredoc, eos, func, last_line] - string_content = string_buffer.join.delete("\r") - - string_content = heredoc_dedent(string_content) if content_indent && ruby23plus? + string_content = begin + s = string_buffer.join + s.b.force_encoding Encoding::UTF_8 + end return :tSTRING_CONTENT, string_content end - def heredoc_dedent(string_content) - width = string_content.scan(/^[ \t]*(?=\S)/).map do |whitespace| - heredoc_whitespace_indent_size whitespace - end.min || 0 - - string_content.split("\n", -1).map do |line| - dedent_string line, width - end.join "\n" - end - - def dedent_string(string, width) - characters_skipped = 0 - indentation_skipped = 0 - - string.chars.each do |char| - break if indentation_skipped >= width - if char == ' ' - characters_skipped += 1 - indentation_skipped += 1 - elsif char == "\t" - proposed = TAB_WIDTH * (indentation_skipped / TAB_WIDTH + 1) - break if (proposed > width) - characters_skipped += 1 - indentation_skipped = proposed - end - end - string[characters_skipped..-1] - end - - def heredoc_whitespace_indent_size(whitespace) - whitespace.chars.inject 0 do |size, char| - if char == "\t" - size + TAB_WIDTH - else - size + 1 - end - end - end - def heredoc_identifier # TODO: remove / rewrite term, func = nil, STR_FUNC_BORING self.string_buffer = [] - heredoc_indent_mods = '-' + heredoc_indent_mods = "-" heredoc_indent_mods += '\~' if ruby23plus? case when scan(/([#{heredoc_indent_mods}]?)([\'\"\`])(.*?)\2/) then term = ss[2] - func |= STR_FUNC_INDENT unless ss[1].empty? - func |= STR_FUNC_ICNTNT if ss[1] == '~' + func |= STR_FUNC_INDENT unless ss[1].empty? # TODO: this seems wrong + func |= STR_FUNC_ICNTNT if ss[1] == "~" func |= case term when "\'" then STR_SQUOTE @@ -290,7 +244,7 @@ func |= STR_DQUOTE unless ss[1].empty? then func |= STR_FUNC_INDENT - func |= STR_FUNC_ICNTNT if ss[1] == '~' + func |= STR_FUNC_ICNTNT if ss[1] == "~" end string_buffer << ss[2] else @@ -306,23 +260,15 @@ self.lex_strterm = [:heredoc, string_buffer.join, func, line] - if term == '`' then + if term == "`" then result nil, :tXSTRING_BEG, "`" else result nil, :tSTRING_BEG, "\"" end end - def in_fname? - in_lex_state? :expr_fname - end - - def in_arg_state? # TODO: rename is_after_operator? - in_lex_state? :expr_fname, :expr_dot - end - - def in_lex_state?(*states) - states.include? lex_state + def in_fname? # REFACTOR + lex_state =~ EXPR_FNAME end def int_with_base base @@ -330,35 +276,35 @@ text = matched case - when text.end_with?('ri') - return result(:expr_end, :tIMAGINARY, Complex(0, Rational(text.chop.chop.to_i(base)))) - when text.end_with?('r') - return result(:expr_end, :tRATIONAL, Rational(text.chop.to_i(base))) - when text.end_with?('i') - return result(:expr_end, :tIMAGINARY, Complex(0, text.chop.to_i(base))) + when text.end_with?("ri") + return result(EXPR_NUM, :tIMAGINARY, Complex(0, Rational(text.chop.chop.to_i(base)))) + when text.end_with?("r") + return result(EXPR_NUM, :tRATIONAL, Rational(text.chop.to_i(base))) + when text.end_with?("i") + return result(EXPR_NUM, :tIMAGINARY, Complex(0, text.chop.to_i(base))) else - return result(:expr_end, :tINTEGER, text.to_i(base)) + return result(EXPR_NUM, :tINTEGER, text.to_i(base)) end end + def is_after_operator? + lex_state =~ EXPR_FNAME|EXPR_DOT + end + def is_arg? - in_lex_state? :expr_arg, :expr_cmdarg + lex_state =~ EXPR_ARG_ANY end def is_beg? - in_lex_state? :expr_beg, :expr_value, :expr_mid, :expr_class, :expr_labelarg + lex_state =~ EXPR_BEG_ANY || lex_state == EXPR_LAB # yes, == EXPR_LAB end def is_end? - in_lex_state? :expr_end, :expr_endarg, :expr_endfn - end - - def ruby22_label? - ruby22plus? and is_label_possible? + lex_state =~ EXPR_END_ANY end def is_label_possible? - (in_lex_state?(:expr_beg, :expr_endfn) && !command_state) || is_arg? + (lex_state =~ EXPR_LABEL|EXPR_ENDFN && !cmd_state) || is_arg? end def is_label_suffix? @@ -369,6 +315,20 @@ is_arg? and space_seen and c !~ /\s/ end + def lambda_beginning? + lpar_beg && lpar_beg == paren_nest + end + + def is_local_id id + # maybe just make this false for now + self.parser.env[id.to_sym] == :lvar # HACK: this isn't remotely right + end + + def lvar_defined? id + # TODO: (dyna_in_block? && dvar_defined?(id)) || local_id?(id) + self.parser.env[id.to_sym] == :lvar + end + def matched ss.matched end @@ -377,11 +337,139 @@ not is_end? end + def parse_quote # TODO: remove / rewrite + beg, nnd, short_hand, c = nil, nil, false, nil + + if scan(/[a-z0-9]{1,2}/i) then # Long-hand (e.g. %Q{}). + rb_compile_error "unknown type of %string" if ss.matched_size == 2 + c, beg, short_hand = matched, getch, false + else # Short-hand (e.g. %{, %., %!, etc) + c, beg, short_hand = "Q", getch, true + end + + if end_of_stream? or c == RubyLexer::EOF or beg == RubyLexer::EOF then + rb_compile_error "unterminated quoted string meets end of file" + end + + # Figure nnd-char. "\0" is special to indicate beg=nnd and that no nesting? + nnd = { "(" => ")", "[" => "]", "{" => "}", "<" => ">" }[beg] + nnd, beg = beg, "\0" if nnd.nil? + + token_type, text = nil, "%#{c}#{beg}" + token_type, string_type = case c + when "Q" then + ch = short_hand ? nnd : c + beg + text = "%#{ch}" + [:tSTRING_BEG, STR_DQUOTE] + when "q" then + [:tSTRING_BEG, STR_SQUOTE] + when "W" then + eat_whitespace + [:tWORDS_BEG, STR_DQUOTE | STR_FUNC_QWORDS] + when "w" then + eat_whitespace + [:tQWORDS_BEG, STR_SQUOTE | STR_FUNC_QWORDS] + when "x" then + [:tXSTRING_BEG, STR_XQUOTE] + when "r" then + [:tREGEXP_BEG, STR_REGEXP] + when "s" then + self.lex_state = EXPR_FNAME + [:tSYMBEG, STR_SSYM] + when "I" then + eat_whitespace + [:tSYMBOLS_BEG, STR_DQUOTE | STR_FUNC_QWORDS] + when "i" then + eat_whitespace + [:tQSYMBOLS_BEG, STR_SQUOTE | STR_FUNC_QWORDS] + end + + rb_compile_error "Bad %string type. Expected [QqWwIixrs], found '#{c}'." if + token_type.nil? + + raise "huh" unless string_type + + string string_type, nnd, beg + + return token_type, text + end + + def parse_string quote # TODO: rewrite / remove + _, string_type, term, open = quote + + space = false # FIX: remove these + func = string_type + paren = open + term_re = @@regexp_cache[term] + + qwords = func =~ STR_FUNC_QWORDS + regexp = func =~ STR_FUNC_REGEXP + expand = func =~ STR_FUNC_EXPAND + + unless func then # nil'ed from qwords below. *sigh* + return :tSTRING_END, nil + end + + space = true if qwords and eat_whitespace + + if self.string_nest == 0 && scan(/#{term_re}/) then + if qwords then + quote[1] = nil + return :tSPACE, nil + elsif regexp then + return :tREGEXP_END, self.regx_options + else + return :tSTRING_END, term + end + end + + return :tSPACE, nil if space + + self.string_buffer = [] + + if expand + case + when scan(/#(?=\$(-.|[a-zA-Z_0-9~\*\$\?!@\/\\;,\.=:<>\"\&\`\'+]))/) then + # TODO: !ISASCII + # ?! see parser_peek_variable_name + return :tSTRING_DVAR, nil + when scan(/#(?=\@\@?[a-zA-Z_])/) then + # TODO: !ISASCII + return :tSTRING_DVAR, nil + when scan(/#[{]/) then + self.command_start = true + return :tSTRING_DBEG, nil + when scan(/#/) then + string_buffer << "#" + end + end + + if tokadd_string(func, term, paren) == RubyLexer::EOF then + if func =~ STR_FUNC_REGEXP then + rb_compile_error "unterminated regexp meets end of file" + else + rb_compile_error "unterminated string meets end of file" + end + end + + return :tSTRING_CONTENT, string_buffer.join + end + + def possibly_escape_string text, check + content = match[1] + + if text =~ check then + content.gsub(ESC) { unescape $1 } + else + content.gsub(/\\\\/, "\\").gsub(/\\\'/, "'") + end + end + def process_amper text token = if is_arg? && space_seen && !check(/\s/) then warning("`&' interpreted as argument prefix") :tAMPER - elsif in_lex_state? :expr_beg, :expr_mid then + elsif lex_state =~ EXPR_BEG|EXPR_MID then :tAMPER else :tAMPER2 @@ -393,7 +481,7 @@ def process_backref text token = ss[1].to_sym # TODO: can't do lineno hack w/ symbol - result :expr_end, :tBACK_REF, token + result EXPR_END, :tBACK_REF, token end def process_begin text @@ -410,38 +498,68 @@ nil # TODO end - def process_bracing text - cond.lexpop - cmdarg.lexpop - + def process_brace_close text case matched when "}" then self.brace_nest -= 1 - self.lex_state = :expr_endarg + return :tSTRING_DEND, matched if brace_nest < 0 + end - # TODO - # if (c == '}') { - # if (!brace_nest--) c = tSTRING_DEND; - # } + # matching compare/parse26.y:8099 + cond.pop + cmdarg.pop + case matched + when "}" then + self.lex_state = ruby24minus? ? EXPR_ENDARG : EXPR_END return :tRCURLY, matched when "]" then self.paren_nest -= 1 - self.lex_state = :expr_endarg + self.lex_state = ruby24minus? ? EXPR_ENDARG : EXPR_END return :tRBRACK, matched when ")" then self.paren_nest -= 1 - self.lex_state = :expr_endfn + self.lex_state = EXPR_ENDFN return :tRPAREN, matched else raise "Unknown bracing: #{matched.inspect}" end end + def process_brace_open text + # matching compare/parse23.y:8694 + self.brace_nest += 1 + + if lambda_beginning? then + self.lpar_beg = nil + self.paren_nest -= 1 # close arg list when lambda opens body + + return expr_result(:tLAMBEG, "{") + end + + token = case + when lex_state =~ EXPR_LABELED then + :tLBRACE # hash + when lex_state =~ EXPR_ARG_ANY|EXPR_END|EXPR_ENDFN then + :tLCURLY # block (primary) "{" in parse.y + when lex_state =~ EXPR_ENDARG then + :tLBRACE_ARG # block (expr) + else + :tLBRACE # hash + end + + state = token == :tLBRACE_ARG ? EXPR_BEG : EXPR_PAR + self.command_start = true if token != :tLBRACE + + cond.push false + cmdarg.push false + result state, token, text + end + def process_colon1 text # ?: / then / when if is_end? || check(/\s/) then - return result :expr_beg, :tCOLON, text + return result EXPR_BEG, :tCOLON, text end case @@ -451,92 +569,96 @@ string STR_DSYM end - result :expr_fname, :tSYMBEG, text + result EXPR_FNAME, :tSYMBEG, text end def process_colon2 text - if is_beg? || in_lex_state?(:expr_class) || is_space_arg? then - result :expr_beg, :tCOLON3, text + if is_beg? || lex_state =~ EXPR_CLASS || is_space_arg? then + result EXPR_BEG, :tCOLON3, text else - result :expr_dot, :tCOLON2, text - end - end - - def process_curly_brace text - self.brace_nest += 1 - if lpar_beg && lpar_beg == paren_nest then - self.lpar_beg = nil - self.paren_nest -= 1 - - return expr_result(:tLAMBEG, "{") + result EXPR_DOT, :tCOLON2, text end - - token = if is_arg? || in_lex_state?(:expr_end, :expr_endfn) then - :tLCURLY # block (primary) - elsif in_lex_state?(:expr_endarg) then - :tLBRACE_ARG # block (expr) - else - :tLBRACE # hash - end - - self.command_start = true unless token == :tLBRACE - - return expr_result(token, "{") end def process_float text rb_compile_error "Invalid numeric format" if text =~ /__/ case - when text.end_with?('ri') - return result(:expr_end, :tIMAGINARY, Complex(0, Rational(text.chop.chop))) - when text.end_with?('r') - return result(:expr_end, :tRATIONAL, Rational(text.chop)) - when text.end_with?('i') - return result(:expr_end, :tIMAGINARY, Complex(0, text.chop.to_f)) + when text.end_with?("ri") + return result EXPR_NUM, :tIMAGINARY, Complex(0, Rational(text.chop.chop)) + when text.end_with?("i") + return result EXPR_NUM, :tIMAGINARY, Complex(0, text.chop.to_f) + when text.end_with?("r") + return result EXPR_NUM, :tRATIONAL, Rational(text.chop) else - return result(:expr_end, :tFLOAT, text.to_f) + return result EXPR_NUM, :tFLOAT, text.to_f end end def process_gvar text text.lineno = self.lineno - result(:expr_end, :tGVAR, text) + result EXPR_END, :tGVAR, text end def process_gvar_oddity text - return result :expr_end, "$", "$" if text == "$" # TODO: wtf is this? + return result EXPR_END, "$", "$" if text == "$" # TODO: wtf is this? rb_compile_error "#{text.inspect} is not allowed as a global variable name" end def process_ivar text tok_id = text =~ /^@@/ ? :tCVAR : :tIVAR text.lineno = self.lineno - return result(:expr_end, tok_id, text) + result EXPR_END, tok_id, text + end + + def process_label text + symbol = possibly_escape_string text, /^\"/ + + result EXPR_LAB, :tLABEL, [symbol, self.lineno] + end + + def process_label_or_string text + if @was_label && text =~ /:\Z/ then + @was_label = nil + return process_label text + elsif text =~ /:\Z/ then + ss.pos -= 1 # put back ":" + text = text[0..-2] + end + + result EXPR_END, :tSTRING, text[1..-2].gsub(/\\\\/, "\\").gsub(/\\\'/, "\'") end def process_lchevron text - if (!in_lex_state?(:expr_dot, :expr_class) && + if (lex_state !~ EXPR_DOT|EXPR_CLASS && !is_end? && - (!is_arg? || space_seen)) then + (!is_arg? || lex_state =~ EXPR_LABELED || space_seen)) then tok = self.heredoc_identifier return tok if tok end - return result(:arg_state, :tLSHFT, "\<\<") + if is_after_operator? then + self.lex_state = EXPR_ARG + else + self.command_start = true if lex_state =~ EXPR_CLASS + self.lex_state = EXPR_BEG + end + + return result(lex_state, :tLSHFT, "\<\<") end def process_newline_or_comment text c = matched hit = false - if c == '#' then + if c == "#" then ss.pos -= 1 + # TODO: handle magic comments while scan(/\s*\#.*(\n+|\z)/) do hit = true self.lineno += matched.lines.to_a.size - @comments << matched.gsub(/^ +#/, '#').gsub(/^ +$/, '') + @comments << matched.gsub(/^ +#/, "#").gsub(/^ +$/, "") end return nil if end_of_stream? @@ -547,8 +669,19 @@ # Replace a string of newlines with a single one self.lineno += matched.lines.to_a.size if scan(/\n+/) - return if in_lex_state?(:expr_beg, :expr_value, :expr_class, - :expr_fname, :expr_dot) + c = (lex_state =~ EXPR_BEG|EXPR_CLASS|EXPR_FNAME|EXPR_DOT && + lex_state !~ EXPR_LABELED) + # TODO: figure out what token_seen is for + if c || self.lex_state == EXPR_LAB then # yes, == EXPR_LAB + # ignore if !fallthrough? + if !c && parser.in_kwarg then + # normal newline + self.command_start = true + return result EXPR_BEG, :tNL, nil + else + return # skip + end + end if scan(/([\ \t\r\f\v]*)(\.|&)/) then self.space_seen = true unless ss[1].empty? @@ -559,64 +692,46 @@ self.command_start = true - return result(:expr_beg, :tNL, nil) + return result(EXPR_BEG, :tNL, nil) end def process_nthref text # TODO: can't do lineno hack w/ number - result :expr_end, :tNTH_REF, ss[1].to_i + result EXPR_END, :tNTH_REF, ss[1].to_i end def process_paren text - token = if ruby18 then - process_paren18 + token = if is_beg? then + :tLPAREN + elsif !space_seen then + # foo( ... ) => method call, no ambiguity + :tLPAREN2 + elsif is_space_arg? then + :tLPAREN_ARG + elsif lex_state =~ EXPR_ENDFN && !lambda_beginning? then + # TODO: + # warn("parentheses after method name is interpreted as " \ + # "an argument list, not a decomposed argument") + :tLPAREN2 else - process_paren19 + :tLPAREN2 # plain "(" in parse.y end self.paren_nest += 1 - # TODO: add :expr_label to :expr_beg (set in expr_result below) - return expr_result(token, "(") - end - - def process_paren18 - self.command_start = true - token = :tLPAREN2 - - if in_lex_state? :expr_beg, :expr_mid then - token = :tLPAREN - elsif space_seen then - if in_lex_state? :expr_cmdarg then - token = :tLPAREN_ARG - elsif in_lex_state? :expr_arg then - warning "don't put space before argument parentheses" - end - else - # not a ternary -- do nothing? - end - - token - end - - def process_paren19 - if is_beg? then - :tLPAREN - elsif is_space_arg? then - :tLPAREN_ARG - else - :tLPAREN2 # plain '(' in parse.y - end + cond.push false + cmdarg.push false + result EXPR_PAR, token, text end def process_percent text return parse_quote if is_beg? - return result(:expr_beg, :tOP_ASGN, "%") if scan(/\=/) + return result EXPR_BEG, :tOP_ASGN, "%" if scan(/\=/) - return parse_quote if is_arg? && space_seen && ! check(/\s/) + return parse_quote if is_space_arg?(check(/\s/)) || (lex_state =~ EXPR_FITEM && check(/s/)) - return result(:arg_state, :tPERCENT, "%") + return result :arg_state, :tPERCENT, "%" end def process_plus_minus text @@ -627,34 +742,33 @@ [:tUMINUS, :tMINUS] end - if in_arg_state? then + if is_after_operator? then if scan(/@/) then - return result(:expr_arg, utype, "#{sign}@") + return result(EXPR_ARG, utype, "#{sign}@") else - return result(:expr_arg, type, sign) + return result(EXPR_ARG, type, sign) end end - return result(:expr_beg, :tOP_ASGN, sign) if scan(/\=/) + return result(EXPR_BEG, :tOP_ASGN, sign) if scan(/\=/) - if (is_beg? || (is_arg? && space_seen && !check(/\s/))) then + if is_beg? || (is_arg? && space_seen && !check(/\s/)) then arg_ambiguous if is_arg? if check(/\d/) then return nil if utype == :tUPLUS - return result(:expr_beg, :tUMINUS_NUM, sign) + return result EXPR_BEG, :tUMINUS_NUM, sign end - return result(:expr_beg, utype, sign) + return result EXPR_BEG, utype, sign end - return result(:expr_beg, type, sign) + result EXPR_BEG, type, sign end def process_questionmark text if is_end? then - state = ruby18 ? :expr_beg : :expr_value # HACK? - return result(state, :tEH, "?") + return result EXPR_BEG, :tEH, "?" end if end_of_stream? then @@ -663,12 +777,12 @@ if check(/\s|\v/) then unless is_arg? then - c2 = { " " => 's', - "\n" => 'n', - "\t" => 't', - "\v" => 'v', - "\r" => 'r', - "\f" => 'f' }[matched] + c2 = { " " => "s", + "\n" => "n", + "\t" => "t", + "\v" => "v", + "\r" => "r", + "\f" => "f" }[matched] if c2 then warning("invalid character syntax; use ?\\" + c2) @@ -676,23 +790,28 @@ end # ternary - state = ruby18 ? :expr_beg : :expr_value # HACK? - return result(state, :tEH, "?") + return result EXPR_BEG, :tEH, "?" elsif check(/\w(?=\w)/) then # ternary, also - return result(:expr_beg, :tEH, "?") + return result EXPR_BEG, :tEH, "?" end c = if scan(/\\/) then self.read_escape else - ss.getch + getch end - if version == 18 then - return result(:expr_end, :tINTEGER, c[0].ord & 0xff) - else - return result(:expr_end, :tSTRING, c) - end + result EXPR_END, :tSTRING, c + end + + def process_simple_string text + replacement = text[1..-2].gsub(ESC) { + unescape($1).b.force_encoding Encoding::UTF_8 + } + + replacement = replacement.b unless replacement.valid_encoding? + + result EXPR_END, :tSTRING, replacement end def process_slash text @@ -703,7 +822,7 @@ end if scan(/\=/) then - return result(:expr_beg, :tOP_ASGN, "/") + return result(EXPR_BEG, :tOP_ASGN, "/") end if is_arg? && space_seen then @@ -722,62 +841,69 @@ token = nil - if in_arg_state? then + if is_after_operator? then case when scan(/\]\=/) then self.paren_nest -= 1 # HACK? I dunno, or bug in MRI - return result(:expr_arg, :tASET, "[]=") + return result EXPR_ARG, :tASET, "[]=" when scan(/\]/) then self.paren_nest -= 1 # HACK? I dunno, or bug in MRI - return result(:expr_arg, :tAREF, "[]") + return result EXPR_ARG, :tAREF, "[]" else rb_compile_error "unexpected '['" end elsif is_beg? then token = :tLBRACK - elsif is_arg? && space_seen then + elsif is_arg? && (space_seen || lex_state =~ EXPR_LABELED) then token = :tLBRACK else token = :tLBRACK2 end - return expr_result(token, "[") + cond.push false + cmdarg.push false + result EXPR_PAR, token, text end - def process_symbol text - symbol = match[1].gsub(ESC) { unescape $1 } - - rb_compile_error "symbol cannot contain '\\0'" if - ruby18 && symbol =~ /\0/ + def process_string # TODO: rewrite / remove + # matches top of parser_yylex in compare/parse23.y:8113 + token = if lex_strterm[0] == :heredoc then + self.heredoc lex_strterm + else + self.parse_string lex_strterm + end - return result(:expr_end, :tSYMBOL, symbol) - end + token_type, c = token - def was_label? - @was_label = ruby22_label? - true - end + # matches parser_string_term from 2.3, but way off from 2.5 + if ruby22plus? && token_type == :tSTRING_END && ["'", '"'].include?(c) then + if ((lex_state =~ EXPR_BEG|EXPR_ENDFN && + !cond.is_in_state) || is_arg?) && + is_label_suffix? then + scan(/:/) + token_type = token[0] = :tLABEL_END + end + end - def process_label_or_string text - if @was_label && text =~ /:\Z/ then - @was_label = nil - return process_label text - elsif text =~ /:\Z/ then - ss.pos -= 1 # put back ":" - text = text[0..-2] + if [:tSTRING_END, :tREGEXP_END, :tLABEL_END].include? token_type then + self.lex_strterm = nil + self.lex_state = (token_type == :tLABEL_END) ? EXPR_PAR : EXPR_LIT end - result :expr_end, :tSTRING, text[1..-2].gsub(/\\\\/, "\\").gsub(/\\'/, "'") + return token end - def process_label text - symbol = text[1..-3].gsub(ESC) { unescape $1 } + def process_symbol text + symbol = possibly_escape_string text, /^:\"/ # stupid emacs - result(:expr_labelarg, :tLABEL, [symbol, self.lineno]) + result EXPR_LIT, :tSYMBOL, symbol end def process_token text + # matching: parse_ident in compare/parse23.y:7989 # TODO: make this always return [token, lineno] + # FIX: remove: self.last_state = lex_state + token = self.token = text token << matched if scan(/[\!\?](?!=)/) @@ -785,7 +911,7 @@ case when token =~ /[!?]$/ then :tFID - when in_lex_state?(:expr_fname) && scan(/=(?:(?![~>=])|(?==>))/) then + when lex_state =~ EXPR_FNAME && scan(/=(?:(?![~>=])|(?==>))/) then # ident=, not =~ => == or followed by => # TODO test lexing of a=>b vs a==>b token << matched @@ -796,36 +922,35 @@ :tIDENTIFIER end - if !ruby18 and is_label_possible? and is_label_suffix? then + if is_label_possible? and is_label_suffix? then scan(/:/) - return result(:expr_labelarg, :tLABEL, [token, self.lineno]) + # TODO: propagate the lineno to ALL results + return result EXPR_LAB, :tLABEL, [token, self.lineno] end - unless in_lex_state? :expr_dot then + # TODO: mb == ENC_CODERANGE_7BIT && lex_state !~ EXPR_DOT + if lex_state !~ EXPR_DOT then # See if it is a reserved word. - keyword = if ruby18 then # REFACTOR need 18/19 lexer subclasses - RubyParserStuff::Keyword.keyword18 token - else - RubyParserStuff::Keyword.keyword19 token - end + keyword = RubyParserStuff::Keyword.keyword token return process_token_keyword keyword if keyword - end # unless in_lex_state? :expr_dot - - # TODO: - # if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) { + end - state = if is_beg? or is_arg? or in_lex_state? :expr_dot then - command_state ? :expr_cmdarg : :expr_arg - elsif not ruby18 and in_lex_state? :expr_fname then - :expr_endfn + # matching: compare/parse23.y:8079 + state = if is_beg? or is_arg? or lex_state =~ EXPR_DOT then + cmd_state ? EXPR_CMDARG : EXPR_ARG + elsif lex_state =~ EXPR_FNAME then + EXPR_ENDFN else - :expr_end + EXPR_END end - if not [:expr_dot, :expr_fname].include? last_state and - self.parser.env[token.to_sym] == :lvar then - state = :expr_end + tok_id = :tIDENTIFIER if tok_id == :tCONSTANT && is_local_id(token) + + if last_state !~ EXPR_DOT|EXPR_FNAME and + (tok_id == :tIDENTIFIER) and # not EXPR_FNAME, not attrasgn + lvar_defined?(token) then + state = EXPR_END|EXPR_LABEL end token.lineno = self.lineno # yes, on a string. I know... I know... @@ -834,36 +959,36 @@ end def process_token_keyword keyword - state = keyword.state + # matching MIDDLE of parse_ident in compare/parse23.y:8046 + state = lex_state + self.lex_state = keyword.state value = [token, self.lineno] - self.command_start = true if state == :expr_beg and lex_state != :expr_fname + return result(lex_state, keyword.id0, value) if state =~ EXPR_FNAME + + self.command_start = true if lex_state =~ EXPR_BEG case - when lex_state == :expr_fname then - result(state, keyword.id0, keyword.name) - when keyword.id0 == :kDO then + when keyword.id0 == :kDO then # parse26.y line 7591 case - when lpar_beg && lpar_beg == paren_nest then - self.lpar_beg = nil - self.paren_nest -= 1 - expr_result(:kDO_LAMBDA, value) + when lambda_beginning? then + self.lpar_beg = nil # lambda_beginning? == FALSE in the body of "-> do ... end" + self.paren_nest -= 1 # TODO: question this? + result lex_state, :kDO_LAMBDA, value when cond.is_in_state then - result(state, :kDO_COND, value) - when cmdarg.is_in_state && lex_state != :expr_cmdarg then - result(state, :kDO_BLOCK, value) - when in_lex_state?(:expr_beg, :expr_endarg) then - result(state, :kDO_BLOCK, value) + result lex_state, :kDO_COND, value + when cmdarg.is_in_state && state != EXPR_CMDARG then + result lex_state, :kDO_BLOCK, value else - result(state, :kDO, value) + result lex_state, :kDO, value end - when in_lex_state?(:expr_beg, :expr_value, :expr_labelarg) then - result(state, keyword.id0, value) + when state =~ EXPR_PAD then + result lex_state, keyword.id0, value when keyword.id0 != keyword.id1 then - result(:expr_beg, keyword.id1, value) + result EXPR_PAR, keyword.id1, value else - result(state, keyword.id1, value) + result lex_state, keyword.id1, value end end @@ -871,9 +996,9 @@ ss.unscan # put back "_" if beginning_of_line? && scan(/\__END__(\r?\n|\Z)/) then - return [RubyLexer::EOF, RubyLexer::EOF] - elsif scan(/\_\w*/) then - return process_token matched + [RubyLexer::EOF, RubyLexer::EOF] + elsif scan(/#{IDENT_CHAR}+/) then + process_token matched end end @@ -906,10 +1031,11 @@ when scan(/s/) then # space " " when scan(/[0-7]{1,3}/) then # octal constant - (matched.to_i(8) & 0xFF).chr + (matched.to_i(8) & 0xFF).chr.force_encoding Encoding::UTF_8 when scan(/x([0-9a-fA-F]{1,2})/) then # hex constant - ss[1].to_i(16).chr - when check(/M-\\[\\MCc]/) then + # TODO: force encode everything to UTF-8? + ss[1].to_i(16).chr.force_encoding Encoding::UTF_8 + when check(/M-\\./) then scan(/M-\\/) # eat it c = self.read_escape c[0] = (c[0].ord | 0x80).chr @@ -923,6 +1049,11 @@ c = self.read_escape c[0] = (c[0].ord & 0x9f).chr c + when check(/(C-|c)\\(?!u|\\)/) then + scan(/(C-|c)\\/) # eat it + c = read_escape + c[0] = (c[0].ord & 0x9f).chr + c when scan(/C-\?|c\?/) then 127.chr when scan(/(C-|c)(.)/) then @@ -931,13 +1062,23 @@ c when scan(/^[89]/i) then # bad octal or hex... MRI ignores them :( matched - when scan(/u([0-9a-fA-F]{2,4}|\{[0-9a-fA-F]{2,6}\})/) then - [ss[1].delete("{}").to_i(16)].pack("U") + when scan(/u(\h{4})/) then + [ss[1].to_i(16)].pack("U") + when scan(/u(\h{1,3})/) then + rb_compile_error "Invalid escape character syntax" + when scan(/u\{(\h+(?:\s+\h+)*)\}/) then + ss[1].split.map { |s| s.to_i(16) }.pack("U*") when scan(/[McCx0-9]/) || end_of_stream? then rb_compile_error("Invalid escape character syntax") else - ss.getch - end + getch + end.dup + end + + def getch + c = ss.getch + c = ss.getch if c == "\r" && ss.peek(1) == "\n" + c end def regx_options # TODO: rewrite / remove @@ -959,7 +1100,7 @@ self.brace_nest = 0 self.command_start = true self.comments = [] - self.lex_state = :expr_none + self.lex_state = EXPR_NONE self.lex_strterm = nil self.lineno = 1 self.lpar_beg = nil @@ -969,37 +1110,34 @@ self.token = nil self.extra_lineno = 0 - self.cmdarg.reset self.cond.reset + self.cmdarg.reset end - def result lex_state, token, text # :nodoc: - lex_state = self.arg_state if lex_state == :arg_state - self.lex_state = lex_state if lex_state + def result new_state, token, text # :nodoc: + new_state = self.arg_state if new_state == :arg_state + self.lex_state = new_state if new_state [token, text] end - def ruby18 - RubyParser::V18 === parser + def ruby22_label? + ruby22plus? and is_label_possible? end - def scan re - ss.scan re + def ruby22plus? + parser.class.version >= 22 end - def check re - ss.check re + def ruby23plus? + parser.class.version >= 23 end - def eat_whitespace - r = scan(/\s+/) - self.extra_lineno += r.count("\n") if r - r + def ruby24minus? + parser.class.version <= 24 end - def fixup_lineno extra = 0 - self.lineno += self.extra_lineno + extra - self.extra_lineno = 0 + def scan re + ss.scan re end def scanner_class # TODO: design this out of oedipus_lex. or something. @@ -1022,12 +1160,6 @@ self.lex_strterm = [:strterm, type, beg, nnd] end - # TODO: consider - # def src= src - # raise "bad src: #{src.inspect}" unless String === src - # @src = RPStringScanner.new(src) - # end - def tokadd_escape term # TODO: rewrite / remove case when scan(/\\\n/) then @@ -1046,8 +1178,10 @@ prev = self.string_buffer.last if term == chr && prev && prev.end_with?("(?") then self.string_buffer << chr + elsif term == chr || chr.ascii_only? then + self.string_buffer << matched # dunno why we keep them for ascii else - self.string_buffer << matched + self.string_buffer << chr # HACK? this is such a rat's nest end else rb_compile_error "Invalid escape character syntax" @@ -1055,22 +1189,24 @@ end def tokadd_string(func, term, paren) # TODO: rewrite / remove - qwords = (func & STR_FUNC_QWORDS) != 0 - escape = (func & STR_FUNC_ESCAPE) != 0 - expand = (func & STR_FUNC_EXPAND) != 0 - regexp = (func & STR_FUNC_REGEXP) != 0 - symbol = (func & STR_FUNC_SYMBOL) != 0 + qwords = func =~ STR_FUNC_QWORDS + escape = func =~ STR_FUNC_ESCAPE + expand = func =~ STR_FUNC_EXPAND + regexp = func =~ STR_FUNC_REGEXP + symbol = func =~ STR_FUNC_SYMBOL paren_re = @@regexp_cache[paren] - term_re = @@regexp_cache[term] + term_re = if term == "\n" + /#{Regexp.escape "\r"}?#{Regexp.escape "\n"}/ + else + @@regexp_cache[term] + end until end_of_stream? do c = nil handled = true case - when paren_re && scan(paren_re) then - self.string_nest += 1 when scan(term_re) then if self.string_nest == 0 then ss.pos -= 1 @@ -1078,7 +1214,9 @@ else self.string_nest -= 1 end - when expand && scan(/#(?=[\$\@\{])/) then + when paren_re && scan(paren_re) then + self.string_nest += 1 + when expand && scan(/#(?=[\$\@\{])/) then # TODO: this seems wrong ss.pos -= 1 break when qwords && scan(/\s/) then @@ -1092,7 +1230,7 @@ string_buffer << "\n" next when qwords && scan(/\\\s/) then - c = ' ' + c = " " when expand && scan(/\\\n/) then next when regexp && check(/\\/) then @@ -1117,16 +1255,16 @@ end # top case unless handled then - t = Regexp.escape term - x = Regexp.escape(paren) if paren && paren != "\000" + t = if term == "\n" + Regexp.escape "\r\n" + else + Regexp.escape term + end + x = Regexp.escape paren if paren && paren != "\000" re = if qwords then - if HAS_ENC then - /[^#{t}#{x}\#\0\\\s]+|./ # |. to pick up whatever - else - /[^#{t}#{x}\#\0\\\s\v]+|./ # argh. 1.8's \s doesn't pick up \v - end + /[^#{t}#{x}\#\\\s]+|./ # |. to pick up whatever else - /[^#{t}#{x}\#\0\\]+|./ + /[^#{t}#{x}\#\\]+|./ end scan re @@ -1166,12 +1304,15 @@ s when /^[McCx0-9]/ then rb_compile_error("Invalid escape character syntax") - when /u([0-9a-fA-F]{2,4}|\{[0-9a-fA-F]{2,6}\})/ then + when /u(\h{4})/ then [$1.delete("{}").to_i(16)].pack("U") + when /u(\h{1,3})/ then + rb_compile_error("Invalid escape character syntax") + when /u\{(\h+(?:\s+\h+)*)\}/ then + $1.split.map { |s| s.to_i(16) }.pack("U*") else s end - x.force_encoding "UTF-8" if HAS_ENC x end @@ -1179,168 +1320,154 @@ # do nothing for now end - def ruby22plus? - parser.class.version >= 22 - end - - def ruby23plus? - parser.class.version >= 23 - end - - def process_string # TODO: rewrite / remove - token = if lex_strterm[0] == :heredoc then - self.heredoc lex_strterm - else - self.parse_string lex_strterm - end - - token_type, c = token - - if ruby22plus? && token_type == :tSTRING_END && ["'", '"'].include?(c) then - if (([:expr_beg, :expr_endfn].include?(lex_state) && - !cond.is_in_state) || is_arg?) && - is_label_suffix? then - scan(/:/) - token_type = token[0] = :tLABEL_END - end - end - - if [:tSTRING_END, :tREGEXP_END, :tLABEL_END].include? token_type then - self.lex_strterm = nil - self.lex_state = (token_type == :tLABEL_END) ? :expr_labelarg : :expr_end - end - - return token + def was_label? + @was_label = ruby22_label? + true end - def parse_quote # TODO: remove / rewrite - beg, nnd, short_hand, c = nil, nil, false, nil - - if scan(/[a-z0-9]{1,2}/i) then # Long-hand (e.g. %Q{}). - rb_compile_error "unknown type of %string" if ss.matched_size == 2 - c, beg, short_hand = matched, ss.getch, false - else # Short-hand (e.g. %{, %., %!, etc) - c, beg, short_hand = 'Q', ss.getch, true - end - - if end_of_stream? or c == RubyLexer::EOF or beg == RubyLexer::EOF then - rb_compile_error "unterminated quoted string meets end of file" + class State + attr_accessor :n + attr_accessor :names + + # TODO: take a shared hash of strings for inspect/to_s + def initialize o, names + raise ArgumentError, "bad state: %p" % [o] unless Integer === o # TODO: remove + + self.n = o + self.names = names + end + + def == o + self.equal?(o) || (o.class == self.class && o.n == self.n) + end + + def =~ v + (self.n & v.n) != 0 + end + + def | v + raise ArgumentError, "Incompatible State: %p vs %p" % [self, v] unless + self.names == v.names + self.class.new(self.n | v.n, self.names) + end + + def inspect + return "Value(0)" if n.zero? # HACK? + + names.map { |v, k| k if self =~ v }. + compact. + join("|"). + gsub(/(?:EXPR_|STR_(?:FUNC_)?)/, "") + end + + alias to_s inspect + + module Values + expr_names = {} + + EXPR_NONE = State.new 0x0, expr_names + EXPR_BEG = State.new 0x1, expr_names + EXPR_END = State.new 0x2, expr_names + EXPR_ENDARG = State.new 0x4, expr_names + EXPR_ENDFN = State.new 0x8, expr_names + EXPR_ARG = State.new 0x10, expr_names + EXPR_CMDARG = State.new 0x20, expr_names + EXPR_MID = State.new 0x40, expr_names + EXPR_FNAME = State.new 0x80, expr_names + EXPR_DOT = State.new 0x100, expr_names + EXPR_CLASS = State.new 0x200, expr_names + EXPR_LABEL = State.new 0x400, expr_names + EXPR_LABELED = State.new 0x800, expr_names + EXPR_FITEM = State.new 0x1000, expr_names + + EXPR_BEG_ANY = EXPR_BEG | EXPR_MID | EXPR_CLASS + EXPR_ARG_ANY = EXPR_ARG | EXPR_CMDARG + EXPR_END_ANY = EXPR_END | EXPR_ENDARG | EXPR_ENDFN + + # extra fake lex_state names to make things a bit cleaner + + EXPR_LAB = EXPR_ARG|EXPR_LABELED + EXPR_LIT = EXPR_END|EXPR_ENDARG + EXPR_PAR = EXPR_BEG|EXPR_LABEL + EXPR_PAD = EXPR_BEG|EXPR_LABELED + + EXPR_NUM = EXPR_LIT + + expr_names.merge!(EXPR_NONE => "EXPR_NONE", + EXPR_BEG => "EXPR_BEG", + EXPR_END => "EXPR_END", + EXPR_ENDARG => "EXPR_ENDARG", + EXPR_ENDFN => "EXPR_ENDFN", + EXPR_ARG => "EXPR_ARG", + EXPR_CMDARG => "EXPR_CMDARG", + EXPR_MID => "EXPR_MID", + EXPR_FNAME => "EXPR_FNAME", + EXPR_DOT => "EXPR_DOT", + EXPR_CLASS => "EXPR_CLASS", + EXPR_LABEL => "EXPR_LABEL", + EXPR_LABELED => "EXPR_LABELED", + EXPR_FITEM => "EXPR_FITEM") + + # ruby constants for strings + + str_func_names = {} + + STR_FUNC_BORING = State.new 0x00, str_func_names + STR_FUNC_ESCAPE = State.new 0x01, str_func_names + STR_FUNC_EXPAND = State.new 0x02, str_func_names + STR_FUNC_REGEXP = State.new 0x04, str_func_names + STR_FUNC_QWORDS = State.new 0x08, str_func_names + STR_FUNC_SYMBOL = State.new 0x10, str_func_names + STR_FUNC_INDENT = State.new 0x20, str_func_names # <<-HEREDOC + STR_FUNC_LABEL = State.new 0x40, str_func_names + STR_FUNC_LIST = State.new 0x4000, str_func_names + STR_FUNC_TERM = State.new 0x8000, str_func_names + STR_FUNC_ICNTNT = State.new 0x10000, str_func_names # <<~HEREDOC -- TODO: remove? + + # TODO: check parser25.y on how they do STR_FUNC_INDENT + + STR_SQUOTE = STR_FUNC_BORING + STR_DQUOTE = STR_FUNC_EXPAND + STR_XQUOTE = STR_FUNC_EXPAND + STR_REGEXP = STR_FUNC_REGEXP | STR_FUNC_ESCAPE | STR_FUNC_EXPAND + STR_SWORD = STR_FUNC_QWORDS | STR_FUNC_LIST + STR_DWORD = STR_FUNC_QWORDS | STR_FUNC_EXPAND | STR_FUNC_LIST + STR_SSYM = STR_FUNC_SYMBOL + STR_DSYM = STR_FUNC_SYMBOL | STR_FUNC_EXPAND + + str_func_names.merge!(STR_FUNC_ESCAPE => "STR_FUNC_ESCAPE", + STR_FUNC_EXPAND => "STR_FUNC_EXPAND", + STR_FUNC_REGEXP => "STR_FUNC_REGEXP", + STR_FUNC_QWORDS => "STR_FUNC_QWORDS", + STR_FUNC_SYMBOL => "STR_FUNC_SYMBOL", + STR_FUNC_INDENT => "STR_FUNC_INDENT", + STR_FUNC_LABEL => "STR_FUNC_LABEL", + STR_FUNC_LIST => "STR_FUNC_LIST", + STR_FUNC_TERM => "STR_FUNC_TERM", + STR_FUNC_ICNTNT => "STR_FUNC_ICNTNT", + STR_SQUOTE => "STR_SQUOTE") end - # Figure nnd-char. "\0" is special to indicate beg=nnd and that no nesting? - nnd = { "(" => ")", "[" => "]", "{" => "}", "<" => ">" }[beg] - nnd, beg = beg, "\0" if nnd.nil? - - token_type, text = nil, "%#{c}#{beg}" - token_type, string_type = case c - when 'Q' then - ch = short_hand ? nnd : c + beg - text = "%#{ch}" - [:tSTRING_BEG, STR_DQUOTE] - when 'q' then - [:tSTRING_BEG, STR_SQUOTE] - when 'W' then - eat_whitespace - [:tWORDS_BEG, STR_DQUOTE | STR_FUNC_QWORDS] - when 'w' then - eat_whitespace - [:tQWORDS_BEG, STR_SQUOTE | STR_FUNC_QWORDS] - when 'x' then - [:tXSTRING_BEG, STR_XQUOTE] - when 'r' then - [:tREGEXP_BEG, STR_REGEXP] - when 's' then - self.lex_state = :expr_fname - [:tSYMBEG, STR_SSYM] - when 'I' then - eat_whitespace - [:tSYMBOLS_BEG, STR_DQUOTE | STR_FUNC_QWORDS] - when 'i' then - eat_whitespace - [:tQSYMBOLS_BEG, STR_SQUOTE | STR_FUNC_QWORDS] - end - - rb_compile_error "Bad %string type. Expected [QqWwIixrs], found '#{c}'." if - token_type.nil? - - raise "huh" unless string_type - - string string_type, nnd, beg - - return token_type, text + include Values end - def parse_string quote # TODO: rewrite / remove - _, string_type, term, open = quote - - space = false # FIX: remove these - func = string_type - paren = open - term_re = @@regexp_cache[term] - - qwords = (func & STR_FUNC_QWORDS) != 0 - regexp = (func & STR_FUNC_REGEXP) != 0 - expand = (func & STR_FUNC_EXPAND) != 0 - - unless func then # nil'ed from qwords below. *sigh* - return :tSTRING_END, nil - end - - space = true if qwords and eat_whitespace - - if self.string_nest == 0 && scan(/#{term_re}/) then - if qwords then - quote[1] = nil - return :tSPACE, nil - elsif regexp then - return :tREGEXP_END, self.regx_options - else - return :tSTRING_END, term - end - end - - return :tSPACE, nil if space - - self.string_buffer = [] - - if expand - case - when scan(/#(?=\$(-.|[a-zA-Z_0-9~\*\$\?!@\/\\;,\.=:<>\"\&\`\'+]))/) then - # TODO: !ISASCII - # ?! see parser_peek_variable_name - return :tSTRING_DVAR, nil - when scan(/#(?=\@\@?[a-zA-Z_])/) then - # TODO: !ISASCII - return :tSTRING_DVAR, nil - when scan(/#[{]/) then - return :tSTRING_DBEG, nil - when scan(/#/) then - string_buffer << '#' - end - end - - if tokadd_string(func, term, paren) == RubyLexer::EOF then - rb_compile_error "unterminated string meets end of file" - end - - return :tSTRING_CONTENT, string_buffer.join - end + include State::Values end require "ruby_lexer.rex" if ENV["RP_LINENO_DEBUG"] then class RubyLexer - alias :old_lineno= :lineno= - def d o $stderr.puts o.inspect end + alias old_lineno= lineno= + def lineno= n self.old_lineno= n where = caller.first.split(/:/).first(2).join(":") - d :lineno => [n, where, ss && ss.rest[0,40]] + d :lineno => [n, where, ss && ss.rest[0, 40]] end end end diff -Nru ruby-ruby-parser-3.11.0/lib/ruby_lexer.rex ruby-ruby-parser-3.15.1/lib/ruby_lexer.rex --- ruby-ruby-parser-3.11.0/lib/ruby_lexer.rex 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby_lexer.rex 2021-01-18 16:48:25.000000000 +0000 @@ -6,11 +6,11 @@ macro - IDENT /^#{IDENT_CHAR}+/o + IDENT_CHAR /[a-zA-Z0-9_[:^ascii:]]/ - ESC /\\((?>[0-7]{1,3}|x[0-9a-fA-F]{1,2}|M-[^\\]|(C-|c)[^\\]|u[0-9a-fA-F]+|u\{[0-9a-fA-F]+\}|[^0-7xMCc]))/ - SIMPLE_STRING /(#{ESC}|\#(#{ESC}|[^\{\#\@\$\"\\])|[^\"\\\#])*/o - SSTRING /(\\.|[^\'])*/ + ESC /\\((?>[0-7]{1,3}|x\h{1,2}|M-[^\\]|(C-|c)[^\\]|u\h{1,4}|u\{\h+(?:\s+\h+)*\}|[^0-7xMCc]))/ + SIMPLE_STRING /((#{ESC}|\#(#{ESC}|[^\{\#\@\$\"\\])|[^\"\\\#])*)/o + SSTRING /((\\.|[^\'])*)/ INT_DEC /[+]?(?:(?:[1-9][\d_]*|0)(?!\.\d)(ri|r|i)?\b|0d[0-9_]+)(ri|r|i)?/i INT_HEX /[+]?0x[a-f0-9_]+(ri|r|i)?/i @@ -27,9 +27,9 @@ return process_string if lex_strterm - self.command_state = self.command_start + self.cmd_state = self.command_start self.command_start = false - self.space_seen = false + self.space_seen = false # TODO: rename token_seen? self.last_state = lex_state rule @@ -41,20 +41,20 @@ /\n|\#/ process_newline_or_comment - /[\]\)\}]/ process_bracing + /[\]\)\}]/ process_brace_close : /\!/ -| in_arg_state? /\!\@/ { result :expr_arg, :tUBANG, "!@" } +| is_after_operator? /\!\@/ { result EXPR_ARG, :tUBANG, "!@" } | /\![=~]?/ { result :arg_state, TOKENS[text], text } : /\./ -| /\.\.\.?/ { result :expr_beg, TOKENS[text], text } +| /\.\.\.?/ { result EXPR_BEG, TOKENS[text], text } | /\.\d/ { rb_compile_error "no . floating literal anymore put 0 before dot" } -| /\./ { result :expr_dot, :tDOT, "." } +| /\./ { self.lex_state = EXPR_BEG; result EXPR_DOT, :tDOT, "." } /\(/ process_paren - /\,/ { result :expr_beg, TOKENS[text], text } + /\,/ { result EXPR_PAR, TOKENS[text], text } : /=/ | /\=\=\=|\=\=|\=~|\=>|\=(?!begin\b)/ { result arg_state, TOKENS[text], text } @@ -62,7 +62,7 @@ | /\=(?=begin\b)/ { result arg_state, TOKENS[text], text } ruby22_label? /\"#{SIMPLE_STRING}\":/o process_label - /\"(#{SIMPLE_STRING})\"/o { result :expr_end, :tSTRING, text[1..-2].gsub(ESC) { unescape $1 } } + /\"(#{SIMPLE_STRING})\"/o process_simple_string /\"/ { string STR_DQUOTE; result nil, :tSTRING_BEG, text } /\@\@?\d/ { rb_compile_error "`#{text}` is not allowed as a variable name" } @@ -75,7 +75,7 @@ | /\:\:/ process_colon2 | /\:/ process_colon1 - /->/ { result :expr_endfn, :tLAMBDA, nil } + /->/ { result EXPR_ENDFN, :tLAMBDA, nil } /[+-]/ process_plus_minus @@ -96,56 +96,57 @@ was_label? /\'#{SSTRING}\':?/o process_label_or_string : /\|/ -| /\|\|\=/ { result :expr_beg, :tOP_ASGN, "||" } -| /\|\|/ { result :expr_beg, :tOROP, "||" } -| /\|\=/ { result :expr_beg, :tOP_ASGN, "|" } -| /\|/ { result :arg_state, :tPIPE, "|" } +| /\|\|\=/ { result EXPR_BEG, :tOP_ASGN, "||" } +| /\|\|/ { result EXPR_BEG, :tOROP, "||" } +| /\|\=/ { result EXPR_BEG, :tOP_ASGN, "|" } +| /\|/ { state = is_after_operator? ? EXPR_ARG : EXPR_PAR; result state, :tPIPE, "|" } - /\{/ process_curly_brace + /\{/ process_brace_open : /\*/ -| /\*\*=/ { result :expr_beg, :tOP_ASGN, "**" } +| /\*\*=/ { result EXPR_BEG, :tOP_ASGN, "**" } | /\*\*/ { result(:arg_state, space_vs_beginning(:tDSTAR, :tDSTAR, :tPOW), "**") } -| /\*\=/ { result(:expr_beg, :tOP_ASGN, "*") } +| /\*\=/ { result(EXPR_BEG, :tOP_ASGN, "*") } | /\*/ { result(:arg_state, space_vs_beginning(:tSTAR, :tSTAR, :tSTAR2), "*") } +# TODO: fix result+process_lchevron to set command_start = true : // { result :arg_state, :tCMP, "<=>" } | /\<\=/ { result :arg_state, :tLEQ, "<=" } -| /\<\<\=/ { result :arg_state, :tOP_ASGN, "<<" } +| /\<\<\=/ { result EXPR_BEG, :tOP_ASGN, "<<" } | /\<\/ | /\>\=/ { result :arg_state, :tGEQ, ">=" } -| /\>\>=/ { result :arg_state, :tOP_ASGN, ">>" } +| /\>\>=/ { result EXPR_BEG, :tOP_ASGN, ">>" } | /\>\>/ { result :arg_state, :tRSHFT, ">>" } | /\>/ { result :arg_state, :tGT, ">" } : /\`/ -| expr_fname? /\`/ { result(:expr_end, :tBACK_REF2, "`") } -| expr_dot? /\`/ { result((command_state ? :expr_cmdarg : :expr_arg), :tBACK_REF2, "`") } +| expr_fname? /\`/ { result(EXPR_END, :tBACK_REF2, "`") } +| expr_dot? /\`/ { result((cmd_state ? EXPR_CMDARG : EXPR_ARG), :tBACK_REF2, "`") } | /\`/ { string STR_XQUOTE, '`'; result(nil, :tXSTRING_BEG, "`") } /\?/ process_questionmark : /&/ -| /\&\&\=/ { result(:expr_beg, :tOP_ASGN, "&&") } -| /\&\&/ { result(:expr_beg, :tANDOP, "&&") } -| /\&\=/ { result(:expr_beg, :tOP_ASGN, "&" ) } -| /\&\./ { result(:expr_dot, :tLONELY, "&.") } +| /\&\&\=/ { result(EXPR_BEG, :tOP_ASGN, "&&") } +| /\&\&/ { result(EXPR_BEG, :tANDOP, "&&") } +| /\&\=/ { result(EXPR_BEG, :tOP_ASGN, "&" ) } +| /\&\./ { result(EXPR_DOT, :tLONELY, "&.") } | /\&/ process_amper /\// process_slash : /\^/ -| /\^=/ { result(:expr_beg, :tOP_ASGN, "^") } +| /\^=/ { result(EXPR_BEG, :tOP_ASGN, "^") } | /\^/ { result(:arg_state, :tCARET, "^") } - /\;/ { self.command_start = true; result(:expr_beg, :tSEMI, ";") } + /\;/ { self.command_start = true; result(EXPR_BEG, :tSEMI, ";") } : /~/ -| in_arg_state? /\~@/ { result(:arg_state, :tTILDE, "~") } +| is_after_operator? /\~@/ { result(:arg_state, :tTILDE, "~") } | /\~/ { result(:arg_state, :tTILDE, "~") } : /\\/ @@ -163,12 +164,12 @@ | in_fname? /\$([1-9]\d*)/ process_gvar | /\$([1-9]\d*)/ process_nthref | /\$0/ process_gvar +| /\$#{IDENT_CHAR}+/ process_gvar | /\$\W|\$\z/ process_gvar_oddity -| /\$\w+/ process_gvar /\_/ process_underscore - /#{IDENT}/o process_token + /#{IDENT_CHAR}+/o process_token /\004|\032|\000|\Z/ { [RubyLexer::EOF, RubyLexer::EOF] } diff -Nru ruby-ruby-parser-3.11.0/lib/ruby_lexer.rex.rb ruby-ruby-parser-3.15.1/lib/ruby_lexer.rex.rb --- ruby-ruby-parser-3.11.0/lib/ruby_lexer.rex.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby_lexer.rex.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,20 +1,25 @@ # encoding: UTF-8 #-- # This file is automatically generated. Do not modify it. -# Generated by: oedipus_lex version 2.5.0. +# Generated by: oedipus_lex version 2.5.2. # Source: lib/ruby_lexer.rex #++ # # lexical scanner definition for ruby + +## +# The generated lexer RubyLexer + class RubyLexer require 'strscan' - IDENT = /^#{IDENT_CHAR}+/o - ESC = /\\((?>[0-7]{1,3}|x[0-9a-fA-F]{1,2}|M-[^\\]|(C-|c)[^\\]|u[0-9a-fA-F]+|u\{[0-9a-fA-F]+\}|[^0-7xMCc]))/ - SIMPLE_STRING = /(#{ESC}|\#(#{ESC}|[^\{\#\@\$\"\\])|[^\"\\\#])*/o - SSTRING = /(\\.|[^\'])*/ + # :stopdoc: + IDENT_CHAR = /[a-zA-Z0-9_[:^ascii:]]/ + ESC = /\\((?>[0-7]{1,3}|x\h{1,2}|M-[^\\]|(C-|c)[^\\]|u\h{1,4}|u\{\h+(?:\s+\h+)*\}|[^0-7xMCc]))/ + SIMPLE_STRING = /((#{ESC}|\#(#{ESC}|[^\{\#\@\$\"\\])|[^\"\\\#])*)/o + SSTRING = /((\\.|[^\'])*)/ INT_DEC = /[+]?(?:(?:[1-9][\d_]*|0)(?!\.\d)(ri|r|i)?\b|0d[0-9_]+)(ri|r|i)?/i INT_HEX = /[+]?0x[a-f0-9_]+(ri|r|i)?/i INT_BIN = /[+]?0b[01_]+(ri|r|i)?/i @@ -24,30 +29,56 @@ NUM_BAD = /[+]?0[xbd]\b/i INT_OCT_BAD = /[+]?0o?[0-7_]*[89]/i FLOAT_BAD = /[+]?\d[\d_]*_(e|\.)/i - + # :startdoc: + # :stopdoc: class LexerError < StandardError ; end class ScanError < LexerError ; end + # :startdoc: + + ## + # The file name / path attr_accessor :filename + + ## + # The StringScanner for this lexer. + attr_accessor :ss + + ## + # The current lexical state. + attr_accessor :state alias :match :ss + ## + # The match groups for the current scan. + def matches m = (1..9).map { |i| ss[i] } m.pop until m[-1] or m.empty? m end + ## + # Yields on the current action. + def action yield end + + ## + # The current scanner class. Must be overridden in subclasses. + def scanner_class StringScanner end unless instance_methods(false).map(&:to_s).include?("scanner_class") + ## + # Parse the given string. + def parse str self.ss = scanner_class.new str self.state ||= nil @@ -55,6 +86,9 @@ do_parse end + ## + # Read in and parse the file at +path+. + def parse_file path self.filename = path open path do |f| @@ -62,17 +96,23 @@ end end + ## + # The current location in the parse. + def location [ (filename || ""), ].compact.join(":") end + ## + # Lex the next token. + def next_token return process_string if lex_strterm - self.command_state = self.command_start + self.cmd_state = self.command_start self.command_start = false - self.space_seen = false + self.space_seen = false # TODO: rename token_seen? self.last_state = lex_state token = nil @@ -87,27 +127,27 @@ when text = ss.scan(/\n|\#/) then process_newline_or_comment text when text = ss.scan(/[\]\)\}]/) then - process_bracing text + process_brace_close text when ss.match?(/\!/) then case - when in_arg_state? && (ss.skip(/\!\@/)) then - action { result :expr_arg, :tUBANG, "!@" } + when is_after_operator? && (ss.skip(/\!\@/)) then + action { result EXPR_ARG, :tUBANG, "!@" } when text = ss.scan(/\![=~]?/) then action { result :arg_state, TOKENS[text], text } end # group /\!/ when ss.match?(/\./) then case when text = ss.scan(/\.\.\.?/) then - action { result :expr_beg, TOKENS[text], text } + action { result EXPR_BEG, TOKENS[text], text } when ss.skip(/\.\d/) then action { rb_compile_error "no . floating literal anymore put 0 before dot" } when ss.skip(/\./) then - action { result :expr_dot, :tDOT, "." } + action { self.lex_state = EXPR_BEG; result EXPR_DOT, :tDOT, "." } end # group /\./ when text = ss.scan(/\(/) then process_paren text when text = ss.scan(/\,/) then - action { result :expr_beg, TOKENS[text], text } + action { result EXPR_PAR, TOKENS[text], text } when ss.match?(/=/) then case when text = ss.scan(/\=\=\=|\=\=|\=~|\=>|\=(?!begin\b)/) then @@ -120,7 +160,7 @@ when ruby22_label? && (text = ss.scan(/\"#{SIMPLE_STRING}\":/o)) then process_label text when text = ss.scan(/\"(#{SIMPLE_STRING})\"/o) then - action { result :expr_end, :tSTRING, text[1..-2].gsub(ESC) { unescape $1 } } + process_simple_string text when text = ss.scan(/\"/) then action { string STR_DQUOTE; result nil, :tSTRING_BEG, text } when text = ss.scan(/\@\@?\d/) then @@ -141,7 +181,7 @@ process_colon1 text end # group /:/ when ss.skip(/->/) then - action { result :expr_endfn, :tLAMBDA, nil } + action { result EXPR_ENDFN, :tLAMBDA, nil } when text = ss.scan(/[+-]/) then process_plus_minus text when ss.match?(/[+\d]/) then @@ -174,24 +214,24 @@ when ss.match?(/\|/) then case when ss.skip(/\|\|\=/) then - action { result :expr_beg, :tOP_ASGN, "||" } + action { result EXPR_BEG, :tOP_ASGN, "||" } when ss.skip(/\|\|/) then - action { result :expr_beg, :tOROP, "||" } + action { result EXPR_BEG, :tOROP, "||" } when ss.skip(/\|\=/) then - action { result :expr_beg, :tOP_ASGN, "|" } + action { result EXPR_BEG, :tOP_ASGN, "|" } when ss.skip(/\|/) then - action { result :arg_state, :tPIPE, "|" } + action { state = is_after_operator? ? EXPR_ARG : EXPR_PAR; result state, :tPIPE, "|" } end # group /\|/ when text = ss.scan(/\{/) then - process_curly_brace text + process_brace_open text when ss.match?(/\*/) then case when ss.skip(/\*\*=/) then - action { result :expr_beg, :tOP_ASGN, "**" } + action { result EXPR_BEG, :tOP_ASGN, "**" } when ss.skip(/\*\*/) then action { result(:arg_state, space_vs_beginning(:tDSTAR, :tDSTAR, :tPOW), "**") } when ss.skip(/\*\=/) then - action { result(:expr_beg, :tOP_ASGN, "*") } + action { result(EXPR_BEG, :tOP_ASGN, "*") } when ss.skip(/\*/) then action { result(:arg_state, space_vs_beginning(:tSTAR, :tSTAR, :tSTAR2), "*") } end # group /\*/ @@ -202,7 +242,7 @@ when ss.skip(/\<\=/) then action { result :arg_state, :tLEQ, "<=" } when ss.skip(/\<\<\=/) then - action { result :arg_state, :tOP_ASGN, "<<" } + action { result EXPR_BEG, :tOP_ASGN, "<<" } when text = ss.scan(/\<\\=/) then action { result :arg_state, :tGEQ, ">=" } when ss.skip(/\>\>=/) then - action { result :arg_state, :tOP_ASGN, ">>" } + action { result EXPR_BEG, :tOP_ASGN, ">>" } when ss.skip(/\>\>/) then action { result :arg_state, :tRSHFT, ">>" } when ss.skip(/\>/) then @@ -222,9 +262,9 @@ when ss.match?(/\`/) then case when expr_fname? && (ss.skip(/\`/)) then - action { result(:expr_end, :tBACK_REF2, "`") } + action { result(EXPR_END, :tBACK_REF2, "`") } when expr_dot? && (ss.skip(/\`/)) then - action { result((command_state ? :expr_cmdarg : :expr_arg), :tBACK_REF2, "`") } + action { result((cmd_state ? EXPR_CMDARG : EXPR_ARG), :tBACK_REF2, "`") } when ss.skip(/\`/) then action { string STR_XQUOTE, '`'; result(nil, :tXSTRING_BEG, "`") } end # group /\`/ @@ -233,13 +273,13 @@ when ss.match?(/&/) then case when ss.skip(/\&\&\=/) then - action { result(:expr_beg, :tOP_ASGN, "&&") } + action { result(EXPR_BEG, :tOP_ASGN, "&&") } when ss.skip(/\&\&/) then - action { result(:expr_beg, :tANDOP, "&&") } + action { result(EXPR_BEG, :tANDOP, "&&") } when ss.skip(/\&\=/) then - action { result(:expr_beg, :tOP_ASGN, "&" ) } + action { result(EXPR_BEG, :tOP_ASGN, "&" ) } when ss.skip(/\&\./) then - action { result(:expr_dot, :tLONELY, "&.") } + action { result(EXPR_DOT, :tLONELY, "&.") } when text = ss.scan(/\&/) then process_amper text end # group /&/ @@ -248,15 +288,15 @@ when ss.match?(/\^/) then case when ss.skip(/\^=/) then - action { result(:expr_beg, :tOP_ASGN, "^") } + action { result(EXPR_BEG, :tOP_ASGN, "^") } when ss.skip(/\^/) then action { result(:arg_state, :tCARET, "^") } end # group /\^/ when ss.skip(/\;/) then - action { self.command_start = true; result(:expr_beg, :tSEMI, ";") } + action { self.command_start = true; result(EXPR_BEG, :tSEMI, ";") } when ss.match?(/~/) then case - when in_arg_state? && (ss.skip(/\~@/)) then + when is_after_operator? && (ss.skip(/\~@/)) then action { result(:arg_state, :tTILDE, "~") } when ss.skip(/\~/) then action { result(:arg_state, :tTILDE, "~") } @@ -288,14 +328,14 @@ process_nthref text when text = ss.scan(/\$0/) then process_gvar text + when text = ss.scan(/\$#{IDENT_CHAR}+/) then + process_gvar text when text = ss.scan(/\$\W|\$\z/) then process_gvar_oddity text - when text = ss.scan(/\$\w+/) then - process_gvar text end # group /\$/ when text = ss.scan(/\_/) then process_underscore text - when text = ss.scan(/#{IDENT}/o) then + when text = ss.scan(/#{IDENT_CHAR}+/o) then process_token text when ss.skip(/\004|\032|\000|\Z/) then action { [RubyLexer::EOF, RubyLexer::EOF] } diff -Nru ruby-ruby-parser-3.11.0/lib/ruby_parser_extras.rb ruby-ruby-parser-3.15.1/lib/ruby_parser_extras.rb --- ruby-ruby-parser-3.11.0/lib/ruby_parser_extras.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby_parser_extras.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,4 +1,5 @@ # encoding: ASCII-8BIT +# TODO: remove require "sexp" require "ruby_lexer" @@ -6,12 +7,50 @@ require "rp_extensions" require "rp_stringscanner" +class Sexp + def check_line_numbers + raise "bad nil line for:\n%s" % [self.pretty_inspect] if nil_line? + raise "bad line number for:\n%s" % [self.pretty_inspect] unless + Integer === self.line && + self.line >= 1 && + self.line <= self.line_min + end + + ## + # Returns the maximum line number of the children of self. + + def line_min + @line_min ||= [self.deep_each.map(&:line).min, self.line].compact.min + end + + def nil_line? + self.deep_each.map(&:line).any?(&:nil?) + end +end + module RubyParserStuff - VERSION = "3.11.0" + VERSION = "3.15.1" attr_accessor :lexer, :in_def, :in_single, :file + attr_accessor :in_kwarg attr_reader :env, :comments + ## + # Canonicalize conditionals. Eg: + # + # not x ? a : b + # + # becomes: + # + # x ? b : a + + attr_accessor :canonicalize_conditions + + ## + # The last token type returned from #next_token + + attr_accessor :last_token_type + $good20 = [] %w[ @@ -30,6 +69,28 @@ end end + ## + # for pure ruby systems only + + def do_parse + _racc_do_parse_rb(_racc_setup, false) + end if ENV["PURE_RUBY"] || ENV["CHECK_LINE_NUMS"] + + if ENV["CHECK_LINE_NUMS"] then + def _racc_do_reduce arg, act + x = super + + @racc_vstack.grep(Sexp).each do |sexp| + sexp.check_line_numbers + end + x + end + end + + ARG_TYPES = [:arglist, :call_args, :array, :args].map { |k| + [k, true] + }.to_h + has_enc = "".respond_to? :encoding # This is in sorted order of occurrence according to @@ -47,102 +108,52 @@ Encoding::EUC_JP ] if has_enc - def syntax_error msg - raise RubyParser::SyntaxError, msg - end + JUMP_TYPE = [:return, :next, :break, :yield].map { |k| [k, true] }.to_h - def arg_blk_pass node1, node2 # TODO: nuke - node1 = s(:arglist, node1) unless [:arglist, :call_args, :array, :args].include? node1.sexp_type - node1 << node2 if node2 - node1 - end + TAB_WIDTH = 8 - def arg_concat node1, node2 # TODO: nuke - raise "huh" unless node2 - node1 << s(:splat, node2).compact - node1 - end - - def clean_mlhs sexp - case sexp.sexp_type - when :masgn then - if sexp.size == 2 and sexp[1].sexp_type == :array then - s(:masgn, *sexp[1].sexp_body.map { |sub| clean_mlhs sub }) - else - debug20 5 - sexp - end - when :gasgn, :iasgn, :lasgn, :cvasgn then - if sexp.size == 2 then - sexp.last - else - debug20 7 - sexp # optional value - end - else - raise "unsupported type: #{sexp.inspect}" - end - end + def initialize(options = {}) + super() - def block_var *args - result = self.args args - result.sexp_type = :masgn - result - end + v = self.class.name[/2\d/] + raise "Bad Class name #{self.class}" unless v - def block_var18 ary, splat, block - ary ||= s(:array) + self.lexer = RubyLexer.new v && v.to_i + self.lexer.parser = self + self.in_kwarg = false - if splat then - splat = splat[1] unless Symbol === splat - ary << "*#{splat}".to_sym - end + @env = RubyParserStuff::Environment.new + @comments = [] - ary << "&#{block[1]}".to_sym if block + @canonicalize_conditions = true - if ary.length > 2 or ary.splat then # HACK - s(:masgn, *ary.sexp_body) - else - ary.last - end + self.reset end - def array_to_hash array - case array.sexp_type - when :kwsplat then - array - else - s(:hash, *array.sexp_body) - end - end + def arg_concat node1, node2 # TODO: nuke + raise "huh" unless node2 - def call_args args - result = s(:call_args) + splat = s(:splat, node2) + splat.line node2.line - args.each do |arg| - case arg - when Sexp then - case arg.sexp_type - when :array, :args, :call_args then # HACK? remove array at some point - result.concat arg.sexp_body - else - result << arg - end - when Symbol then - result << arg - when ",", nil then - # ignore - else - raise "unhandled: #{arg.inspect} in #{args.inspect}" - end - end + node1 << splat + end - result + def argl x + x = s(:arglist, x) if x and x.sexp_type == :array + x end def args args result = s(:args) + ss = args.grep Sexp + if ss.empty? then + result.line lexer.lineno + else + result.line ss.first.line + end + args.each do |arg| case arg when Sexp then @@ -152,8 +163,10 @@ when :block_arg then result << :"&#{arg.last}" when :shadow then + name = arg.last + self.env[name] = :lvar if Sexp === result.last and result.last.sexp_type == :shadow then - result.last << arg.last + result.last << name else result << arg end @@ -176,13 +189,28 @@ result end + def array_to_hash array + case array.sexp_type + when :kwsplat then + array + else + s(:hash, *array.sexp_body).line array.line + end + end + def aryset receiver, index index ||= s() - s(:attrasgn, receiver, :"[]=", *index.sexp_body).compact # [].sexp_body => nil + l = receiver.line + result = s(:attrasgn, receiver, :"[]=", + *index.sexp_body).compact # [].sexp_body => nil + result.line = l + result end def assignable(lhs, value = nil) id = lhs.to_sym unless Sexp === lhs + + raise "WTF" if Sexp === id id = id.to_sym if Sexp === id raise "write a test 1" if id.to_s =~ /^(?:self|nil|true|false|__LINE__|__FILE__)$/ @@ -211,11 +239,33 @@ self.env[id] ||= :lvar if result.sexp_type == :lasgn + line = case lhs + when Sexp then + lhs.line + else + value && value.line || lexer.lineno + end + result << value if value + result.line = line return result end + def backref_assign_error ref + # TODO: need a test for this... obviously + case ref.sexp_type + when :nth_ref then + raise "write a test 2" + raise SyntaxError, "Can't set variable %p" % ref.last + when :back_ref then + raise "write a test 3" + raise SyntaxError, "Can't set back reference %p" % ref.last + else + raise "Unknown backref type: #{ref.inspect}" + end + end + def block_append(head, tail) return head if tail.nil? return tail if head.nil? @@ -229,6 +279,69 @@ head << tail end + def block_dup_check call_or_args, block + syntax_error "Both block arg and actual block given." if + block and call_or_args.block_pass? + end + + def block_var *args + result = self.args args + result.sexp_type = :masgn + result + end + + def call_args args + result = s(:call_args) + + a = args.grep(Sexp).first + if a then + result.line a.line + else + result.line lexer.lineno + end + + args.each do |arg| + case arg + when Sexp then + case arg.sexp_type + when :array, :args, :call_args then # HACK? remove array at some point + result.concat arg.sexp_body + else + result << arg + end + when Symbol then + result << arg + when ",", nil then + # ignore + else + raise "unhandled: #{arg.inspect} in #{args.inspect}" + end + end + + result + end + + def clean_mlhs sexp + case sexp.sexp_type + when :masgn then + if sexp.size == 2 and sexp[1].sexp_type == :array then + s(:masgn, *sexp[1].sexp_body.map { |sub| clean_mlhs sub }) + else + debug20 5 + sexp + end + when :gasgn, :iasgn, :lasgn, :cvasgn then + if sexp.size == 2 then + sexp.last + else + debug20 7 + sexp # optional value + end + else + raise "unsupported type: #{sexp.inspect}" + end + end + def cond node return nil if node.nil? node = value_expr node @@ -236,61 +349,115 @@ case node.sexp_type when :lit then if Regexp === node.last then - return s(:match, node) + s(:match, node) else - return node + node end when :and then - return s(:and, cond(node[1]), cond(node[2])) + _, lhs, rhs = node + s(:and, cond(lhs), cond(rhs)) when :or then - return s(:or, cond(node[1]), cond(node[2])) + _, lhs, rhs = node + s(:or, cond(lhs), cond(rhs)) when :dot2 then label = "flip#{node.hash}" env[label] = :lvar _, lhs, rhs = node - return s(:flip2, lhs, rhs) + s(:flip2, lhs, rhs) # TODO: recurse? when :dot3 then label = "flip#{node.hash}" env[label] = :lvar _, lhs, rhs = node - return s(:flip3, lhs, rhs) + s(:flip3, lhs, rhs) else - return node - end + node + end.line node.line end - ## - # for pure ruby systems only + def dedent sexp + dedent_count = dedent_size sexp - def do_parse - _racc_do_parse_rb(_racc_setup, false) - end if ENV['PURE_RUBY'] + skip_one = false + sexp.map { |obj| + case obj + when Symbol then + obj + when String then + obj.lines.map { |l| remove_whitespace_width l, dedent_count }.join + when Sexp then + case obj.sexp_type + when :evstr then + skip_one = true + obj + when :str then + _, str = obj + str = if skip_one then + skip_one = false + s1, *rest = str.lines + s1 + rest.map { |l| remove_whitespace_width l, dedent_count }.join + else + str.lines.map { |l| remove_whitespace_width l, dedent_count }.join + end - def new_match lhs, rhs - if lhs then - case lhs.sexp_type - when :dregx, :dregx_once then - return s(:match2, lhs, rhs).line(lhs.line) - when :lit then - return s(:match2, lhs, rhs).line(lhs.line) if Regexp === lhs.last + s(:str, str).line obj.line + else + warn "unprocessed sexp %p" % [obj] + end + else + warn "unprocessed: %p" % [obj] end - end + } + end - if rhs then - case rhs.sexp_type - when :dregx, :dregx_once then - return s(:match3, rhs, lhs).line(lhs.line) - when :lit then - return s(:match3, rhs, lhs).line(lhs.line) if Regexp === rhs.last + def dedent_size sexp + skip_one = false + sexp.flat_map { |s| + case s + when Symbol then + next + when String then + s.lines + when Sexp then + case s.sexp_type + when :evstr then + skip_one = true + next + when :str then + _, str = s + lines = str.lines + if skip_one then + skip_one = false + lines.shift + end + lines + else + warn "unprocessed sexp %p" % [s] + end + else + warn "unprocessed: %p" % [s] + end.map { |l| whitespace_width l[/^[ \t]*/] } + }.compact.min + end + + def dedent_string string, width + characters_skipped = 0 + indentation_skipped = 0 + + string.chars.each do |char| + break if indentation_skipped >= width + if char == " " + characters_skipped += 1 + indentation_skipped += 1 + elsif char == "\t" + proposed = TAB_WIDTH * (indentation_skipped / TAB_WIDTH + 1) + break if proposed > width + characters_skipped += 1 + indentation_skipped = proposed end end - - return new_call(lhs, :"=~", argl(rhs)).line(lhs.line) + string[characters_skipped..-1] end - # TODO: remove in 4.0 or 2018-01, whichever is first - deprecate :get_match_node, :new_match - def gettable(id) lineno = id.lineno if id.respond_to? :lineno id = id.to_sym if String === id @@ -320,31 +487,94 @@ result end + def hack_encoding str, extra = nil + encodings = ENCODING_ORDER.dup + encodings.unshift(extra) unless extra.nil? + + # terrible, horrible, no good, very bad, last ditch effort. + encodings.each do |enc| + begin + str.force_encoding enc + if str.valid_encoding? then + str.encode! Encoding::UTF_8 + break + end + rescue ArgumentError # unknown encoding name + # do nothing + rescue Encoding::InvalidByteSequenceError + # do nothing + rescue Encoding::UndefinedConversionError + # do nothing + end + end + + # no amount of pain is enough for you. + raise "Bad encoding. Need a magic encoding comment." unless + str.encoding.name == "UTF-8" + end + ## - # Canonicalize conditionals. Eg: - # - # not x ? a : b + # Returns a UTF-8 encoded string after processing BOMs and magic + # encoding comments. # - # becomes: + # Holy crap... ok. Here goes: # - # x ? b : a + # Ruby's file handling and encoding support is insane. We need to be + # able to lex a file. The lexer file is explicitly UTF-8 to make + # things cleaner. This allows us to deal with extended chars in + # class and method names. In order to do this, we need to encode all + # input source files as UTF-8. First, we look for a UTF-8 BOM by + # looking at the first line while forcing its encoding to + # ASCII-8BIT. If we find a BOM, we strip it and set the expected + # encoding to UTF-8. Then, we search for a magic encoding comment. + # If found, it overrides the BOM. Finally, we force the encoding of + # the input string to whatever was found, and then encode that to + # UTF-8 for compatibility with the lexer. - attr_accessor :canonicalize_conditions + def handle_encoding str + str = str.dup + has_enc = str.respond_to? :encoding + encoding = nil - def initialize(options = {}) - super() + header = str.each_line.first(2) + header.map! { |s| s.force_encoding "ASCII-8BIT" } if has_enc - v = self.class.name[/1[89]|2[01]/] + first = header.first || "" + encoding, str = "utf-8", str.b[3..-1] if first =~ /\A\xEF\xBB\xBF/ - self.lexer = RubyLexer.new v && v.to_i - self.lexer.parser = self + encoding = $1.strip if header.find { |s| + s[/^#.*?-\*-.*?coding:\s*([^ ;]+).*?-\*-/, 1] || + s[/^#.*(?:en)?coding(?:\s*[:=])\s*([\w-]+)/, 1] + } - @env = RubyParserStuff::Environment.new - @comments = [] + if encoding then + if has_enc then + encoding.sub!(/utf-8-.+$/, "utf-8") # HACK for stupid emacs formats + hack_encoding str, encoding + else + warn "Skipping magic encoding comment" + end + else + # nothing specified... ugh. try to encode as utf-8 + hack_encoding str if has_enc + end - @canonicalize_conditions = true + str + end - self.reset + def invert_block_call val + ret, iter = val + type, call = ret + + iter.insert 1, call + + ret = s(type).line ret.line + + [iter, ret] + end + + def inverted? val + JUMP_TYPE[val[0].sexp_type] end def list_append list, item # TODO: nuke me *sigh* @@ -365,12 +595,14 @@ htype, ttype = head.sexp_type, tail.sexp_type - head = s(:dstr, '', head) if htype == :evstr + head = s(:dstr, "", head).line head.line if htype == :evstr case ttype when :str then if htype == :str - head.last << tail.last + a, b = head.last, tail.last + b = b.dup.force_encoding a.encoding unless Encoding.compatible?(a, b) + a << b elsif htype == :dstr and head.size == 2 then head.last << tail.last else @@ -384,15 +616,15 @@ head.line = lineno else tail.sexp_type = :array - tail[1] = s(:str, tail[1]) - tail.delete_at 1 if tail[1] == s(:str, '') + tail[1] = s(:str, tail[1]).line tail.line + tail.delete_at 1 if tail[1] == s(:str, "") head.push(*tail.sexp_body) end when :evstr then if htype == :str then f, l = head.file, head.line - head = s(:dstr, *head.sexp_body) + head = s(:dstr, *head.sexp_body).line head.line head.file = f head.line = l end @@ -423,23 +655,66 @@ node = rhs end - node[2] = s(type, rhs, right) + node.pop + node << s(type, rhs, right).line(rhs.line) return left end - return s(type, left, right) + result = s(type, left, right) + result.line left.line if left.line + result end - # TODO: remove in 4.0 or 2018-01, whichever is first - deprecate :logop, :logical_op - def new_aref val val[2] ||= s(:arglist) val[2].sexp_type = :arglist if val[2].sexp_type == :array # REFACTOR new_call val[0], :"[]", val[2] end + def new_assign lhs, rhs + return nil unless lhs + + rhs = value_expr rhs + + case lhs.sexp_type + when :lasgn, :iasgn, :cdecl, :cvdecl, :gasgn, :cvasgn, :attrasgn, :safe_attrasgn then + lhs << rhs + when :const then + lhs.sexp_type = :cdecl + lhs << rhs + else + raise "unknown lhs #{lhs.inspect} w/ #{rhs.inspect}" + end + + lhs + end + + def new_attrasgn recv, meth, call_op = :"." + meth = :"#{meth}=" + + result = case call_op.to_sym + when :"." + s(:attrasgn, recv, meth) + when :"&." + s(:safe_attrasgn, recv, meth) + else + raise "unknown call operator: `#{type.inspect}`" + end + + result.line = recv.line + result + end + + def new_begin val + _, lineno, body, _ = val + + result = body ? s(:begin, body) : s(:nil) + result.line lineno + + result + end + def new_body val body, resbody, elsebody, ensurebody = val @@ -463,39 +738,27 @@ if elsebody and not resbody then warning("else without rescue is useless") - result = s(:begin, result) if result + result = s(:begin, result).line result.line if result result = block_append(result, elsebody) end - result = s(:ensure, result, ensurebody).compact if ensurebody + if ensurebody + lineno = (result || ensurebody).line + result = s(:ensure, result, ensurebody).compact.line lineno + end result end - def argl x - x = s(:arglist, x) if x and x.sexp_type == :array - x + def new_brace_body args, body, lineno + new_iter(nil, args, body).line lineno end - def backref_assign_error ref - # TODO: need a test for this... obviously - case ref.sexp_type - when :nth_ref then - raise "write a test 2" - raise SyntaxError, "Can't set variable %p" % ref.last - when :back_ref then - raise "write a test 3" - raise SyntaxError, "Can't set back reference %p" % ref.last - else - raise "Unknown backref type: #{ref.inspect}" - end - end - - def new_call recv, meth, args = nil, call_op = :'.' + def new_call recv, meth, args = nil, call_op = :"." result = case call_op.to_sym - when :'.' + when :"." s(:call, recv, meth) - when :'&.' + when :"&." s(:safe_call, recv, meth) else raise "unknown call operator: `#{type.inspect}`" @@ -505,35 +768,20 @@ # TODO: need a test with f(&b) { } to produce warning if args - if [:arglist, :args, :array, :call_args].include? args.sexp_type + if ARG_TYPES[args.sexp_type] then result.concat args.sexp_body else result << args end end - line = result.grep(Sexp).map(&:line).compact.min - result.line = line if line + # line = result.grep(Sexp).map(&:line).compact.min + result.line = recv.line if recv + result.line ||= lexer.lineno result end - def new_attrasgn recv, meth, call_op - meth = :"#{meth}=" - - result = case call_op.to_sym - when :'.' - s(:attrasgn, recv, meth) - when :'&.' - s(:safe_attrasgn, recv, meth) - else - raise "unknown call operator: `#{type.inspect}`" - end - - result.line = recv.line - result - end - def new_case expr, body, line result = s(:case, expr) @@ -579,11 +827,29 @@ result end + def new_const_op_asgn val + lhs, asgn_op, rhs = val[0], val[1].to_sym, val[2] + + result = case asgn_op + when :"||" then + s(:op_asgn_or, lhs, rhs) + when :"&&" then + s(:op_asgn_and, lhs, rhs) + else + s(:op_asgn, lhs, asgn_op, rhs) + end + + result.line = lhs.line + result + end + def new_defn val - (_, line), name, _, args, body, * = val - body ||= s(:nil) + (_, line), name, _, args, body, nil_body_line, * = val + body ||= s(:nil).line nil_body_line - result = s(:defn, name.to_sym, args) + args.line line + + result = s(:defn, name.to_sym, args).line line if body then if body.sexp_type == :block then @@ -593,19 +859,23 @@ end end - args.line line - result.line = line result.comments = self.comments.pop result end def new_defs val - recv, name, args, body = val[1], val[4], val[6], val[7] - body ||= s(:nil) + _, recv, _, _, name, (_in_def, line), args, body, _ = val + + body ||= s(:nil).line line + + args.line line result = s(:defs, recv, name.to_sym, args) + # TODO: remove_begin + # TODO: reduce_nodes + if body then if body.sexp_type == :block then result.push(*body.sexp_body) @@ -619,6 +889,10 @@ result end + def new_do_body args, body, lineno + new_iter(nil, args, body).line(lineno) + end + def new_for expr, var, body result = s(:for, expr, var).line(var.line) result << body if body @@ -626,7 +900,9 @@ end def new_hash val - s(:hash, *val[2].values).line(val[1]) + _, line, assocs = val + + s(:hash).line(line).concat assocs.values end def new_if c, t, f @@ -647,27 +923,59 @@ result << args result << body if body - args.sexp_type = :args unless args == 0 + result.line call.line if call - result - end + unless args == 0 then + args.line call.line if call + args.sexp_type = :args + end - def new_masgn_arg rhs, wrap = false - rhs = value_expr(rhs) - rhs = s(:to_ary, rhs) if wrap # HACK: could be array if lhs isn't right - rhs + result end def new_masgn lhs, rhs, wrap = false _, ary = lhs + line = rhs.line rhs = value_expr(rhs) rhs = ary ? s(:to_ary, rhs) : s(:array, rhs) if wrap + rhs.line line if wrap lhs.delete_at 1 if ary.nil? lhs << rhs - lhs + lhs + end + + def new_masgn_arg rhs, wrap = false + rhs = value_expr(rhs) + # HACK: could be array if lhs isn't right + rhs = s(:to_ary, rhs).line rhs.line if wrap + rhs + end + + def new_match lhs, rhs + if lhs then + case lhs.sexp_type + when :dregx, :dregx_once then + # TODO: no test coverage + return s(:match2, lhs, rhs).line(lhs.line) + when :lit then + return s(:match2, lhs, rhs).line(lhs.line) if Regexp === lhs.last + end + end + + if rhs then + case rhs.sexp_type + when :dregx, :dregx_once then + # TODO: no test coverage + return s(:match3, rhs, lhs).line(lhs.line) + when :lit then + return s(:match3, rhs, lhs).line(lhs.line) if Regexp === rhs.last + end + end + + new_call(lhs, :"=~", argl(rhs)).line lhs.line end def new_module val @@ -690,32 +998,41 @@ def new_op_asgn val lhs, asgn_op, arg = val[0], val[1].to_sym, val[2] - name = lhs.value + name = gettable(lhs.value).line lhs.line arg = remove_begin(arg) result = case asgn_op # REFACTOR when :"||" then lhs << arg - s(:op_asgn_or, self.gettable(name), lhs) + s(:op_asgn_or, name, lhs) when :"&&" then lhs << arg - s(:op_asgn_and, self.gettable(name), lhs) + s(:op_asgn_and, name, lhs) else - # TODO: why [2] ? - lhs[2] = new_call(self.gettable(name), asgn_op, argl(arg)) + lhs << new_call(name, asgn_op, argl(arg)) lhs end result.line = lhs.line result end + def new_op_asgn1 val + lhs, _, args, _, op, rhs = val + + args.sexp_type = :arglist if args + + result = s(:op_asgn1, lhs, args, op.to_sym, rhs) + result.line lhs.line + result + end + def new_op_asgn2 val recv, call_op, meth, op, arg = val meth = :"#{meth}=" result = case call_op.to_sym - when :'.' + when :"." s(:op_asgn2, recv, meth, op.to_sym, arg) - when :'&.' + when :"&." s(:safe_op_asgn2, recv, meth, op.to_sym, arg) else raise "unknown call operator: `#{type.inspect}`" @@ -725,27 +1042,52 @@ result end + def new_qsym_list + result = s(:array).line lexer.lineno + self.lexer.fixup_lineno + result + end + + def new_qsym_list_entry val + _, str, _ = val + result = s(:lit, str.to_sym).line lexer.lineno + self.lexer.fixup_lineno + result + end + + def new_qword_list + result = s(:array).line lexer.lineno + self.lexer.fixup_lineno + result + end + + def new_qword_list_entry val + _, str, _ = val + str.force_encoding("ASCII-8BIT") unless str.valid_encoding? + result = s(:str, str).line lexer.lineno # TODO: problematic? grab from parser + self.lexer.fixup_lineno + result + end + def new_regexp val - node = val[1] || s(:str, '') - options = val[2] + _, node, options = val + + node ||= s(:str, "").line lexer.lineno o, k = 0, nil options.split(//).uniq.each do |c| # FIX: this has a better home v = { - 'x' => Regexp::EXTENDED, - 'i' => Regexp::IGNORECASE, - 'm' => Regexp::MULTILINE, - 'o' => Regexp::ONCE, - 'n' => Regexp::ENC_NONE, - 'e' => Regexp::ENC_EUC, - 's' => Regexp::ENC_SJIS, - 'u' => Regexp::ENC_UTF8, + "x" => Regexp::EXTENDED, + "i" => Regexp::IGNORECASE, + "m" => Regexp::MULTILINE, + "o" => Regexp::ONCE, + "n" => Regexp::ENC_NONE, + "e" => Regexp::ENC_EUC, + "s" => Regexp::ENC_SJIS, + "u" => Regexp::ENC_UTF8, }[c] raise "unknown regexp option: #{c}" unless v o += v - - # encoding options are ignored on 1.9+ - k = c if c =~ /[esu]/ if RUBY_VERSION < "1.9" end case node.sexp_type @@ -775,7 +1117,7 @@ end node << o if o and o != 0 else - node = s(:dregx, '', node); + node = s(:dregx, "", node).line node.line node.sexp_type = :dregx_once if options =~ /o/ node << o if o and o != 0 end @@ -789,9 +1131,14 @@ else body = [body] end + s(:resbody, cond, *body).line cond.line end + def new_rescue body, resbody + s(:rescue, body, resbody).line body.line + end + def new_sclass val recv, in_def, in_single, body = val[3], val[4], val[6], val[7] @@ -812,62 +1159,36 @@ end def new_string val - str = val[0] - str.force_encoding("ASCII-8BIT") unless str.valid_encoding? unless RUBY_VERSION < "1.9" - result = s(:str, str) + str, = val + str.force_encoding("UTF-8") + # TODO: remove: + str.force_encoding("ASCII-8BIT") unless str.valid_encoding? + result = s(:str, str).line lexer.lineno self.lexer.fixup_lineno str.count("\n") result end - def new_qword_list_entry val - str = val[1] - str.force_encoding("ASCII-8BIT") unless str.valid_encoding? unless RUBY_VERSION < "1.9" - result = s(:str, str) - self.lexer.fixup_lineno - result - end - - def new_qword_list - result = s(:array) - self.lexer.fixup_lineno - result - end - - def new_word_list - result = s(:array) - self.lexer.fixup_lineno - result - end - - def new_word_list_entry val - result = val[1].sexp_type == :evstr ? s(:dstr, "", val[1]) : val[1] - self.lexer.fixup_lineno - result - end - - def new_qsym_list - result = s(:array) - self.lexer.fixup_lineno - result - end - - def new_qsym_list_entry val - result = s(:lit, val[1].to_sym) - self.lexer.fixup_lineno - result + def new_super args + if args && args.node_type == :block_pass then + s(:super, args).line args.line + else + args ||= s(:arglist).line lexer.lineno + s(:super, *args.sexp_body).line args.line + end end def new_symbol_list - result = s(:array) + result = s(:array).line lexer.lineno self.lexer.fixup_lineno result end def new_symbol_list_entry val - _list, sym, _nil = val # TODO: use _list - result = val[1] + _, sym, _ = val - result ||= s(:str, "") + sym ||= s(:str, "") + + line = lexer.lineno case sym.sexp_type when :dstr then @@ -875,27 +1196,21 @@ when :str then sym = s(:lit, sym.last.to_sym) else - debug20 24 - sym = s(:dsym, "", sym || s(:str, "")) + sym = s(:dsym, "", sym || s(:str, "").line(line)) end + + sym.line line + self.lexer.fixup_lineno - sym - end - def new_super args - if args && args.node_type == :block_pass then - s(:super, args) - else - args ||= s(:arglist) - s(:super, *args.sexp_body) - end + sym end def new_undef n, m = nil if m then - block_append(n, s(:undef, m)) + block_append(n, s(:undef, m).line(m.line)) else - s(:undef, n) + s(:undef, n).line n.line end end @@ -928,20 +1243,36 @@ new_until_or_while :while, block, expr, pre end - def new_xstring str - if str then - case str.sexp_type + def new_word_list + result = s(:array).line lexer.lineno + self.lexer.fixup_lineno + result + end + + def new_word_list_entry val + _, word, _ = val + result = word.sexp_type == :evstr ? s(:dstr, "", word).line(word.line) : word + self.lexer.fixup_lineno + result + end + + def new_xstring val + _, node = val + + node ||= s(:str, "").line lexer.lineno + + if node then + case node.sexp_type when :str - str.sexp_type = :xstr + node.sexp_type = :xstr when :dstr - str.sexp_type = :dxstr + node.sexp_type = :dxstr else - str = s(:dxstr, '', str) + node = s(:dxstr, "", node).line node.line end - str - else - s(:xstr, '') end + + node end def new_yield args = nil @@ -950,116 +1281,32 @@ raise SyntaxError, "Block argument should not be given." if args && args.node_type == :block_pass - args ||= s(:arglist) + args ||= s(:arglist).line lexer.lineno args.sexp_type = :arglist if [:call_args, :array].include? args.sexp_type - args = s(:arglist, args) unless args.sexp_type == :arglist + args = s(:arglist, args).line args.line unless args.sexp_type == :arglist - return s(:yield, *args.sexp_body) + s(:yield, *args.sexp_body).line args.line end def next_token token = self.lexer.next_token if token and token.first != RubyLexer::EOF then + self.last_token_type = token return token else - return [false, '$end'] - end - end - - def new_assign lhs, rhs - return nil unless lhs - - rhs = value_expr rhs - - case lhs.sexp_type - when :lasgn, :iasgn, :cdecl, :cvdecl, :gasgn, :cvasgn, :attrasgn, :safe_attrasgn then - lhs << rhs - when :const then - lhs.sexp_type = :cdecl - lhs << rhs - else - raise "unknown lhs #{lhs.inspect} w/ #{rhs.inspect}" - end - - lhs - end - - # TODO: remove in 4.0 or 2018-01, whichever is first - deprecate :node_assign, :new_assign - - ## - # Returns a UTF-8 encoded string after processing BOMs and magic - # encoding comments. - # - # Holy crap... ok. Here goes: - # - # Ruby's file handling and encoding support is insane. We need to be - # able to lex a file. The lexer file is explicitly UTF-8 to make - # things cleaner. This allows us to deal with extended chars in - # class and method names. In order to do this, we need to encode all - # input source files as UTF-8. First, we look for a UTF-8 BOM by - # looking at the first line while forcing its encoding to - # ASCII-8BIT. If we find a BOM, we strip it and set the expected - # encoding to UTF-8. Then, we search for a magic encoding comment. - # If found, it overrides the BOM. Finally, we force the encoding of - # the input string to whatever was found, and then encode that to - # UTF-8 for compatibility with the lexer. - - def handle_encoding str - str = str.dup - has_enc = str.respond_to? :encoding - encoding = nil - - header = str.lines.first(2) - header.map! { |s| s.force_encoding "ASCII-8BIT" } if has_enc - - first = header.first || "" - encoding, str = "utf-8", str[3..-1] if first =~ /\A\xEF\xBB\xBF/ - - encoding = $1.strip if header.find { |s| - s[/^#.*?-\*-.*?coding:\s*([^ ;]+).*?-\*-/, 1] || - s[/^#.*(?:en)?coding(?:\s*[:=])\s*([\w-]+)/, 1] - } - - if encoding then - if has_enc then - encoding.sub!(/utf-8-.+$/, 'utf-8') # HACK for stupid emacs formats - hack_encoding str, encoding - else - warn "Skipping magic encoding comment" - end - else - # nothing specified... ugh. try to encode as utf-8 - hack_encoding str if has_enc + return [false, false] end - - str end - def hack_encoding str, extra = nil - encodings = ENCODING_ORDER.dup - encodings.unshift(extra) unless extra.nil? - - # terrible, horrible, no good, very bad, last ditch effort. - encodings.each do |enc| - begin - str.force_encoding enc - if str.valid_encoding? then - str.encode! Encoding::UTF_8 - break - end - rescue Encoding::InvalidByteSequenceError - # do nothing - rescue Encoding::UndefinedConversionError - # do nothing - end - end - - # no amount of pain is enough for you. - raise "Bad encoding. Need a magic encoding comment." unless - str.encoding.name == "UTF-8" + def on_error(et, ev, values) + super + rescue Racc::ParseError => e + # I don't like how the exception obscures the error message + e.message.replace "%s:%p :: %s" % [self.file, lexer.lineno, e.message.strip] + warn e.message if $DEBUG + raise end ## @@ -1074,7 +1321,7 @@ self.file = file.dup - @yydebug = ENV.has_key? 'DEBUG' + @yydebug = ENV.has_key? "DEBUG" # HACK -- need to get tests passing more than have graceful code self.lexer.ss = RPStringScanner.new str @@ -1083,40 +1330,29 @@ end end - alias :parse :process + alias parse process def remove_begin node - oldnode = node - if node and node.sexp_type == :begin and node.size == 2 then - node = node.last - node.line = oldnode.line - end + line = node.line + + node = node.last while node and node.sexp_type == :begin and node.size == 2 + + node = s(:nil) if node == s(:begin) + + node.line ||= line + node end + alias value_expr remove_begin # TODO: for now..? could check the tree, but meh? + def reset lexer.reset self.in_def = false self.in_single = 0 self.env.reset self.comments.clear - end - - def block_dup_check call_or_args, block - syntax_error "Both block arg and actual block given." if - block and call_or_args.block_pass? - end - - def inverted? val - [:return, :next, :break, :yield].include? val[0].sexp_type - end - - def invert_block_call val - (type, call), iter = val - - iter.insert 1, call - - [iter, s(type)] + self.last_token_type = nil end def ret_args node @@ -1131,7 +1367,7 @@ # HACK matz wraps ONE of the FOUR splats in a newline to # distinguish. I use paren for now. ugh - node = s(:svalue, node) if node.sexp_type == :splat and not node.paren + node = s(:svalue, node).line node.line if node.sexp_type == :splat and not node.paren node.sexp_type = :svalue if node.sexp_type == :arglist && node[1].sexp_type == :splat end @@ -1140,18 +1376,17 @@ def s(*args) result = Sexp.new(*args) - result.line ||= lexer.lineno if lexer.ss # otherwise... + # result.line ||= lexer.lineno if lexer.ss unless ENV["CHECK_LINE_NUMS"] # otherwise... result.file = self.file result end - def value_expr oldnode # HACK - node = remove_begin oldnode - node.line = oldnode.line if oldnode - node[2] = value_expr node[2] if node and node.sexp_type == :if - node + def syntax_error msg + raise RubyParser::SyntaxError, msg end + alias yyerror syntax_error + def void_stmts node return nil unless node return node unless node.sexp_type == :block @@ -1169,18 +1404,37 @@ # do nothing for now end - alias yyerror syntax_error + def whitespace_width line, remove_width = nil + col = 0 + idx = 0 + + line.chars.each do |c| + break if remove_width && col >= remove_width + case c + when " " then + col += 1 + when "\t" then + n = TAB_WIDTH * (col / TAB_WIDTH + 1) + break if remove_width && n > remove_width + col = n + else + break + end + idx += 1 + end - def on_error(et, ev, values) - super - rescue Racc::ParseError => e - # I don't like how the exception obscures the error message - e.message.replace "%s:%p :: %s" % [self.file, lexer.lineno, e.message.strip] - warn e.message if $DEBUG - raise + if remove_width then + line[idx..-1] + else + col + end end + alias remove_whitespace_width whitespace_width + class Keyword + include RubyLexer::State::Values + class KWtable attr_accessor :name, :state, :id0, :id1 def initialize(name, id=[], state=nil) @@ -1193,82 +1447,75 @@ ## # :stopdoc: # - # :expr_beg = ignore newline, +/- is a sign. - # :expr_end = newline significant, +/- is a operator. - # :expr_arg = newline significant, +/- is a operator. - # :expr_cmdarg = newline significant, +/- is a operator. - # :expr_endarg = newline significant, +/- is a operator. - # :expr_mid = newline significant, +/- is a operator. - # :expr_fname = ignore newline, no reserved words. - # :expr_dot = right after . or ::, no reserved words. - # :expr_class = immediate after class, no here document. + # :expr_beg = ignore newline, +/- is a sign. + # :expr_end = newline significant, +/- is an operator. + # :expr_endarg = ditto, and unbound braces. + # :expr_endfn = ditto, and unbound braces. + # :expr_arg = newline significant, +/- is an operator. + # :expr_cmdarg = ditto + # :expr_mid = ditto + # :expr_fname = ignore newline, no reserved words. + # :expr_dot = right after . or ::, no reserved words. + # :expr_class = immediate after class, no here document. + # :expr_label = flag bit, label is allowed. + # :expr_labeled = flag bit, just after a label. + # :expr_fitem = symbol literal as FNAME. + # :expr_value = :expr_beg -- work to remove. Need multi-state support. + + expr_woot = EXPR_FNAME|EXPR_FITEM wordlist = [ - ["end", [:kEND, :kEND ], :expr_end ], - ["else", [:kELSE, :kELSE ], :expr_beg ], - ["case", [:kCASE, :kCASE ], :expr_beg ], - ["ensure", [:kENSURE, :kENSURE ], :expr_beg ], - ["module", [:kMODULE, :kMODULE ], :expr_beg ], - ["elsif", [:kELSIF, :kELSIF ], :expr_beg ], - ["def", [:kDEF, :kDEF ], :expr_fname ], - ["rescue", [:kRESCUE, :kRESCUE_MOD ], :expr_mid ], - ["not", [:kNOT, :kNOT ], :expr_beg ], - ["then", [:kTHEN, :kTHEN ], :expr_beg ], - ["yield", [:kYIELD, :kYIELD ], :expr_arg ], - ["for", [:kFOR, :kFOR ], :expr_beg ], - ["self", [:kSELF, :kSELF ], :expr_end ], - ["false", [:kFALSE, :kFALSE ], :expr_end ], - ["retry", [:kRETRY, :kRETRY ], :expr_end ], - ["return", [:kRETURN, :kRETURN ], :expr_mid ], - ["true", [:kTRUE, :kTRUE ], :expr_end ], - ["if", [:kIF, :kIF_MOD ], :expr_beg ], - ["defined?", [:kDEFINED, :kDEFINED ], :expr_arg ], - ["super", [:kSUPER, :kSUPER ], :expr_arg ], - ["undef", [:kUNDEF, :kUNDEF ], :expr_fname ], - ["break", [:kBREAK, :kBREAK ], :expr_mid ], - ["in", [:kIN, :kIN ], :expr_beg ], - ["do", [:kDO, :kDO ], :expr_beg ], - ["nil", [:kNIL, :kNIL ], :expr_end ], - ["until", [:kUNTIL, :kUNTIL_MOD ], :expr_beg ], - ["unless", [:kUNLESS, :kUNLESS_MOD ], :expr_beg ], - ["or", [:kOR, :kOR ], :expr_beg ], - ["next", [:kNEXT, :kNEXT ], :expr_mid ], - ["when", [:kWHEN, :kWHEN ], :expr_beg ], - ["redo", [:kREDO, :kREDO ], :expr_end ], - ["and", [:kAND, :kAND ], :expr_beg ], - ["begin", [:kBEGIN, :kBEGIN ], :expr_beg ], - ["__LINE__", [:k__LINE__, :k__LINE__ ], :expr_end ], - ["class", [:kCLASS, :kCLASS ], :expr_class ], - ["__FILE__", [:k__FILE__, :k__FILE__ ], :expr_end ], - ["END", [:klEND, :klEND ], :expr_end ], - ["BEGIN", [:klBEGIN, :klBEGIN ], :expr_end ], - ["while", [:kWHILE, :kWHILE_MOD ], :expr_beg ], - ["alias", [:kALIAS, :kALIAS ], :expr_fname ], - ["__ENCODING__", [:k__ENCODING__, :k__ENCODING__], :expr_end], - ].map { |args| KWtable.new(*args) } + ["alias", [:kALIAS, :kALIAS ], expr_woot ], + ["and", [:kAND, :kAND ], EXPR_BEG ], + ["begin", [:kBEGIN, :kBEGIN ], EXPR_BEG ], + ["break", [:kBREAK, :kBREAK ], EXPR_MID ], + ["case", [:kCASE, :kCASE ], EXPR_BEG ], + ["class", [:kCLASS, :kCLASS ], EXPR_CLASS ], + ["def", [:kDEF, :kDEF ], EXPR_FNAME ], + ["defined?", [:kDEFINED, :kDEFINED ], EXPR_ARG ], + ["do", [:kDO, :kDO ], EXPR_BEG ], + ["else", [:kELSE, :kELSE ], EXPR_BEG ], + ["elsif", [:kELSIF, :kELSIF ], EXPR_BEG ], + ["end", [:kEND, :kEND ], EXPR_END ], + ["ensure", [:kENSURE, :kENSURE ], EXPR_BEG ], + ["false", [:kFALSE, :kFALSE ], EXPR_END ], + ["for", [:kFOR, :kFOR ], EXPR_BEG ], + ["if", [:kIF, :kIF_MOD ], EXPR_BEG ], + ["in", [:kIN, :kIN ], EXPR_BEG ], + ["module", [:kMODULE, :kMODULE ], EXPR_BEG ], + ["next", [:kNEXT, :kNEXT ], EXPR_MID ], + ["nil", [:kNIL, :kNIL ], EXPR_END ], + ["not", [:kNOT, :kNOT ], EXPR_ARG ], + ["or", [:kOR, :kOR ], EXPR_BEG ], + ["redo", [:kREDO, :kREDO ], EXPR_END ], + ["rescue", [:kRESCUE, :kRESCUE_MOD ], EXPR_MID ], + ["retry", [:kRETRY, :kRETRY ], EXPR_END ], + ["return", [:kRETURN, :kRETURN ], EXPR_MID ], + ["self", [:kSELF, :kSELF ], EXPR_END ], + ["super", [:kSUPER, :kSUPER ], EXPR_ARG ], + ["then", [:kTHEN, :kTHEN ], EXPR_BEG ], + ["true", [:kTRUE, :kTRUE ], EXPR_END ], + ["undef", [:kUNDEF, :kUNDEF ], expr_woot ], + ["unless", [:kUNLESS, :kUNLESS_MOD ], EXPR_BEG ], + ["until", [:kUNTIL, :kUNTIL_MOD ], EXPR_BEG ], + ["when", [:kWHEN, :kWHEN ], EXPR_BEG ], + ["while", [:kWHILE, :kWHILE_MOD ], EXPR_BEG ], + ["yield", [:kYIELD, :kYIELD ], EXPR_ARG ], + ["BEGIN", [:klBEGIN, :klBEGIN ], EXPR_END ], + ["END", [:klEND, :klEND ], EXPR_END ], + ["__FILE__", [:k__FILE__, :k__FILE__ ], EXPR_END ], + ["__LINE__", [:k__LINE__, :k__LINE__ ], EXPR_END ], + ["__ENCODING__", [:k__ENCODING__, :k__ENCODING__], EXPR_END], + ].map { |args| + KWtable.new(*args) + } # :startdoc: - WORDLIST18 = Hash[*wordlist.map { |o| [o.name, o] }.flatten] - WORDLIST19 = Hash[*wordlist.map { |o| [o.name, o] }.flatten] - - WORDLIST18.delete "__ENCODING__" - - %w[and case elsif for if in module or unless until when while].each do |k| - WORDLIST19[k] = WORDLIST19[k].dup - WORDLIST19[k].state = :expr_value - end - %w[not].each do |k| - WORDLIST19[k] = WORDLIST19[k].dup - WORDLIST19[k].state = :expr_arg - end - - def self.keyword18 str # REFACTOR - WORDLIST18[str] - end + WORDLIST = Hash[*wordlist.map { |o| [o.name, o] }.flatten] - def self.keyword19 str - WORDLIST19[str] + def self.keyword str + WORDLIST[str] end end @@ -1328,50 +1575,57 @@ @debug = debug end - def reset - @stack = [false] - warn "#{name}_stack(set): 0" if debug - end - def inspect "StackState(#{@name}, #{@stack.inspect})" end def is_in_state + log :is_in_state if debug @stack.last end def lexpop - warn "#{name}_stack.lexpop" if debug raise if @stack.size == 0 a = @stack.pop b = @stack.pop @stack.push(a || b) + log :lexpop if debug + end + + def log action + c = caller[1] + c = caller[2] if c =~ /expr_result/ + warn "%s_stack.%s: %p at %s" % [name, action, @stack, c.clean_caller] + nil end def pop r = @stack.pop - warn "#{name}_stack.pop" if debug - @stack.push false if @stack.size == 0 + @stack.push false if @stack.empty? + log :pop if debug r end def push val @stack.push val - c = caller.first - c = caller[1] if c =~ /expr_result/ - warn "#{name}_stack(push): #{val} at line #{c.clean_caller}" if debug - nil + log :push if debug end - def store - result = @stack.dup - @stack.replace [false] - result + def reset + @stack = [false] + log :reset if debug end def restore oldstate @stack.replace oldstate + log :restore if debug + end + + def store base = false + result = @stack.dup + @stack.replace [base] + log :store if debug + result end end end diff -Nru ruby-ruby-parser-3.11.0/lib/ruby_parser.rb ruby-ruby-parser-3.15.1/lib/ruby_parser.rb --- ruby-ruby-parser-3.11.0/lib/ruby_parser.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby_parser.rb 2021-01-18 16:48:25.000000000 +0000 @@ -9,28 +9,33 @@ VERSIONS = [] - class Parser < Racc::Parser - include RubyParserStuff + attr_accessor :current - def self.inherited x - RubyParser::VERSIONS << x - end + def self.for_current_ruby + name = "V#{RUBY_VERSION[/^\d+\.\d+/].delete "."}" + klass = if const_defined? name then + const_get name + else + latest = VERSIONS.first + warn "NOTE: RubyParser::#{name} undefined, using #{latest}." + latest + end - def self.version - Parser > self and self.name[/(?:V|Ruby)(\d+)/, 1].to_i - end + klass.new end - class SyntaxError < RuntimeError; end + def self.latest + VERSIONS.first.new + end def process s, f = "(string)", t = 10 e = nil VERSIONS.each do |klass| - parser = klass.new + self.current = parser = klass.new begin return parser.process s, f, t rescue Racc::ParseError, RubyParser::SyntaxError => exc - e = exc + e ||= exc end end raise e @@ -42,47 +47,48 @@ # do nothing end - def self.latest - VERSIONS.first.new - end + class Parser < Racc::Parser + include RubyParserStuff - def self.for_current_ruby - name = "V#{RUBY_VERSION[/^\d+\.\d+/].delete "."}" - klass = if const_defined? name then - const_get name - else - latest = VERSIONS.first - warn "NOTE: RubyParser::#{name} undefined, using #{latest}." - latest - end + def self.inherited x + RubyParser::VERSIONS << x + end - klass.new + def self.version= v + @version = v + end + + def self.version + @version ||= Parser > self && self.name[/(?:V|Ruby)(\d+)/, 1].to_i + end end + + class SyntaxError < RuntimeError; end end ## # Unfortunately a problem with racc is that it won't let me namespace -# properly, so instead of RubyParser::V18, I still have to generate -# the old Ruby23Parser and shove it in as V23. +# properly, so instead of RubyParser::V25, I still have to generate +# the old Ruby25Parser and shove it in as V25. -require "ruby18_parser" -require "ruby19_parser" require "ruby20_parser" require "ruby21_parser" require "ruby22_parser" require "ruby23_parser" require "ruby24_parser" require "ruby25_parser" +require "ruby26_parser" +require "ruby27_parser" class RubyParser # HACK VERSIONS.clear # also a HACK caused by racc namespace issues + class V27 < ::Ruby27Parser; end + class V26 < ::Ruby26Parser; end class V25 < ::Ruby25Parser; end class V24 < ::Ruby24Parser; end class V23 < ::Ruby23Parser; end class V22 < ::Ruby22Parser; end class V21 < ::Ruby21Parser; end class V20 < ::Ruby20Parser; end - class V19 < ::Ruby19Parser; end - class V18 < ::Ruby18Parser; end end diff -Nru ruby-ruby-parser-3.11.0/lib/ruby_parser.yy ruby-ruby-parser-3.15.1/lib/ruby_parser.yy --- ruby-ruby-parser-3.11.0/lib/ruby_parser.yy 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/lib/ruby_parser.yy 2021-01-18 16:48:25.000000000 +0000 @@ -12,6 +12,10 @@ class Ruby24Parser #elif V == 25 class Ruby25Parser +#elif V == 26 +class Ruby26Parser +#elif V == 27 +class Ruby27Parser #else fail "version not specified or supported on code generation" #endif @@ -43,35 +47,35 @@ tLONELY #endif -prechigh - right tBANG tTILDE tUPLUS - right tPOW - right tUMINUS_NUM tUMINUS - left tSTAR2 tDIVIDE tPERCENT - left tPLUS tMINUS - left tLSHFT tRSHFT - left tAMPER2 - left tPIPE tCARET - left tGT tGEQ tLT tLEQ - nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH - left tANDOP - left tOROP - nonassoc tDOT2 tDOT3 - right tEH tCOLON - left kRESCUE_MOD - right tEQL tOP_ASGN - nonassoc kDEFINED - right kNOT - left kOR kAND - nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD - nonassoc tLBRACE_ARG - nonassoc tLOWEST preclow + nonassoc tLOWEST + nonassoc tLBRACE_ARG + nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD + left kOR kAND + right kNOT + nonassoc kDEFINED + right tEQL tOP_ASGN + left kRESCUE_MOD + right tEH tCOLON + nonassoc tDOT2 tDOT3 + left tOROP + left tANDOP + nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH + left tGT tGEQ tLT tLEQ + left tPIPE tCARET + left tAMPER2 + left tLSHFT tRSHFT + left tPLUS tMINUS + left tSTAR2 tDIVIDE tPERCENT # TODO: tSTAR2 -> tMULT + right tUMINUS_NUM tUMINUS + right tPOW + right tBANG tTILDE tUPLUS +prechigh rule program: { - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG } top_compstmt { @@ -80,7 +84,8 @@ top_compstmt: top_stmts opt_terms { - result = val[0] + stmt, _ = val + result = stmt } top_stmts: none @@ -92,14 +97,6 @@ | error top_stmt top_stmt: stmt - { - result = val[0] - - # TODO: remove once I have more confidence this is fixed - # result.each_of_type :call_args do |s| - # debug20 666, s, result - # end - } | klBEGIN { if (self.in_def || self.in_single > 0) then @@ -108,14 +105,40 @@ end self.env.extend } - tLCURLY top_compstmt tRCURLY + begin_block + { + (_, lineno), _, iter = val + iter.line lineno + + (_, preexe,) = iter + preexe.line lineno + + result = iter + } + + begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY { - result = new_iter s(:preexe), nil, val[3] + _, line, stmt, _ = val + result = new_iter s(:preexe).line(line), 0, stmt } - bodystmt: compstmt opt_rescue opt_else opt_ensure + bodystmt: compstmt opt_rescue k_else + { + res = _values[-2] + yyerror "else without rescue is useless" unless res + } + compstmt + opt_ensure { - result = new_body val + body, resc, _, _, els, ens = val + + result = new_body [body, resc, els, ens] + } + | compstmt opt_rescue opt_ensure + { + body, resc, ens = val + + result = new_body [body, resc, nil, ens] } compstmt: stmts opt_terms @@ -124,8 +147,8 @@ } stmts: none - | stmt - | stmts terms stmt + | stmt_or_begin # TODO: newline_node ? + | stmts terms stmt_or_begin { result = self.block_append val[0], val[2] } @@ -135,22 +158,30 @@ debug20 2, val, result } + stmt_or_begin: stmt + | klBEGIN + { + yyerror "BEGIN is permitted only at toplevel" + } + stmt: kALIAS fitem { - lexer.lex_state = :expr_fname - result = self.lexer.lineno + lexer.lex_state = EXPR_FNAME } fitem { - result = s(:alias, val[1], val[3]).line(val[2]) + (_, line), lhs, _, rhs = val + result = s(:alias, lhs, rhs).line(line).line line } | kALIAS tGVAR tGVAR { - result = s(:valias, val[1].to_sym, val[2].to_sym) + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, rhs.to_sym).line line } | kALIAS tGVAR tBACK_REF { - result = s(:valias, val[1].to_sym, :"$#{val[2]}") + (_, line), lhs, rhs = val + result = s(:valias, lhs.to_sym, :"$#{rhs}").line line } | kALIAS tGVAR tNTH_REF { @@ -162,54 +193,92 @@ } | stmt kIF_MOD expr_value { - result = new_if val[2], val[0], nil + t, _, c = val + result = new_if c, t, nil } | stmt kUNLESS_MOD expr_value { - result = new_if val[2], nil, val[0] + f, _, c = val + result = new_if c, nil, f } | stmt kWHILE_MOD expr_value { - result = new_while val[0], val[2], true + e, _, c = val + result = new_while e, c, true } | stmt kUNTIL_MOD expr_value { - result = new_until val[0], val[2], true + e, _, c = val + result = new_until e, c, true } | stmt kRESCUE_MOD stmt { - result = s(:rescue, val[0], new_resbody(s(:array), val[2])) + body, _, resbody = val + + resbody = new_resbody s(:array).line(resbody.line), resbody + result = new_rescue body, resbody } | klEND tLCURLY compstmt tRCURLY { + (_, line), _, stmt, _ = val + if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end - result = new_iter s(:postexe), 0, val[2] + + result = new_iter s(:postexe).line(line), 0, stmt } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } - | var_lhs tOP_ASGN command_call + | lhs tEQL mrhs + { + lhs, _, rhs = val + result = new_assign lhs, s(:svalue, rhs).line(rhs.line) + } +#if V == 20 + | mlhs tEQL arg_value + { + result = new_masgn val[0], val[2], :wrap + } + | mlhs tEQL mrhs +#else + | mlhs tEQL mrhs_arg +#endif + { + result = new_masgn val[0], val[2] + } + | expr + + command_asgn: lhs tEQL command_rhs + { + result = new_assign val[0], val[2] + } + # | lhs tEQL command_asgn + # { + # result = new_assign val[0], val[2] + # } + | var_lhs tOP_ASGN command_rhs { result = new_op_asgn val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn1 val } - | primary_value call_op tIDENTIFIER tOP_ASGN command_call + | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + prim, _, id, opasgn, rhs = val + result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } - | primary_value call_op tCONSTANT tOP_ASGN command_call + | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' @@ -217,63 +286,63 @@ end result.line = val[0].line } - | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call + | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 4, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { - result = s(:op_asgn, val[0], val[4], val[2], val[3]) - debug20 5, val, result + lhs1, _, lhs2, op, rhs = val + + result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, op.to_sym) } - | backref tOP_ASGN command_call + | backref tOP_ASGN command_rhs { self.backref_assign_error val[0] } - | lhs tEQL mrhs - { - result = new_assign val[0], s(:svalue, val[2]) - } -#if V == 20 - | mlhs tEQL arg_value - { - result = new_masgn val[0], val[2], :wrap - } - | mlhs tEQL mrhs -#else - | mlhs tEQL mrhs_arg -#endif - { - result = new_masgn val[0], val[2] - } - | expr - command_asgn: lhs tEQL command_call + command_rhs: command_call =tOP_ASGN { - result = new_assign val[0], val[2] + expr, = val + result = value_expr expr } - | lhs tEQL command_asgn +#if V >= 24 + | command_call kRESCUE_MOD stmt { - result = new_assign val[0], val[2] + expr, (_, line), resbody = val + + expr = value_expr expr + ary = s(:array).line line + result = new_rescue(expr, new_resbody(ary, resbody)) } +#endif + | command_asgn expr: command_call | expr kAND expr { - result = logical_op :and, val[0], val[2] + lhs, _, rhs = val + result = logical_op :and, lhs, rhs } | expr kOR expr { - result = logical_op :or, val[0], val[2] + lhs, _, rhs = val + result = logical_op :or, lhs, rhs } | kNOT opt_nl expr { - result = s(:call, val[2], :"!") + (_, line), _, expr = val + result = new_call(expr, :"!").line line + # REFACTOR: call_uni_op } | tBANG command_call { - result = s(:call, val[1], :"!") + _, cmd = val + result = new_call(cmd, :"!").line cmd.line + # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict + # REFACTOR: call_uni_op -- see parse26.y } | arg @@ -282,54 +351,71 @@ result = value_expr(val[0]) } + expr_value_do: { + lexer.cond.push true + } + expr_value do + { + lexer.cond.pop + } + { + _, expr, _, _ = val + result = expr + } + command_call: command | block_command block_command: block_call - | block_call dot_or_colon operation2 command_args + | block_call call_op2 operation2 command_args { - result = new_call val[0], val[2].to_sym, val[3] + blk, _, msg, args = val + result = new_call(blk, msg.to_sym, args).line blk.line } cmd_brace_block: tLBRACE_ARG { - self.env.extend(:dynamic) + # self.env.extend(:dynamic) result = self.lexer.lineno } - opt_block_param + brace_body tRCURLY { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY - { - result = new_iter nil, val[2], val[4] - result.line = val[1] + _, line, body, _ = val - self.env.unextend + result = body + result.line = line + + # self.env.unextend } fcall: operation { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call(nil, msg.to_sym).line lexer.lineno } command: fcall command_args =tLOWEST { - result = val[0].concat val[1].sexp_body # REFACTOR pattern + call, args = val + result = call.concat args.sexp_body } | fcall command_args cmd_brace_block { - result = val[0].concat val[1].sexp_body - if val[2] then - block_dup_check result, val[2] + call, args, block = val - result, operation = val[2], result + result = call.concat args.sexp_body + + if block then + block_dup_check result, block + + result, operation = block, result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { - result = new_call val[0], val[2].to_sym, val[3], val[1] + lhs, callop, op, args = val + result = new_call lhs, op.to_sym, args, callop } | primary_value call_op operation2 command_args cmd_brace_block { @@ -361,17 +447,19 @@ } | kYIELD command_args { - result = new_yield val[1] + (_, line), args = val + result = new_yield args + result.line line # TODO: push to new_yield } - | kRETURN call_args + | k_return call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { - line = val[0].last - result = s(:break, ret_args(val[1])).line(line) + (_, line), args = val + result = s(:break, ret_args(args)).line line } | kNEXT call_args { @@ -388,56 +476,79 @@ mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { - result = s(:masgn, s(:array, val[1])) + _, arg, _ = val + l = arg.line + + result = s(:masgn, s(:array, arg).line(l)).line l } mlhs_basic: mlhs_head { - result = s(:masgn, val[0]) + head, = val + result = s(:masgn, head).line head.line } | mlhs_head mlhs_item { - result = s(:masgn, val[0] << val[1].compact) + lhs, rhs = val + result = s(:masgn, lhs << rhs.compact).line lhs.line } | mlhs_head tSTAR mlhs_node { - result = s(:masgn, val[0] << s(:splat, val[2])) + head, _, tail = val + head << s(:splat, tail).line(tail.line) + result = s(:masgn, head).line head.line } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val - result = list_append ary1, s(:splat, splat) + result = list_append ary1, s(:splat, splat).line(splat.line) result.concat ary2.sexp_body - result = s(:masgn, result) + result = s(:masgn, result).line result.line } | mlhs_head tSTAR { - result = s(:masgn, val[0] << s(:splat)) + head, _ = val + l = head.line + result = s(:masgn, head << s(:splat).line(l)).line l } | mlhs_head tSTAR tCOMMA mlhs_post { - ary = list_append val[0], s(:splat) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + head, _, _, post = val + ary = list_append head, s(:splat).line(head.line) + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR mlhs_node { - result = s(:masgn, s(:array, s(:splat, val[1]))) + _, node = val + l = node.line + splat = s(:splat, node).line l + ary = s(:array, splat).line l + result = s(:masgn, ary).line l } | tSTAR mlhs_node tCOMMA mlhs_post { - ary = s(:array, s(:splat, val[1])) - ary.concat val[3].sexp_body - result = s(:masgn, ary) + _, node, _, post = val + + splat = s(:splat, node).line node.line + ary = s(:array, splat).line splat.line + ary.concat post.sexp_body + result = s(:masgn, ary).line ary.line } | tSTAR { - result = s(:masgn, s(:array, s(:splat))) + l = lexer.lineno + result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l } | tSTAR tCOMMA mlhs_post { - result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) + _, _, post = val + l = post.line + + splat = s(:splat).line l + ary = s(:array, splat, *post.sexp_body).line l + result = s(:masgn, ary).line l } mlhs_item: mlhs_node @@ -448,7 +559,8 @@ mlhs_head: mlhs_item tCOMMA { - result = s(:array, val[0]) + lhs, _ = val + result = s(:array, lhs).line lhs.line } | mlhs_head mlhs_item tCOMMA { @@ -457,7 +569,8 @@ mlhs_post: mlhs_item { - result = s(:array, val[0]) + item, = val + result = s(:array, item).line item.line } | mlhs_post tCOMMA mlhs_item { @@ -482,7 +595,8 @@ } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + recv, _, id = val + result = new_attrasgn recv, id } | primary_value call_op tCONSTANT { @@ -495,7 +609,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) + expr, _, id = val + l = expr.line + + result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l } | tCOLON3 tCONSTANT { @@ -504,7 +621,10 @@ yyerror "dynamic constant assignment" end - result = s(:const, nil, s(:colon3, val[1].to_sym)) + _, id = val + l = lexer.lineno + + result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -513,24 +633,31 @@ lhs: user_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line } | keyword_variable { + line = lexer.lineno result = self.assignable val[0] + result.line = line debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { - result = self.aryset val[0], val[2] + lhs, _, args, _ = val + result = self.aryset lhs, args } | primary_value call_op tIDENTIFIER # REFACTOR { - result = new_attrasgn val[0], val[2], val[1] + lhs, op, id = val + result = new_attrasgn lhs, id, op } | primary_value tCOLON2 tIDENTIFIER { - result = s(:attrasgn, val[0], :"#{val[2]}=") + lhs, _, id = val + result = new_attrasgn lhs, id } | primary_value call_op tCONSTANT # REFACTOR? { @@ -538,21 +665,27 @@ } | primary_value tCOLON2 tCONSTANT { + expr, _, id = val + if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon2, val[0], val[2].to_sym)) + l = expr.line + result = s(:const, s(:colon2, expr, id.to_sym).line(l)).line l } | tCOLON3 tCONSTANT { + _, id = val + if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end - result = s(:const, s(:colon3, val[1].to_sym)) + l = lexer.lineno + result = s(:const, s(:colon3, id.to_sym).line(l)).line l } | backref { @@ -567,7 +700,8 @@ cpath: tCOLON3 cname { - result = s(:colon3, val[1].to_sym) + _, name = val + result = s(:colon3, name.to_sym).line lexer.lineno } | cname { @@ -575,27 +709,32 @@ } | primary_value tCOLON2 cname { - result = s(:colon2, val[0], val[2].to_sym) + pval, _, name = val + + result = s(:colon2, pval, name.to_sym) + result.line pval.line } fname: tIDENTIFIER | tCONSTANT | tFID | op { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[0] } | reswords { - lexer.lex_state = :expr_end - result = val[0] + (sym, _line), = val + lexer.lex_state = EXPR_END + result = sym } fsym: fname | symbol fitem: fsym { - result = s(:lit, val[0].to_sym) + id, = val + result = s(:lit, id.to_sym).line lexer.lineno } | dsym @@ -606,7 +745,7 @@ | undef_list tCOMMA { - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fitem { @@ -618,7 +757,8 @@ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 -#if V == 20 +#if V >= 20 + # TODO: tUBANG dead? | tUBANG #endif @@ -632,70 +772,90 @@ | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL - arg: lhs tEQL arg + arg: lhs tEQL arg_rhs { result = new_assign val[0], val[2] } - | lhs tEQL arg kRESCUE_MOD arg - { - result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) - } - | var_lhs tOP_ASGN arg + | var_lhs tOP_ASGN arg_rhs { result = new_op_asgn val } - | var_lhs tOP_ASGN arg kRESCUE_MOD arg + | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { - result = new_op_asgn val - result = s(:rescue, result, new_resbody(s(:array), val[4])) + result = new_op_asgn1 val } - | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg + | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { - val[2].sexp_type = :arglist if val[2] - result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) + result = new_op_asgn2 val } - | primary_value call_op tIDENTIFIER tOP_ASGN arg + | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = new_op_asgn2 val } - | primary_value call_op tCONSTANT tOP_ASGN arg + | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { - result = new_op_asgn2 val + lhs, _, id, op, rhs = val + + result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line } - | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg + | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { - result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) + lhs1, _, lhs2, op, rhs = val + + lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line + result = new_const_op_asgn [lhs, op, rhs] } - | primary_value tCOLON2 tCONSTANT tOP_ASGN arg + | tCOLON3 tCONSTANT { - yyerror "constant re-assignment" + result = self.lexer.lineno } - | tCOLON3 tCONSTANT tOP_ASGN arg + tOP_ASGN arg_rhs { - yyerror "constant re-assignment" + _, lhs, line, op, rhs = val + + lhs = s(:colon3, lhs.to_sym).line line + result = new_const_op_asgn [lhs, op, rhs] } - | backref tOP_ASGN arg + | backref tOP_ASGN arg_rhs { - self.backref_assign_error val[0] + # TODO: lhs = var_field val[0] + asgn = new_op_asgn val + result = self.backref_assign_error asgn } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)..(v2.last)) + result = s(:lit, (v1.last)..(v2.last)).line v1.line else - result = s(:dot2, v1, v2) + result = s(:dot2, v1, v2).line v1.line end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then - result = s(:lit, (v1.last)...(v2.last)) + result = s(:lit, (v1.last)...(v2.last)).line v1.line else - result = s(:dot3, v1, v2) + result = s(:dot3, v1, v2).line v1.line end } +#if V >= 26 + | arg tDOT2 + { + v1, _ = val + v2 = nil + + result = s(:dot2, v1, v2).line v1.line + } + | arg tDOT3 + { + v1, _ = val + v2 = nil + + result = s(:dot3, v1, v2).line v1.line + } +#endif | arg tPLUS arg { result = new_call val[0], :+, argl(val[2]) @@ -723,14 +883,17 @@ #if V == 20 | tUMINUS_NUM tINTEGER tPOW arg { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") } | tUMINUS_NUM tFLOAT tPOW arg #else | tUMINUS_NUM simple_numeric tPOW arg #endif { - result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") + lit = s(:lit, val[1]).line lexer.lineno + result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") + #if V == 20 ## TODO: why is this 2.0 only? debug20 12, val, result @@ -760,22 +923,7 @@ { result = new_call val[0], :"<=>", argl(val[2]) } - | arg tGT arg - { - result = new_call val[0], :">", argl(val[2]) - } - | arg tGEQ arg - { - result = new_call val[0], :">=", argl(val[2]) - } - | arg tLT arg - { - result = new_call val[0], :"<", argl(val[2]) - } - | arg tLEQ arg - { - result = new_call val[0], :"<=", argl(val[2]) - } + | rel_expr =tCMP | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) @@ -790,15 +938,19 @@ } | arg tMATCH arg { - result = new_match val[0], val[2] + lhs, _, rhs = val + result = new_match lhs, rhs } | arg tNMATCH arg { - result = s(:not, new_match(val[0], val[2])) + lhs, _, rhs = val + result = s(:not, new_match(lhs, rhs)).line lhs.line } | tBANG arg { - result = new_call val[1], :"!" + _, arg = val + result = new_call arg, :"!" + result.line arg.line } | tTILDE arg { @@ -826,14 +978,33 @@ } | kDEFINED opt_nl arg { - result = s(:defined, val[2]) + (_, line), _, arg = val + result = s(:defined, arg).line line } | arg tEH arg opt_nl tCOLON arg { - result = s(:if, val[0], val[2], val[5]) + c, _, t, _, _, f = val + result = s(:if, c, t, f).line c.line } | primary + relop: tGT + | tLT + | tGEQ + | tLEQ + + rel_expr: arg relop arg =tGT + { + lhs, op, rhs = val + result = new_call lhs, op.to_sym, argl(rhs) + } + | rel_expr relop arg =tGT + { + lhs, op, rhs = val + warn "comparison '%s' after comparison", op + result = new_call lhs, op.to_sym, argl(rhs) + } + arg_value: arg { result = value_expr(val[0]) @@ -853,22 +1024,28 @@ result = args [array_to_hash(val[0])] } + arg_rhs: arg =tOP_ASGN + | arg kRESCUE_MOD arg + { + body, (_, line), resbody = val + body = value_expr body + resbody = remove_begin resbody + + ary = s(:array).line line + result = new_rescue(body, new_resbody(ary, resbody)) + } + paren_args: tLPAREN2 opt_call_args rparen { - result = val[1] + _, args, _ = val + result = args } opt_paren_args: none | paren_args opt_call_args: none - { - result = val[0] - } | call_args - { - result = val[0] - } | args tCOMMA { result = args val @@ -890,17 +1067,14 @@ | args opt_block_arg { result = call_args val - result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { - result = call_args [array_to_hash(val[0])] - result = self.arg_blk_pass result, val[1] + result = call_args [array_to_hash(val[0]), val[1]] } | args tCOMMA assocs opt_block_arg { - result = call_args [val[0], array_to_hash(val[2])] - result = self.arg_blk_pass result, val[3] + result = call_args [val[0], array_to_hash(val[2]), val[3]] } | block_arg { @@ -908,18 +1082,45 @@ } command_args: { - result = lexer.cmdarg.stack.dup # TODO: smell? + # parse26.y line 2200 + + # If call_args starts with a open paren '(' or + # '[', look-ahead reading of the letters calls + # CMDARG_PUSH(0), but the push must be done + # after CMDARG_PUSH(1). So this code makes them + # consistent by first cancelling the premature + # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and + # finally redoing CMDARG_PUSH(0). + + result = yychar = self.last_token_type.first + lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar) + lexer.cmdarg.pop if lookahead lexer.cmdarg.push true + lexer.cmdarg.push false if lookahead } call_args { - lexer.cmdarg.stack.replace val[0] - result = val[1] + yychar, args = val + + # call_args can be followed by tLBRACE_ARG (that + # does CMDARG_PUSH(0) in the lexer) but the push + # must be done after CMDARG_POP() in the parser. + # So this code does CMDARG_POP() to pop 0 pushed + # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed + # by command_args, and CMDARG_PUSH(0) to restore + # back the flag set by tLBRACE_ARG. + + lookahead = [:tLBRACE_ARG].include?(yychar) + lexer.cmdarg.pop if lookahead + lexer.cmdarg.pop + lexer.cmdarg.push false if lookahead + result = args } block_arg: tAMPER arg_value { - result = s(:block_pass, val[1]) + _, arg = val + result = s(:block_pass, arg).line arg.line } opt_block_arg: tCOMMA block_arg @@ -930,19 +1131,27 @@ args: arg_value { - result = s(:array, val[0]) + arg, = val + lineno = arg.line || lexer.lineno # HACK + + result = s(:array, arg).line lineno } | tSTAR arg_value { - result = s(:array, s(:splat, val[1])) + _, arg = val + result = s(:array, s(:splat, arg).line(arg.line)).line arg.line } | args tCOMMA arg_value { - result = self.list_append val[0], val[2] + args, _, id = val + result = self.list_append args, id } | args tCOMMA tSTAR arg_value { - result = self.list_append val[0], s(:splat, val[3]) + # TODO: the line number from tSTAR has been dropped + args, _, _, id = val + line = lexer.lineno + result = self.list_append args, s(:splat, id).line(line) } #if V >= 21 @@ -962,11 +1171,14 @@ } | args tCOMMA tSTAR arg_value { - result = self.arg_concat val[0], val[3] + # TODO: make all tXXXX terminals include lexer.lineno + arg, _, _, splat = val + result = self.arg_concat arg, splat } | tSTAR arg_value { - result = s(:splat, val[1]) + _, arg = val + result = s(:splat, arg).line arg.line } primary: literal @@ -981,58 +1193,65 @@ | backref | tFID { - result = new_call nil, val[0].to_sym + msg, = val + result = new_call nil, msg.to_sym } - | kBEGIN + | k_begin { + lexer.cmdarg.push false result = self.lexer.lineno } - bodystmt kEND + bodystmt k_end { - unless val[2] then - result = s(:nil) - else - result = s(:begin, val[2]) - end - - result.line = val[1] + lexer.cmdarg.pop + result = new_begin val } - | tLPAREN_ARG rparen + | tLPAREN_ARG { - debug20 13, val, result + lexer.lex_state = EXPR_ENDARG + result = lexer.lineno } - | tLPAREN_ARG + rparen { - result = self.lexer.cmdarg.stack.dup - lexer.cmdarg.stack.replace [false] # TODO add api for these + _, line, _ = val + result = s(:begin).line line } - expr + | tLPAREN_ARG + stmt { - lexer.lex_state = :expr_endarg + lexer.lex_state = EXPR_ENDARG } rparen { - warning "(...) interpreted as grouped expression" - lexer.cmdarg.stack.replace val[1] - result = val[2] + _, stmt, _, _, = val + # warning "(...) interpreted as grouped expression" + result = stmt } | tLPAREN compstmt tRPAREN { - result = val[1] || s(:nil) + _, stmt, _ = val + result = stmt + result ||= s(:nil).line lexer.lineno result.paren = true } | primary_value tCOLON2 tCONSTANT { - result = s(:colon2, val[0], val[2].to_sym) + expr, _, id = val + + result = s(:colon2, expr, id.to_sym).line expr.line } | tCOLON3 tCONSTANT { - result = s(:colon3, val[1].to_sym) + _, id = val + + result = s(:colon3, id.to_sym).line lexer.lineno } - | tLBRACK aref_args tRBRACK + | tLBRACK { result = lexer.lineno } aref_args tRBRACK { - result = val[1] || s(:array) + _, line, args, _ = val + result = args || s(:array) result.sexp_type = :array # aref_args is :args + result.line line } | tLBRACE { @@ -1042,9 +1261,10 @@ { result = new_hash val } - | kRETURN + | k_return { - result = s(:return) + (_, line), = val + result = s(:return).line line } | kYIELD tLPAREN2 call_args rparen { @@ -1060,11 +1280,14 @@ } | kDEFINED opt_nl tLPAREN2 expr rparen { - result = s(:defined, val[3]) + (_, line), _, _, arg, _ = val + + result = s(:defined, arg).line line } | kNOT tLPAREN2 expr rparen { - result = s(:call, val[2], :"!") + _, _, lhs, _ = val + result = new_call lhs, :"!" } | kNOT tLPAREN2 rparen { @@ -1072,11 +1295,11 @@ } | fcall brace_block { - oper, iter = val[0], val[1] - call = oper # FIX + call, iter = val + iter.insert 1, call result = iter - call.line = iter.line + # FIX: probably not: call.line = iter.line } | method_call | method_call brace_block @@ -1090,61 +1313,42 @@ { result = val[1] # TODO: fix lineno } - | kIF expr_value then compstmt if_tail kEND + | k_if expr_value then compstmt if_tail k_end { - result = new_if val[1], val[3], val[4] + _, c, _, t, f, _ = val + result = new_if c, t, f } - | kUNLESS expr_value then compstmt opt_else kEND + | k_unless expr_value then compstmt opt_else k_end { - result = new_if val[1], val[4], val[3] + _, c, _, t, f, _ = val + result = new_if c, f, t } - | kWHILE + | k_while expr_value_do compstmt k_end { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND - { - result = new_while val[5], val[2], true - } - | kUNTIL - { - lexer.cond.push true + _, cond, body, _ = val + result = new_while body, cond, true } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_until expr_value_do compstmt k_end { - result = new_until val[5], val[2], true + _, cond, body, _ = val + result = new_until body, cond, true } - | kCASE expr_value opt_terms case_body kEND + | k_case expr_value opt_terms case_body k_end { (_, line), expr, _, body, _ = val result = new_case expr, body, line } - | kCASE opt_terms case_body kEND + | k_case opt_terms case_body k_end { (_, line), _, body, _ = val result = new_case nil, body, line } - | kFOR for_var kIN - { - lexer.cond.push true - } - expr_value do - { - lexer.cond.pop - } - compstmt kEND + | k_for for_var kIN expr_value_do compstmt k_end { - result = new_for val[4], val[1], val[7] + _, var, _, iter, body, _ = val + result = new_for iter, var, body } - | kCLASS + | k_class { result = self.lexer.lineno } @@ -1156,13 +1360,13 @@ end self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kCLASS tLSHFT + | k_class tLSHFT { result = self.lexer.lineno } @@ -1177,13 +1381,13 @@ self.in_single = 0 self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kMODULE + | k_module { result = self.lexer.lineno } @@ -1195,74 +1399,90 @@ self.env.extend } - bodystmt kEND + bodystmt k_end { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } - | kDEF fname + | k_def fname { - result = [self.in_def, self.lexer.cmdarg.stack.dup] + result = self.in_def - self.comments.push self.lexer.comments - self.in_def = true + self.in_def = true # group = local_push self.env.extend - # TODO: local->cmdargs = cmdarg_stack; - # TODO: port local_push_gen and local_pop_gen - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt { result = lexer.lineno } k_end { - in_def, cmdarg = val[2] + in_def = val[2] result = new_defn val - lexer.cmdarg.stack.replace cmdarg + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend self.in_def = in_def + self.lexer.comments # we don't care about comments in the body } - | kDEF singleton dot_or_colon + | k_def singleton dot_or_colon { - self.comments.push self.lexer.comments - lexer.lex_state = :expr_fname + lexer.lex_state = EXPR_FNAME } fname { - self.in_single += 1 + result = [self.in_def, lexer.lineno] + + self.in_single += 1 # TODO: remove? + + self.in_def = true # local_push self.env.extend - lexer.lex_state = :expr_endfn # force for args - result = [lexer.lineno, self.lexer.cmdarg.stack.dup] - lexer.cmdarg.stack.replace [false] + lexer.cmdarg.push false + lexer.cond.push false + + lexer.lex_state = EXPR_ENDFN|EXPR_LABEL + self.comments.push self.lexer.comments } - f_arglist bodystmt kEND + f_arglist bodystmt k_end { - line, cmdarg = val[5] - result = new_defs val - result[3].line line + _, _recv, _, _, _name, (in_def, _lineno), _args, _body, _ = val - lexer.cmdarg.stack.replace cmdarg + result = new_defs val + lexer.cond.pop # group = local_pop + lexer.cmdarg.pop self.env.unextend + self.in_def = in_def + self.in_single -= 1 + + # TODO: restore cur_arg ? what's cur_arg? + self.lexer.comments # we don't care about comments in the body } | kBREAK { - result = s(:break) + (_, line), = val + result = s(:break).line line } | kNEXT { - result = s(:next) + (_, line), = val + result = s(:next).line line } | kREDO { - result = s(:redo) + (_, line), = val + result = s(:redo).line line } | kRETRY { - result = s(:retry) + (_, line), = val + result = s(:retry).line line } primary_value: primary @@ -1281,7 +1501,15 @@ k_class: kCLASS k_module: kMODULE k_def: kDEF + k_do: kDO + k_do_block: kDO_BLOCK + k_rescue: kRESCUE + k_ensure: kENSURE + k_when: kWHEN + k_else: kELSE + k_elsif: kELSIF k_end: kEND + k_return: kRETURN then: term | kTHEN @@ -1291,9 +1519,11 @@ | kDO_COND if_tail: opt_else - | kELSIF expr_value then compstmt if_tail + | k_elsif expr_value then compstmt if_tail { - result = s(:if, val[1], val[3], val[4]) + (_, line), c, _, t, rest = val + + result = s(:if, c, t, rest).line line } opt_else: none @@ -1316,7 +1546,9 @@ f_marg_list: f_marg { - result = s(:array, val[0]) + sym, = val + + result = s(:array, sym).line lexer.lineno } | f_marg_list tCOMMA f_marg { @@ -1390,7 +1622,9 @@ } | f_block_arg { - result = call_args val + line = lexer.lineno + result = call_args val # TODO: push line down + result.line line } opt_block_args_tail: tCOMMA block_args_tail @@ -1421,7 +1655,7 @@ } | f_arg tCOMMA { - result = args val + result = args(val) << nil } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { @@ -1462,18 +1696,22 @@ opt_block_param: none { result = 0 } | block_param_def + { + self.lexer.command_start = true + } block_param_def: tPIPE opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } | tOROP { - self.lexer.command_start = true - result = s(:args) + result = s(:args).line lexer.lineno } | tPIPE block_param opt_bv_decl tPIPE { + # TODO: current_arg = 0 result = args val } @@ -1494,26 +1732,33 @@ bvar: tIDENTIFIER { - result = s(:shadow, val[0].to_sym) + id, = val + line = lexer.lineno + result = s(:shadow, id.to_sym).line line } | f_bad_arg lambda: { self.env.extend :dynamic - result = self.lexer.lineno - - result = lexer.lpar_beg + result = [lexer.lineno, lexer.lpar_beg] lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } - f_larglist lambda_body + f_larglist { - lpar, args, body = val + lexer.cmdarg.push false + } + lambda_body + { + (line, lpar), args, _cmdarg, body = val lexer.lpar_beg = lpar - call = new_call nil, :lambda + lexer.cmdarg.pop + + call = s(:lambda).line line result = new_iter call, args, body - self.env.unextend + result.line = line + self.env.unextend # TODO: dynapush & dynapop } f_larglist: tLPAREN2 f_args opt_bv_decl rparen @@ -1530,28 +1775,15 @@ { result = val[1] } - | kDO_LAMBDA compstmt kEND + | kDO_LAMBDA bodystmt kEND { result = val[1] } - do_block: kDO_BLOCK - { - self.env.extend :dynamic - result = self.lexer.lineno - } - opt_block_param + do_block: k_do_block do_body kEND { - result = nil # self.env.dynamic.keys - } - compstmt kEND - { - args = val[2] - body = val[4] - result = new_iter nil, args, body - result.line = val[1] - - self.env.unextend + (_, line), iter, _ = val + result = iter.line line } block_call: command do_block @@ -1565,14 +1797,16 @@ val = invert_block_call val if inverted? val - result = val[1] - result.insert 1, val[0] + cmd, blk = val + + result = blk + result.insert 1, cmd } - | block_call dot_or_colon operation2 opt_paren_args + | block_call call_op2 operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } - | block_call dot_or_colon operation2 opt_paren_args brace_block + | block_call call_op2 operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val @@ -1581,7 +1815,7 @@ result = iter2 } - | block_call dot_or_colon operation2 command_args do_block + | block_call call_op2 operation2 command_args do_block { iter1, _, name, args, iter2 = val @@ -1597,8 +1831,10 @@ } paren_args { - args = self.call_args val[2..-1] - result = val[0].concat args.sexp_body + call, lineno, args = val + + result = call.concat args.sexp_body if args + result.line lineno } | primary_value call_op operation2 opt_paren_args { @@ -1626,7 +1862,7 @@ } | kSUPER { - result = s(:zsuper) + result = s(:zsuper).line lexer.lineno } | primary_value tLBRACK2 opt_call_args rbracket { @@ -1638,39 +1874,59 @@ self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param - { - result = nil # self.env.dynamic.keys - } - compstmt tRCURLY + brace_body tRCURLY { - _, line, args, _, body, _ = val + _, line, body, _ = val - result = new_iter nil, args, body + result = body result.line = line self.env.unextend } - | kDO + | k_do { self.env.extend :dynamic result = self.lexer.lineno } - opt_block_param + do_body kEND { - result = nil # self.env.dynamic.keys + _, line, body, _ = val + + result = body + result.line = line + + self.env.unextend } - compstmt kEND + + brace_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { result = lexer.cmdarg.store(false) } + opt_block_param compstmt { - _, line, args, _, body, _ = val + line, cmdarg, param, cmpstmt = val - result = new_iter nil, args, body - result.line = line + result = new_brace_body param, cmpstmt, line + self.env.unextend + lexer.cmdarg.restore cmdarg + lexer.cmdarg.pop # because of: cmdarg_stack >> 1 ? + } + + do_body: { self.env.extend :dynamic; result = self.lexer.lineno } + { lexer.cmdarg.push false } + opt_block_param +#if V >= 25 + bodystmt +#else + compstmt +#endif + { + line, _cmdarg, param, cmpstmt = val + result = new_do_body param, cmpstmt, line + lexer.cmdarg.pop self.env.unextend } - case_body: kWHEN + case_body: k_when { result = self.lexer.lineno } @@ -1683,12 +1939,12 @@ cases: opt_else | case_body - opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue + opt_rescue: k_rescue exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) - klasses << new_assign(var, s(:gvar, :"$!")) if var + klasses << new_assign(var, s(:gvar, :"$!").line(var.line)) if var klasses.line line result = new_resbody(klasses, body) @@ -1701,7 +1957,8 @@ exc_list: arg_value { - result = s(:array, val[0]) + arg, = val + result = s(:array, arg).line arg.line } | mrhs | none @@ -1712,28 +1969,33 @@ } | none - opt_ensure: kENSURE compstmt + opt_ensure: k_ensure compstmt { - _, body = val + (_, line), body = val - result = body || s(:nil) + result = body || s(:nil).line(line) } | none literal: numeric { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | symbol { + line = lexer.lineno result = s(:lit, val[0]) + result.line = line } | dsym strings: string { - val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr - result = val[0] + str, = val + str = s(:dstr, str.value) if str.sexp_type == :evstr + result = str } string: tCHAR @@ -1748,7 +2010,11 @@ string1: tSTRING_BEG string_contents tSTRING_END { - result = val[1] + _, str, (_, func) = val + + str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT + + result = str } | tSTRING { @@ -1757,7 +2023,8 @@ xstring: tXSTRING_BEG xstring_contents tSTRING_END { - result = new_xstring val[1] + result = new_xstring val + # TODO: dedent?!?! SERIOUSLY?!? } regexp: tREGEXP_BEG regexp_contents tREGEXP_END @@ -1767,7 +2034,7 @@ words: tWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tWORDS_BEG word_list tSTRING_END { @@ -1791,25 +2058,28 @@ symbols: tSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } - | tSYMBOLS_BEG symbol_list tSTRING_END + | tSYMBOLS_BEG { result = lexer.lineno } symbol_list tSTRING_END { - result = val[1] + _, line, list, _, = val + list.line = line + result = list } symbol_list: none { - result = new_symbol_list + result = new_symbol_list.line lexer.lineno } | symbol_list word tSPACE { - result = val[0].dup << new_symbol_list_entry(val) + list, * = val + result = list.dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno } | tQWORDS_BEG qword_list tSTRING_END { @@ -1818,7 +2088,7 @@ qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { - result = s(:array) + result = s(:array).line lexer.lineno # FIX } | tQSYMBOLS_BEG qsym_list tSTRING_END { @@ -1845,11 +2115,12 @@ string_contents: none { - result = s(:str, "") + result = s(:str, "").line lexer.lineno } | string_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } xstring_contents: none @@ -1858,7 +2129,8 @@ } | xstring_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } regexp_contents: none @@ -1867,7 +2139,8 @@ } | regexp_contents string_content { - result = literal_concat(val[0], val[1]) + v1, v2 = val + result = literal_concat v1, v2 } string_content: tSTRING_CONTENT @@ -1879,46 +2152,46 @@ result = lexer.lex_strterm lexer.lex_strterm = nil - lexer.lex_state = :expr_beg # TODO: expr_value ? + lexer.lex_state = EXPR_BEG } string_dvar { - lexer.lex_strterm = val[1] - result = s(:evstr, val[2]) + _, strterm, str = val + lexer.lex_strterm = strterm + result = s(:evstr, str).line str.line } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove - lexer.cond.store, - lexer.cmdarg.store, lexer.lex_state, + lexer.lineno, ] + lexer.cmdarg.push false + lexer.cond.push false + lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 - lexer.lex_state = :expr_value + lexer.lex_state = EXPR_BEG } - compstmt tRCURLY + compstmt + tSTRING_DEND { -#if V == 20 - # TODO: tRCURLY -> tSTRING_DEND -#else - # TODO: tRCURLY -> tSTRING_END -#endif _, memo, stmt, _ = val - lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo + lex_strterm, brace_nest, string_nest, oldlex_state, line = memo + # TODO: heredoc_indent lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest - lexer.cond.restore oldcond - lexer.cmdarg.restore oldcmdarg + lexer.cmdarg.pop + lexer.cond.pop lexer.lex_state = oldlex_state @@ -1928,24 +2201,24 @@ when :str, :dstr, :evstr then result = stmt else - result = s(:evstr, stmt) + result = s(:evstr, stmt).line line end when nil then - result = s(:evstr) + result = s(:evstr).line line else debug20 25 raise "unknown string body: #{stmt.inspect}" end } - string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } - | tIVAR { result = s(:ivar, val[0].to_sym) } - | tCVAR { result = s(:cvar, val[0].to_sym) } + string_dvar: tGVAR { result = s(:gvar, val[0].to_sym).line lexer.lineno } + | tIVAR { result = s(:ivar, val[0].to_sym).line lexer.lineno } + | tCVAR { result = s(:cvar, val[0].to_sym).line lexer.lineno } | backref symbol: tSYMBEG sym { - lexer.lex_state = :expr_end + lexer.lex_state = EXPR_END result = val[1].to_sym } | tSYMBOL @@ -1957,18 +2230,19 @@ dsym: tSYMBEG xstring_contents tSTRING_END { - lexer.lex_state = :expr_end - result = val[1] + _, result, _ = val - result ||= s(:str, "") + lexer.lex_state = EXPR_END + + result ||= s(:str, "").line lexer.lineno case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then - result = s(:lit, result.last.to_sym) + result = s(:lit, result.last.to_sym).line result.line when :evstr then - result = s(:dsym, "", result) + result = s(:dsym, "", result).line result.line else debug20 26, val, result end @@ -2005,19 +2279,20 @@ | tCONSTANT | tCVAR -keyword_variable: kNIL { result = s(:nil) } - | kSELF { result = s(:self) } - | kTRUE { result = s(:true) } - | kFALSE { result = s(:false) } - | k__FILE__ { result = s(:str, self.file) } - | k__LINE__ { result = s(:lit, lexer.lineno) } +keyword_variable: kNIL { result = s(:nil).line lexer.lineno } + | kSELF { result = s(:self).line lexer.lineno } + | kTRUE { result = s(:true).line lexer.lineno } + | kFALSE { result = s(:false).line lexer.lineno } + | k__FILE__ { result = s(:str, self.file).line lexer.lineno } + | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno } | k__ENCODING__ { + l = lexer.lineno result = if defined? Encoding then - s(:colon2, s(:const, :Encoding), :UTF_8) + s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l else - s(:str, "Unsupported!") + s(:str, "Unsupported!").line l end } @@ -2042,43 +2317,42 @@ debug20 29, val, result } - backref: tNTH_REF { result = s(:nth_ref, val[0]) } - | tBACK_REF { result = s(:back_ref, val[0]) } + backref: tNTH_REF { result = s(:nth_ref, val[0]).line lexer.lineno } + | tBACK_REF { result = s(:back_ref, val[0]).line lexer.lineno } - superclass: term - { - result = nil - } - | tLT + superclass: tLT { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG + lexer.command_start = true } expr_value term { result = val[2] } - | error term + | none { - yyerrok result = nil - debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] - self.lexer.lex_state = :expr_beg + self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true - # TODO: - # $$ = parser->parser_in_kwarg; - # parser->parser_in_kwarg = 1; } - | f_args term - { - # TODO: parser->parser_in_kwarg = $1; - result = val[0] - self.lexer.lex_state = :expr_beg - self.lexer.command_start = true + | { + result = self.in_kwarg + self.in_kwarg = true + self.lexer.lex_state |= EXPR_LABEL + } + f_args term + { + kwarg, args, _ = val + + self.in_kwarg = kwarg + result = args + lexer.lex_state = EXPR_BEG + lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg @@ -2209,12 +2483,13 @@ f_arg: f_arg_item { - case val[0] + arg, = val + + case arg when Symbol then - result = s(:args) - result << val[0] + result = s(:args, arg).line lexer.lineno when Sexp then - result = val[0] + result = arg else debug20 32 raise "Unknown f_arg type: #{val.inspect}" @@ -2227,7 +2502,7 @@ if list.sexp_type == :args then result = list else - result = s(:args, list) + result = s(:args, list).line list.line end result << item @@ -2241,21 +2516,24 @@ f_kw: f_label arg_value #endif { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? + # TODO: new_kw_arg + (label, line), arg = val + identifier = label.to_sym self.env[identifier] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + kwarg = s(:kwarg, identifier, arg).line line + result = s(:array, kwarg).line line } #if V >= 21 | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + (label, line), = val + + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } #endif @@ -2265,21 +2543,22 @@ f_block_kw: f_label primary_value #endif { - # TODO: call_args - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), expr = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier, val[1])) + result = s(:array, s(:kwarg, id, expr).line(line)).line line } #if V >= 21 | f_label { - label, _ = val[0] # TODO: fix lineno? - identifier = label.to_sym - self.env[identifier] = :lvar + # TODO: new_kw_arg + (label, line), = val + id = label.to_sym + self.env[id] = :lvar - result = s(:array, s(:kwarg, identifier)) + result = s(:array, s(:kwarg, id).line(line)).line line } #endif @@ -2301,7 +2580,9 @@ f_kwrest: kwrest_mark tIDENTIFIER { - result = :"**#{val[1]}" + name = val[1].to_sym + self.assignable name + result = :"**#{name}" } | kwrest_mark { @@ -2333,17 +2614,20 @@ f_block_optarg: f_block_opt { - result = s(:block, val[0]) + optblk, = val + result = s(:block, optblk).line optblk.line } | f_block_optarg tCOMMA f_block_opt { - result = val[0] - result << val[2] + optarg, _, optblk = val + result = optarg + result << optblk } f_optarg: f_opt { - result = s(:block, val[0]) + opt, = val + result = s(:block, opt).line opt.line } | f_optarg tCOMMA f_opt { @@ -2388,7 +2672,7 @@ singleton: var_ref | tLPAREN2 { - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG } expr rparen { @@ -2397,14 +2681,11 @@ result.sexp_type == :lit } - assoc_list: none # [!nil] + assoc_list: none { - result = s(:array) - } - | assocs trailer # [!nil] - { - result = val[0] + result = s(:array).line lexer.lineno } + | assocs trailer assocs: assoc | assocs tCOMMA assoc @@ -2418,28 +2699,29 @@ assoc: arg_value tASSOC arg_value { - result = s(:array, val[0], val[2]) + v1, _, v2 = val + result = s(:array, v1, v2).line v1.line } - | tLABEL opt_nl arg_value + | tLABEL arg_value { - result = s(:array, s(:lit, val[0][0].to_sym), val.last) + (label, line), arg = val + + lit = s(:lit, label.to_sym).line line + result = s(:array, lit, arg).line line } #if V >= 22 | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym - result = s(:array, sym, value) - } - | tSYMBOL arg_value - { - raise "not yet: #{val.inspect}" - # result = s(:array, s(:lit, val[1].to_sym), val[1]) + result = s(:array, sym, value).line sym.line } #endif | tDSTAR arg_value { - result = s(:array, s(:kwsplat, val[1])) + _, arg = val + line = arg.line + result = s(:array, s(:kwsplat, arg).line(line)).line line } operation: tIDENTIFIER | tCONSTANT | tFID @@ -2448,8 +2730,12 @@ dot_or_colon: tDOT | tCOLON2 call_op: tDOT #if V >= 23 - | tLONELY + | tLONELY # TODO: rename tANDDOT? #endif + + call_op2: call_op + | tCOLON2 + opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN @@ -2469,6 +2755,7 @@ require "ruby_lexer" require "ruby_parser_extras" +include RubyLexer::State::Values # :stopdoc: diff -Nru ruby-ruby-parser-3.11.0/Manifest.txt ruby-ruby-parser-3.15.1/Manifest.txt --- ruby-ruby-parser-3.11.0/Manifest.txt 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/Manifest.txt 2021-01-18 16:48:25.000000000 +0000 @@ -6,13 +6,10 @@ bin/ruby_parse bin/ruby_parse_extract_error compare/normalize.rb +debugging.md lib/.document lib/rp_extensions.rb lib/rp_stringscanner.rb -lib/ruby18_parser.rb -lib/ruby18_parser.y -lib/ruby19_parser.rb -lib/ruby19_parser.y lib/ruby20_parser.rb lib/ruby20_parser.y lib/ruby21_parser.rb @@ -25,6 +22,10 @@ lib/ruby24_parser.y lib/ruby25_parser.rb lib/ruby25_parser.y +lib/ruby26_parser.rb +lib/ruby26_parser.y +lib/ruby27_parser.rb +lib/ruby27_parser.y lib/ruby_lexer.rb lib/ruby_lexer.rex lib/ruby_lexer.rex.rb @@ -34,3 +35,5 @@ test/test_ruby_lexer.rb test/test_ruby_parser.rb test/test_ruby_parser_extras.rb +tools/munge.rb +tools/ripper.rb Binary files /tmp/tmp8Ab_wV/sd48PNxrJk/ruby-ruby-parser-3.11.0/metadata.gz.sig and /tmp/tmp8Ab_wV/SBdznxuA3e/ruby-ruby-parser-3.15.1/metadata.gz.sig differ diff -Nru ruby-ruby-parser-3.11.0/Rakefile ruby-ruby-parser-3.15.1/Rakefile --- ruby-ruby-parser-3.11.0/Rakefile 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/Rakefile 2021-01-18 16:48:25.000000000 +0000 @@ -1,7 +1,5 @@ # -*- ruby -*- -$:.unshift "../../hoe/dev/lib" - require "rubygems" require "hoe" @@ -10,13 +8,13 @@ Hoe.plugin :isolate Hoe.plugin :rdoc +Hoe.add_include_dirs "lib" Hoe.add_include_dirs "../../sexp_processor/dev/lib" Hoe.add_include_dirs "../../minitest/dev/lib" Hoe.add_include_dirs "../../oedipus_lex/dev/lib" -V1 = %w[18 19] -V2 = %w[20 21 22 23 24 25] -V1_2 = V1 + V2 +V2 = %w[20 21 22 23 24 25 26 27] +V2.replace [V2.last] if ENV["FAST"] # HACK Hoe.spec "ruby_parser" do developer "Ryan Davis", "ryand-ruby@zenspider.com" @@ -27,8 +25,10 @@ dependency "rake", "< 11", :developer dependency "oedipus_lex", "~> 2.5", :developer + require_ruby_version [">= 2.1", "< 4"] + if plugin? :perforce then # generated files - V1_2.each do |n| + V2.each do |n| self.perforce_ignore << "lib/ruby#{n}_parser.rb" end @@ -51,14 +51,14 @@ cmd = 'unifdef -tk -DV=%s -UDEAD %s > %s || true' % [n, t.source, t.name] sh cmd end -end -V1_2.each do |n| file "lib/ruby#{n}_parser.rb" => "lib/ruby#{n}_parser.y" end file "lib/ruby_lexer.rex.rb" => "lib/ruby_lexer.rex" +task :generate => [:lexer, :parser] + task :clean do rm_rf(Dir["**/*~"] + Dir["diff.diff"] + # not all diffs. bit me too many times @@ -78,10 +78,6 @@ puts "ruby #{Hoe::RUBY_FLAGS} bin/ruby_parse -q -g ..." end -task :irb => [:isolate] do - sh "GEM_HOME=#{Gem.path.first} irb -rubygems -Ilib -rruby_parser;" -end - def (task(:phony)).timestamp Time.at 0 end @@ -112,14 +108,17 @@ ruby_dir = "ruby-#{version}" diff = "diff#{v}.diff" rp_out = "lib/ruby#{v}_parser.output" + _rp_y = "lib/ruby#{v}_parser.y" + rp_y_rb = "lib/ruby#{v}_parser.rb" c_diff = "compare/#{diff}" c_rp_txt = "compare/#{rp_txt}" c_mri_txt = "compare/#{mri_txt}" c_parse_y = "compare/#{parse_y}" c_tarball = "compare/#{tarball}" + normalize = "compare/normalize.rb" - file tarball do + file c_tarball do in_compare do dl version end @@ -127,19 +126,28 @@ file c_parse_y => c_tarball do in_compare do - system "tar yxf #{tarball} #{ruby_dir}/{id.h,parse.y,tool/{id2token.rb,vpath.rb}}" + extract_glob = case version + when /2\.7/ + "{id.h,parse.y,tool/{id2token.rb,lib/vpath.rb}}" + else + "{id.h,parse.y,tool/{id2token.rb,vpath.rb}}" + end + system "tar yxf #{tarball} #{ruby_dir}/#{extract_glob}" + Dir.chdir ruby_dir do if File.exist? "tool/id2token.rb" then - sh "ruby tool/id2token.rb --path-separator=.:./ id.h parse.y > ../#{parse_y}" + sh "ruby tool/id2token.rb --path-separator=.:./ id.h parse.y | expand > ../#{parse_y}" else - cp "parse.y", "../#{parse_y}" + sh "expand parse.y > ../#{parse_y}" end + + ruby "-pi", "-e", 'gsub(/^%define\s+api\.pure/, "%pure-parser")', "../#{parse_y}" end sh "rm -rf #{ruby_dir}" end end - file c_mri_txt => c_parse_y do + file c_mri_txt => [c_parse_y, normalize] do in_compare do sh "bison -r all #{parse_y}" sh "./normalize.rb parse#{v}.output > #{mri_txt}" @@ -147,9 +155,9 @@ end end - file rp_out => :parser + file rp_out => rp_y_rb - file c_rp_txt => rp_out do + file c_rp_txt => [rp_out, normalize] do in_compare do sh "./normalize.rb ../#{rp_out} > #{rp_txt}" end @@ -160,9 +168,9 @@ desc "Compare all grammars to MRI" task :compare => compare - task c_diff => [c_mri_txt, c_rp_txt] do + file c_diff => [c_mri_txt, c_rp_txt] do in_compare do - system "diff -du #{mri_txt} #{rp_txt} > #{diff}" + sh "diff -du #{mri_txt} #{rp_txt} > #{diff}; true" end end @@ -174,28 +182,29 @@ end task :clean do - rm_f Dir[c_parse_y, c_mri_txt, c_rp_txt] + rm_f Dir[c_mri_txt, c_rp_txt] end task :realclean do - rm_f Dir[tarball] + rm_f Dir[c_parse_y, tarball] end end -ruby_parse "1.8.7-p374" -ruby_parse "1.9.3-p551" ruby_parse "2.0.0-p648" ruby_parse "2.1.9" -ruby_parse "2.2.6" -ruby_parse "2.3.3" -# TODO ruby_parse "2.4.0" +ruby_parse "2.2.9" +ruby_parse "2.3.8" +ruby_parse "2.4.9" +ruby_parse "2.5.8" +ruby_parse "2.6.6" +ruby_parse "2.7.1" task :debug => :isolate do - ENV["V"] ||= V1_2.last + ENV["V"] ||= V2.last Rake.application[:parser].invoke # this way we can have DEBUG set Rake.application[:lexer].invoke # this way we can have DEBUG set - $: << "lib" + $:.unshift "lib" require "ruby_parser" require "pp" @@ -206,19 +215,21 @@ time = (ENV["RP_TIMEOUT"] || 10).to_i n = ENV["BUG"] - file = (n && "bug#{n}.rb") || ENV["F"] || ENV["FILE"] + file = (n && "bug#{n}.rb") || ENV["F"] || ENV["FILE"] || "bug.rb" + ruby = ENV["R"] || ENV["RUBY"] + + if ruby then + file = "env" + else + ruby = File.read file + end - ruby = if file then - File.read(file) - else - file = "env" - ENV["R"] || ENV["RUBY"] - end begin pp parser.process(ruby, file, time) - rescue Racc::ParseError => e + rescue ArgumentError, Racc::ParseError => e p e + puts e.backtrace.join "\n " ss = parser.lexer.ss src = ss.string lines = src[0..ss.pos].split(/\n/) @@ -226,13 +237,32 @@ end end -task :debug_ruby do - file = ENV["F"] || ENV["FILE"] - sh "/Users/ryan/Desktop/DVDs/debugparser/miniruby -cwy #{file} 2>&1 | ./yuck.rb" +task :debug3 do + file = ENV["F"] || "bug.rb" + verbose = ENV["V"] ? "-v" : "" + munge = "./tools/munge.rb #{verbose}" + + abort "Need a file to parse, via: F=path.rb" unless file + + ENV.delete "V" + + sh "ruby -v" + sh "ruby -y #{file} 2>&1 | #{munge} > tmp/ruby" + sh "./tools/ripper.rb -d #{file} | #{munge} > tmp/rip" + sh "rake debug F=#{file} DEBUG=1 2>&1 | #{munge} > tmp/rp" + sh "diff -U 999 -d tmp/{rip,rp}" +end + +task :cmp do + sh %(emacsclient --eval '(ediff-files "tmp/ruby" "tmp/rp")') +end + +task :cmp3 do + sh %(emacsclient --eval '(ediff-files3 "tmp/ruby" "tmp/rip" "tmp/rp")') end task :extract => :isolate do - ENV["V"] ||= V1_2.last + ENV["V"] ||= V2.last Rake.application[:parser].invoke # this way we can have DEBUG set file = ENV["F"] || ENV["FILE"] diff -Nru ruby-ruby-parser-3.11.0/README.rdoc ruby-ruby-parser-3.15.1/README.rdoc --- ruby-ruby-parser-3.11.0/README.rdoc 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/README.rdoc 2021-01-18 16:48:25.000000000 +0000 @@ -7,9 +7,9 @@ == DESCRIPTION: ruby_parser (RP) is a ruby parser written in pure ruby (utilizing -racc--which does by default use a C extension). RP's output is -the same as ParseTree's output: s-expressions using ruby's arrays and -base types. +racc--which does by default use a C extension). It outputs +s-expressions which can be manipulated and converted back to ruby via +the ruby2ruby gem. As an example: diff -Nru ruby-ruby-parser-3.11.0/ruby_parser.gemspec ruby-ruby-parser-3.15.1/ruby_parser.gemspec --- ruby-ruby-parser-3.11.0/ruby_parser.gemspec 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/ruby_parser.gemspec 2021-01-18 16:48:25.000000000 +0000 @@ -2,25 +2,27 @@ # This file has been automatically generated by gem2tgz # ######################################################### # -*- encoding: utf-8 -*- -# stub: ruby_parser 3.11.0 ruby lib +# stub: ruby_parser 3.15.1 ruby lib Gem::Specification.new do |s| s.name = "ruby_parser".freeze - s.version = "3.11.0" + s.version = "3.15.1" s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.metadata = { "bug_tracker_uri" => "https://github.com/seattlerb/ruby_parser/issues", "homepage_uri" => "https://github.com/seattlerb/ruby_parser" } if s.respond_to? :metadata= s.require_paths = ["lib".freeze] s.authors = ["Ryan Davis".freeze] - s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDPjCCAiagAwIBAgIBAjANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu\nZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB\nGRYDY29tMB4XDTE3MTEyMTIxMTExMFoXDTE4MTEyMTIxMTExMFowRTETMBEGA1UE\nAwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS\nJomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda\nb9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx\ntaCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT\noOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh\nGiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt\nqhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV\ngBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw\nHQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBBQUAA4IB\nAQAfAXSQpsW7YSxd1csRtA/M4Zt0AMXFMd76GJ8Lgtg8G0+VFbdChRyDuDb0kPlW\nh9QQX/YABfCW8vxmssbMGrP+VGBAn7BbdTcfTlgCWrvMX1uL5aRL74nA4urKXqdW\na0nP70K4958P3GffBdtE3KGkU5xstFnXGajxuBRnL66E15KU0BNehVxdG258bdPu\nEKN6MqBPftFiev3tuwqDV11r2GquDpniYcT+Mi8/PgeAgVT/afBeVgbB3KaZeTRR\nAhXhF6Wi2GTMezlj5jlI5XV7WsJUSwTp/YiVvcmT74ZaCRvexm6EnNhkrvJJ1Xeu\nV+HB+LYYhXWitInO/eXxDrFB\n-----END CERTIFICATE-----\n".freeze] - s.date = "2018-02-15" - s.description = "ruby_parser (RP) is a ruby parser written in pure ruby (utilizing\nracc--which does by default use a C extension). RP's output is\nthe same as ParseTree's output: s-expressions using ruby's arrays and\nbase types.\n\nAs an example:\n\n def conditional1 arg1\n return 1 if arg1 == 0\n return 0\n end\n\nbecomes:\n\n s(:defn, :conditional1, s(:args, :arg1),\n s(:if,\n s(:call, s(:lvar, :arg1), :==, s(:lit, 0)),\n s(:return, s(:lit, 1)),\n nil),\n s(:return, s(:lit, 0)))\n\nTested against 801,039 files from the latest of all rubygems (as of 2013-05):\n\n* 1.8 parser is at 99.9739% accuracy, 3.651 sigma\n* 1.9 parser is at 99.9940% accuracy, 4.013 sigma\n* 2.0 parser is at 99.9939% accuracy, 4.008 sigma".freeze + s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu\nZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB\nGRYDY29tMB4XDTIwMTIyMjIwMzgzMFoXDTIxMTIyMjIwMzgzMFowRTETMBEGA1UE\nAwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS\nJomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda\nb9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx\ntaCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT\noOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh\nGiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt\nqhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV\ngBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw\nHQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB\nAQAE3XRm1YZcCVjAJy5yMZvTOFrS7B2SYErc+0QwmKYbHztTTDY2m5Bii+jhpuxh\nH+ETcU1z8TUKLpsBUP4kUpIRowkVN1p/jKapV8T3Rbwq+VuYFe+GMKsf8wGZSecG\noMQ8DzzauZfbvhe2kDg7G9BBPU0wLQlY25rDcCy9bLnD7R0UK3ONqpwvsI5I7x5X\nZIMXR0a9/DG+55mawwdGzCQobDKiSNLK89KK7OcNTALKU0DfgdTkktdgKchzKHqZ\nd/AHw/kcnU6iuMUoJEcGiJd4gVCTn1l3cDcIvxakGslCA88Jubw0Sqatan0TnC9g\nKToW560QIey7SPfHWduzFJnV\n-----END CERTIFICATE-----\n".freeze] + s.date = "2021-01-11" + s.description = "ruby_parser (RP) is a ruby parser written in pure ruby (utilizing\nracc--which does by default use a C extension). It outputs\ns-expressions which can be manipulated and converted back to ruby via\nthe ruby2ruby gem.\n\nAs an example:\n\n def conditional1 arg1\n return 1 if arg1 == 0\n return 0\n end\n\nbecomes:\n\n s(:defn, :conditional1, s(:args, :arg1),\n s(:if,\n s(:call, s(:lvar, :arg1), :==, s(:lit, 0)),\n s(:return, s(:lit, 1)),\n nil),\n s(:return, s(:lit, 0)))\n\nTested against 801,039 files from the latest of all rubygems (as of 2013-05):\n\n* 1.8 parser is at 99.9739% accuracy, 3.651 sigma\n* 1.9 parser is at 99.9940% accuracy, 4.013 sigma\n* 2.0 parser is at 99.9939% accuracy, 4.008 sigma".freeze s.email = ["ryand-ruby@zenspider.com".freeze] s.executables = ["ruby_parse".freeze, "ruby_parse_extract_error".freeze] - s.extra_rdoc_files = ["History.rdoc".freeze, "Manifest.txt".freeze, "README.rdoc".freeze] - s.files = [".autotest".freeze, "History.rdoc".freeze, "Manifest.txt".freeze, "README.rdoc".freeze, "Rakefile".freeze, "bin/ruby_parse".freeze, "bin/ruby_parse_extract_error".freeze, "compare/normalize.rb".freeze, "lib/.document".freeze, "lib/rp_extensions.rb".freeze, "lib/rp_stringscanner.rb".freeze, "lib/ruby18_parser.rb".freeze, "lib/ruby18_parser.y".freeze, "lib/ruby19_parser.rb".freeze, "lib/ruby19_parser.y".freeze, "lib/ruby20_parser.rb".freeze, "lib/ruby20_parser.y".freeze, "lib/ruby21_parser.rb".freeze, "lib/ruby21_parser.y".freeze, "lib/ruby22_parser.rb".freeze, "lib/ruby22_parser.y".freeze, "lib/ruby23_parser.rb".freeze, "lib/ruby23_parser.y".freeze, "lib/ruby24_parser.rb".freeze, "lib/ruby24_parser.y".freeze, "lib/ruby25_parser.rb".freeze, "lib/ruby25_parser.y".freeze, "lib/ruby_lexer.rb".freeze, "lib/ruby_lexer.rex".freeze, "lib/ruby_lexer.rex.rb".freeze, "lib/ruby_parser.rb".freeze, "lib/ruby_parser.yy".freeze, "lib/ruby_parser_extras.rb".freeze, "test/test_ruby_lexer.rb".freeze, "test/test_ruby_parser.rb".freeze, "test/test_ruby_parser_extras.rb".freeze] + s.extra_rdoc_files = ["History.rdoc".freeze, "Manifest.txt".freeze, "README.rdoc".freeze, "debugging.md".freeze] + s.files = [".autotest".freeze, "History.rdoc".freeze, "Manifest.txt".freeze, "README.rdoc".freeze, "Rakefile".freeze, "bin/ruby_parse".freeze, "bin/ruby_parse_extract_error".freeze, "compare/normalize.rb".freeze, "debugging.md".freeze, "lib/.document".freeze, "lib/rp_extensions.rb".freeze, "lib/rp_stringscanner.rb".freeze, "lib/ruby20_parser.rb".freeze, "lib/ruby20_parser.y".freeze, "lib/ruby21_parser.rb".freeze, "lib/ruby21_parser.y".freeze, "lib/ruby22_parser.rb".freeze, "lib/ruby22_parser.y".freeze, "lib/ruby23_parser.rb".freeze, "lib/ruby23_parser.y".freeze, "lib/ruby24_parser.rb".freeze, "lib/ruby24_parser.y".freeze, "lib/ruby25_parser.rb".freeze, "lib/ruby25_parser.y".freeze, "lib/ruby26_parser.rb".freeze, "lib/ruby26_parser.y".freeze, "lib/ruby27_parser.rb".freeze, "lib/ruby27_parser.y".freeze, "lib/ruby_lexer.rb".freeze, "lib/ruby_lexer.rex".freeze, "lib/ruby_lexer.rex.rb".freeze, "lib/ruby_parser.rb".freeze, "lib/ruby_parser.yy".freeze, "lib/ruby_parser_extras.rb".freeze, "test/test_ruby_lexer.rb".freeze, "test/test_ruby_parser.rb".freeze, "test/test_ruby_parser_extras.rb".freeze, "tools/munge.rb".freeze, "tools/ripper.rb".freeze] s.homepage = "https://github.com/seattlerb/ruby_parser".freeze s.licenses = ["MIT".freeze] s.rdoc_options = ["--main".freeze, "README.rdoc".freeze] + s.required_ruby_version = Gem::Requirement.new(["< 4".freeze, ">= 2.1".freeze]) s.rubygems_version = "2.5.2.1".freeze s.summary = "ruby_parser (RP) is a ruby parser written in pure ruby (utilizing racc--which does by default use a C extension)".freeze @@ -28,26 +30,26 @@ s.specification_version = 4 if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q.freeze, ["~> 3.16"]) + s.add_development_dependency(%q.freeze, ["~> 3.22"]) s.add_development_dependency(%q.freeze, ["~> 2.5"]) s.add_development_dependency(%q.freeze, ["~> 1.4.6"]) s.add_development_dependency(%q.freeze, ["< 11"]) - s.add_development_dependency(%q.freeze, ["< 6", ">= 4.0"]) + s.add_development_dependency(%q.freeze, ["< 7", ">= 4.0"]) s.add_runtime_dependency(%q.freeze, ["~> 4.9"]) else - s.add_dependency(%q.freeze, ["~> 3.16"]) + s.add_dependency(%q.freeze, ["~> 3.22"]) s.add_dependency(%q.freeze, ["~> 2.5"]) s.add_dependency(%q.freeze, ["~> 1.4.6"]) s.add_dependency(%q.freeze, ["< 11"]) - s.add_dependency(%q.freeze, ["< 6", ">= 4.0"]) + s.add_dependency(%q.freeze, ["< 7", ">= 4.0"]) s.add_dependency(%q.freeze, ["~> 4.9"]) end else - s.add_dependency(%q.freeze, ["~> 3.16"]) + s.add_dependency(%q.freeze, ["~> 3.22"]) s.add_dependency(%q.freeze, ["~> 2.5"]) s.add_dependency(%q.freeze, ["~> 1.4.6"]) s.add_dependency(%q.freeze, ["< 11"]) - s.add_dependency(%q.freeze, ["< 6", ">= 4.0"]) + s.add_dependency(%q.freeze, ["< 7", ">= 4.0"]) s.add_dependency(%q.freeze, ["~> 4.9"]) end end diff -Nru ruby-ruby-parser-3.11.0/test/test_ruby_lexer.rb ruby-ruby-parser-3.15.1/test/test_ruby_lexer.rb --- ruby-ruby-parser-3.11.0/test/test_ruby_lexer.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/test/test_ruby_lexer.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,29 +1,24 @@ -# encoding: US-ASCII - require "minitest/autorun" require "ruby_lexer" require "ruby_parser" class TestRubyLexer < Minitest::Test + include RubyLexer::State::Values + attr_accessor :processor, :lex, :parser_class, :lex_state - alias :lexer :lex # lets me copy/paste code from parser - alias :lexer= :lex= + alias lexer lex # lets me copy/paste code from parser + alias lexer= lex= def setup - self.lex_state = :expr_beg + self.lex_state = EXPR_BEG setup_lexer_class RubyParser.latest.class end def setup_lexer input, exp_sexp = nil setup_new_parser lex.ss = RPStringScanner.new(input) - lex.lex_state = self.lex_state - end - - def setup_new_parser - self.processor = parser_class.new - self.lex = processor.lexer + lex.lex_state = lex_state end def setup_lexer_class parser_class @@ -32,11 +27,16 @@ setup_lexer "blah blah" end - def assert_lex input, exp_sexp, *args, &b + def setup_new_parser + self.processor = parser_class.new + self.lex = processor.lexer + end + + def assert_lex input, exp_sexp, *args setup_lexer input assert_parse input, exp_sexp if exp_sexp - b.call if b + yield if block_given? args.each_slice(5) do |token, value, state, paren, brace| assert_next_lexeme token, value, state, paren, brace @@ -51,52 +51,41 @@ assert_lex(input, exp_sexp, *args, &block) end - def ruby18 - RubyParser::V18 === lexer.parser - end - - def refute_lex input, *args # TODO: re-sort - args = args.each_slice(2).map { |a, b| [a, b, nil, nil, nil] }.flatten - - assert_raises RubyParser::SyntaxError do - assert_lex(input, nil, *args) - end - end - - def assert_lex_fname name, type, end_state = :expr_arg # TODO: swap name/type + def assert_lex_fname name, type, end_state = EXPR_ARG # TODO: swap name/type assert_lex3("def #{name} ", nil, - :kDEF, "def", :expr_fname, + :kDEF, "def", EXPR_FNAME, type, name, end_state) end def assert_next_lexeme token=nil, value=nil, state=nil, paren=nil, brace=nil adv = @lex.next_token - assert adv, "no more tokens" + assert adv, "no more tokens, expecting: %p %p %p %p %p" % [token, value, state, paren, brace] act_token, act_value = adv msg = message { - act = [act_token, act_value, @lex.lex_state, - @lex.paren_nest, @lex.brace_nest] + act = [act_token, act_value, @lex.lex_state, @lex.paren_nest, @lex.brace_nest] exp = [token, value, state, paren, brace] "#{exp.inspect} vs #{act.inspect}" } act_value = act_value.first if Array === act_value - assert_equal token, act_token, msg + assert_equal token, act_token, msg case value when Float then assert_in_epsilon value, act_value, 0.001, msg when NilClass then assert_nil act_value, msg + when String then + assert_equal value, act_value.b.force_encoding(value.encoding), msg else - assert_equal value, act_value, msg + assert_equal value, act_value, msg end - assert_equal state, @lex.lex_state, msg if state + assert_match state, @lex.lex_state, msg if state assert_equal paren, @lex.paren_nest, msg if paren assert_equal brace, @lex.brace_nest, msg if brace end @@ -106,8 +95,9 @@ end def assert_read_escape expected, input - @lex.ss.string = input - assert_equal expected, @lex.read_escape, input + @lex.ss.string = input.dup + enc = expected.encoding + assert_equal expected, @lex.read_escape.b.force_encoding(enc), input end def assert_read_escape_bad input # TODO: rename refute_read_escape @@ -117,6 +107,20 @@ end end + def refute_lex input, *args # TODO: re-sort + args = args.each_slice(2).map { |a, b| [a, b, nil, nil, nil] }.flatten + + assert_raises RubyParser::SyntaxError do + assert_lex(input, nil, *args) + end + end + + def refute_lex5 input, *args + assert_raises RubyParser::SyntaxError do + assert_lex(input, *args) + end + end + def refute_lexeme x = y = @lex.next_token @@ -136,15 +140,15 @@ lexer.cmdarg.push false lexer.lex_strterm = nil - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG yield - lexer.lex_state = :expr_endarg - assert_next_lexeme :tRCURLY, "}", :expr_endarg, 0 + lexer.lex_state = EXPR_ENDARG + assert_next_lexeme :tSTRING_DEND, "}", EXPR_END|EXPR_ENDARG, 0 lexer.lex_strterm = lex_strterm - lexer.lex_state = :expr_beg + lexer.lex_state = EXPR_BEG lexer.string_nest = string_nest lexer.brace_nest = brace_nest @@ -160,9 +164,20 @@ assert_nil @lex.next_token end - def test_unicode_ident - s = "@\u1088\u1077\u1093\u1072" - assert_lex3(s.dup, nil, :tIVAR, s.dup, :expr_end) + def test_pct_w_backslashes + ["\t", "\n", "\r", "\v", "\f"].each do |char| + next if !RubyLexer::HAS_ENC and char == "\v" + + assert_lex("%w[foo#{char}bar]", + s(:array, s(:str, "foo"), s(:str, "bar")), + + :tQWORDS_BEG, "%w[", EXPR_BEG, 0, 0, + :tSTRING_CONTENT, "foo", EXPR_BEG, 0, 0, + :tSPACE, nil, EXPR_BEG, 0, 0, + :tSTRING_CONTENT, "bar", EXPR_BEG, 0, 0, + :tSPACE, nil, EXPR_BEG, 0, 0, + :tSTRING_END, nil, EXPR_LIT, 0, 0) + end end def test_read_escape @@ -218,12 +233,96 @@ assert_read_escape "\230", 'M-\cx' end + def test_ruby21_imaginary_literal + setup_lexer_class RubyParser::V21 + + assert_lex3("1i", nil, :tIMAGINARY, Complex(0, 1), EXPR_NUM) + assert_lex3("0x10i", nil, :tIMAGINARY, Complex(0, 16), EXPR_NUM) + assert_lex3("0o10i", nil, :tIMAGINARY, Complex(0, 8), EXPR_NUM) + assert_lex3("0oi", nil, :tIMAGINARY, Complex(0, 0), EXPR_NUM) + assert_lex3("0b10i", nil, :tIMAGINARY, Complex(0, 2), EXPR_NUM) + assert_lex3("1.5i", nil, :tIMAGINARY, Complex(0, 1.5), EXPR_NUM) + assert_lex3("15e3i", nil, :tIMAGINARY, Complex(0, 15000), EXPR_NUM) + assert_lex3("15e-3i", nil, :tIMAGINARY, Complex(0, 0.015), EXPR_NUM) + assert_lex3("1.5e3i", nil, :tIMAGINARY, Complex(0, 1500), EXPR_NUM) + assert_lex3("1.5e-3i", nil, :tIMAGINARY, Complex(0, 0.0015), EXPR_NUM) + + c010 = Complex(0, 10) + assert_lex3("-10i", nil, + :tUMINUS_NUM, "-", EXPR_BEG, + :tIMAGINARY, c010, EXPR_NUM) + end + + def test_ruby21_imaginary_literal_with_succeeding_keyword + setup_lexer_class RubyParser::V21 + + # 2/4 scenarios are syntax errors on all tested versions so I + # deleted them. + + assert_lex3("1if", nil, + :tINTEGER, 1, EXPR_NUM, + :kIF_MOD, "if", EXPR_PAR) + assert_lex3("1.0if", nil, + :tFLOAT, 1.0, EXPR_NUM, + :kIF_MOD, "if", EXPR_PAR) + end + + def test_ruby21_rational_imaginary_literal + setup_lexer_class RubyParser::V21 + + assert_lex3 "1ri", nil, :tIMAGINARY, Complex(0, Rational(1)), EXPR_NUM + assert_lex3 "0x10ri", nil, :tIMAGINARY, Complex(0, Rational(16)), EXPR_NUM + assert_lex3 "0o10ri", nil, :tIMAGINARY, Complex(0, Rational(8)), EXPR_NUM + assert_lex3 "0ori", nil, :tIMAGINARY, Complex(0, Rational(0)), EXPR_NUM + assert_lex3 "0b10ri", nil, :tIMAGINARY, Complex(0, Rational(2)), EXPR_NUM + assert_lex3 "1.5ri", nil, :tIMAGINARY, Complex(0, Rational("1.5")), EXPR_NUM + assert_lex3 "15e3ri", nil, :tIMAGINARY, Complex(0, Rational("15e3")), EXPR_NUM + assert_lex3 "15e-3ri", nil, :tIMAGINARY, Complex(0, Rational("15e-3")), EXPR_NUM + assert_lex3 "1.5e3ri", nil, :tIMAGINARY, Complex(0, Rational("1.5e3")), EXPR_NUM + assert_lex3 "1.5e-3ri", nil, :tIMAGINARY, Complex(0, Rational("1.5e-3")), EXPR_NUM + + assert_lex3("-10ri", nil, + :tUMINUS_NUM, "-", EXPR_BEG, + :tIMAGINARY, Complex(0, Rational(10)), EXPR_NUM) + end + + def test_ruby21_rational_literal + setup_lexer_class RubyParser::V21 + + assert_lex3("10r", nil, :tRATIONAL, Rational(10), EXPR_NUM) + assert_lex3("0x10r", nil, :tRATIONAL, Rational(16), EXPR_NUM) + assert_lex3("0o10r", nil, :tRATIONAL, Rational(8), EXPR_NUM) + assert_lex3("0or", nil, :tRATIONAL, Rational(0), EXPR_NUM) + assert_lex3("0b10r", nil, :tRATIONAL, Rational(2), EXPR_NUM) + assert_lex3("1.5r", nil, :tRATIONAL, Rational(15, 10), EXPR_NUM) + assert_lex3("15e3r", nil, :tRATIONAL, Rational(15000), EXPR_NUM) + assert_lex3("15e-3r", nil, :tRATIONAL, Rational(15, 1000), EXPR_NUM) + assert_lex3("1.5e3r", nil, :tRATIONAL, Rational(1500), EXPR_NUM) + assert_lex3("1.5e-3r", nil, :tRATIONAL, Rational(15, 10000), EXPR_NUM) + + r10 = Rational(10) + assert_lex3("-10r", nil, + :tUMINUS_NUM, "-", EXPR_BEG, + :tRATIONAL, r10, EXPR_NUM) + end + + def test_unicode_ident + s = "@\u1088\u1077\u1093\u1072" + assert_lex3(s.dup, nil, :tIVAR, s.dup, EXPR_END) + end + + def test_why_does_ruby_hate_me? + assert_lex3("\"Nl%\\000\\000A\\000\\999\"", # you should be ashamed + nil, + :tSTRING, %W[ Nl% \u0000 \u0000 A \u0000 999 ].join, EXPR_END) + end + def test_yylex_ambiguous_uminus assert_lex3("m -3", nil, - :tIDENTIFIER, "m", :expr_cmdarg, - :tUMINUS_NUM, "-", :expr_beg, - :tINTEGER, 3, :expr_end) + :tIDENTIFIER, "m", EXPR_CMDARG, + :tUMINUS_NUM, "-", EXPR_BEG, + :tINTEGER, 3, EXPR_NUM) # TODO: verify warning end @@ -231,36 +330,45 @@ def test_yylex_ambiguous_uplus assert_lex3("m +3", nil, - :tIDENTIFIER, "m", :expr_cmdarg, - :tINTEGER, 3, :expr_end) + :tIDENTIFIER, "m", EXPR_CMDARG, + :tINTEGER, 3, EXPR_NUM) # TODO: verify warning end def test_yylex_and - assert_lex3("&", nil, :tAMPER, "&", :expr_beg) + assert_lex3("&", nil, :tAMPER, "&", EXPR_BEG) end def test_yylex_and2 - assert_lex3("&&", nil, :tANDOP, "&&", :expr_beg) + assert_lex3("&&", nil, :tANDOP, "&&", EXPR_BEG) end def test_yylex_and2_equals - assert_lex3("&&=", nil, :tOP_ASGN, "&&", :expr_beg) + assert_lex3("&&=", nil, :tOP_ASGN, "&&", EXPR_BEG) + end + + def test_yylex_and_arg + self.lex_state = EXPR_ARG + + assert_lex3(" &y", + nil, + :tAMPER, "&", EXPR_BEG, + :tIDENTIFIER, "y", EXPR_ARG) end def test_yylex_and_dot setup_lexer_class RubyParser::V23 - assert_lex3("&.", nil, :tLONELY, "&.", :expr_dot) + assert_lex3("&.", nil, :tLONELY, "&.", EXPR_DOT) end def test_yylex_and_dot_call setup_lexer_class RubyParser::V23 assert_lex3("x&.y", nil, - :tIDENTIFIER, "x", :expr_cmdarg, - :tLONELY, "&.", :expr_dot, + :tIDENTIFIER, "x", EXPR_CMDARG, + :tLONELY, "&.", EXPR_DOT, :tIDENTIFIER, "y") end @@ -268,32 +376,23 @@ setup_lexer_class Ruby23Parser assert_lex3("x\n&.y", nil, - :tIDENTIFIER, "x", :expr_cmdarg, - :tLONELY, "&.", :expr_dot, + :tIDENTIFIER, "x", EXPR_CMDARG, + :tLONELY, "&.", EXPR_DOT, :tIDENTIFIER, "y") end - def test_yylex_and_arg - self.lex_state = :expr_arg - - assert_lex3(" &y", - nil, - :tAMPER, "&", :expr_beg, - :tIDENTIFIER, "y", :expr_arg) - end - def test_yylex_and_equals - assert_lex3("&=", nil, :tOP_ASGN, "&", :expr_beg) + assert_lex3("&=", nil, :tOP_ASGN, "&", EXPR_BEG) end def test_yylex_and_expr - self.lex_state = :expr_arg + self.lex_state = EXPR_ARG assert_lex3("x & y", nil, - :tIDENTIFIER, "x", :expr_cmdarg, - :tAMPER2, "&", :expr_beg, - :tIDENTIFIER, "y", :expr_arg) + :tIDENTIFIER, "x", EXPR_CMDARG, + :tAMPER2, "&", EXPR_BEG, + :tIDENTIFIER, "y", EXPR_ARG) end def test_yylex_and_meth @@ -301,346 +400,26 @@ end def test_yylex_assoc - assert_lex3("=>", nil, :tASSOC, "=>", :expr_beg) - end - - def test_yylex_label__18 - setup_lexer_class RubyParser::V18 - - assert_lex3("{a:", - nil, - :tLBRACE, "{", :expr_beg, - :tIDENTIFIER, "a", :expr_arg, - :tSYMBEG, ":", :expr_fname) - end - - def test_yylex_label_in_params__18 - setup_lexer_class RubyParser::V18 - - assert_lex3("foo(a:", - nil, - :tIDENTIFIER, "foo", :expr_cmdarg, - :tLPAREN2, "(", :expr_beg, - :tIDENTIFIER, "a", :expr_cmdarg, - :tSYMBEG, ":", :expr_fname) - end - - def test_yylex_label__19 - setup_lexer_class RubyParser::V19 - - assert_lex3("{a:", - nil, - :tLBRACE, "{", :expr_beg, - :tLABEL, "a", :expr_labelarg) - end - - def test_yylex_label_in_params__19 - setup_lexer_class RubyParser::V19 - - assert_lex3("foo(a:", - nil, - :tIDENTIFIER, "foo", :expr_cmdarg, - :tLPAREN2, "(", :expr_beg, - :tLABEL, "a", :expr_labelarg) - end - - def test_yylex_paren_string_parens_interpolated - setup_lexer('%((#{b}#{d}))', - s(:dstr, - "(", - s(:evstr, s(:call, nil, :b)), - s(:evstr, s(:call, nil, :d)), - s(:str, ")"))) - - assert_next_lexeme :tSTRING_BEG, "%)", :expr_beg, 0, 0 - assert_next_lexeme :tSTRING_CONTENT, "(", :expr_beg, 0, 0 - assert_next_lexeme :tSTRING_DBEG, nil, :expr_beg, 0, 0 - - emulate_string_interpolation do - assert_next_lexeme :tIDENTIFIER, "b", :expr_arg, 0, 0 - end - - assert_next_lexeme :tSTRING_DBEG, nil, :expr_beg, 0, 0 - - emulate_string_interpolation do - assert_next_lexeme :tIDENTIFIER, "d", :expr_arg, 0, 0 - end - - assert_next_lexeme :tSTRING_CONTENT, ")", :expr_beg, 0, 0 - assert_next_lexeme :tSTRING_END, ")", :expr_end, 0, 0 - - refute_lexeme - end - - def test_yylex_paren_string_interpolated_regexp - setup_lexer('%( #{(/abcd/)} )', - s(:dstr, " ", s(:evstr, s(:lit, /abcd/)), s(:str, " "))) - - assert_next_lexeme :tSTRING_BEG, "%)", :expr_beg, 0, 0 - assert_next_lexeme :tSTRING_CONTENT, " ", :expr_beg, 0, 0 - assert_next_lexeme :tSTRING_DBEG, nil, :expr_beg, 0, 0 - - emulate_string_interpolation do - assert_next_lexeme :tLPAREN, "(", :expr_beg, 1, 0 - assert_next_lexeme :tREGEXP_BEG, "/", :expr_beg, 1, 0 - assert_next_lexeme :tSTRING_CONTENT, "abcd", :expr_beg, 1, 0 - assert_next_lexeme :tREGEXP_END, "", :expr_end, 1, 0 - assert_next_lexeme :tRPAREN, ")", :expr_endfn, 0, 0 - end - - assert_next_lexeme :tSTRING_CONTENT, " ", :expr_beg, 0, 0 - assert_next_lexeme :tSTRING_END, ")", :expr_end, 0, 0 - - refute_lexeme - end - - def test_yylex_not_at_defn__20 - setup_lexer_class RubyParser::V20 - - assert_lex("def +@; end", - s(:defn, :+@, s(:args), s(:nil)), - - :kDEF, "def", :expr_fname, 0, 0, - :tUPLUS, "+@", :expr_arg, 0, 0, - :tSEMI, ";", :expr_beg, 0, 0, - :kEND, "end", :expr_end, 0, 0) - - assert_lex("def !@; end", - s(:defn, :"!@", s(:args), s(:nil)), - - :kDEF, "def", :expr_fname, 0, 0, - :tUBANG, "!@", :expr_arg, 0, 0, - :tSEMI, ";", :expr_beg, 0, 0, - :kEND, "end", :expr_end, 0, 0) - end - - def test_yylex_not_at_ivar - assert_lex("!@ivar", - s(:call, s(:ivar, :@ivar), :"!"), - - :tBANG, "!", :expr_beg, 0, 0, - :tIVAR, "@ivar", :expr_end, 0, 0) - end - - def test_yylex_number_times_ident_times_return_number - assert_lex("1 * b * 3", - s(:call, - s(:call, s(:lit, 1), :*, s(:call, nil, :b)), - :*, s(:lit, 3)), - - :tINTEGER, 1, :expr_end, 0, 0, - :tSTAR2, "*", :expr_beg, 0, 0, - :tIDENTIFIER, "b", :expr_arg, 0, 0, - :tSTAR2, "*", :expr_beg, 0, 0, - :tINTEGER, 3, :expr_end, 0, 0) - - assert_lex("1 * b *\n 3", - s(:call, - s(:call, s(:lit, 1), :*, s(:call, nil, :b)), - :*, s(:lit, 3)), - - :tINTEGER, 1, :expr_end, 0, 0, - :tSTAR2, "*", :expr_beg, 0, 0, - :tIDENTIFIER, "b", :expr_arg, 0, 0, - :tSTAR2, "*", :expr_beg, 0, 0, - :tINTEGER, 3, :expr_end, 0, 0) - end - - def test_yylex_paren_string_parens_interpolated_regexp - setup_lexer('%((#{(/abcd/)}))', - s(:dstr, "(", s(:evstr, s(:lit, /abcd/)), s(:str, ")"))) - - assert_next_lexeme :tSTRING_BEG, "%)", :expr_beg, 0, 0 - assert_next_lexeme :tSTRING_CONTENT, "(", :expr_beg, 0, 0 - - assert_next_lexeme :tSTRING_DBEG, nil, :expr_beg, 0, 0 - - emulate_string_interpolation do - assert_next_lexeme :tLPAREN, "(", :expr_beg, 1, 0 - assert_next_lexeme :tREGEXP_BEG, "/", :expr_beg, 1, 0 - assert_next_lexeme :tSTRING_CONTENT, "abcd", :expr_beg, 1, 0 - assert_next_lexeme :tREGEXP_END, "", :expr_end, 1, 0 - assert_next_lexeme :tRPAREN, ")", :expr_endfn, 0, 0 - end - - assert_next_lexeme :tSTRING_CONTENT, ")", :expr_beg, 0, 0 - assert_next_lexeme :tSTRING_END, ")", :expr_end, 0, 0 - - refute_lexeme - end - - def test_yylex_method_parens_chevron - assert_lex("a()<<1", - s(:call, s(:call, nil, :a), :<<, s(:lit, 1)), - :tIDENTIFIER, "a", :expr_cmdarg, 0, 0, - :tLPAREN2, "(", :expr_beg, 1, 0, - :tRPAREN, ")", :expr_endfn, 0, 0, - :tLSHFT, "<<" , :expr_beg, 0, 0, - :tINTEGER, 1, :expr_end, 0, 0) - end - - def test_yylex_lambda_args__20 - setup_lexer_class RubyParser::V20 - - assert_lex("-> (a) { }", - s(:iter, s(:call, nil, :lambda), - s(:args, :a)), - - :tLAMBDA, nil, :expr_endfn, 0, 0, - :tLPAREN2, "(", :expr_beg, 1, 0, - :tIDENTIFIER, "a", :expr_arg, 1, 0, - :tRPAREN, ")", :expr_endfn, 0, 0, - :tLCURLY, "{", :expr_beg, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0) - end - - def test_yylex_lambda_args_opt__20 - setup_lexer_class RubyParser::V20 - - assert_lex("-> (a=nil) { }", - s(:iter, s(:call, nil, :lambda), - s(:args, s(:lasgn, :a, s(:nil)))), - - :tLAMBDA, nil, :expr_endfn, 0, 0, - :tLPAREN2, "(", :expr_beg, 1, 0, - :tIDENTIFIER, "a", :expr_arg, 1, 0, - :tEQL, "=", :expr_beg, 1, 0, - :kNIL, "nil", :expr_end, 1, 0, - :tRPAREN, ")", :expr_endfn, 0, 0, - :tLCURLY, "{", :expr_beg, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0) - end - - def test_yylex_lambda_hash__20 - setup_lexer_class RubyParser::V20 - - assert_lex("-> (a={}) { }", - s(:iter, s(:call, nil, :lambda), - s(:args, s(:lasgn, :a, s(:hash)))), - - :tLAMBDA, nil, :expr_endfn, 0, 0, - :tLPAREN2, "(", :expr_beg, 1, 0, - :tIDENTIFIER, "a", :expr_arg, 1, 0, - :tEQL, "=", :expr_beg, 1, 0, - :tLBRACE, "{", :expr_beg, 1, 1, - :tRCURLY, "}", :expr_endarg, 1, 0, - :tRPAREN, ")", :expr_endfn, 0, 0, - :tLCURLY, "{", :expr_beg, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0) - end - - def test_yylex_iter_array_curly - assert_lex("f :a, [:b] { |c, d| }", # yes, this is bad code - s(:iter, - s(:call, nil, :f, s(:lit, :a), s(:array, s(:lit, :b))), - s(:args, :c, :d)), - - :tIDENTIFIER, "f", :expr_cmdarg, 0, 0, - :tSYMBOL, "a", :expr_end, 0, 0, - :tCOMMA, ",", :expr_beg, 0, 0, - :tLBRACK, "[", :expr_beg, 1, 0, - :tSYMBOL, "b", :expr_end, 1, 0, - :tRBRACK, "]", :expr_endarg, 0, 0, - :tLBRACE_ARG, "{", :expr_beg, 0, 1, - :tPIPE, "|", :expr_beg, 0, 1, - :tIDENTIFIER, "c", :expr_arg, 0, 1, - :tCOMMA, ",", :expr_beg, 0, 1, - :tIDENTIFIER, "d", :expr_arg, 0, 1, - :tPIPE, "|", :expr_beg, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0) - end - - def test_yylex_const_call_same_name - assert_lex("X = a { }; b { f :c }", - s(:block, - s(:cdecl, :X, s(:iter, s(:call, nil, :a), 0)), - s(:iter, - s(:call, nil, :b), - 0, - s(:call, nil, :f, s(:lit, :c)))), - - :tCONSTANT, "X", :expr_cmdarg, 0, 0, - :tEQL, "=", :expr_beg, 0, 0, - :tIDENTIFIER, "a", :expr_arg, 0, 0, - :tLCURLY, "{", :expr_beg, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0, - :tSEMI, ";", :expr_beg, 0, 0, - - :tIDENTIFIER, "b", :expr_cmdarg, 0, 0, - :tLCURLY, "{", :expr_beg, 0, 1, - :tIDENTIFIER, "f", :expr_cmdarg, 0, 1, # different - :tSYMBOL, "c", :expr_end, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0) - - assert_lex("X = a { }; b { X :c }", - s(:block, - s(:cdecl, :X, s(:iter, s(:call, nil, :a), 0)), - s(:iter, - s(:call, nil, :b), - 0, - s(:call, nil, :X, s(:lit, :c)))), - - :tCONSTANT, "X", :expr_cmdarg, 0, 0, - :tEQL, "=", :expr_beg, 0, 0, - :tIDENTIFIER, "a", :expr_arg, 0, 0, - :tLCURLY, "{", :expr_beg, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0, - :tSEMI, ";", :expr_beg, 0, 0, - - :tIDENTIFIER, "b", :expr_cmdarg, 0, 0, - :tLCURLY, "{", :expr_beg, 0, 1, - :tCONSTANT, "X", :expr_cmdarg, 0, 1, # same - :tSYMBOL, "c", :expr_end, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0) - end - - def test_yylex_lasgn_call_same_name - assert_lex("a = b.c :d => 1", - s(:lasgn, :a, - s(:call, s(:call, nil, :b), :c, - s(:hash, s(:lit, :d), s(:lit, 1)))), - - :tIDENTIFIER, "a", :expr_cmdarg, 0, 0, - :tEQL, "=", :expr_beg, 0, 0, - :tIDENTIFIER, "b", :expr_arg, 0, 0, - :tDOT, ".", :expr_dot, 0, 0, - :tIDENTIFIER, "c", :expr_arg, 0, 0, # different - :tSYMBOL, "d", :expr_end, 0, 0, - :tASSOC, "=>", :expr_beg, 0, 0, - :tINTEGER, 1, :expr_end, 0, 0) - - assert_lex("a = b.a :d => 1", - s(:lasgn, :a, - s(:call, s(:call, nil, :b), :a, - s(:hash, s(:lit, :d), s(:lit, 1)))), - - :tIDENTIFIER, "a", :expr_cmdarg, 0, 0, - :tEQL, "=", :expr_beg, 0, 0, - :tIDENTIFIER, "b", :expr_arg, 0, 0, - :tDOT, ".", :expr_dot, 0, 0, - :tIDENTIFIER, "a", :expr_arg, 0, 0, # same as lvar - :tSYMBOL, "d", :expr_end, 0, 0, - :tASSOC, "=>", :expr_beg, 0, 0, - :tINTEGER, 1, :expr_end, 0, 0) + assert_lex3 "=>", nil, :tASSOC, "=>", EXPR_BEG end def test_yylex_back_ref assert_lex3("[$&, $`, $', $+]", nil, - :tLBRACK, "[", :expr_beg, - :tBACK_REF, :&, :expr_end, :tCOMMA, ",", :expr_beg, - :tBACK_REF, :"`", :expr_end, :tCOMMA, ",", :expr_beg, - :tBACK_REF, :"'", :expr_end, :tCOMMA, ",", :expr_beg, - :tBACK_REF, :+, :expr_end, - :tRBRACK, "]", :expr_endarg) + :tLBRACK, "[", EXPR_PAR, + :tBACK_REF, :&, EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tBACK_REF, :"`", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tBACK_REF, :"'", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tBACK_REF, :+, EXPR_END, + :tRBRACK, "]", EXPR_END) end def test_yylex_backslash assert_lex3("1 \\\n+ 2", nil, - :tINTEGER, 1, :expr_end, - :tPLUS, "+", :expr_beg, - :tINTEGER, 2, :expr_end) + :tINTEGER, 1, EXPR_NUM, + :tPLUS, "+", EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) end def test_yylex_backslash_bad @@ -650,37 +429,37 @@ def test_yylex_backtick assert_lex3("`ls`", nil, - :tXSTRING_BEG, "`", :expr_beg, - :tSTRING_CONTENT, "ls", :expr_beg, - :tSTRING_END, "`", :expr_end) + :tXSTRING_BEG, "`", EXPR_BEG, + :tSTRING_CONTENT, "ls", EXPR_BEG, + :tSTRING_END, "`", EXPR_LIT) end def test_yylex_backtick_cmdarg - self.lex_state = :expr_dot + self.lex_state = EXPR_DOT # \n ensures expr_cmd (TODO: why?) - assert_lex3("\n`", nil, :tBACK_REF2, "`", :expr_cmdarg) + assert_lex3("\n`", nil, :tBACK_REF2, "`", EXPR_CMDARG) end def test_yylex_backtick_dot - self.lex_state = :expr_dot + self.lex_state = EXPR_DOT assert_lex3("a.`(3)", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tDOT, ".", :expr_dot, - :tBACK_REF2, "`", :expr_arg, - :tLPAREN2, "(", :expr_beg, - :tINTEGER, 3, :expr_end, - :tRPAREN, ")", :expr_endfn) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tDOT, ".", EXPR_DOT, + :tBACK_REF2, "`", EXPR_ARG, + :tLPAREN2, "(", EXPR_PAR, + :tINTEGER, 3, EXPR_NUM, + :tRPAREN, ")", EXPR_ENDFN) end def test_yylex_backtick_method - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME assert_lex3("`", nil, - :tBACK_REF2, "`", :expr_end) + :tBACK_REF2, "`", EXPR_END) end def test_yylex_bad_char @@ -688,63 +467,96 @@ end def test_yylex_bang - assert_lex3("!", nil, :tBANG, "!", :expr_beg) + assert_lex3("!", nil, :tBANG, "!", EXPR_BEG) end def test_yylex_bang_equals - assert_lex3("!=", nil, :tNEQ, "!=", :expr_beg) + assert_lex3("!=", nil, :tNEQ, "!=", EXPR_BEG) end def test_yylex_bang_tilde - assert_lex3("!~", nil, :tNMATCH, "!~", :expr_beg) + assert_lex3("!~", nil, :tNMATCH, "!~", EXPR_BEG) + end + + def test_yylex_block_bug_1 + assert_lex3("a do end", + s(:iter, s(:call, nil, :a), 0), + + :tIDENTIFIER, "a", EXPR_CMDARG, + :kDO, "do", EXPR_BEG, + :kEND, "end", EXPR_END) + end + + def test_yylex_block_bug_2 + assert_lex3("a = 1\na do\nend", + s(:block, + s(:lasgn, :a, s(:lit, 1)), + s(:iter, s(:call, nil, :a), 0)), + + :tIDENTIFIER, "a", EXPR_CMDARG, + :tEQL, "=", EXPR_BEG, + :tINTEGER, 1, EXPR_NUM, + :tNL, nil, EXPR_BEG, + :tIDENTIFIER, "a", EXPR_CMDARG, + :kDO, "do", EXPR_BEG, + :kEND, "end", EXPR_END) + end + + def test_yylex_block_bug_3 + assert_lex3("a { }", + s(:iter, s(:call, nil, :a), 0), + + :tIDENTIFIER, "a", EXPR_CMDARG, # verified + :tLCURLY, "{", EXPR_PAR, + :tRCURLY, "}", EXPR_END) end def test_yylex_carat - assert_lex3("^", nil, :tCARET, "^", :expr_beg) + assert_lex3("^", nil, :tCARET, "^", EXPR_BEG) end def test_yylex_carat_equals - assert_lex3("^=", nil, :tOP_ASGN, "^", :expr_beg) + assert_lex3("^=", nil, :tOP_ASGN, "^", EXPR_BEG) end def test_yylex_colon2 assert_lex3("A::B", nil, - :tCONSTANT, "A", :expr_cmdarg, - :tCOLON2, "::", :expr_dot, - :tCONSTANT, "B", :expr_arg) + :tCONSTANT, "A", EXPR_CMDARG, + :tCOLON2, "::", EXPR_DOT, + :tCONSTANT, "B", EXPR_ARG) end def test_yylex_colon2_argh assert_lex3("module X::Y\n c\nend", nil, - :kMODULE, "module", :expr_value, - :tCONSTANT, "X", :expr_arg, - :tCOLON2, "::", :expr_dot, - :tCONSTANT, "Y", :expr_arg, - :tNL, nil, :expr_beg, - :tIDENTIFIER, "c", :expr_cmdarg, - :tNL, nil, :expr_beg, - :kEND, "end", :expr_end) + :kMODULE, "module", EXPR_BEG, + :tCONSTANT, "X", EXPR_CMDARG, + :tCOLON2, "::", EXPR_DOT, + :tCONSTANT, "Y", EXPR_ARG, + :tNL, nil, EXPR_BEG, + :tIDENTIFIER, "c", EXPR_CMDARG, + :tNL, nil, EXPR_BEG, + :kEND, "end", EXPR_END) end def test_yylex_colon3 assert_lex3("::Array", nil, - :tCOLON3, "::", :expr_beg, - :tCONSTANT, "Array", :expr_arg) + :tCOLON3, "::", EXPR_BEG, + :tCONSTANT, "Array", EXPR_ARG) end def test_yylex_comma - assert_lex3(",", nil, :tCOMMA, ",", :expr_beg) + assert_lex3(",", nil, :tCOMMA, ",", EXPR_PAR) end def test_yylex_comment assert_lex3("1 # one\n# two\n2", nil, - :tINTEGER, 1, :expr_end, - :tNL, nil, :expr_beg, - :tINTEGER, 2, :expr_end) + :tINTEGER, 1, EXPR_NUM, + :tNL, nil, EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) assert_equal "# one\n# two\n", @lex.comments end @@ -752,7 +564,7 @@ def test_yylex_comment_begin assert_lex3("=begin\nblah\nblah\n=end\n42", nil, - :tINTEGER, 42, :expr_end) + :tINTEGER, 42, EXPR_NUM) assert_equal "=begin\nblah\nblah\n=end\n", @lex.comments end @@ -766,14 +578,14 @@ def test_yylex_comment_begin_not_comment assert_lex3("beginfoo = 5\np x \\\n=beginfoo", nil, - :tIDENTIFIER, "beginfoo", :expr_cmdarg, - :tEQL, "=", :expr_beg, - :tINTEGER, 5, :expr_end, - :tNL, nil, :expr_beg, - :tIDENTIFIER, "p", :expr_cmdarg, - :tIDENTIFIER, "x", :expr_arg, - :tEQL, "=", :expr_beg, - :tIDENTIFIER, "beginfoo", :expr_arg) + :tIDENTIFIER, "beginfoo", EXPR_CMDARG, + :tEQL, "=", EXPR_BEG, + :tINTEGER, 5, EXPR_NUM, + :tNL, nil, EXPR_BEG, + :tIDENTIFIER, "p", EXPR_CMDARG, + :tIDENTIFIER, "x", EXPR_ARG, + :tEQL, "=", EXPR_BEG, + :tIDENTIFIER, "beginfoo", EXPR_ARG) end def test_yylex_comment_begin_space @@ -792,19 +604,63 @@ assert_lex3("# comment", nil) end + def test_yylex_const_call_same_name + assert_lex("X = a { }; b { f :c }", + s(:block, + s(:cdecl, :X, s(:iter, s(:call, nil, :a), 0)), + s(:iter, + s(:call, nil, :b), + 0, + s(:call, nil, :f, s(:lit, :c)))), + + :tCONSTANT, "X", EXPR_CMDARG, 0, 0, + :tEQL, "=", EXPR_BEG, 0, 0, + :tIDENTIFIER, "a", EXPR_ARG, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0, + :tSEMI, ";", EXPR_BEG, 0, 0, + + :tIDENTIFIER, "b", EXPR_CMDARG, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tIDENTIFIER, "f", EXPR_CMDARG, 0, 1, # different + :tSYMBOL, "c", EXPR_LIT, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0) + + assert_lex("X = a { }; b { X :c }", + s(:block, + s(:cdecl, :X, s(:iter, s(:call, nil, :a), 0)), + s(:iter, + s(:call, nil, :b), + 0, + s(:call, nil, :X, s(:lit, :c)))), + + :tCONSTANT, "X", EXPR_CMDARG, 0, 0, + :tEQL, "=", EXPR_BEG, 0, 0, + :tIDENTIFIER, "a", EXPR_ARG, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0, + :tSEMI, ";", EXPR_BEG, 0, 0, + + :tIDENTIFIER, "b", EXPR_CMDARG, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tCONSTANT, "X", EXPR_CMDARG, 0, 1, # same + :tSYMBOL, "c", EXPR_LIT, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0) + end + def test_yylex_constant - assert_lex3("ArgumentError", nil, :tCONSTANT, "ArgumentError", :expr_cmdarg) + assert_lex3("ArgumentError", nil, :tCONSTANT, "ArgumentError", EXPR_CMDARG) end def test_yylex_constant_semi assert_lex3("ArgumentError;", nil, - :tCONSTANT, "ArgumentError", :expr_cmdarg, - :tSEMI, ";", :expr_beg) + :tCONSTANT, "ArgumentError", EXPR_CMDARG, + :tSEMI, ";", EXPR_BEG) end def test_yylex_cvar - assert_lex3("@@blah", nil, :tCVAR, "@@blah", :expr_end) + assert_lex3("@@blah", nil, :tCVAR, "@@blah", EXPR_END) end def test_yylex_cvar_bad @@ -814,75 +670,67 @@ end def test_yylex_def_bad_name - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME refute_lex("def [ ", :kDEF, "def") end def test_yylex_div assert_lex3("a / 2", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tDIVIDE, "/", :expr_beg, - :tINTEGER, 2, :expr_end) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tDIVIDE, "/", EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) end def test_yylex_div_equals assert_lex3("a /= 2", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tOP_ASGN, "/", :expr_beg, - :tINTEGER, 2, :expr_end) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tOP_ASGN, "/", EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) end def test_yylex_do assert_lex3("x do 42 end", nil, - :tIDENTIFIER, "x", :expr_cmdarg, - :kDO, "do", :expr_beg, - :tINTEGER, 42, :expr_end, - :kEND, "end", :expr_end) + :tIDENTIFIER, "x", EXPR_CMDARG, + :kDO, "do", EXPR_BEG, + :tINTEGER, 42, EXPR_NUM, + :kEND, "end", EXPR_END) end def test_yylex_do_block - self.lex_state = :expr_endarg + self.lex_state = EXPR_ENDARG assert_lex3("x.y do 42 end", nil, - :tIDENTIFIER, "x", :expr_end, - :tDOT, ".", :expr_dot, - :tIDENTIFIER, "y", :expr_arg, - :kDO_BLOCK, "do", :expr_beg, - :tINTEGER, 42, :expr_end, - :kEND, "end", :expr_end) do + :tIDENTIFIER, "x", EXPR_END, + :tDOT, ".", EXPR_DOT, + :tIDENTIFIER, "y", EXPR_ARG, + :kDO_BLOCK, "do", EXPR_BEG, + :tINTEGER, 42, EXPR_NUM, + :kEND, "end", EXPR_END) do @lex.cmdarg.push true end end def test_yylex_do_block2 - self.lex_state = :expr_endarg + self.lex_state = EXPR_ENDARG assert_lex3("do 42 end", nil, - :kDO_BLOCK, "do", :expr_beg, - :tINTEGER, 42, :expr_end, - :kEND, "end", :expr_end) - end - - def test_yylex_is_your_spacebar_broken? - assert_lex3(":a!=:b", - nil, - :tSYMBOL, "a", :expr_end, - :tNEQ, "!=", :expr_beg, - :tSYMBOL, "b", :expr_end) + :kDO, "do", EXPR_BEG, + :tINTEGER, 42, EXPR_NUM, + :kEND, "end", EXPR_END) end def test_yylex_do_cond assert_lex3("x do 42 end", nil, - :tIDENTIFIER, "x", :expr_cmdarg, - :kDO_COND, "do", :expr_beg, - :tINTEGER, 42, :expr_end, - :kEND, "end", :expr_end) do + :tIDENTIFIER, "x", EXPR_CMDARG, + :kDO_COND, "do", EXPR_BEG, + :tINTEGER, 42, EXPR_NUM, + :kEND, "end", EXPR_END) do @lex.cond.push true end end @@ -893,40 +741,40 @@ end def test_yylex_dollar_eos - assert_lex3("$", nil, "$", "$", :expr_end) # FIX: wtf is this?!? + assert_lex3("$", nil, "$", "$", EXPR_END) # FIX: wtf is this?!? end def test_yylex_dot # HINT message sends - assert_lex3(".", nil, :tDOT, ".", :expr_dot) + assert_lex3(".", nil, :tDOT, ".", EXPR_DOT) end def test_yylex_dot2 - assert_lex3("..", nil, :tDOT2, "..", :expr_beg) + assert_lex3("..", nil, :tDOT2, "..", EXPR_BEG) end def test_yylex_dot3 - assert_lex3("...", nil, :tDOT3, "...", :expr_beg) + assert_lex3("...", nil, :tDOT3, "...", EXPR_BEG) end def test_yylex_equals # FIX: this sucks - assert_lex3("=", nil, :tEQL, "=", :expr_beg) + assert_lex3("=", nil, :tEQL, "=", EXPR_BEG) end def test_yylex_equals2 - assert_lex3("==", nil, :tEQ, "==", :expr_beg) + assert_lex3("==", nil, :tEQ, "==", EXPR_BEG) end def test_yylex_equals3 - assert_lex3("===", nil, :tEQQ, "===", :expr_beg) + assert_lex3("===", nil, :tEQQ, "===", EXPR_BEG) end def test_yylex_equals_tilde - assert_lex3("=~", nil, :tMATCH, "=~", :expr_beg) + assert_lex3("=~", nil, :tMATCH, "=~", EXPR_BEG) end def test_yylex_float - assert_lex3("1.0", nil, :tFLOAT, 1.0, :expr_end) + assert_lex3("1.0", nil, :tFLOAT, 1.0, EXPR_NUM) end def test_yylex_float_bad_no_underscores @@ -944,55 +792,48 @@ def test_yylex_float_call assert_lex3("1.0.to_s", nil, - :tFLOAT, 1.0, :expr_end, - :tDOT, ".", :expr_dot, - :tIDENTIFIER, "to_s", :expr_arg) + :tFLOAT, 1.0, EXPR_NUM, + :tDOT, ".", EXPR_DOT, + :tIDENTIFIER, "to_s", EXPR_ARG) end def test_yylex_float_dot_E assert_lex3("1.0E10", nil, - :tFLOAT, 10000000000.0, :expr_end) + :tFLOAT, 10000000000.0, EXPR_NUM) end def test_yylex_float_dot_E_neg assert_lex3("-1.0E10", nil, - :tUMINUS_NUM, "-", :expr_beg, - :tFLOAT, 10000000000.0, :expr_end) + :tUMINUS_NUM, "-", EXPR_BEG, + :tFLOAT, 10000000000.0, EXPR_NUM) end def test_yylex_float_dot_e assert_lex3("1.0e10", nil, - :tFLOAT, 10000000000.0, :expr_end) + :tFLOAT, 10000000000.0, EXPR_NUM) end def test_yylex_float_dot_e_neg assert_lex3("-1.0e10", nil, - :tUMINUS_NUM, "-", :expr_beg, - :tFLOAT, 10000000000.0, :expr_end) + :tUMINUS_NUM, "-", EXPR_BEG, + :tFLOAT, 10000000000.0, EXPR_NUM) end def test_yylex_float_e assert_lex3("1e10", nil, - :tFLOAT, 10000000000.0, :expr_end) + :tFLOAT, 10000000000.0, EXPR_NUM) end def test_yylex_float_e_bad_double_e assert_lex3("1e2e3", nil, - :tFLOAT, 100, :expr_end, - :tIDENTIFIER, "e3", :expr_end) - end - - def test_yylex_float_if_modifier - assert_lex3("1e2if", - nil, - :tFLOAT, 100, :expr_end, - :kIF_MOD, "if", :expr_beg) + :tFLOAT, 100, EXPR_NUM, + :tIDENTIFIER, "e3", EXPR_END) end def test_yylex_float_e_bad_trailing_underscore @@ -1000,198 +841,258 @@ end def test_yylex_float_e_minus - assert_lex3("1e-10", nil, :tFLOAT, 1.0e-10, :expr_end) + assert_lex3("1e-10", nil, :tFLOAT, 1.0e-10, EXPR_NUM) end def test_yylex_float_e_neg assert_lex3("-1e10", nil, - :tUMINUS_NUM, "-", :expr_beg, - :tFLOAT, 10000000000.0, :expr_end) + :tUMINUS_NUM, "-", EXPR_BEG, + :tFLOAT, 10000000000.0, EXPR_NUM) end def test_yylex_float_e_neg_minus assert_lex3("-1e-10", nil, - :tUMINUS_NUM, "-", :expr_beg, - :tFLOAT, 1.0e-10, :expr_end) + :tUMINUS_NUM, "-", EXPR_BEG, + :tFLOAT, 1.0e-10, EXPR_NUM) end def test_yylex_float_e_neg_plus assert_lex3("-1e+10", nil, - :tUMINUS_NUM, "-", :expr_beg, - :tFLOAT, 10000000000.0, :expr_end) + :tUMINUS_NUM, "-", EXPR_BEG, + :tFLOAT, 10000000000.0, EXPR_NUM) end def test_yylex_float_e_plus - assert_lex3("1e+10", nil, :tFLOAT, 10000000000.0, :expr_end) + assert_lex3("1e+10", nil, :tFLOAT, 10000000000.0, EXPR_NUM) end def test_yylex_float_e_zero - assert_lex3("0e0", nil, :tFLOAT, 0.0, :expr_end) + assert_lex3("0e0", nil, :tFLOAT, 0.0, EXPR_NUM) + end + + def test_yylex_float_if_modifier + assert_lex3("1e2if", + nil, + :tFLOAT, 100, EXPR_NUM, + :kIF_MOD, "if", EXPR_PAR) end def test_yylex_float_neg assert_lex3("-1.0", nil, - :tUMINUS_NUM, "-", :expr_beg, - :tFLOAT, 1.0, :expr_end) + :tUMINUS_NUM, "-", EXPR_BEG, + :tFLOAT, 1.0, EXPR_NUM) end def test_yylex_ge assert_lex3("a >= 2", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tGEQ, ">=", :expr_beg, - :tINTEGER, 2, :expr_end) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tGEQ, ">=", EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) end def test_yylex_global - assert_lex3("$blah", nil, :tGVAR, "$blah", :expr_end) + assert_lex3("$blah", nil, :tGVAR, "$blah", EXPR_END) end def test_yylex_global_backref - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME - assert_lex3("$`", nil, :tGVAR, "$`", :expr_end) + assert_lex3("$`", nil, :tGVAR, "$`", EXPR_END) end def test_yylex_global_dash_nothing - assert_lex3("$- ", nil, :tGVAR, "$-", :expr_end) + assert_lex3("$- ", nil, :tGVAR, "$-", EXPR_END) end def test_yylex_global_dash_something - assert_lex3("$-x", nil, :tGVAR, "$-x", :expr_end) + assert_lex3("$-x", nil, :tGVAR, "$-x", EXPR_END) end def test_yylex_global_number - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME - assert_lex3("$1", nil, :tGVAR, "$1", :expr_end) + assert_lex3("$1", nil, :tGVAR, "$1", EXPR_END) end def test_yylex_global_number_big - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME + + assert_lex3("$1234", nil, :tGVAR, "$1234", EXPR_END) + end - assert_lex3("$1234", nil, :tGVAR, "$1234", :expr_end) + def test_yylex_global_I_have_no_words + assert_lex3("$x\xE2\x80\x8B = 42", # zero width space?!?!? + nil, + :tGVAR, "$x\xE2\x80\x8B", EXPR_END, + :tEQL, "=", EXPR_BEG, + :tINTEGER, 42, EXPR_NUM) end def test_yylex_global_other assert_lex3("[$~, $*, $$, $?, $!, $@, $/, $\\, $;, $,, $., $=, $:, $<, $>, $\"]", nil, - :tLBRACK, "[", :expr_beg, - :tGVAR, "$~", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$*", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$$", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$?", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$!", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$@", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$/", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$\\", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$;", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$,", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$.", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$=", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$:", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$<", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$>", :expr_end, :tCOMMA, ",", :expr_beg, - :tGVAR, "$\"", :expr_end, - :tRBRACK, "]", :expr_endarg) + :tLBRACK, "[", EXPR_PAR, + :tGVAR, "$~", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$*", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$$", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$?", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$!", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$@", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$/", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$\\", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$;", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$,", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$.", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$=", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$:", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$<", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$>", EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tGVAR, "$\"", EXPR_END, + :tRBRACK, "]", EXPR_END) end def test_yylex_global_underscore - assert_lex3("$_", nil, :tGVAR, "$_", :expr_end) + assert_lex3("$_", nil, :tGVAR, "$_", EXPR_END) end def test_yylex_global_wierd - assert_lex3("$__blah", nil, :tGVAR, "$__blah", :expr_end) + assert_lex3("$__blah", nil, :tGVAR, "$__blah", EXPR_END) end def test_yylex_global_zero - assert_lex3("$0", nil, :tGVAR, "$0", :expr_end) + assert_lex3("$0", nil, :tGVAR, "$0", EXPR_END) end def test_yylex_gt assert_lex3("a > 2", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tGT, ">", :expr_beg, - :tINTEGER, 2, :expr_end) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tGT, ">", EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) end - def test_yylex_heredoc_backtick - assert_lex3("a = <<`EOF`\n blah blah\nEOF\n\n", - nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tEQL, "=", :expr_beg, - :tXSTRING_BEG, "`", :expr_beg, - :tSTRING_CONTENT, " blah blah\n", :expr_beg, - :tSTRING_END, "EOF", :expr_end, - :tNL, nil, :expr_beg) + def test_yylex_hash_colon + assert_lex("{a:1}", + s(:hash, s(:lit, :a), s(:lit, 1)), + + :tLBRACE, "{", EXPR_PAR, 0, 1, + :tLABEL, "a", EXPR_LAB, 0, 1, + :tINTEGER, 1, EXPR_NUM, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0) end - def test_yylex_heredoc_double - assert_lex3("a = <<\"EOF\"\n blah blah\nEOF\n\n", - nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tEQL, "=", :expr_beg, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, " blah blah\n", :expr_beg, - :tSTRING_END, "EOF", :expr_end, - :tNL, nil, :expr_beg) + def test_yylex_hash_colon_double_quoted_symbol + assert_lex('{"abc": :b}', + s(:hash, s(:lit, :abc), s(:lit, :b)), + + :tLBRACE, "{", EXPR_PAR, 0, 1, + :tLABEL, "abc", EXPR_LAB, 0, 1, + :tSYMBOL, "b", EXPR_LIT, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0) end - def test_yylex_heredoc_double_dash - assert_lex3("a = <<-\"EOF\"\n blah blah\n EOF\n\n", - nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tEQL, "=", :expr_beg, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, " blah blah\n", :expr_beg, - :tSTRING_END, "EOF", :expr_end, - :tNL, nil, :expr_beg) + def test_yylex_hash_colon_double_quoted_symbol_22 + setup_lexer_class RubyParser::V22 + + assert_lex('{"abc": :b}', + s(:hash, s(:lit, :abc), s(:lit, :b)), + + :tLBRACE, "{", EXPR_PAR, 0, 1, + :tLABEL, "abc", EXPR_LAB, 0, 1, + :tSYMBOL, "b", EXPR_LIT, 0, 1, + :tRCURLY, "}", EXPR_ENDARG, 0, 0) end - def test_yylex_heredoc_double_squiggly - setup_lexer_class Ruby23Parser + def test_yylex_hash_colon_double_quoted_with_escapes + assert_lex3("{\"s\\tr\\i\\ng\\\\foo\\'bar\":1}", + nil, - assert_lex3("a = <<~\"EOF\"\n blah blah\n EOF\n\n", - nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tEQL, "=", :expr_beg, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "blah blah\n", :expr_beg, - :tSTRING_END, "EOF", :expr_end, - :tNL, nil, :expr_beg) + :tLBRACE, "{", EXPR_PAR, + :tLABEL, "s\tr\i\ng\\foo'bar", EXPR_LAB, + :tINTEGER, 1, EXPR_NUM, + :tRCURLY, "}", EXPR_END) end - # mri handles tabs in a pretty specific way: - # https://github.com/ruby/ruby/blob/trunk/parse.y#L5925 - def test_yylex_heredoc_double_squiggly_with_tab_indentation_remaining - setup_lexer_class Ruby23Parser + def test_yylex_hash_colon_quoted_22 + setup_lexer_class RubyParser::V22 + + assert_lex("{'a':1}", + s(:hash, s(:lit, :a), s(:lit, 1)), + + :tLBRACE, "{", EXPR_PAR, 0, 1, + :tLABEL, "a", EXPR_LAB, 0, 1, + :tINTEGER, 1, EXPR_NUM, 0, 1, + :tRCURLY, "}", EXPR_ENDARG, 0, 0) + end + + def test_yylex_hash_colon_quoted_symbol + assert_lex("{'abc': :b}", + s(:hash, s(:lit, :abc), s(:lit, :b)), - assert_lex3("a = <<~\"EOF\"\n blah blah\n \tblah blah\n EOF\n\n", + :tLBRACE, "{", EXPR_PAR, 0, 1, + :tLABEL, "abc", EXPR_LAB, 0, 1, + :tSYMBOL, "b", EXPR_LIT, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0) + end + + def test_yylex_hash_colon_quoted_symbol_22 + setup_lexer_class RubyParser::V22 + + assert_lex("{'abc': :b}", + s(:hash, s(:lit, :abc), s(:lit, :b)), + + :tLBRACE, "{", EXPR_PAR, 0, 1, + :tLABEL, "abc", EXPR_LAB, 0, 1, + :tSYMBOL, "b", EXPR_LIT, 0, 1, + :tRCURLY, "}", EXPR_ENDARG, 0, 0) + end + + def test_yylex_hash_colon_quoted_with_escapes + assert_lex3("{'s\\tr\\i\\ng\\\\foo\\'bar':1}", + nil, + + :tLBRACE, "{", EXPR_PAR, + :tLABEL, "s\\tr\\i\\ng\\foo'bar", EXPR_LAB, + :tINTEGER, 1, EXPR_NUM, + :tRCURLY, "}", EXPR_END) + end + + def test_yylex_heredoc_backtick + assert_lex3("a = <<`EOF`\n blah blah\nEOF\n\n", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tEQL, "=", :expr_beg, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "blah blah\n\tblah blah\n", :expr_beg, - :tSTRING_END, "EOF", :expr_end, - :tNL, nil, :expr_beg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tEQL, "=", EXPR_BEG, + :tXSTRING_BEG, "`", EXPR_BEG, + :tSTRING_CONTENT, " blah blah\n", EXPR_BEG, + :tSTRING_END, "EOF", EXPR_LIT, + :tNL, nil, EXPR_BEG) end - def test_yylex_heredoc_double_squiggly_with_tab_indentation_removed - setup_lexer_class Ruby23Parser + def test_yylex_heredoc_double + assert_lex3("a = <<\"EOF\"\n blah blah\nEOF\n\n", + nil, + :tIDENTIFIER, "a", EXPR_CMDARG, + :tEQL, "=", EXPR_BEG, + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, " blah blah\n", EXPR_BEG, + :tSTRING_END, "EOF", EXPR_LIT, + :tNL, nil, EXPR_BEG) + end - assert_lex3("a = <<~\"EOF\"\n blah blah\n\t blah blah\n EOF\n\n", + def test_yylex_heredoc_double_dash + assert_lex3("a = <<-\"EOF\"\n blah blah\n EOF\n\n", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tEQL, "=", :expr_beg, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "blah blah\n blah blah\n", :expr_beg, - :tSTRING_END, "EOF", :expr_end, - :tNL, nil, :expr_beg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tEQL, "=", EXPR_BEG, + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, " blah blah\n", EXPR_BEG, + :tSTRING_END, "EOF", EXPR_LIT, + :tNL, nil, EXPR_BEG) end def test_yylex_heredoc_double_eos @@ -1209,41 +1110,56 @@ end def test_yylex_heredoc_double_interp - assert_lex3("a = <<\"EOF\"\n#x a \#@a b \#$b c \#{3} \nEOF\n\n", + assert_lex3("a = <<\"EOF\"\n#x a \#@a b \#$b c \#@@d \#{3} \nEOF\n\n", + nil, + :tIDENTIFIER, "a", EXPR_CMDARG, + :tEQL, "=", EXPR_BEG, + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, "#x a ", EXPR_BEG, + :tSTRING_DVAR, "#", EXPR_BEG, + :tSTRING_CONTENT, "@a b ", EXPR_BEG, # HUH? + :tSTRING_DVAR, "#", EXPR_BEG, + :tSTRING_CONTENT, "$b c ", EXPR_BEG, # HUH? + :tSTRING_DVAR, "#", EXPR_BEG, + :tSTRING_CONTENT, "@@d ", EXPR_BEG, # HUH? + :tSTRING_DBEG, "\#{", EXPR_BEG, + :tSTRING_CONTENT, "3} \n", EXPR_BEG, + :tSTRING_END, "EOF", EXPR_LIT, + :tNL, nil, EXPR_BEG) + end + + def test_yylex_heredoc_double_squiggly + setup_lexer_class Ruby23Parser + + assert_lex3("a = <<~\"EOF\"\n blah blah\n EOF\n\n", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tEQL, "=", :expr_beg, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "#x a ", :expr_beg, - :tSTRING_DVAR, "\#@", :expr_beg, - :tSTRING_CONTENT, "@a b ", :expr_beg, # HUH? - :tSTRING_DVAR, "\#$", :expr_beg, - :tSTRING_CONTENT, "$b c ", :expr_beg, # HUH? - :tSTRING_DBEG, "\#{", :expr_beg, - :tSTRING_CONTENT, "3} \n", :expr_beg, # HUH? - :tSTRING_END, "EOF", :expr_end, - :tNL, nil, :expr_beg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tEQL, "=", EXPR_BEG, + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, " blah blah\n", EXPR_BEG, + :tSTRING_END, "EOF", EXPR_LIT, + :tNL, nil, EXPR_BEG) end def test_yylex_heredoc_empty assert_lex3("<<\"\"\n\#{x}\nblah2\n\n\n", nil, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_DBEG, "\#{", :expr_beg, - :tSTRING_CONTENT, "x}\nblah2\n", :expr_beg, - :tSTRING_END, "", :expr_end, - :tNL, nil, :expr_beg) + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_DBEG, "\#{", EXPR_BEG, + :tSTRING_CONTENT, "x}\nblah2\n", EXPR_BEG, + :tSTRING_END, "", EXPR_LIT, + :tNL, nil, EXPR_BEG) end def test_yylex_heredoc_none assert_lex3("a = <", :tCMP end - def test_yylex_identifier_def__18 - setup_lexer_class RubyParser::V18 - - assert_lex_fname "identifier", :tIDENTIFIER, :expr_end - end - - def test_yylex_identifier_def__1920 - setup_lexer_class RubyParser::V19 + def test_yylex_identifier_def__20 + setup_lexer_class RubyParser::V20 - assert_lex_fname "identifier", :tIDENTIFIER, :expr_endfn + assert_lex_fname "identifier", :tIDENTIFIER, EXPR_ENDFN end def test_yylex_identifier_eh - assert_lex3("identifier?", nil, :tFID, "identifier?", :expr_cmdarg) - end - - def test_yylex_identifier_equals_arrow - assert_lex3(":blah==>", - nil, - :tSYMBOL, "blah=", :expr_end, - :tASSOC, "=>", :expr_beg) + assert_lex3("identifier?", nil, :tFID, "identifier?", EXPR_CMDARG) end def test_yylex_identifier_equals3 assert_lex3(":a===b", nil, - :tSYMBOL, "a", :expr_end, - :tEQQ, "===", :expr_beg, - :tIDENTIFIER, "b", :expr_arg) + :tSYMBOL, "a", EXPR_LIT, + :tEQQ, "===", EXPR_BEG, + :tIDENTIFIER, "b", EXPR_ARG) end - def test_yylex_identifier_equals_equals_arrow - assert_lex3(":a==>b", + def test_yylex_identifier_equals_arrow + assert_lex3(":blah==>", nil, - :tSYMBOL, "a=", :expr_end, - :tASSOC, "=>", :expr_beg, - :tIDENTIFIER, "b", :expr_arg) + :tSYMBOL, "blah=", EXPR_LIT, + :tASSOC, "=>", EXPR_BEG) end def test_yylex_identifier_equals_caret assert_lex_fname "^", :tCARET end - def test_yylex_identifier_equals_def__18 - setup_lexer_class RubyParser::V18 - - assert_lex_fname "identifier=", :tIDENTIFIER, :expr_end + def test_yylex_identifier_equals_def2 + assert_lex_fname "==", :tEQ end - def test_yylex_identifier_equals_def__1920 - setup_lexer_class RubyParser::V19 + def test_yylex_identifier_equals_def__20 + setup_lexer_class RubyParser::V20 - assert_lex_fname "identifier=", :tIDENTIFIER, :expr_endfn + assert_lex_fname "identifier=", :tIDENTIFIER, EXPR_ENDFN end - def test_yylex_identifier_equals_def2 - assert_lex_fname "==", :tEQ + def test_yylex_identifier_equals_equals_arrow + assert_lex3(":a==>b", + nil, + :tSYMBOL, "a=", EXPR_LIT, + :tASSOC, "=>", EXPR_BEG, + :tIDENTIFIER, "b", EXPR_ARG) end def test_yylex_identifier_equals_expr - self.lex_state = :expr_dot + self.lex_state = EXPR_DOT assert_lex3("y = arg", nil, - :tIDENTIFIER, "y", :expr_cmdarg, - :tEQL, "=", :expr_beg, - :tIDENTIFIER, "arg", :expr_arg) + :tIDENTIFIER, "y", EXPR_CMDARG, + :tEQL, "=", EXPR_BEG, + :tIDENTIFIER, "arg", EXPR_ARG) end def test_yylex_identifier_equals_or @@ -1433,12 +1337,12 @@ end def test_yylex_identifier_equals_tilde - self.lex_state = :expr_fname # can only set via parser's defs + self.lex_state = EXPR_FNAME # can only set via parser's defs assert_lex3("identifier=~", nil, - :tIDENTIFIER, "identifier", :expr_endfn, - :tMATCH, "=~", :expr_beg) + :tIDENTIFIER, "identifier", EXPR_ENDFN, + :tMATCH, "=~", EXPR_BEG) end def test_yylex_identifier_gt @@ -1466,11 +1370,11 @@ end def test_yylex_integer - assert_lex3("42", nil, :tINTEGER, 42, :expr_end) + assert_lex3("42", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_integer_bin - assert_lex3("0b101010", nil, :tINTEGER, 42, :expr_end) + assert_lex3("0b101010", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_integer_bin_bad_none @@ -1482,7 +1386,7 @@ end def test_yylex_integer_dec - assert_lex3("42", nil, :tINTEGER, 42, :expr_end) + assert_lex3("42", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_integer_dec_bad_underscores @@ -1490,7 +1394,7 @@ end def test_yylex_integer_dec_d - assert_lex3("0d42", nil, :tINTEGER, 42, :expr_end) + assert_lex3("0d42", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_integer_dec_d_bad_none @@ -1501,51 +1405,43 @@ refute_lex "0d42__24" end - def test_yylex_integer_if_modifier - assert_lex3("123if", - nil, - :tINTEGER, 123, :expr_end, - :kIF_MOD, "if", :expr_beg) + def test_yylex_integer_hex + assert_lex3 "0x2a", nil, :tINTEGER, 42, EXPR_NUM end - def test_yylex_question_eh_a__18 - setup_lexer_class RubyParser::V18 - - assert_lex3("?a", nil, :tINTEGER, 97, :expr_end) + def test_yylex_integer_hex_bad_none + refute_lex "0x " end - def test_yylex_question_eh_a__19 - setup_lexer_class RubyParser::V19 - - assert_lex3("?a", nil, :tSTRING, "a", :expr_end) + def test_yylex_integer_hex_bad_underscores + refute_lex "0xab__cd" end - def test_yylex_question_eh_escape_M_escape_C__18 - setup_lexer_class RubyParser::V18 - - assert_lex3("?\\M-\\C-a", nil, :tINTEGER, 129, :expr_end) + def test_yylex_integer_if_modifier + assert_lex3("123if", + nil, + :tINTEGER, 123, EXPR_NUM, + :kIF_MOD, "if", EXPR_PAR) end - def test_yylex_question_eh_escape_M_escape_C__19 - setup_lexer_class RubyParser::V19 - - assert_lex3("?\\M-\\C-a", nil, :tSTRING, "\M-\C-a", :expr_end) + def test_yylex_integer_oct + assert_lex3("052", nil, :tINTEGER, 42, EXPR_NUM) end - def test_yylex_integer_hex - assert_lex3 "0x2a", nil, :tINTEGER, 42, :expr_end + def test_yylex_integer_oct_O + assert_lex3 "0O52", nil, :tINTEGER, 42, EXPR_NUM end - def test_yylex_integer_hex_bad_none - refute_lex "0x " + def test_yylex_integer_oct_O_bad_range + refute_lex "0O8" end - def test_yylex_integer_hex_bad_underscores - refute_lex "0xab__cd" + def test_yylex_integer_oct_O_bad_underscores + refute_lex "0O1__23" end - def test_yylex_integer_oct - assert_lex3("052", nil, :tINTEGER, 42, :expr_end) + def test_yylex_integer_oct_O_not_bad_none + assert_lex3 "0O ", nil, :tINTEGER, 0, EXPR_NUM end def test_yylex_integer_oct_bad_range @@ -1560,24 +1456,8 @@ refute_lex "01__23" end - def test_yylex_integer_oct_O - assert_lex3 "0O52", nil, :tINTEGER, 42, :expr_end - end - - def test_yylex_integer_oct_O_bad_range - refute_lex "0O8" - end - - def test_yylex_integer_oct_O_bad_underscores - refute_lex "0O1__23" - end - - def test_yylex_integer_oct_O_not_bad_none - assert_lex3 "0O ", nil, :tINTEGER, 0, :expr_end - end - def test_yylex_integer_oct_o - assert_lex3 "0o52", nil, :tINTEGER, 42, :expr_end + assert_lex3 "0o52", nil, :tINTEGER, 42, EXPR_NUM end def test_yylex_integer_oct_o_bad_range @@ -1589,19 +1469,19 @@ end def test_yylex_integer_oct_o_not_bad_none - assert_lex3 "0o ", nil, :tINTEGER, 0, :expr_end + assert_lex3 "0o ", nil, :tINTEGER, 0, EXPR_NUM end def test_yylex_integer_trailing assert_lex3("1.to_s", nil, - :tINTEGER, 1, :expr_end, - :tDOT, ".", :expr_dot, - :tIDENTIFIER, "to_s", :expr_arg) + :tINTEGER, 1, EXPR_NUM, + :tDOT, ".", EXPR_DOT, + :tIDENTIFIER, "to_s", EXPR_ARG) end def test_yylex_integer_underscore - assert_lex3("4_2", nil, :tINTEGER, 42, :expr_end) + assert_lex3("4_2", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_integer_underscore_bad @@ -1609,11 +1489,62 @@ end def test_yylex_integer_zero - assert_lex3 "0", nil, :tINTEGER, 0, :expr_end + assert_lex3 "0", nil, :tINTEGER, 0, EXPR_NUM + end + + def test_yylex_is_your_spacebar_broken? + assert_lex3(":a!=:b", + nil, + :tSYMBOL, "a", EXPR_LIT, + :tNEQ, "!=", EXPR_BEG, + :tSYMBOL, "b", EXPR_LIT) + end + + def test_yylex_iter_array_curly + # this will lex, but doesn't parse... don't freak out. + assert_lex("f :a, [:b] { |c, d| }", # yes, this is bad code + nil, + + :tIDENTIFIER, "f", EXPR_CMDARG, 0, 0, + :tSYMBOL, "a", EXPR_LIT, 0, 0, + :tCOMMA, ",", EXPR_PAR, 0, 0, + :tLBRACK, "[", EXPR_PAR, 1, 0, + :tSYMBOL, "b", EXPR_LIT, 1, 0, + :tRBRACK, "]", EXPR_END, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tPIPE, "|", EXPR_PAR, 0, 1, + :tIDENTIFIER, "c", EXPR_ARG, 0, 1, + :tCOMMA, ",", EXPR_PAR, 0, 1, + :tIDENTIFIER, "d", EXPR_ARG, 0, 1, + :tPIPE, "|", EXPR_PAR, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0) + end + + def test_yylex_iter_array_curly__24 + setup_lexer_class RubyParser::V24 + + assert_lex("f :a, [:b] { |c, d| }", # yes, this is bad code + s(:iter, + s(:call, nil, :f, s(:lit, :a), s(:array, s(:lit, :b))), + s(:args, :c, :d)), + + :tIDENTIFIER, "f", EXPR_CMDARG, 0, 0, + :tSYMBOL, "a", EXPR_LIT, 0, 0, + :tCOMMA, ",", EXPR_PAR, 0, 0, + :tLBRACK, "[", EXPR_PAR, 1, 0, + :tSYMBOL, "b", EXPR_LIT, 1, 0, + :tRBRACK, "]", EXPR_ENDARG, 0, 0, + :tLBRACE_ARG, "{", EXPR_BEG, 0, 1, + :tPIPE, "|", EXPR_PAR, 0, 1, + :tIDENTIFIER, "c", EXPR_ARG, 0, 1, + :tCOMMA, ",", EXPR_PAR, 0, 1, + :tIDENTIFIER, "d", EXPR_ARG, 0, 1, + :tPIPE, "|", EXPR_PAR, 0, 1, + :tRCURLY, "}", EXPR_ENDARG, 0, 0) end def test_yylex_ivar - assert_lex3("@blah", nil, :tIVAR, "@blah", :expr_end) + assert_lex3("@blah", nil, :tIVAR, "@blah", EXPR_END) end def test_yylex_ivar_bad @@ -1621,338 +1552,609 @@ end def test_yylex_ivar_bad_0_length - refute_lex "1+@\n", :tINTEGER, 1, :tPLUS, "+", :expr_end + refute_lex "1+@\n", :tINTEGER, 1, :tPLUS, "+", EXPR_NUM end def test_yylex_keyword_expr - self.lex_state = :expr_endarg + self.lex_state = EXPR_ENDARG + + assert_lex3("if", nil, :kIF_MOD, "if", EXPR_PAR) + end + + def test_yylex_label + assert_lex3("{a:", + nil, + :tLBRACE, "{", EXPR_PAR, + :tLABEL, "a", EXPR_LAB) + end + + def test_yylex_label_in_params + assert_lex3("foo(a:", + nil, + :tIDENTIFIER, "foo", EXPR_CMDARG, + :tLPAREN2, "(", EXPR_PAR, + :tLABEL, "a", EXPR_LAB) + end + + def test_yylex_lambda_args + assert_lex("-> (a) { }", + s(:iter, s(:lambda), + s(:args, :a)), + + :tLAMBDA, nil, EXPR_ENDFN, 0, 0, + :tLPAREN2, "(", EXPR_PAR, 1, 0, + :tIDENTIFIER, "a", EXPR_ARG, 1, 0, + :tRPAREN, ")", EXPR_ENDFN, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0) + end + + def test_yylex_lambda_args__24 + setup_lexer_class RubyParser::V24 + + assert_lex("-> (a) { }", + s(:iter, s(:lambda), + s(:args, :a)), + + :tLAMBDA, nil, EXPR_ENDFN, 0, 0, + :tLPAREN2, "(", EXPR_PAR, 1, 0, + :tIDENTIFIER, "a", EXPR_ARG, 1, 0, + :tRPAREN, ")", EXPR_ENDFN, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tRCURLY, "}", EXPR_ENDARG, 0, 0) + end + + def test_yylex_lambda_args_opt + assert_lex("-> (a=nil) { }", + s(:iter, s(:lambda), + s(:args, s(:lasgn, :a, s(:nil)))), + + :tLAMBDA, nil, EXPR_ENDFN, 0, 0, + :tLPAREN2, "(", EXPR_PAR, 1, 0, + :tIDENTIFIER, "a", EXPR_ARG, 1, 0, + :tEQL, "=", EXPR_BEG, 1, 0, + :kNIL, "nil", EXPR_END, 1, 0, + :tRPAREN, ")", EXPR_ENDFN, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0) + end + + def test_yylex_lambda_args_opt__24 + setup_lexer_class RubyParser::V24 + + assert_lex("-> (a=nil) { }", + s(:iter, s(:lambda), + s(:args, s(:lasgn, :a, s(:nil)))), + + :tLAMBDA, nil, EXPR_ENDFN, 0, 0, + :tLPAREN2, "(", EXPR_PAR, 1, 0, + :tIDENTIFIER, "a", EXPR_ARG, 1, 0, + :tEQL, "=", EXPR_BEG, 1, 0, + :kNIL, "nil", EXPR_END, 1, 0, + :tRPAREN, ")", EXPR_ENDFN, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tRCURLY, "}", EXPR_ENDARG, 0, 0) + end + + def test_yylex_lambda_as_args_with_block + assert_lex3("a -> do end do end", + nil, + :tIDENTIFIER, "a", EXPR_CMDARG, + :tLAMBDA, nil, EXPR_ENDFN, + :kDO, "do", EXPR_BEG, + :kEND, "end", EXPR_END, + :kDO, "do", EXPR_BEG, + :kEND, "end", EXPR_END) + end + + def test_yylex_lambda_hash + assert_lex("-> (a={}) { }", + s(:iter, s(:lambda), + s(:args, s(:lasgn, :a, s(:hash)))), + + :tLAMBDA, nil, EXPR_ENDFN, 0, 0, + :tLPAREN2, "(", EXPR_PAR, 1, 0, + :tIDENTIFIER, "a", EXPR_ARG, 1, 0, + :tEQL, "=", EXPR_BEG, 1, 0, + :tLBRACE, "{", EXPR_PAR, 1, 1, + :tRCURLY, "}", EXPR_END, 1, 0, + :tRPAREN, ")", EXPR_ENDFN, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tRCURLY, "}", EXPR_END, 0, 0) + end - assert_lex3("if", nil, :kIF_MOD, "if", :expr_beg) + def test_yylex_lambda_hash__24 + setup_lexer_class RubyParser::V24 + + assert_lex("-> (a={}) { }", + s(:iter, s(:lambda), + s(:args, s(:lasgn, :a, s(:hash)))), + + :tLAMBDA, nil, EXPR_ENDFN, 0, 0, + :tLPAREN2, "(", EXPR_PAR, 1, 0, + :tIDENTIFIER, "a", EXPR_ARG, 1, 0, + :tEQL, "=", EXPR_BEG, 1, 0, + :tLBRACE, "{", EXPR_PAR, 1, 1, + :tRCURLY, "}", EXPR_ENDARG, 1, 0, + :tRPAREN, ")", EXPR_ENDFN, 0, 0, + :tLCURLY, "{", EXPR_PAR, 0, 1, + :tRCURLY, "}", EXPR_ENDARG, 0, 0) + end + + def test_yylex_lasgn_call_same_name + assert_lex("a = b.c :d => 1", + s(:lasgn, :a, + s(:call, s(:call, nil, :b), :c, + s(:hash, s(:lit, :d), s(:lit, 1)))), + + :tIDENTIFIER, "a", EXPR_CMDARG, 0, 0, + :tEQL, "=", EXPR_BEG, 0, 0, + :tIDENTIFIER, "b", EXPR_ARG, 0, 0, + :tDOT, ".", EXPR_DOT, 0, 0, + :tIDENTIFIER, "c", EXPR_ARG, 0, 0, # different + :tSYMBOL, "d", EXPR_LIT, 0, 0, + :tASSOC, "=>", EXPR_BEG, 0, 0, + :tINTEGER, 1, EXPR_NUM, 0, 0) + + assert_lex("a = b.a :d => 1", + s(:lasgn, :a, + s(:call, s(:call, nil, :b), :a, + s(:hash, s(:lit, :d), s(:lit, 1)))), + + :tIDENTIFIER, "a", EXPR_CMDARG, 0, 0, + :tEQL, "=", EXPR_BEG, 0, 0, + :tIDENTIFIER, "b", EXPR_ARG, 0, 0, + :tDOT, ".", EXPR_DOT, 0, 0, + :tIDENTIFIER, "a", EXPR_ARG, 0, 0, # same as lvar + :tSYMBOL, "d", EXPR_LIT, 0, 0, + :tASSOC, "=>", EXPR_BEG, 0, 0, + :tINTEGER, 1, EXPR_NUM, 0, 0) end def test_yylex_lt - assert_lex3("<", nil, :tLT, "<", :expr_beg) + assert_lex3("<", nil, :tLT, "<", EXPR_BEG) end def test_yylex_lt2 assert_lex3("a << b", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tLSHFT, "<<", :expr_beg, - :tIDENTIFIER, "b", :expr_arg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tLSHFT, "<<", EXPR_BEG, + :tIDENTIFIER, "b", EXPR_ARG) end def test_yylex_lt2_equals assert_lex3("a <<= b", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tOP_ASGN, "<<", :expr_beg, - :tIDENTIFIER, "b", :expr_arg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tOP_ASGN, "<<", EXPR_BEG, + :tIDENTIFIER, "b", EXPR_ARG) end def test_yylex_lt_equals - assert_lex3("<=", nil, :tLEQ, "<=", :expr_beg) + assert_lex3("<=", nil, :tLEQ, "<=", EXPR_BEG) + end + + def test_yylex_method_parens_chevron + assert_lex("a()<<1", + s(:call, s(:call, nil, :a), :<<, s(:lit, 1)), + :tIDENTIFIER, "a", EXPR_CMDARG, 0, 0, + :tLPAREN2, "(", EXPR_PAR, 1, 0, + :tRPAREN, ")", EXPR_ENDFN, 0, 0, + :tLSHFT, "<<", EXPR_BEG, 0, 0, + :tINTEGER, 1, EXPR_NUM, 0, 0) end def test_yylex_minus assert_lex3("1 - 2", nil, - :tINTEGER, 1, :expr_end, - :tMINUS, "-", :expr_beg, - :tINTEGER, 2, :expr_end) + :tINTEGER, 1, EXPR_NUM, + :tMINUS, "-", EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) end def test_yylex_minus_equals - assert_lex3("-=", nil, :tOP_ASGN, "-", :expr_beg) + assert_lex3("-=", nil, :tOP_ASGN, "-", EXPR_BEG) end def test_yylex_minus_method - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME - assert_lex3("-", nil, :tMINUS, "-", :expr_arg) + assert_lex3("-", nil, :tMINUS, "-", EXPR_ARG) end def test_yylex_minus_unary_method - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME - assert_lex3("-@", nil, :tUMINUS, "-@", :expr_arg) + assert_lex3("-@", nil, :tUMINUS, "-@", EXPR_ARG) end def test_yylex_minus_unary_number assert_lex3("-42", nil, - :tUMINUS_NUM, "-", :expr_beg, - :tINTEGER, 42, :expr_end) + :tUMINUS_NUM, "-", EXPR_BEG, + :tINTEGER, 42, EXPR_NUM) + end + + def test_yylex_not_at_defn + assert_lex("def +@; end", + s(:defn, :+@, s(:args), s(:nil)), + + :kDEF, "def", EXPR_FNAME, 0, 0, + :tUPLUS, "+@", EXPR_ARG, 0, 0, + :tSEMI, ";", EXPR_BEG, 0, 0, + :kEND, "end", EXPR_END, 0, 0) + + assert_lex("def !@; end", + s(:defn, :"!@", s(:args), s(:nil)), + + :kDEF, "def", EXPR_FNAME, 0, 0, + :tUBANG, "!@", EXPR_ARG, 0, 0, + :tSEMI, ";", EXPR_BEG, 0, 0, + :kEND, "end", EXPR_END, 0, 0) + end + + def test_yylex_not_at_ivar + assert_lex("!@ivar", + s(:call, s(:ivar, :@ivar), :"!"), + + :tBANG, "!", EXPR_BEG, 0, 0, + :tIVAR, "@ivar", EXPR_END, 0, 0) + end + + def test_yylex_not_unary_method + self.lex_state = EXPR_FNAME + + assert_lex3("!@", nil, :tUBANG, "!@", EXPR_ARG) end def test_yylex_nth_ref assert_lex3("[$1, $2, $3, $4, $5, $6, $7, $8, $9]", nil, - :tLBRACK, "[", :expr_beg, - :tNTH_REF, 1, :expr_end, :tCOMMA, ",", :expr_beg, - :tNTH_REF, 2, :expr_end, :tCOMMA, ",", :expr_beg, - :tNTH_REF, 3, :expr_end, :tCOMMA, ",", :expr_beg, - :tNTH_REF, 4, :expr_end, :tCOMMA, ",", :expr_beg, - :tNTH_REF, 5, :expr_end, :tCOMMA, ",", :expr_beg, - :tNTH_REF, 6, :expr_end, :tCOMMA, ",", :expr_beg, - :tNTH_REF, 7, :expr_end, :tCOMMA, ",", :expr_beg, - :tNTH_REF, 8, :expr_end, :tCOMMA, ",", :expr_beg, - :tNTH_REF, 9, :expr_end, - :tRBRACK, "]", :expr_endarg) + :tLBRACK, "[", EXPR_PAR, + :tNTH_REF, 1, EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tNTH_REF, 2, EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tNTH_REF, 3, EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tNTH_REF, 4, EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tNTH_REF, 5, EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tNTH_REF, 6, EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tNTH_REF, 7, EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tNTH_REF, 8, EXPR_END, :tCOMMA, ",", EXPR_PAR, + :tNTH_REF, 9, EXPR_END, + :tRBRACK, "]", EXPR_END) end - def test_yylex_open_bracket - assert_lex3("(", nil, :tLPAREN, "(", :expr_beg) + def test_yylex_number_times_ident_times_return_number + assert_lex("1 * b * 3", + s(:call, + s(:call, s(:lit, 1), :*, s(:call, nil, :b)), + :*, s(:lit, 3)), + + :tINTEGER, 1, EXPR_NUM, 0, 0, + :tSTAR2, "*", EXPR_BEG, 0, 0, + :tIDENTIFIER, "b", EXPR_ARG, 0, 0, + :tSTAR2, "*", EXPR_BEG, 0, 0, + :tINTEGER, 3, EXPR_NUM, 0, 0) + + assert_lex("1 * b *\n 3", + s(:call, + s(:call, s(:lit, 1), :*, s(:call, nil, :b)), + :*, s(:lit, 3)), + + :tINTEGER, 1, EXPR_NUM, 0, 0, + :tSTAR2, "*", EXPR_BEG, 0, 0, + :tIDENTIFIER, "b", EXPR_ARG, 0, 0, + :tSTAR2, "*", EXPR_BEG, 0, 0, + :tINTEGER, 3, EXPR_NUM, 0, 0) end - def test_yylex_open_bracket_cmdarg - self.lex_state = :expr_cmdarg + def test_yylex_numbers + assert_lex3 "0b10", nil, :tINTEGER, 2, EXPR_NUM + assert_lex3 "0B10", nil, :tINTEGER, 2, EXPR_NUM + + assert_lex3 "0d10", nil, :tINTEGER, 10, EXPR_NUM + assert_lex3 "0D10", nil, :tINTEGER, 10, EXPR_NUM + + assert_lex3 "0x10", nil, :tINTEGER, 16, EXPR_NUM + assert_lex3 "0X10", nil, :tINTEGER, 16, EXPR_NUM + + assert_lex3 "0o10", nil, :tINTEGER, 8, EXPR_NUM + assert_lex3 "0O10", nil, :tINTEGER, 8, EXPR_NUM + + assert_lex3 "0o", nil, :tINTEGER, 0, EXPR_NUM + assert_lex3 "0O", nil, :tINTEGER, 0, EXPR_NUM + + assert_lex3 "0", nil, :tINTEGER, 0, EXPR_NUM + + refute_lex "0x" + refute_lex "0X" + refute_lex "0b" + refute_lex "0B" + refute_lex "0d" + refute_lex "0D" + + refute_lex "08" + refute_lex "09" + refute_lex "0o8" + refute_lex "0o9" + refute_lex "0O8" + refute_lex "0O9" + + refute_lex "1_e1" + refute_lex "1_.1" + refute_lex "1__1" + end - assert_lex3(" (", nil, :tLPAREN_ARG, "(", :expr_beg) + def test_yylex_open_bracket + assert_lex3("(", nil, :tLPAREN, "(", EXPR_PAR) end - def test_yylex_open_bracket_exprarg__18 - setup_lexer_class RubyParser::V18 - self.lex_state = :expr_arg + def test_yylex_open_bracket_cmdarg + self.lex_state = EXPR_CMDARG - assert_lex3(" (", nil, :tLPAREN2, "(", :expr_beg) + assert_lex3(" (", nil, :tLPAREN_ARG, "(", EXPR_PAR) end - def test_yylex_open_bracket_exprarg__19 - setup_lexer_class RubyParser::V19 - self.lex_state = :expr_arg + def test_yylex_open_bracket_exprarg__20 + setup_lexer_class RubyParser::V20 + self.lex_state = EXPR_ARG - assert_lex3(" (", nil, :tLPAREN_ARG, "(", :expr_beg) + assert_lex3(" (", nil, :tLPAREN_ARG, "(", EXPR_PAR) end def test_yylex_open_curly_bracket - assert_lex3("{", nil, :tLBRACE, "{", :expr_beg) + assert_lex3("{", nil, :tLBRACE, "{", EXPR_PAR) end def test_yylex_open_curly_bracket_arg - self.lex_state = :expr_arg + self.lex_state = EXPR_ARG assert_lex3("m { 3 }", nil, - :tIDENTIFIER, "m", :expr_cmdarg, - :tLCURLY, "{", :expr_beg, - :tINTEGER, 3, :expr_end, - :tRCURLY, "}", :expr_endarg) + :tIDENTIFIER, "m", EXPR_CMDARG, + :tLCURLY, "{", EXPR_PAR, + :tINTEGER, 3, EXPR_NUM, + :tRCURLY, "}", EXPR_END) end def test_yylex_open_curly_bracket_block - self.lex_state = :expr_endarg # seen m(3) + self.lex_state = EXPR_ENDARG # seen m(3) assert_lex3("{ 4 }", nil, - :tLBRACE_ARG, "{", :expr_beg, - :tINTEGER, 4, :expr_end, - :tRCURLY, "}", :expr_endarg) + :tLBRACE_ARG, "{", EXPR_BEG, + :tINTEGER, 4, EXPR_NUM, + :tRCURLY, "}", EXPR_END) end def test_yylex_open_square_bracket_arg - self.lex_state = :expr_arg + self.lex_state = EXPR_ARG assert_lex3("m [ 3 ]", nil, - :tIDENTIFIER, "m", :expr_cmdarg, - :tLBRACK, "[", :expr_beg, - :tINTEGER, 3, :expr_end, - :tRBRACK, "]", :expr_endarg) + :tIDENTIFIER, "m", EXPR_CMDARG, + :tLBRACK, "[", EXPR_PAR, + :tINTEGER, 3, EXPR_NUM, + :tRBRACK, "]", EXPR_END) end def test_yylex_open_square_bracket_ary assert_lex3("[1, 2, 3]", nil, - :tLBRACK, "[", :expr_beg, - :tINTEGER, 1, :expr_end, :tCOMMA, ",", :expr_beg, - :tINTEGER, 2, :expr_end, :tCOMMA, ",", :expr_beg, - :tINTEGER, 3, :expr_end, - :tRBRACK, "]", :expr_endarg) + :tLBRACK, "[", EXPR_PAR, + :tINTEGER, 1, EXPR_NUM, :tCOMMA, ",", EXPR_PAR, + :tINTEGER, 2, EXPR_NUM, :tCOMMA, ",", EXPR_PAR, + :tINTEGER, 3, EXPR_NUM, + :tRBRACK, "]", EXPR_END) end def test_yylex_open_square_bracket_meth assert_lex3("m[3]", nil, - :tIDENTIFIER, "m", :expr_cmdarg, - :tLBRACK2, "[", :expr_beg, - :tINTEGER, 3, :expr_end, - :tRBRACK, "]", :expr_endarg) + :tIDENTIFIER, "m", EXPR_CMDARG, + :tLBRACK2, "[", EXPR_PAR, + :tINTEGER, 3, EXPR_NUM, + :tRBRACK, "]", EXPR_END) end def test_yylex_or - assert_lex3("|", nil, :tPIPE, "|", :expr_beg) + assert_lex3("|", nil, :tPIPE, "|", EXPR_PAR) end def test_yylex_or2 - assert_lex3("||", nil, :tOROP, "||", :expr_beg) + assert_lex3("||", nil, :tOROP, "||", EXPR_BEG) end def test_yylex_or2_equals - assert_lex3("||=", nil, :tOP_ASGN, "||", :expr_beg) + assert_lex3("||=", nil, :tOP_ASGN, "||", EXPR_BEG) end def test_yylex_or_equals - assert_lex3("|=", nil, :tOP_ASGN, "|", :expr_beg) + assert_lex3("|=", nil, :tOP_ASGN, "|", EXPR_BEG) + end + + def test_yylex_paren_string_interpolated_regexp + setup_lexer('%( #{(/abcd/)} )', + s(:dstr, " ", s(:evstr, s(:lit, /abcd/)), s(:str, " "))) + + assert_next_lexeme :tSTRING_BEG, "%)", EXPR_BEG, 0, 0 + assert_next_lexeme :tSTRING_CONTENT, " ", EXPR_BEG, 0, 0 + assert_next_lexeme :tSTRING_DBEG, nil, EXPR_BEG, 0, 0 + + emulate_string_interpolation do + assert_next_lexeme :tLPAREN, "(", EXPR_PAR, 1, 0 + assert_next_lexeme :tREGEXP_BEG, "/", EXPR_PAR, 1, 0 + assert_next_lexeme :tSTRING_CONTENT, "abcd", EXPR_PAR, 1, 0 + assert_next_lexeme :tREGEXP_END, "", EXPR_LIT, 1, 0 + assert_next_lexeme :tRPAREN, ")", EXPR_ENDFN, 0, 0 + end + + assert_next_lexeme :tSTRING_CONTENT, " ", EXPR_BEG, 0, 0 + assert_next_lexeme :tSTRING_END, ")", EXPR_LIT, 0, 0 + + refute_lexeme + end + + def test_yylex_paren_string_parens_interpolated + setup_lexer('%((#{b}#{d}))', + s(:dstr, + "(", + s(:evstr, s(:call, nil, :b)), + s(:evstr, s(:call, nil, :d)), + s(:str, ")"))) + + assert_next_lexeme :tSTRING_BEG, "%)", EXPR_BEG, 0, 0 + assert_next_lexeme :tSTRING_CONTENT, "(", EXPR_BEG, 0, 0 + assert_next_lexeme :tSTRING_DBEG, nil, EXPR_BEG, 0, 0 + + emulate_string_interpolation do + assert_next_lexeme :tIDENTIFIER, "b", EXPR_CMDARG, 0, 0 + end + + assert_next_lexeme :tSTRING_DBEG, nil, EXPR_BEG, 0, 0 + + emulate_string_interpolation do + assert_next_lexeme :tIDENTIFIER, "d", EXPR_CMDARG, 0, 0 + end + + assert_next_lexeme :tSTRING_CONTENT, ")", EXPR_BEG, 0, 0 + assert_next_lexeme :tSTRING_END, ")", EXPR_LIT, 0, 0 + + refute_lexeme + end + + def test_yylex_paren_string_parens_interpolated_regexp + setup_lexer('%((#{(/abcd/)}))', + s(:dstr, "(", s(:evstr, s(:lit, /abcd/)), s(:str, ")"))) + + assert_next_lexeme :tSTRING_BEG, "%)", EXPR_BEG, 0, 0 + assert_next_lexeme :tSTRING_CONTENT, "(", EXPR_BEG, 0, 0 + + assert_next_lexeme :tSTRING_DBEG, nil, EXPR_BEG, 0, 0 + + emulate_string_interpolation do + assert_next_lexeme :tLPAREN, "(", EXPR_PAR, 1, 0 + assert_next_lexeme :tREGEXP_BEG, "/", EXPR_PAR, 1, 0 + assert_next_lexeme :tSTRING_CONTENT, "abcd", EXPR_PAR, 1, 0 + assert_next_lexeme :tREGEXP_END, "", EXPR_LIT, 1, 0 + assert_next_lexeme :tRPAREN, ")", EXPR_ENDFN, 0, 0 + end + + assert_next_lexeme :tSTRING_CONTENT, ")", EXPR_BEG, 0, 0 + assert_next_lexeme :tSTRING_END, ")", EXPR_LIT, 0, 0 + + refute_lexeme end def test_yylex_percent assert_lex3("a % 2", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tPERCENT, "%", :expr_beg, - :tINTEGER, 2, :expr_end) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tPERCENT, "%", EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) end def test_yylex_percent_equals assert_lex3("a %= 2", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tOP_ASGN, "%", :expr_beg, - :tINTEGER, 2, :expr_end) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tOP_ASGN, "%", EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) end def test_yylex_plus assert_lex3("1 + 1", # TODO lex_state? nil, - :tINTEGER, 1, :expr_end, - :tPLUS, "+", :expr_beg, - :tINTEGER, 1, :expr_end) + :tINTEGER, 1, EXPR_NUM, + :tPLUS, "+", EXPR_BEG, + :tINTEGER, 1, EXPR_NUM) end def test_yylex_plus_equals - assert_lex3("+=", nil, :tOP_ASGN, "+", :expr_beg) + assert_lex3("+=", nil, :tOP_ASGN, "+", EXPR_BEG) end def test_yylex_plus_method - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME - assert_lex3("+", nil, :tPLUS, "+", :expr_arg) + assert_lex3("+", nil, :tPLUS, "+", EXPR_ARG) end def test_yylex_plus_unary_method - self.lex_state = :expr_fname - - assert_lex3("+@", nil, :tUPLUS, "+@", :expr_arg) - end - - def test_yylex_not_unary_method - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME - assert_lex3("!@", nil, :tUBANG, "!@", :expr_arg) + assert_lex3("+@", nil, :tUPLUS, "+@", EXPR_ARG) end - def test_yylex_numbers - assert_lex3("0b10", nil, :tINTEGER, 2, :expr_end) - assert_lex3("0B10", nil, :tINTEGER, 2, :expr_end) - - assert_lex3("0d10", nil, :tINTEGER, 10, :expr_end) - assert_lex3("0D10", nil, :tINTEGER, 10, :expr_end) - - assert_lex3("0x10", nil, :tINTEGER, 16, :expr_end) - assert_lex3("0X10", nil, :tINTEGER, 16, :expr_end) - - assert_lex3("0o10", nil, :tINTEGER, 8, :expr_end) - assert_lex3("0O10", nil, :tINTEGER, 8, :expr_end) - - assert_lex3("0o", nil, :tINTEGER, 0, :expr_end) - assert_lex3("0O", nil, :tINTEGER, 0, :expr_end) - - assert_lex3("0", nil, :tINTEGER, 0, :expr_end) - - refute_lex "0x" - refute_lex "0X" - refute_lex "0b" - refute_lex "0B" - refute_lex "0d" - refute_lex "0D" - - refute_lex "08" - refute_lex "09" - refute_lex "0o8" - refute_lex "0o9" - refute_lex "0O8" - refute_lex "0O9" - - refute_lex "1_e1" - refute_lex "1_.1" - refute_lex "1__1" + def test_yylex_plus_unary_number + assert_lex3("+42", nil, :tINTEGER, 42, EXPR_NUM) end - def test_yylex_plus_unary_number - assert_lex3("+42", nil, :tINTEGER, 42, :expr_end) + def test_yylex_question_bad_eos + refute_lex "?" end - def test_yylex_question__18 - setup_lexer_class RubyParser::V18 + def test_yylex_question_eh_a__20 + setup_lexer_class RubyParser::V20 - assert_lex3("?*", nil, :tINTEGER, 42, :expr_end) + assert_lex3("?a", nil, :tSTRING, "a", EXPR_END) end - def test_yylex_question__19 - setup_lexer_class RubyParser::V19 + def test_yylex_question_eh_escape_M_escape_C__20 + setup_lexer_class RubyParser::V20 - assert_lex3("?*", nil, :tSTRING, "*", :expr_end) + assert_lex3("?\\M-\\C-a", nil, :tSTRING, "\M-\C-a", EXPR_END) end - def test_yylex_question_bad_eos - refute_lex "?" + def test_yylex_question_control_escape + assert_lex3('?\C-\]', nil, :tSTRING, ?\C-\], EXPR_END) end def test_yylex_question_ws - assert_lex3("? ", nil, :tEH, "?", :expr_value) - assert_lex3("?\n", nil, :tEH, "?", :expr_value) - assert_lex3("?\t", nil, :tEH, "?", :expr_value) - assert_lex3("?\v", nil, :tEH, "?", :expr_value) - assert_lex3("?\r", nil, :tEH, "?", :expr_value) - assert_lex3("?\f", nil, :tEH, "?", :expr_value) - end - - def test_yylex_question_ws_backslashed__18 - setup_lexer_class RubyParser::V18 - - assert_lex3("?\\ ", nil, :tINTEGER, 32, :expr_end) - assert_lex3("?\\n", nil, :tINTEGER, 10, :expr_end) - assert_lex3("?\\t", nil, :tINTEGER, 9, :expr_end) - assert_lex3("?\\v", nil, :tINTEGER, 11, :expr_end) - assert_lex3("?\\r", nil, :tINTEGER, 13, :expr_end) - assert_lex3("?\\f", nil, :tINTEGER, 12, :expr_end) - end - - def test_yylex_question_ws_backslashed__19 - setup_lexer_class RubyParser::V19 - - assert_lex3("?\\ ", nil, :tSTRING, " ", :expr_end) - assert_lex3("?\\n", nil, :tSTRING, "\n", :expr_end) - assert_lex3("?\\t", nil, :tSTRING, "\t", :expr_end) - assert_lex3("?\\v", nil, :tSTRING, "\v", :expr_end) - assert_lex3("?\\r", nil, :tSTRING, "\r", :expr_end) - assert_lex3("?\\f", nil, :tSTRING, "\f", :expr_end) + assert_lex3("? ", nil, :tEH, "?", EXPR_BEG) + assert_lex3("?\n", nil, :tEH, "?", EXPR_BEG) + assert_lex3("?\t", nil, :tEH, "?", EXPR_BEG) + assert_lex3("?\v", nil, :tEH, "?", EXPR_BEG) + assert_lex3("?\r", nil, :tEH, "?", EXPR_BEG) + assert_lex3("?\f", nil, :tEH, "?", EXPR_BEG) + end + + def test_yylex_question_ws_backslashed__20 + setup_lexer_class RubyParser::V20 + + assert_lex3("?\\ ", nil, :tSTRING, " ", EXPR_END) + assert_lex3("?\\n", nil, :tSTRING, "\n", EXPR_END) + assert_lex3("?\\t", nil, :tSTRING, "\t", EXPR_END) + assert_lex3("?\\v", nil, :tSTRING, "\v", EXPR_END) + assert_lex3("?\\r", nil, :tSTRING, "\r", EXPR_END) + assert_lex3("?\\f", nil, :tSTRING, "\f", EXPR_END) end def test_yylex_rbracket - assert_lex3("]", nil, :tRBRACK, "]", :expr_endarg) + assert_lex3("]", nil, :tRBRACK, "]", EXPR_END) end def test_yylex_rcurly - assert_lex3("}", nil, :tRCURLY, "}", :expr_endarg) + assert_lex("}", nil, :tRCURLY, "}", EXPR_END, 0, 1) do + lexer.brace_nest += 2 + end end def test_yylex_regexp assert_lex3("/regexp/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regexp", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regexp", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_ambiguous assert_lex3("method /regexp/", nil, - :tIDENTIFIER, "method", :expr_cmdarg, - :tREGEXP_BEG, "/", :expr_cmdarg, - :tSTRING_CONTENT, "regexp", :expr_cmdarg, - :tREGEXP_END, "", :expr_end) + :tIDENTIFIER, "method", EXPR_CMDARG, + :tREGEXP_BEG, "/", EXPR_CMDARG, + :tSTRING_CONTENT, "regexp", EXPR_CMDARG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_bad @@ -1964,25 +2166,25 @@ def test_yylex_regexp_escape_C assert_lex3("/regex\\C-x/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\C-x", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\C-x", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_C_M assert_lex3("/regex\\C-\\M-x/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\C-\\M-x", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\C-\\M-x", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_C_M_craaaazy assert_lex3("/regex\\C-\\\n\\M-x/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\C-\\M-x", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\C-\\M-x", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_C_bad_dash @@ -2008,17 +2210,17 @@ def test_yylex_regexp_escape_M assert_lex3("/regex\\M-x/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\M-x", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\M-x", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_M_C assert_lex3("/regex\\M-\\C-x/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\M-\\C-x", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\M-\\C-x", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_M_bad_dash @@ -2040,49 +2242,41 @@ def test_yylex_regexp_escape_backslash_slash assert_lex3("/\\//", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "\\/", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "\\/", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_backslash_terminator assert_lex3("%r%blah\\%blah%", nil, - :tREGEXP_BEG, "%r\000", :expr_beg, - :tSTRING_CONTENT, "blah\\%blah", :expr_beg, - :tREGEXP_END, "", :expr_end) - end - - def test_yylex_regexp_escaped_delim - assert_lex3("%r!blah(?\\!blah)!", - nil, - :tREGEXP_BEG, "%r\000", :expr_beg, - :tSTRING_CONTENT, "blah(?!blah)", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "%r\000", EXPR_BEG, + :tSTRING_CONTENT, "blah\\%blah", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_backslash_terminator_meta1 assert_lex3("%r{blah\\}blah}", nil, - :tREGEXP_BEG, "%r{", :expr_beg, # FIX ?!? - :tSTRING_CONTENT, "blah\\}blah", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "%r{", EXPR_BEG, # FIX ?!? + :tSTRING_CONTENT, "blah\\}blah", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_backslash_terminator_meta2 assert_lex3("%r/blah\\/blah/", nil, - :tREGEXP_BEG, "%r\000", :expr_beg, - :tSTRING_CONTENT, "blah\\/blah", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "%r\000", EXPR_BEG, + :tSTRING_CONTENT, "blah\\/blah", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_backslash_terminator_meta3 assert_lex3("%r/blah\\%blah/", nil, - :tREGEXP_BEG, "%r\000", :expr_beg, - :tSTRING_CONTENT, "blah\\%blah", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "%r\000", EXPR_BEG, + :tSTRING_CONTENT, "blah\\%blah", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_bad_eos @@ -2092,50 +2286,50 @@ def test_yylex_regexp_escape_bs assert_lex3("/regex\\\\regex/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\\\regex", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\\\regex", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_c assert_lex3("/regex\\cxxx/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\cxxx", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\cxxx", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_c_backslash assert_lex3("/regex\\c\\n/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\c\\n", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\c\\n", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_chars assert_lex3("/re\\tge\\nxp/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "re\\tge\\nxp", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "re\\tge\\nxp", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_double_backslash regexp = '/[\\/\\\\]$/' assert_lex3(regexp.dup, nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "[\\/\\\\]$", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "[\\/\\\\]$", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_hex assert_lex3("/regex\\x61xp/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\x61xp", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\x61xp", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_hex_bad @@ -2145,414 +2339,427 @@ def test_yylex_regexp_escape_hex_one assert_lex3("/^[\\xd\\xa]{2}/on", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "^[\\xd\\xa]{2}", :expr_beg, - :tREGEXP_END, "on", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "^[\\xd\\xa]{2}", EXPR_BEG, + :tREGEXP_END, "on", EXPR_LIT) end def test_yylex_regexp_escape_oct1 assert_lex3("/regex\\0xp/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\0xp", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\0xp", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_oct2 assert_lex3("/regex\\07xp/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\07xp", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\07xp", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_oct3 assert_lex3("/regex\\10142/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regex\\10142", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regex\\10142", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_escape_return assert_lex3("/regex\\\nregex/", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, "regexregex", :expr_beg, - :tREGEXP_END, "", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, "regexregex", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) + end + + def test_yylex_regexp_escaped_delim + assert_lex3("%r!blah(?\\!blah)!", + nil, + :tREGEXP_BEG, "%r\000", EXPR_BEG, + :tSTRING_CONTENT, "blah(?!blah)", EXPR_BEG, + :tREGEXP_END, "", EXPR_LIT) end def test_yylex_regexp_nm assert_lex3("/.*/nm", nil, - :tREGEXP_BEG, "/", :expr_beg, - :tSTRING_CONTENT, ".*", :expr_beg, - :tREGEXP_END, "nm", :expr_end) + :tREGEXP_BEG, "/", EXPR_BEG, + :tSTRING_CONTENT, ".*", EXPR_BEG, + :tREGEXP_END, "nm", EXPR_LIT) + end + + def test_yylex_required_kwarg_no_value_22 + setup_lexer_class RubyParser::V22 + + assert_lex3("def foo a:, b:\nend", + nil, + :kDEF, "def", EXPR_FNAME, + :tIDENTIFIER, "foo", EXPR_ENDFN, + :tLABEL, "a", EXPR_LAB, + :tCOMMA, ",", EXPR_PAR, + :tLABEL, "b", EXPR_LAB, + :kEND, "end", EXPR_END) end def test_yylex_rparen - assert_lex3(")", nil, :tRPAREN, ")", :expr_endfn) + assert_lex3(")", nil, :tRPAREN, ")", EXPR_ENDFN) end def test_yylex_rshft assert_lex3("a >> 2", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tRSHFT, ">>", :expr_beg, - :tINTEGER, 2, :expr_end) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tRSHFT, ">>", EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) end def test_yylex_rshft_equals assert_lex3("a >>= 2", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tOP_ASGN, ">>", :expr_beg, - :tINTEGER, 2, :expr_end) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tOP_ASGN, ">>", EXPR_BEG, + :tINTEGER, 2, EXPR_NUM) end def test_yylex_star assert_lex3("a * ", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tSTAR2, "*", :expr_beg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tSTAR2, "*", EXPR_BEG) end def test_yylex_star2 assert_lex3("a ** ", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tPOW, "**", :expr_beg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tPOW, "**", EXPR_BEG) end def test_yylex_star2_equals assert_lex3("a **= ", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tOP_ASGN, "**", :expr_beg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tOP_ASGN, "**", EXPR_BEG) end def test_yylex_star_arg - self.lex_state = :expr_arg + self.lex_state = EXPR_ARG assert_lex3(" *a", nil, - :tSTAR, "*", :expr_beg, - :tIDENTIFIER, "a", :expr_arg) + :tSTAR, "*", EXPR_BEG, + :tIDENTIFIER, "a", EXPR_ARG) end def test_yylex_star_arg_beg - self.lex_state = :expr_beg + self.lex_state = EXPR_BEG assert_lex3("*a", nil, - :tSTAR, "*", :expr_beg, - :tIDENTIFIER, "a", :expr_arg) + :tSTAR, "*", EXPR_BEG, + :tIDENTIFIER, "a", EXPR_ARG) end def test_yylex_star_arg_beg_fname - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME assert_lex3("*a", nil, - :tSTAR2, "*", :expr_arg, - :tIDENTIFIER, "a", :expr_arg) + :tSTAR2, "*", EXPR_ARG, + :tIDENTIFIER, "a", EXPR_ARG) end def test_yylex_star_arg_beg_fname2 - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME assert_lex3("*a", nil, - :tSTAR2, "*", :expr_arg, - :tIDENTIFIER, "a", :expr_arg) + :tSTAR2, "*", EXPR_ARG, + :tIDENTIFIER, "a", EXPR_ARG) end def test_yylex_star_equals assert_lex3("a *= ", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tOP_ASGN, "*", :expr_beg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tOP_ASGN, "*", EXPR_BEG) end def test_yylex_string_bad_eos - refute_lex('%', :tSTRING_BEG, '%') + refute_lex("%", :tSTRING_BEG, "%") end def test_yylex_string_bad_eos_quote - refute_lex('%{nest', :tSTRING_BEG, '%}') + refute_lex("%{nest", :tSTRING_BEG, "%}") end def test_yylex_string_double - assert_lex3("\"string\"", nil, :tSTRING, "string", :expr_end) + assert_lex3("\"string\"", nil, :tSTRING, "string", EXPR_END) end def test_yylex_string_double_escape_C - assert_lex3("\"\\C-a\"", nil, :tSTRING, "\001", :expr_end) + assert_lex3("\"\\C-a\"", nil, :tSTRING, "\001", EXPR_END) end def test_yylex_string_double_escape_C_backslash assert_lex3("\"\\C-\\\\\"", nil, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "\034", :expr_beg, - :tSTRING_END, "\"", :expr_end) + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, "\034", EXPR_BEG, + :tSTRING_END, "\"", EXPR_LIT) end def test_yylex_string_double_escape_C_escape assert_lex3("\"\\C-\\M-a\"", nil, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "\201", :expr_beg, - :tSTRING_END, "\"", :expr_end) + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, "\201", EXPR_BEG, + :tSTRING_END, "\"", EXPR_LIT) end def test_yylex_string_double_escape_C_question - assert_lex3("\"\\C-?\"", nil, :tSTRING, "\177", :expr_end) - end - - def test_yylex_string_utf8_simple - chr = [0x3024].pack("U") - - assert_lex3('"\u{3024}"', - s(:str, chr), - :tSTRING, chr, :expr_end) - end - - def test_yylex_string_utf8_complex - chr = [0x3024].pack("U") - - assert_lex3('"#@a\u{3024}"', - s(:dstr, "", s(:evstr, s(:ivar, :@a)), s(:str, chr)), - :tSTRING_BEG, '"', :expr_beg, - :tSTRING_DVAR, nil, :expr_beg, - :tSTRING_CONTENT, "@a"+chr, :expr_beg, - :tSTRING_END, '"', :expr_end) + assert_lex3("\"\\C-?\"", nil, :tSTRING, "\177", EXPR_END) end def test_yylex_string_double_escape_M chr = "\341" - chr.force_encoding("UTF-8") if RubyLexer::HAS_ENC - - assert_lex3("\"\\M-a\"", nil, :tSTRING, chr, :expr_end) - end - def test_why_does_ruby_hate_me? - assert_lex3("\"Nl%\\000\\000A\\000\\999\"", # you should be ashamed - nil, - :tSTRING, ["Nl%","\x00","\x00","A","\x00","999"].join, :expr_end) + assert_lex3("\"\\M-a\"", nil, :tSTRING, chr, EXPR_END) end def test_yylex_string_double_escape_M_backslash assert_lex3("\"\\M-\\\\\"", nil, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "\334", :expr_beg, - :tSTRING_END, "\"", :expr_end) + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, "\334", EXPR_BEG, + :tSTRING_END, "\"", EXPR_LIT) end def test_yylex_string_double_escape_M_escape assert_lex3("\"\\M-\\C-a\"", nil, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "\201", :expr_beg, - :tSTRING_END, "\"", :expr_end) + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, "\201", EXPR_BEG, + :tSTRING_END, "\"", EXPR_LIT) end def test_yylex_string_double_escape_bs1 - assert_lex3("\"a\\a\\a\"", nil, :tSTRING, "a\a\a", :expr_end) + assert_lex3("\"a\\a\\a\"", nil, :tSTRING, "a\a\a", EXPR_END) end def test_yylex_string_double_escape_bs2 - assert_lex3("\"a\\\\a\"", nil, :tSTRING, "a\\a", :expr_end) + assert_lex3("\"a\\\\a\"", nil, :tSTRING, "a\\a", EXPR_END) end def test_yylex_string_double_escape_c - assert_lex3("\"\\ca\"", nil, :tSTRING, "\001", :expr_end) + assert_lex3("\"\\ca\"", nil, :tSTRING, "\001", EXPR_END) end def test_yylex_string_double_escape_c_backslash - assert_lex3("\"\\c\\\"", - nil, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "\034", :expr_beg, - :tSTRING_END, "\"", :expr_end) + refute_lex("\"\\c\\\"", :tSTRING_BEG, '"') end def test_yylex_string_double_escape_c_escape assert_lex3("\"\\c\\M-a\"", nil, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "\201", :expr_beg, - :tSTRING_END, "\"", :expr_end) + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, "\201", EXPR_BEG, + :tSTRING_END, "\"", EXPR_LIT) end def test_yylex_string_double_escape_c_question - assert_lex3("\"\\c?\"", nil, :tSTRING, "\177", :expr_end) + assert_lex3("\"\\c?\"", nil, :tSTRING, "\177", EXPR_END) end def test_yylex_string_double_escape_chars - assert_lex3("\"s\\tri\\ng\"", nil, :tSTRING, "s\tri\ng", :expr_end) + assert_lex3("\"s\\tri\\ng\"", nil, :tSTRING, "s\tri\ng", EXPR_END) end def test_yylex_string_double_escape_hex - assert_lex3("\"n = \\x61\\x62\\x63\"", nil, :tSTRING, "n = abc", :expr_end) + assert_lex3("\"n = \\x61\\x62\\x63\"", nil, :tSTRING, "n = abc", EXPR_END) end def test_yylex_string_double_escape_octal - assert_lex3("\"n = \\101\\102\\103\"", nil, :tSTRING, "n = ABC", :expr_end) + assert_lex3("\"n = \\101\\102\\103\"", nil, :tSTRING, "n = ABC", EXPR_END) end def test_yylex_string_double_escape_octal_fucked - assert_lex3("\"n = \\444\"", nil, :tSTRING, "n = $", :expr_end) + assert_lex3("\"n = \\444\"", nil, :tSTRING, "n = $", EXPR_END) end def test_yylex_string_double_interp assert_lex3("\"blah #x a \#@a b \#$b c \#{3} # \"", nil, - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, "blah #x a ", :expr_beg, - :tSTRING_DVAR, nil, :expr_beg, - :tSTRING_CONTENT, "@a b ", :expr_beg, - :tSTRING_DVAR, nil, :expr_beg, - :tSTRING_CONTENT, "$b c ", :expr_beg, - :tSTRING_DBEG, nil, :expr_beg, - :tSTRING_CONTENT, "3} # ", :expr_beg, - :tSTRING_END, "\"", :expr_end) - end - - def test_yylex_string_double_pound_dollar_bad - skip if ruby18 - - assert_lex3('"#$%"', nil, - - :tSTRING_BEG, "\"", :expr_beg, - :tSTRING_CONTENT, '#$%', :expr_beg, - :tSTRING_END, "\"", :expr_end) + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, "blah #x a ", EXPR_BEG, + :tSTRING_DVAR, nil, EXPR_BEG, + :tSTRING_CONTENT, "@a b ", EXPR_BEG, + :tSTRING_DVAR, nil, EXPR_BEG, + :tSTRING_CONTENT, "$b c ", EXPR_BEG, + :tSTRING_DBEG, nil, EXPR_BEG, + :tSTRING_CONTENT, "3} # ", EXPR_BEG, + :tSTRING_END, "\"", EXPR_LIT) end def test_yylex_string_double_nested_curlies assert_lex3("%{nest{one{two}one}nest}", nil, - :tSTRING_BEG, "%}", :expr_beg, - :tSTRING_CONTENT, "nest{one{two}one}nest", :expr_beg, - :tSTRING_END, "}", :expr_end) + :tSTRING_BEG, "%}", EXPR_BEG, + :tSTRING_CONTENT, "nest{one{two}one}nest", EXPR_BEG, + :tSTRING_END, "}", EXPR_LIT) end def test_yylex_string_double_no_interp - assert_lex3("\"# blah\"", nil, :tSTRING, "# blah", :expr_end) - assert_lex3("\"blah # blah\"", nil, :tSTRING, "blah # blah", :expr_end) + assert_lex3("\"# blah\"", nil, :tSTRING, "# blah", EXPR_END) + assert_lex3("\"blah # blah\"", nil, :tSTRING, "blah # blah", EXPR_END) end - def test_yylex_string_escape_x_single - assert_lex3("\"\\x0\"", nil, :tSTRING, "\000", :expr_end) + def test_yylex_string_double_pound_dollar_bad + assert_lex3('"#$%"', nil, + + :tSTRING_BEG, "\"", EXPR_BEG, + :tSTRING_CONTENT, "#\$%", EXPR_BEG, + :tSTRING_END, "\"", EXPR_LIT) end - def test_yylex_string_pct_i - assert_lex3("%i[s1 s2\ns3]", - nil, - :tQSYMBOLS_BEG, "%i[", :expr_beg, - :tSTRING_CONTENT, "s1", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s2", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s3", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_END, nil, :expr_end) + def test_yylex_string_escape_x_single + assert_lex3("\"\\x0\"", nil, :tSTRING, "\000", EXPR_END) end def test_yylex_string_pct_I assert_lex3("%I[s1 s2\ns3]", nil, - :tSYMBOLS_BEG, "%I[", :expr_beg, - :tSTRING_CONTENT, "s1", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s2", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s3", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_END, nil, :expr_end) + :tSYMBOLS_BEG, "%I[", EXPR_BEG, + :tSTRING_CONTENT, "s1", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s2", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s3", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_END, nil, EXPR_LIT) end - def test_yylex_string_pct_i_extra_space - assert_lex3("%i[ s1 s2\ns3 ]", + def test_yylex_string_pct_I_extra_space + assert_lex3("%I[ s1 s2\ns3 ]", nil, - :tQSYMBOLS_BEG, "%i[", :expr_beg, - :tSTRING_CONTENT, "s1", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s2", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s3", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_END, nil, :expr_end) + :tSYMBOLS_BEG, "%I[", EXPR_BEG, + :tSTRING_CONTENT, "s1", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s2", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s3", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_END, nil, EXPR_LIT) end - def test_yylex_string_pct_I_extra_space - assert_lex3("%I[ s1 s2\ns3 ]", + def test_yylex_string_pct_Q + assert_lex3("%Q[s1 s2]", nil, - :tSYMBOLS_BEG, "%I[", :expr_beg, - :tSTRING_CONTENT, "s1", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s2", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s3", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_END, nil, :expr_end) + :tSTRING_BEG, "%Q[", EXPR_BEG, + :tSTRING_CONTENT, "s1 s2", EXPR_BEG, + :tSTRING_END, "]", EXPR_LIT) end - def test_yylex_string_pct_q - assert_lex3("%q[s1 s2]", + def test_yylex_string_pct_Q_null_wtf? + assert_lex3("%Q\0s1 s2\0", nil, - :tSTRING_BEG, "%q[", :expr_beg, - :tSTRING_CONTENT, "s1 s2", :expr_beg, - :tSTRING_END, "]", :expr_end) + :tSTRING_BEG, "%Q\0", EXPR_BEG, + :tSTRING_CONTENT, "s1 s2", EXPR_BEG, + :tSTRING_END, "\0", EXPR_LIT) end - def test_yylex_string_pct_Q - assert_lex3("%Q[s1 s2]", + def test_yylex_string_pct_Q_bang + assert_lex3("%Q!s1 s2!", nil, - :tSTRING_BEG, "%Q[", :expr_beg, - :tSTRING_CONTENT, "s1 s2", :expr_beg, - :tSTRING_END, "]", :expr_end) + :tSTRING_BEG, "%Q\0", EXPR_BEG, + :tSTRING_CONTENT, "s1 s2", EXPR_BEG, + :tSTRING_END, "!", EXPR_LIT) end def test_yylex_string_pct_W assert_lex3("%W[s1 s2\ns3]", # TODO: add interpolation to these nil, - :tWORDS_BEG, "%W[", :expr_beg, - :tSTRING_CONTENT, "s1", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s2", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s3", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_END, nil, :expr_end) + :tWORDS_BEG, "%W[", EXPR_BEG, + :tSTRING_CONTENT, "s1", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s2", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s3", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_END, nil, EXPR_LIT) end def test_yylex_string_pct_W_bs_nl assert_lex3("%W[s1 \\\ns2]", # TODO: add interpolation to these nil, - :tWORDS_BEG, "%W[", :expr_beg, - :tSTRING_CONTENT, "s1", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "\ns2", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_END, nil, :expr_end) + :tWORDS_BEG, "%W[", EXPR_BEG, + :tSTRING_CONTENT, "s1", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "\ns2", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_END, nil, EXPR_LIT) end def test_yylex_string_pct_angle assert_lex3("%", nil, - :tSTRING_BEG, "%>", :expr_beg, - :tSTRING_CONTENT, "blah", :expr_beg, - :tSTRING_END, ">", :expr_end) + :tSTRING_BEG, "%>", EXPR_BEG, + :tSTRING_CONTENT, "blah", EXPR_BEG, + :tSTRING_END, ">", EXPR_LIT) + end + + def test_yylex_string_pct_i + assert_lex3("%i[s1 s2\ns3]", + nil, + :tQSYMBOLS_BEG, "%i[", EXPR_BEG, + :tSTRING_CONTENT, "s1", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s2", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s3", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_END, nil, EXPR_LIT) + end + + def test_yylex_string_pct_i_extra_space + assert_lex3("%i[ s1 s2\ns3 ]", + nil, + :tQSYMBOLS_BEG, "%i[", EXPR_BEG, + :tSTRING_CONTENT, "s1", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s2", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s3", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_END, nil, EXPR_LIT) end def test_yylex_string_pct_other assert_lex3("%%blah%", nil, - :tSTRING_BEG, "%%", :expr_beg, - :tSTRING_CONTENT, "blah", :expr_beg, - :tSTRING_END, "%", :expr_end) + :tSTRING_BEG, "%%", EXPR_BEG, + :tSTRING_CONTENT, "blah", EXPR_BEG, + :tSTRING_END, "%", EXPR_LIT) + end + + def test_yylex_string_pct_q + assert_lex3("%q[s1 s2]", + nil, + :tSTRING_BEG, "%q[", EXPR_BEG, + :tSTRING_CONTENT, "s1 s2", EXPR_BEG, + :tSTRING_END, "]", EXPR_LIT) + end + + def test_yylex_string_pct_s + assert_lex3("%s[s1 s2]", + nil, + :tSYMBEG, "%s[", EXPR_FNAME, # TODO: :tSYM_BEG ? + :tSTRING_CONTENT, "s1 s2", EXPR_FNAME, # man... I don't like this + :tSTRING_END, "]", EXPR_LIT) end def test_yylex_string_pct_w @@ -2567,122 +2774,222 @@ def test_yylex_string_pct_w_bs_nl assert_lex3("%w[s1 \\\ns2]", nil, - :tQWORDS_BEG, "%w[", :expr_beg, - :tSTRING_CONTENT, "s1", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "\ns2", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_END, nil, :expr_end) + :tQWORDS_BEG, "%w[", EXPR_BEG, + :tSTRING_CONTENT, "s1", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "\ns2", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_END, nil, EXPR_LIT) end def test_yylex_string_pct_w_bs_sp assert_lex3("%w[s\\ 1 s\\ 2]", nil, - :tQWORDS_BEG, "%w[", :expr_beg, - :tSTRING_CONTENT, "s 1", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_CONTENT, "s 2", :expr_beg, - :tSPACE, nil, :expr_beg, - :tSTRING_END, nil, :expr_end) + :tQWORDS_BEG, "%w[", EXPR_BEG, + :tSTRING_CONTENT, "s 1", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_CONTENT, "s 2", EXPR_BEG, + :tSPACE, nil, EXPR_BEG, + :tSTRING_END, nil, EXPR_LIT) end def test_yylex_string_single - assert_lex3("'string'", nil, :tSTRING, "string", :expr_end) + assert_lex3("'string'", nil, :tSTRING, "string", EXPR_END) end def test_yylex_string_single_escape_chars - assert_lex3("'s\\tri\\ng'", nil, :tSTRING, "s\\tri\\ng", :expr_end) + assert_lex3("'s\\tri\\ng'", nil, :tSTRING, "s\\tri\\ng", EXPR_END) + end + + def test_yylex_string_single_escape_quote_and_backslash + assert_lex3(":'foo\\'bar\\\\baz'", nil, :tSYMBOL, "foo'bar\\baz", + EXPR_LIT) + end + + def test_yylex_string_single_escaped_quote + assert_lex3("'foo\\'bar'", nil, :tSTRING, "foo'bar", EXPR_END) end def test_yylex_string_single_nl - assert_lex3("'blah\\\nblah'", nil, :tSTRING, "blah\\\nblah", :expr_end) + assert_lex3("'blah\\\nblah'", nil, :tSTRING, "blah\\\nblah", EXPR_END) end - def test_yylex_symbol - assert_lex3(":symbol", nil, :tSYMBOL, "symbol", :expr_end) + def test_yylex_string_utf8_complex + chr = [0x3024].pack("U") + + assert_lex3('"#@a\u{3024}"', + s(:dstr, "", s(:evstr, s(:ivar, :@a)), s(:str, chr)), + :tSTRING_BEG, '"', EXPR_BEG, + :tSTRING_DVAR, nil, EXPR_BEG, + :tSTRING_CONTENT, "@a"+chr, EXPR_BEG, + :tSTRING_END, '"', EXPR_LIT) + end + + def test_yylex_string_utf8_complex_missing_hex + chr = [0x302].pack("U") + str = "#{chr}zzz" + + refute_lex('"#@a\u302zzz"', + :tSTRING_BEG, '"', + :tSTRING_DVAR, nil, + :tSTRING_CONTENT, "@a"+str, + :tSTRING_END, '"') + + chr = [0x30].pack("U") + str = "#{chr}zzz" + + refute_lex('"#@a\u30zzz"', + :tSTRING_BEG, '"', + :tSTRING_DVAR, nil, + :tSTRING_CONTENT, "@a"+str, + :tSTRING_END, '"') + + chr = [0x3].pack("U") + str = "#{chr}zzz" + + refute_lex('"#@a\u3zzz"', + :tSTRING_BEG, '"', + :tSTRING_DVAR, nil, + :tSTRING_CONTENT, "@a"+str, + :tSTRING_END, '"') end - def test_yylex_symbol_zero_byte__18 - setup_lexer_class RubyParser::V18 + def test_yylex_string_utf8_bad_encoding_with_escapes + str = "\"\\xBADπ\"" + exp = "\xBADπ".b - refute_lex(":\"symbol\0\"", :tSYMBEG, ":") + assert_lex(str, + s(:str, exp), + :tSTRING, exp, EXPR_END) end - def test_yylex_symbol_zero_byte - assert_lex(":\"symbol\0\"", nil, - :tSYMBOL, "symbol\0", :expr_end) + def test_yylex_string_utf8_complex_trailing_hex + chr = [0x3024].pack("U") + str = "#{chr}abz" + + assert_lex3('"#@a\u3024abz"', + s(:dstr, "", s(:evstr, s(:ivar, :@a)), s(:str, str)), + :tSTRING_BEG, '"', EXPR_BEG, + :tSTRING_DVAR, nil, EXPR_BEG, + :tSTRING_CONTENT, "@a"+str, EXPR_BEG, + :tSTRING_END, '"', EXPR_LIT) + end + + def test_yylex_string_utf8_missing_hex + refute_lex('"\u3zzz"') + refute_lex('"\u30zzz"') + refute_lex('"\u302zzz"') + end + + def test_yylex_string_utf8_simple + chr = [0x3024].pack("U") + + assert_lex3('"\u{3024}"', + s(:str, chr), + :tSTRING, chr, EXPR_END) + end + + def test_yylex_string_utf8_trailing_hex + chr = [0x3024].pack("U") + str = "#{chr}abz" + + assert_lex3('"\u3024abz"', + s(:str, str), + :tSTRING, str, EXPR_END) + end + + def test_yylex_sym_quoted + assert_lex(":'a'", + s(:lit, :a), + + :tSYMBOL, "a", EXPR_LIT, 0, 0) + end + + def test_yylex_symbol + assert_lex3(":symbol", nil, :tSYMBOL, "symbol", EXPR_LIT) end def test_yylex_symbol_double assert_lex3(":\"symbol\"", nil, - :tSYMBOL, "symbol", :expr_end) + :tSYMBOL, "symbol", EXPR_LIT) end def test_yylex_symbol_double_interp assert_lex3(':"symbol#{1+1}"', nil, - :tSYMBEG, ":", :expr_fname, - :tSTRING_CONTENT, "symbol", :expr_fname, - :tSTRING_DBEG, nil, :expr_fname, - :tSTRING_CONTENT, "1+1}", :expr_fname, # HUH? this is BS - :tSTRING_END, "\"", :expr_end) + :tSYMBEG, ":", EXPR_FNAME, + :tSTRING_CONTENT, "symbol", EXPR_FNAME, + :tSTRING_DBEG, nil, EXPR_FNAME, + :tSTRING_CONTENT, "1+1}", EXPR_FNAME, # HUH? this is BS + :tSTRING_END, "\"", EXPR_LIT) end def test_yylex_symbol_single assert_lex3(":'symbol'", nil, - :tSYMBOL, "symbol", :expr_end) + :tSYMBOL, "symbol", EXPR_LIT) + end + + def test_yylex_symbol_single_escape_chars + assert_lex3(":'s\\tri\\ng'", + nil, + :tSYMBOL, "s\\tri\\ng", EXPR_LIT) end def test_yylex_symbol_single_noninterp assert_lex3(':\'symbol#{1+1}\'', nil, - :tSYMBOL, 'symbol#{1+1}', :expr_end) + :tSYMBOL, 'symbol#{1+1}', EXPR_LIT) + end + + def test_yylex_symbol_zero_byte + assert_lex(":\"symbol\0\"", nil, + :tSYMBOL, "symbol\0", EXPR_LIT) end def test_yylex_ternary1 assert_lex3("a ? b : c", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tEH, "?", :expr_value, - :tIDENTIFIER, "b", :expr_arg, - :tCOLON, ":", :expr_beg, - :tIDENTIFIER, "c", :expr_arg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tEH, "?", EXPR_BEG, + :tIDENTIFIER, "b", EXPR_ARG, + :tCOLON, ":", EXPR_BEG, + :tIDENTIFIER, "c", EXPR_ARG) assert_lex3("a ?bb : c", # GAH! MATZ!!! nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tEH, "?", :expr_beg, - :tIDENTIFIER, "bb", :expr_arg, - :tCOLON, ":", :expr_beg, - :tIDENTIFIER, "c", :expr_arg) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tEH, "?", EXPR_BEG, + :tIDENTIFIER, "bb", EXPR_ARG, + :tCOLON, ":", EXPR_BEG, + :tIDENTIFIER, "c", EXPR_ARG) assert_lex3("42 ?", nil, - :tINTEGER, 42, :expr_end, - :tEH, "?", :expr_value) + :tINTEGER, 42, EXPR_NUM, + :tEH, "?", EXPR_BEG) end def test_yylex_tilde - assert_lex3("~", nil, :tTILDE, "~", :expr_beg) + assert_lex3("~", nil, :tTILDE, "~", EXPR_BEG) end def test_yylex_tilde_unary - self.lex_state = :expr_fname + self.lex_state = EXPR_FNAME - assert_lex3("~@", nil, :tTILDE, "~", :expr_arg) + assert_lex3("~@", nil, :tTILDE, "~", EXPR_ARG) end def test_yylex_uminus assert_lex3("-blah", nil, - :tUMINUS, "-", :expr_beg, - :tIDENTIFIER, "blah", :expr_arg) + :tUMINUS, "-", EXPR_BEG, + :tIDENTIFIER, "blah", EXPR_ARG) end def test_yylex_underscore - assert_lex3("_var", nil, :tIDENTIFIER, "_var", :expr_cmdarg) + assert_lex3("_var", nil, :tIDENTIFIER, "_var", EXPR_CMDARG) end def test_yylex_underscore_end @@ -2694,206 +3001,45 @@ def test_yylex_uplus assert_lex3("+blah", nil, - :tUPLUS, "+", :expr_beg, - :tIDENTIFIER, "blah", :expr_arg) + :tUPLUS, "+", EXPR_BEG, + :tIDENTIFIER, "blah", EXPR_ARG) end def test_zbug_float_in_decl assert_lex3("def initialize(u = 0.0, s = 0.0", nil, - :kDEF, "def", :expr_fname, - :tIDENTIFIER, "initialize", :expr_endfn, - :tLPAREN2, "(", :expr_beg, - :tIDENTIFIER, "u", :expr_arg, - :tEQL, "=", :expr_beg, - :tFLOAT, 0.0, :expr_end, - :tCOMMA, ",", :expr_beg, - :tIDENTIFIER, "s", :expr_arg, - :tEQL, "=", :expr_beg, - :tFLOAT, 0.0, :expr_end) + :kDEF, "def", EXPR_FNAME, + :tIDENTIFIER, "initialize", EXPR_ENDFN, + :tLPAREN2, "(", EXPR_PAR, + :tIDENTIFIER, "u", EXPR_ARG, + :tEQL, "=", EXPR_BEG, + :tFLOAT, 0.0, EXPR_NUM, + :tCOMMA, ",", EXPR_PAR, + :tIDENTIFIER, "s", EXPR_ARG, + :tEQL, "=", EXPR_BEG, + :tFLOAT, 0.0, EXPR_NUM) end def test_zbug_id_equals assert_lex3("a = 0.0", nil, - :tIDENTIFIER, "a", :expr_cmdarg, - :tEQL, "=", :expr_beg, - :tFLOAT, 0.0, :expr_end) + :tIDENTIFIER, "a", EXPR_CMDARG, + :tEQL, "=", EXPR_BEG, + :tFLOAT, 0.0, EXPR_NUM) end def test_zbug_no_spaces_in_decl assert_lex3("def initialize(u=0.0,s=0.0", nil, - :kDEF, "def", :expr_fname, - :tIDENTIFIER, "initialize", :expr_endfn, - :tLPAREN2, "(", :expr_beg, - :tIDENTIFIER, "u", :expr_arg, - :tEQL, "=", :expr_beg, - :tFLOAT, 0.0, :expr_end, - :tCOMMA, ",", :expr_beg, - :tIDENTIFIER, "s", :expr_arg, - :tEQL, "=", :expr_beg, - :tFLOAT, 0.0, :expr_end) - end - - def test_pct_w_backslashes - ["\t", "\n", "\r", "\v", "\f"].each do |char| - next if !RubyLexer::HAS_ENC and char == "\v" - - assert_lex("%w[foo#{char}bar]", - s(:array, s(:str, "foo"), s(:str, "bar")), - - :tQWORDS_BEG, "%w[", :expr_beg, 0, 0, - :tSTRING_CONTENT, "foo", :expr_beg, 0, 0, - :tSPACE, nil, :expr_beg, 0, 0, - :tSTRING_CONTENT, "bar", :expr_beg, 0, 0, - :tSPACE, nil, :expr_beg, 0, 0, - :tSTRING_END, nil, :expr_end, 0, 0) - end - end - - def test_yylex_sym_quoted - assert_lex(":'a'", - s(:lit, :a), - - :tSYMBOL, "a", :expr_end, 0, 0) - end - - def test_yylex_hash_colon - assert_lex("{a:1}", - s(:hash, s(:lit, :a), s(:lit, 1)), - - :tLBRACE, "{", :expr_beg, 0, 1, - :tLABEL, "a", :expr_labelarg, 0, 1, - :tINTEGER, 1, :expr_end, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0) - end - - def test_yylex_hash_colon_quoted_22 - setup_lexer_class RubyParser::V22 - - assert_lex("{'a':1}", - s(:hash, s(:lit, :a), s(:lit, 1)), - - :tLBRACE, "{", :expr_beg, 0, 1, - :tLABEL, "a", :expr_labelarg, 0, 1, - :tINTEGER, 1, :expr_end, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0) - end - - def test_yylex_hash_colon_quoted_symbol_22 - setup_lexer_class RubyParser::V22 - - assert_lex("{'abc': :b}", - s(:hash, s(:lit, :abc), s(:lit, :b)), - - :tLBRACE, "{", :expr_beg, 0, 1, - :tLABEL, "abc", :expr_labelarg, 0, 1, - :tSYMBOL, "b", :expr_end, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0) - end - - def test_yylex_hash_colon_double_quoted_symbol_22 - setup_lexer_class RubyParser::V22 - - assert_lex('{"abc": :b}', - s(:hash, s(:lit, :abc), s(:lit, :b)), - - :tLBRACE, "{", :expr_beg, 0, 1, - :tLABEL, "abc", :expr_labelarg, 0, 1, - :tSYMBOL, "b", :expr_end, 0, 1, - :tRCURLY, "}", :expr_endarg, 0, 0) - end - - def test_yylex_required_kwarg_no_value_22 - setup_lexer_class RubyParser::V22 - - assert_lex3("def foo a:, b:\nend", - nil, - :kDEF, "def", :expr_fname, - :tIDENTIFIER, "foo", :expr_endfn, - :tLABEL, "a", :expr_labelarg, - :tCOMMA, ",", :expr_beg, - :tLABEL, "b", :expr_labelarg, - :tNL, nil, :expr_beg, - :kEND, "end", :expr_end) - end - - def test_ruby21_rational_literal - setup_lexer_class RubyParser::V21 - - assert_lex3("10r", nil, :tRATIONAL, Rational(10), :expr_end) - assert_lex3("0x10r", nil, :tRATIONAL, Rational(16), :expr_end) - assert_lex3("0o10r", nil, :tRATIONAL, Rational(8), :expr_end) - assert_lex3("0or", nil, :tRATIONAL, Rational(0), :expr_end) - assert_lex3("0b10r", nil, :tRATIONAL, Rational(2), :expr_end) - assert_lex3("1.5r", nil, :tRATIONAL, Rational(15, 10), :expr_end) - assert_lex3("15e3r", nil, :tRATIONAL, Rational(15000), :expr_end) - assert_lex3("15e-3r", nil, :tRATIONAL, Rational(15, 1000), :expr_end) - assert_lex3("1.5e3r", nil, :tRATIONAL, Rational(1500), :expr_end) - assert_lex3("1.5e-3r", nil, :tRATIONAL, Rational(15, 10000), :expr_end) - - assert_lex3("-10r", nil, - :tUMINUS_NUM, "-", :expr_beg, - :tRATIONAL, Rational(10), :expr_end) - end - - def test_ruby21_imaginary_literal - setup_lexer_class RubyParser::V21 - - assert_lex3("1i", nil, :tIMAGINARY, Complex(0, 1), :expr_end) - assert_lex3("0x10i", nil, :tIMAGINARY, Complex(0, 16), :expr_end) - assert_lex3("0o10i", nil, :tIMAGINARY, Complex(0, 8), :expr_end) - assert_lex3("0oi", nil, :tIMAGINARY, Complex(0, 0), :expr_end) - assert_lex3("0b10i", nil, :tIMAGINARY, Complex(0, 2), :expr_end) - assert_lex3("1.5i", nil, :tIMAGINARY, Complex(0, 1.5), :expr_end) - assert_lex3("15e3i", nil, :tIMAGINARY, Complex(0, 15000), :expr_end) - assert_lex3("15e-3i", nil, :tIMAGINARY, Complex(0, 0.015), :expr_end) - assert_lex3("1.5e3i", nil, :tIMAGINARY, Complex(0, 1500), :expr_end) - assert_lex3("1.5e-3i", nil, :tIMAGINARY, Complex(0, 0.0015), :expr_end) - - assert_lex3("-10i", nil, - :tUMINUS_NUM, "-", :expr_beg, - :tIMAGINARY, Complex(0, 10), :expr_end) - end - - def test_ruby21_rational_imaginary_literal - setup_lexer_class RubyParser::V21 - - assert_lex3("1ri", nil, :tIMAGINARY, Complex(0, Rational(1)), :expr_end) - assert_lex3("0x10ri", nil, :tIMAGINARY, Complex(0, Rational(16)), :expr_end) - assert_lex3("0o10ri", nil, :tIMAGINARY, Complex(0, Rational(8)), :expr_end) - assert_lex3("0ori", nil, :tIMAGINARY, Complex(0, Rational(0)), :expr_end) - assert_lex3("0b10ri", nil, :tIMAGINARY, Complex(0, Rational(2)), :expr_end) - assert_lex3("1.5ri", nil, :tIMAGINARY, Complex(0, Rational("1.5")), :expr_end) - assert_lex3("15e3ri", nil, :tIMAGINARY, Complex(0, Rational("15e3")), :expr_end) - assert_lex3("15e-3ri", nil, :tIMAGINARY, Complex(0, Rational("15e-3")), :expr_end) - assert_lex3("1.5e3ri", nil, :tIMAGINARY, Complex(0, Rational("1.5e3")), :expr_end) - assert_lex3("1.5e-3ri", nil, :tIMAGINARY, Complex(0, Rational("1.5e-3")), :expr_end) - - assert_lex3("-10ri", nil, - :tUMINUS_NUM, "-", :expr_beg, - :tIMAGINARY, Complex(0, Rational(10)), :expr_end) - end - - def test_ruby21_imaginary_literal_with_succeeding_keyword - skip "Currently does not tokenize correctly" - - setup_lexer_class RubyParser::V21 - - assert_lex3("1if", nil, - :tINTEGER, 1, :expr_end, - :kIF_MOD, "if", :expr_beg) - assert_lex3("1rif", nil, - :tRATIONAL, Rational(1), :expr_end, - :kIF_MOD, "if", :expr_beg) - assert_lex3("1.0if", nil, - :tFLOAT, 1.0, :expr_end, - :kIF_MOD, "if", :expr_beg) - assert_lex3("1.0rif", nil, - :tRATIONAL, Rational("1.0"), :expr_end, - :kIF_MOD, "if", :expr_beg) - - flunk + :kDEF, "def", EXPR_FNAME, + :tIDENTIFIER, "initialize", EXPR_ENDFN, + :tLPAREN2, "(", EXPR_PAR, + :tIDENTIFIER, "u", EXPR_ARG, + :tEQL, "=", EXPR_BEG, + :tFLOAT, 0.0, EXPR_NUM, + :tCOMMA, ",", EXPR_PAR, + :tIDENTIFIER, "s", EXPR_ARG, + :tEQL, "=", EXPR_BEG, + :tFLOAT, 0.0, EXPR_NUM) end end diff -Nru ruby-ruby-parser-3.11.0/test/test_ruby_parser_extras.rb ruby-ruby-parser-3.15.1/test/test_ruby_parser_extras.rb --- ruby-ruby-parser-3.11.0/test/test_ruby_parser_extras.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/test/test_ruby_parser_extras.rb 2021-01-18 16:48:25.000000000 +0000 @@ -16,11 +16,11 @@ p = RubyParser.latest s = nil - out, err = capture_io do + out, err = capture_io { s = p.handle_encoding str - end + } - assert_equal orig_str.sub(/\357\273\277/, ''), s + assert_equal orig_str.sub(/\357\273\277/, ""), s exp_err = "" @@ -162,7 +162,7 @@ class TestEnvironment < Minitest::Test def deny t - assert ! t + assert !t end def setup @@ -224,3 +224,38 @@ assert_equal expected0, @env.all end end + +class Fake20 + include RubyParserStuff + + def initialize + end + + def s(*a) # bypass lexer/lineno stuff that RP overrides in + Kernel.send :s, *a + end +end + +class TestValueExpr < Minitest::Test + def assert_value_expr exp, input + assert_equal exp, Fake20.new.value_expr(input.line(1)) + end + + def assert_remove_begin exp, input + assert_equal exp, Fake20.new.remove_begin(input.line(1)) + end + + def test_value_expr + assert_value_expr s(:nil), s(:begin) + assert_value_expr s(:nil), s(:begin, s(:nil)) + assert_value_expr s(:nil), s(:begin, s(:begin, s(:nil))) + assert_value_expr s(:begin, s(:nil), s(:nil)), s(:begin, s(:nil), s(:nil)) + end + + def test_remove_begin + assert_remove_begin s(:nil), s(:begin) + assert_remove_begin s(:nil), s(:begin, s(:nil)) + assert_remove_begin s(:nil), s(:begin, s(:begin, s(:nil))) + assert_remove_begin s(:begin, s(:nil), s(:nil)), s(:begin, s(:nil), s(:nil)) + end +end diff -Nru ruby-ruby-parser-3.11.0/test/test_ruby_parser.rb ruby-ruby-parser-3.15.1/test/test_ruby_parser.rb --- ruby-ruby-parser-3.11.0/test/test_ruby_parser.rb 2018-05-19 07:48:40.000000000 +0000 +++ ruby-ruby-parser-3.15.1/test/test_ruby_parser.rb 2021-01-18 16:48:25.000000000 +0000 @@ -1,6 +1,6 @@ # encoding: utf-8 -# ENV['VERBOSE'] = "1" +# ENV["VERBOSE"] = "1" require "minitest/autorun" require "ruby_parser" @@ -12,10 +12,10 @@ class Sexp alias oldeq2 == # TODO: push up to Sexp - def ==(obj) # :nodoc: - if obj.class == self.class then + def == other # :nodoc: + if other.class == self.class then super and - (self.line.nil? or obj.line.nil? or self.line == obj.line) + (line.nil? or other.line.nil? or line == other.line) else false end @@ -30,58 +30,114 @@ BLOCK_DUP_MSG = "Both block arg and actual block given." - def test_double_block_error_01 - assert_syntax_error "a(1, &b) { }", BLOCK_DUP_MSG + def test_bug120 + skip "not ready for this yet" + + rb = "def f; if /(?bar)/ =~ 'bar' && p(foo); foo; end; end; f" + pt = s(:if, + s(:and, + s(:match2, s(:lit, /(?bar)/), s(:str, "bar")), + s(:call, nil, :p, s(:lvar, :foo))), + s(:lvar, :foo), + nil) + + assert_parse rb, pt end - def test_double_block_error_02 - assert_syntax_error "a(1, &b) do end", BLOCK_DUP_MSG + def after_process_hook klass, node, data, input_name, output_name + assert_equal 1, @result.line, "should have proper line number" if + node !~ /rescue|begin|ensure/ # remove_begin keeps inner line number end - def test_double_block_error_03 - assert_syntax_error "a 1, &b do end", BLOCK_DUP_MSG + def test_BEGIN + rb = "BEGIN { 42 }" + pt = s(:iter, s(:preexe), 0, s(:lit, 42)) + + assert_parse rb, pt end - def test_double_block_error_04 - assert_syntax_error "m.a(1, &b) { }", BLOCK_DUP_MSG + def test_BEGIN_not_toplevel + rb = "class Foo\n BEGIN {\n 42\n }\nend" + + assert_syntax_error rb, "BEGIN is permitted only at toplevel" end - def test_double_block_error_05 - assert_syntax_error "m.a(1, &b) do end", BLOCK_DUP_MSG + def test___ENCODING__ + rb = "__ENCODING__" + pt = s(:colon2, s(:const, :Encoding), :UTF_8) + + assert_parse rb, pt end - def test_double_block_error_06 - assert_syntax_error "m.a 1, &b do end", BLOCK_DUP_MSG + def test_alias_gvar_backref + rb = "alias $MATCH $&" + pt = s(:valias, :$MATCH, :$&) + + assert_parse rb, pt end - def test_double_block_error_07 - assert_syntax_error "m::a(1, &b) { }", BLOCK_DUP_MSG + def test_alias_resword + rb = "alias in out" + pt = s(:alias, s(:lit, :in), s(:lit, :out)) + + assert_parse rb, pt end - def test_double_block_error_08 - assert_syntax_error "m::a(1, &b) do end", BLOCK_DUP_MSG + def test_and_multi + rb = "true and\nnot false and\ntrue" + pt = s(:and, + s(:true).line(1), + s(:and, + s(:call, s(:false).line(2), :!).line(2), + s(:true).line(3)).line(2)).line(1) + + assert_parse rb, pt end - def test_double_block_error_09 - assert_syntax_error "m::a 1, &b do end", BLOCK_DUP_MSG + def test_aref_args_assocs + rb = "[1 => 2]" + pt = s(:array, s(:hash, s(:lit, 1), s(:lit, 2))) + + assert_parse rb, pt end - def test_wtf_7 - rb = "a.b (1) {c}" - pt = s(:iter, - s(:call, s(:call, nil, :a), :b, s(:lit, 1)), - 0, - s(:call, nil, :c)) + def test_array_line_breaks + # It seems like arrays are roughly created when a certain element is created + # In ruby > 1.9 it seems like that is after the last element, so the array + # itself is assigned line 3 (since the last element is on line 3) and for + # ruby <= 1.9 it seems to get created after the first element, so the array + # itself is assigned line 2 (since the first element is on line 2). + # This seems to happen since arrays like this are created with a line in + # ruby_parser.yy like `result = s(:array, val[0])`. So, the array is not + # created by itself. The creation of the array itself is deferred until there + # is an element to create it with. That seems to mess up line numbers + # for the array. Luckily, the arary elements all seemt to get the correct + # line number. + rb = "[\n'a',\n'b']\n1" + pt = s(:block, + s(:array, + s(:str, "a").line(2), + s(:str, "b").line(3)).line(1), + s(:lit, 1).line(4)).line 1 + assert_parse rb, pt + end + + def test_attr_asgn_colon_id + rb = "A::b = 1" + pt = s(:attrasgn, s(:const, :A), :b=, s(:lit, 1)) assert_parse rb, pt end - def test_wtf_8 - rb = "a::b (1) {c}" - pt = s(:iter, - s(:call, s(:call, nil, :a), :b, s(:lit, 1)), - 0, - s(:call, nil, :c)) + def test_attrasgn_array_arg + rb = "a[[1, 2]] = 3" + pt = s(:attrasgn, + s(:call, nil, :a), + :[]=, + s(:array, + s(:lit, 1), + s(:lit, 2)), + s(:lit, 3)) assert_parse rb, pt end @@ -99,37 +155,112 @@ assert_parse rb, pt end - def test_attrasgn_array_arg - rb = "a[[1, 2]] = 3" - pt = s(:attrasgn, - s(:call, nil, :a), - :[]=, - s(:array, - s(:lit, 1), - s(:lit, 2)), - s(:lit, 3)) + def test_attrasgn_primary_dot_constant + rb = "a.B = 1" + pt = s(:attrasgn, s(:call, nil, :a), :"B=", s(:lit, 1)) + + assert_parse rb, pt + end + + def test_backticks_interpolation_line + rb = 'x `#{y}`' + pt = s(:call, nil, :x, + s(:dxstr, "", + s(:evstr, + s(:call, nil, :y).line(1)).line(1))).line(1) + + assert_parse rb, pt + end + + def test_bang_eq + rb = "1 != 2" + pt = s(:not, s(:call, s(:lit, 1), :"==", s(:lit, 2))) + + assert_parse rb, pt + end + + def test_begin_else_return_value + rb = "begin; else 2; end" + + assert_syntax_error rb, "else without rescue is useless" + end + + def test_begin_ensure_no_bodies + rb = "begin\nensure\nend" + pt = s(:ensure, s(:nil).line(2)).line(2) + + assert_parse rb, pt + end + + def test_begin_rescue_ensure_no_bodies + rb = "begin\nrescue\nensure\nend" + pt = s(:ensure, + s(:rescue, + s(:resbody, s(:array).line(2), + nil).line(2) + ).line(2), + s(:nil).line(3) + ).line(2) + + assert_parse rb, pt + end + + def test_begin_rescue_else_ensure_bodies + rb = "begin\n 1\nrescue\n 2\nelse\n 3\nensure\n 4\nend" + pt = s(:ensure, + s(:rescue, + s(:lit, 1).line(2), + s(:resbody, s(:array).line(3), + s(:lit, 2).line(4)).line(3), + s(:lit, 3).line(6)).line(2), + s(:lit, 4).line(8)).line(2) + + s(:ensure, s(:rescue, s(:resbody, s(:array), nil)), s(:nil)) + + assert_parse rb, pt + end + + def test_begin_rescue_else_ensure_no_bodies + rb = "begin\n\nrescue\n\nelse\n\nensure\n\nend" + pt = s(:ensure, + s(:rescue, + s(:resbody, s(:array).line(3), + # TODO: s(:nil) + nil + ).line(3), + ).line(3), + s(:nil).line(7)).line(3) + + s(:ensure, s(:rescue, s(:resbody, s(:array), nil)), s(:nil)) assert_parse rb, pt end def test_block_append - head = s(:args) - tail = s(:zsuper) - expected = s(:block, s(:args), s(:zsuper)) + head = s(:args).line 1 + tail = s(:zsuper).line 2 + expected = s(:block, + s(:args).line(1), + s(:zsuper).line(2)).line 1 assert_equal expected, processor.block_append(head, tail) end def test_block_append_begin_begin - head = s(:begin, s(:args)) - tail = s(:begin, s(:args)) - expected = s(:block, s(:args), s(:begin, s(:args))) + head = s(:begin, s(:args).line(1)).line 1 + tail = s(:begin, s(:args).line(2)).line 2 + expected = s(:block, + s(:args).line(1), + s(:begin, + s(:args).line(2)).line(2)).line 1 assert_equal expected, processor.block_append(head, tail) end def test_block_append_block - head = s(:block, s(:args)) - tail = s(:zsuper) - expected = s(:block, s(:args), s(:zsuper)) + head = s(:block, s(:args).line(1)).line(1) + tail = s(:zsuper).line(2) + expected = s(:block, + s(:args).line(1), + s(:zsuper).line(2)).line 1 assert_equal expected, processor.block_append(head, tail) end @@ -148,140 +279,155 @@ end def test_block_append_tail_block - head = s(:call, nil, :f1) - tail = s(:block, s(:undef, s(:lit, :x)), s(:undef, s(:lit, :y))) + head = s(:call, nil, :f1).line 1 + tail = s(:block, + s(:undef, s(:lit, :x)).line(2), + s(:undef, s(:lit, :y)).line(3)).line 2 expected = s(:block, - s(:call, nil, :f1), - s(:block, s(:undef, s(:lit, :x)), s(:undef, s(:lit, :y)))) + s(:call, nil, :f1).line(1), + s(:block, + s(:undef, s(:lit, :x)).line(2), + s(:undef, s(:lit, :y)).line(3)).line(2)).line 1 assert_equal expected, processor.block_append(head, tail) end - def test_call_array_arg - rb = "1 == [:b, :c]" - pt = s(:call, s(:lit, 1), :==, s(:array, s(:lit, :b), s(:lit, :c))) + def test_block_decomp_splat + rb = "f { |(*a)| }" + pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :"*a"))) assert_parse rb, pt end - def test_call_env - processor.env[:a] = :lvar - rb = "a.happy" - pt = s(:call, s(:lvar, :a), :happy) + def test_bug121 + skip "not ready for this yet" + + rb = "if (/a/../b/)../c/; end" + pt = s(:if, + s(:flip2, + s(:flip2, + s(:match, s(:lit, /a/)), + s(:match, s(:lit, /b/))), + s(:match, (s(:lit, /c/)))), + nil, + nil) # maybe? assert_parse rb, pt end - def test_call_self_brackets - rb = "self[1]" - pt = s(:call, s(:self), :[], s(:lit, 1)) + def test_bug169 + rb = "m () {}" + pt = s(:iter, s(:call, nil, :m, s(:nil)), 0) assert_parse rb, pt end - def test_dasgn_icky2 - rb = "a do\n v = nil\n begin\n yield\n rescue Exception => v\n break\n end\nend" - pt = s(:iter, - s(:call, nil, :a), - 0, - s(:block, - s(:lasgn, :v, s(:nil)), - s(:rescue, - s(:yield), - s(:resbody, - s(:array, s(:const, :Exception), s(:lasgn, :v, s(:gvar, :$!))), - s(:break))))) + def test_bug170 + skip "not ready for this yet" + + # TODO: needs to fail on 2.1 and up + rb = '$-' + pt = s(:gvar, :"$-") assert_parse rb, pt end - def test_class_comments - rb = "# blah 1\n# blah 2\n\nclass X\n # blah 3\n def blah\n # blah 4\n end\nend" - pt = s(:class, :X, nil, - s(:defn, :blah, s(:args), s(:nil))) + def test_bug179 + rb = "p ()..nil" + pt = s(:call, nil, :p, s(:dot2, s(:begin), s(:nil))) assert_parse rb, pt - - assert_equal "# blah 1\n# blah 2\n\n", result.comments - assert_equal "# blah 3\n", result.defn.comments end - def test_module_comments - rb = "# blah 1\n \n # blah 2\n\nmodule X\n # blah 3\n def blah\n # blah 4\n end\nend" - pt = s(:module, :X, - s(:defn, :blah, s(:args), s(:nil))) + def test_bug190 + skip "not ready for this yet" + + rb = %{%r'\\\''} # stupid emacs + + assert_parse rb, :FUCK + assert_syntax_error rb, "FUCK" + + rb = %{%r'\\''} + pt = s(:lit, /'/) assert_parse rb, pt - assert_equal "# blah 1\n\n# blah 2\n\n", result.comments - assert_equal "# blah 3\n", result.defn.comments end - def test_defn_comments - rb = "# blah 1\n# blah 2\n\ndef blah\nend" - pt = s(:defn, :blah, s(:args), s(:nil)) + def test_bug191 + pt = s(:if, s(:call, nil, :a), s(:str, ""), s(:call, nil, :b)) + rb = "a ? '': b" + assert_parse rb, pt + + rb = "a ? \"\": b" assert_parse rb, pt - assert_equal "# blah 1\n# blah 2\n\n", result.comments end - def test_defs_comments - rb = "# blah 1\n# blah 2\n\ndef self.blah\nend" - pt = s(:defs, s(:self), :blah, s(:args), s(:nil)) + def test_bug202 + rb = "$测试 = 1\n测试 = 1" + pt = s(:block, + s(:gasgn, :$测试, s(:lit, 1)), + s(:lasgn, :测试, s(:lit, 1))) assert_parse rb, pt - assert_equal "# blah 1\n# blah 2\n\n", result.comments end - def test_do_bug # TODO: rename - rb = "a 1\na.b do |c|\n # do nothing\nend" - pt = s(:block, - s(:call, nil, :a, s(:lit, 1)), - s(:iter, - s(:call, s(:call, nil, :a), :b), - s(:args, :c))) + def test_bug236 + rb = "x{|a|}" + pt = s(:iter, s(:call, nil, :x), s(:args, :a)) + + assert_parse rb, pt + + rb = "x{|a,|}" + pt = s(:iter, s(:call, nil, :x), s(:args, :a, nil)) assert_parse rb, pt end - def test_bug_begin_else - rb = "begin 1; else; 2 end" - pt = s(:block, s(:lit, 1), s(:lit, 2)) + def test_bug290 + rb = "begin\n foo\nend" + pt = s(:call, nil, :foo).line(2) assert_parse rb, pt end - def test_begin_else_return_value - rb = "begin; else 2; end" - pt = s(:lit, 2) + def test_bug_and + rb = "true and []" + pt = s(:and, s(:true), s(:array)) + + assert_parse rb, pt + + rb = "true and\ntrue" + pt = s(:and, s(:true), s(:true)) assert_parse rb, pt end - def test_bug_comment_eq_begin - rb = "\n\n#\n=begin\nblah\n=end\n\n" - exp = rb.strip + "\n" + def test_bug_args_masgn + rb = "f { |(a, b), c| }" + pt = s(:iter, + s(:call, nil, :f), + s(:args, s(:masgn, :a, :b), :c)) - refute_parse rb - assert_equal exp, processor.lexer.comments + assert_parse rb, pt.dup end - def test_eq_begin_why_wont_people_use_their_spacebar? - rb = "h[k]=begin\n 42\n end" - pt = s(:attrasgn, s(:call, nil, :h), :[]=, s(:call, nil, :k), s(:lit, 42)) + def test_bug_args_masgn2 + rb = "f { |((a, b), c), d| }" + pt = s(:iter, + s(:call, nil, :f), + s(:args, s(:masgn, s(:masgn, :a, :b), :c), :d)) assert_parse rb, pt end - def test_eq_begin_line_numbers - rb = "1\n=begin\ncomment\ncomment\n=end\n2" - pt = s(:block, - s(:lit, 1).line(1), - s(:lit, 2).line(6)) + def test_bug_begin_else + rb = "begin 1; else; 2 end" - assert_parse rb, pt + assert_syntax_error rb, "else without rescue is useless" end def test_bug_call_arglist_parens - rb = 'g ( 1), 2' + rb = "g ( 1), 2" pt = s(:call, nil, :g, s(:lit, 1), s(:lit, 2)) assert_parse rb, pt @@ -306,754 +452,521 @@ assert_parse rb, pt end - def test_dstr_evstr - rb = "\"#\{'a'}#\{b}\"" - pt = s(:dstr, "a", s(:evstr, s(:call, nil, :b))) - - assert_parse rb, pt + def test_bug_case_when_regexp + rb = "case :x; when /x/ then end" + pt = s(:case, s(:lit, :x), + s(:when, s(:array, s(:lit, /x/)), nil), + nil) + + assert_parse rb, pt end - def test_dstr_str - rb = "\"#\{'a'} b\"" - pt = s(:str, "a b") + def test_bug_comma + rb = "if test ?d, dir then end" + pt = s(:if, + s(:call, nil, :test, s(:str, "d"), s(:call, nil, :dir)), + nil, + nil) assert_parse rb, pt end - def test_empty - refute_parse "" + def test_bug_comment_eq_begin + rb = "\n\n#\n=begin\nblah\n=end\n\n" + exp = rb.strip + "\n" + + refute_parse rb + assert_equal exp, processor.lexer.comments end - def test_evstr_evstr - rb = "\"#\{a}#\{b}\"" - pt = s(:dstr, "", s(:evstr, s(:call, nil, :a)), s(:evstr, s(:call, nil, :b))) + def test_bug_cond_pct + rb = "case; when %r%blahblah%; end" + pt = s(:case, nil, s(:when, s(:array, s(:lit, /blahblah/)), nil), nil) assert_parse rb, pt end - def test_evstr_str - rb = "\"#\{a} b\"" - pt = s(:dstr, "", s(:evstr, s(:call, nil, :a)), s(:str, " b")) + def test_bug_masgn_right + rb = "f { |a, (b, c)| }" + pt = s(:iter, + s(:call, nil, :f), + s(:args, :a, s(:masgn, :b, :c))) assert_parse rb, pt end - def test_lasgn_env - rb = "a = 42" - pt = s(:lasgn, :a, s(:lit, 42)) - expected_env = { :a => :lvar } + def test_bug_not_parens + rb = "not(a)" + pt = s(:call, s(:call, nil, :a), :"!") assert_parse rb, pt - assert_equal expected_env, processor.env.all end - def test_lasgn_ivar_env - rb = "@a = 42" - pt = s(:iasgn, :@a, s(:lit, 42)) + def test_bug_op_asgn_rescue + rb = "a ||= b rescue nil" + pt = s(:op_asgn_or, + s(:lvar, :a), + s(:lasgn, :a, + s(:rescue, + s(:call, nil, :b), + s(:resbody, s(:array), s(:nil))))) assert_parse rb, pt - assert_empty processor.env.all end - def test_list_append - a = s(:lit, 1) - b = s(:lit, 2) - c = s(:lit, 3) - - result = processor.list_append(s(:array, b.dup), c.dup) - - assert_equal s(:array, b, c), result - - result = processor.list_append(b.dup, c.dup) - - assert_equal s(:array, b, c), result - - result = processor.list_append(result, a.dup) - - assert_equal s(:array, b, c, a), result - - lhs, rhs = s(:array, s(:lit, :iter)), s(:when, s(:const, :BRANCHING), nil) - expected = s(:array, s(:lit, :iter), s(:when, s(:const, :BRANCHING), nil)) + def test_call_and + rb = "1 & 2" + pt = s(:call, s(:lit, 1), :&, s(:lit, 2)) - assert_equal expected, processor.list_append(lhs, rhs) + assert_parse rb, pt end - def test_list_prepend - a = s(:lit, 1) - b = s(:lit, 2) - c = s(:lit, 3) - - result = processor.list_prepend(b.dup, s(:array, c.dup)) - - assert_equal s(:array, b, c), result - - result = processor.list_prepend(b.dup, c.dup) - - assert_equal s(:array, b, c), result - - result = processor.list_prepend(a.dup, result) + def test_call_args_command + rb = "a.b c.d 1" + pt = s(:call, s(:call, nil, :a), :b, + s(:call, s(:call, nil, :c), :d, + s(:lit, 1))) - assert_equal s(:array, a, b, c), result + assert_parse rb, pt end - def test_literal_concat_dstr_dstr - lhs = s(:dstr, "Failed to download spec ", - s(:evstr, s(:call, nil, :spec_name)), - s(:str, " from "), - s(:evstr, s(:call, nil, :source_uri)), - s(:str, ":\n")) - rhs = s(:dstr, "\t", - s(:evstr, s(:call, s(:ivar, :@fetch_error), :message))) - expected = s(:dstr, "Failed to download spec ", - s(:evstr, s(:call, nil, :spec_name)), - s(:str, " from "), - s(:evstr, s(:call, nil, :source_uri)), - s(:str, ":\n"), - s(:str, "\t"), - s(:evstr, s(:call, s(:ivar, :@fetch_error), :message))) + def test_call_array_arg + rb = "1 == [:b, :c]" + pt = s(:call, s(:lit, 1), :==, s(:array, s(:lit, :b), s(:lit, :c))) - assert_equal expected, processor.literal_concat(lhs, rhs) + assert_parse rb, pt end - def test_literal_concat_dstr_evstr - lhs, rhs = s(:dstr, "a"), s(:evstr, s(:call, nil, :b)) - expected = s(:dstr, "a", s(:evstr, s(:call, nil, :b))) + def test_call_bang_command_call + rb = "! a.b 1" + pt = s(:not, s(:call, s(:call, nil, :a), :b, s(:lit, 1))) - assert_equal expected, processor.literal_concat(lhs, rhs) + assert_parse rb, pt end - def test_literal_concat_evstr_evstr - lhs, rhs = s(:evstr, s(:lit, 1)), s(:evstr, s(:lit, 2)) - expected = s(:dstr, "", s(:evstr, s(:lit, 1)), s(:evstr, s(:lit, 2))) + def test_call_bang_squiggle + rb = "1 !~ 2" + pt = s(:not, s(:call, s(:lit, 1), :=~, s(:lit, 2))) # TODO: check for 1.9+ - assert_equal expected, processor.literal_concat(lhs, rhs) + assert_parse rb, pt end - def test_literal_concat_str_evstr - lhs, rhs = s(:str, ""), s(:evstr, s(:str, "blah")) + def test_call_carat + rb = "1 ^ 2" + pt = s(:call, s(:lit, 1), :^, s(:lit, 2)) - assert_equal s(:str, "blah"), processor.literal_concat(lhs, rhs) + assert_parse rb, pt end - def test_logical_op_12 - lhs = s(:lit, 1) - rhs = s(:lit, 2) - exp = s(:and, s(:lit, 1), s(:lit, 2)) + def test_call_colon2 + rb = "A::b" + pt = s(:call, s(:const, :A), :b) - assert_equal exp, processor.logical_op(:and, lhs, rhs) + assert_parse rb, pt end - def test_logical_op_1234_5 - lhs = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:and, s(:lit, 3), s(:lit, 4)))) - rhs = s(:lit, 5) - exp = s(:and, - s(:lit, 1), - s(:and, - s(:lit, 2), - s(:and, - s(:lit, 3), - s(:and, - s(:lit, 4), - s(:lit, 5))))) + def test_call_div + rb = "1 / 2" + pt = s(:call, s(:lit, 1), :/, s(:lit, 2)) - assert_equal exp, processor.logical_op(:and, lhs, rhs) + assert_parse rb, pt end - def test_logical_op_123_4 - lhs = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:lit, 3))) - rhs = s(:lit, 4) - exp = s(:and, - s(:lit, 1), - s(:and, - s(:lit, 2), - s(:and, - s(:lit, 3), - s(:lit, 4)))) + def test_call_env + processor.env[:a] = :lvar + rb = "a.happy" + pt = s(:call, s(:lvar, :a), :happy) - assert_equal exp, processor.logical_op(:and, lhs, rhs) + assert_parse rb, pt end - def test_logical_op_12_3 - lhs = s(:and, s(:lit, 1), s(:lit, 2)) - rhs = s(:lit, 3) - exp = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:lit, 3))) + def test_call_eq3 + rb = "1 === 2" + pt = s(:call, s(:lit, 1), :===, s(:lit, 2)) - assert_equal exp, processor.logical_op(:and, lhs, rhs) + assert_parse rb, pt end - def test_logical_op_nested_mix - lhs = s(:or, s(:call, nil, :a), s(:call, nil, :b)) - rhs = s(:and, s(:call, nil, :c), s(:call, nil, :d)) - exp = s(:or, - s(:or, s(:call, nil, :a), s(:call, nil, :b)), - s(:and, s(:call, nil, :c), s(:call, nil, :d))) - - lhs.paren = true - rhs.paren = true + def test_call_gt + rb = "1 > 2" + pt = s(:call, s(:lit, 1), :>, s(:lit, 2)) - assert_equal exp, processor.logical_op(:or, lhs, rhs) + assert_parse rb, pt end - def test_str_evstr - rb = "\"a #\{b}\"" - pt = s(:dstr, "a ", s(:evstr, s(:call, nil, :b))) + def test_call_lt + rb = "1 < 2" + pt = s(:call, s(:lit, 1), :<, s(:lit, 2)) assert_parse rb, pt end - def test_dsym_to_sym - pt = s(:alias, s(:lit, :<<), s(:lit, :>>)) + def test_call_lte + rb = "1 <= 2" + pt = s(:call, s(:lit, 1), :<=, s(:lit, 2)) - rb = "alias :<< :>>" assert_parse rb, pt + end + + def test_call_not + rb = "not 42" + pt = s(:not, s(:lit, 42)) - rb = 'alias :"<<" :">>"' assert_parse rb, pt end - def test_regexp - regexps = { - "/wtf/" => /wtf/, - "/wtf/n" => /wtf/n, - "/wtf/m" => /wtf/m, - "/wtf/nm" => /wtf/nm, - "/wtf/nmnmnmnm" => /wtf/nm, - } - - regexps.each do |rb, lit| - assert_parse rb, s(:lit, lit) - end + def test_call_pipe + rb = "1 | 2" + pt = s(:call, s(:lit, 1), :|, s(:lit, 2)) - # TODO: add more including interpolation etc + assert_parse rb, pt end - def test_label_vs_string - rb = "_buf << ':\n'" - pt = s(:call, s(:call, nil, :_buf), :<<, s(:str, ":\n")) + def test_call_rshift + rb = "1 >> 2" + pt = s(:call, s(:lit, 1), :>>, s(:lit, 2)) assert_parse rb, pt end - def test_str_backslashes - long_string = '\n' * 100 - rb = "x '#{long_string}'" - pt = s(:call, nil, :x, s(:str, long_string)) + def test_call_self_brackets + rb = "self[1]" + pt = s(:call, s(:self), :[], s(:lit, 1)) assert_parse rb, pt end - def test_str_pct_Q_nested - rb = "%Q[before [#\{nest}] after]" - pt = s(:dstr, "before [", s(:evstr, s(:call, nil, :nest)), s(:str, "] after")) + def test_call_spaceship + rb = "1 <=> 2" + pt = s(:call, s(:lit, 1), :<=>, s(:lit, 2)) assert_parse rb, pt end - def test_str_pct_q - rb = "%q{a b c}" - pt = s(:str, "a b c") + def test_call_star + rb = "1 * 2" + pt = s(:call, s(:lit, 1), :"*", s(:lit, 2)) assert_parse rb, pt end - # def test_str_pct_nested_nested - # rb = "%{ { #\{ \"#\{1}\" } } }" - # assert_equal " { 1 } ", eval(rb) - # pt = s(:dstr, " { ", s(:evstr, s(:lit, 1)), s(:str, " } ")) - # - # assert_parse rb, pt - # end - - def test_str_str - rb = "\"a #\{'b'}\"" - pt = s(:str, "a b") + def test_call_star2 + rb = "1 ** 2" + pt = s(:call, s(:lit, 1), :"**", s(:lit, 2)) assert_parse rb, pt end - def test_str_str_str - rb = "\"a #\{'b'} c\"" - pt = s(:str, "a b c") + def test_call_unary_bang + rb = "!1" + pt = s(:not, s(:lit, 1)) assert_parse rb, pt end - def test_str_newline_hash_line_number - rb = "\"\\n\\n\\n\\n#\"\n1" - pt = s(:block, s(:str, "\n\n\n\n#").line(1), - s(:lit, 1).line(2)) + def test_class_comments + rb = "# blah 1\n# blah 2\n\nclass X\n # blah 3\n def blah\n # blah 4\n end\nend" + pt = s(:class, :X, nil, + s(:defn, :blah, s(:args), s(:nil))) assert_parse rb, pt - end - def after_process_hook klass, node, data, input_name, output_name - assert_equal 1, @result.line, "should have proper line number" + assert_equal "# blah 1\n# blah 2\n\n", result.comments + assert_equal "# blah 3\n", result.defn.comments end - def test_parse_line_block - rb = "a = 42\np a" - pt = s(:block, - s(:lasgn, :a, s(:lit, 42)), - s(:call, nil, :p, s(:lvar, :a))) + def test_cond_unary_minus + rb = "if -1; end" + pt = s(:if, s(:lit, -1), nil, nil) - assert_parse_line rb, pt, 1 - assert_equal 1, result.lasgn.line, "lasgn should have line number" - assert_equal 2, result.call.line, "call should have line number" + assert_parse rb, pt + end - expected = "(string)" - assert_equal expected, result.file - assert_equal expected, result.lasgn.file - assert_equal expected, result.call.file + def test_dasgn_icky2 + rb = "a do\n v = nil\n begin\n yield\n rescue Exception => v\n break\n end\nend" + pt = s(:iter, + s(:call, nil, :a), + 0, + s(:block, + s(:lasgn, :v, s(:nil)), + s(:rescue, + s(:yield), + s(:resbody, + s(:array, s(:const, :Exception), s(:lasgn, :v, s(:gvar, :$!))), + s(:break))))) - assert_same result.file, result.lasgn.file - assert_same result.file, result.call.file + assert_parse rb, pt end - def test_parse_line_block_inline_comment - rb = "a\nb # comment\nc" - pt = s(:block, - s(:call, nil, :a).line(1), - s(:call, nil, :b).line(2), - s(:call, nil, :c).line(3)) + def test_defined_eh_parens + rb = "defined?(42)" + pt = s(:defined, s(:lit, 42)) assert_parse rb, pt end - def test_parse_line_block_inline_multiline_comment - rb = "a\nb # comment\n# another comment\nc" - pt = s(:block, - s(:call, nil, :a).line(1), - s(:call, nil, :b).line(2), - s(:call, nil, :c).line(4)).line(1) + def test_defn_comments + rb = "# blah 1\n# blah 2\n\ndef blah\nend" + pt = s(:defn, :blah, s(:args), s(:nil)) assert_parse rb, pt + assert_equal "# blah 1\n# blah 2\n\n", result.comments end - def test_parse_line_block_inline_comment_leading_newlines - rb = "\n\n\na\nb # comment\n# another comment\nc" - pt = s(:block, - s(:call, nil, :a).line(4), - s(:call, nil, :b).line(5), - s(:call, nil, :c).line(7)).line(4) + def test_defns_reserved + rb = "def self.return; end" + pt = s(:defs, s(:self), :return, s(:args), s(:nil)) assert_parse rb, pt end - def test_parse_line_call_no_args - rb = "f do |x, y|\n x + y\nend" - - pt = s(:iter, - s(:call, nil, :f), - s(:args, :x, :y), - s(:call, s(:lvar, :x), :+, s(:lvar, :y))) + def test_defs_as_arg_with_do_block_inside + rb = "p def self.b; x.y do; end; end" + pt = s(:call, + nil, + :p, + s(:defs, s(:self), :b, s(:args), + s(:iter, s(:call, s(:call, nil, :x), :y), 0))) - assert_parse_line rb, pt, 1 - assert_equal 1, result[1].line, "call should have line number" - assert_equal 1, result[2].line, "masgn should have line number" - assert_equal 2, result[3].line, "call should have line number" + assert_parse rb, pt end - def test_parse_line_call_ivar_line_break_paren - rb = "a(@b\n)" - pt = s(:call, nil, :a, s(:ivar, :@b).line(1)).line(1) + def test_defs_comments + rb = "# blah 1\n# blah 2\n\ndef self.blah\nend" + pt = s(:defs, s(:self), :blah, s(:args), s(:nil)) assert_parse rb, pt + assert_equal "# blah 1\n# blah 2\n\n", result.comments end - def test_parse_line_call_ivar_arg_no_parens_line_break - rb = "a @b\n" - pt = s(:call, nil, :a, s(:ivar, :@b).line(1)).line(1) + def test_do_bug # TODO: rename + rb = "a 1\na.b do |c|\n # do nothing\nend" + pt = s(:block, + s(:call, nil, :a, s(:lit, 1)), + s(:iter, + s(:call, s(:call, nil, :a), :b), + s(:args, :c))) assert_parse rb, pt end - def test_parse_line_defn_no_parens - pt = s(:defn, :f, s(:args), s(:nil)) + def test_double_block_error_01 + assert_syntax_error "a(1, &b) { }", BLOCK_DUP_MSG + end - rb = "def f\nend" - assert_parse_line rb, pt, 1 + def test_double_block_error_02 + assert_syntax_error "a(1, &b) do end", BLOCK_DUP_MSG + end - processor.reset + def test_double_block_error_03 + assert_syntax_error "a 1, &b do end", BLOCK_DUP_MSG + end - rb = "def f\n\nend" - assert_parse_line rb, pt, 1 + def test_double_block_error_04 + assert_syntax_error "m.a(1, &b) { }", BLOCK_DUP_MSG end - def test_parse_line_defn_complex - rb = "def x(y)\n p(y)\n y *= 2\n return y;\nend" # TODO: remove () & ; - pt = s(:defn, :x, s(:args, :y), - s(:call, nil, :p, s(:lvar, :y)), - s(:lasgn, :y, s(:call, s(:lvar, :y), :*, s(:lit, 2))), - s(:return, s(:lvar, :y))) + def test_double_block_error_05 + assert_syntax_error "m.a(1, &b) do end", BLOCK_DUP_MSG + end - assert_parse_line rb, pt, 1 + def test_double_block_error_06 + assert_syntax_error "m.a 1, &b do end", BLOCK_DUP_MSG + end - body = result - assert_equal 2, body.call.line, "call should have line number" - assert_equal 3, body.lasgn.line, "lasgn should have line number" - assert_equal 4, body.return.line, "return should have line number" + def test_double_block_error_07 + assert_syntax_error "m::a(1, &b) { }", BLOCK_DUP_MSG end - def test_parse_line_evstr_after_break - rb = "\"a\"\\\n\"\#{b}\"" - pt = s(:dstr, "a", - s(:evstr, - s(:call, nil, :b).line(2)).line(2)).line(1) + def test_double_block_error_08 + assert_syntax_error "m::a(1, &b) do end", BLOCK_DUP_MSG + end - assert_parse rb, pt + def test_double_block_error_09 + assert_syntax_error "m::a 1, &b do end", BLOCK_DUP_MSG end - def test_parse_line_dstr_newline - skip "dstr line numbers are just gonna be screwed for a while..." + def test_dstr_evstr + rb = %q("#{'a'}#{b}") + pt = s(:dstr, "a", s(:evstr, s(:call, nil, :b))) - rb = <<-'CODE' - "a\n#{ - }" - true - CODE + assert_parse rb, pt + end - pt = s(:block, - s(:dstr, "a\n", - s(:evstr)).line(1), - s(:true).line(3)) + def test_dstr_evstr_empty_end + rb = ':"#{field}"' + pt = s(:dsym, "", s(:evstr, s(:call, nil, :field))) assert_parse rb, pt end - def test_parse_line_hash_lit - rb = "{\n:s1 => 1,\n}" - pt = s(:hash, - s(:lit, :s1).line(2), s(:lit, 1).line(2), - ).line(1) + def test_dstr_str + rb = %q("#{'a'} b") + pt = s(:str, "a b") assert_parse rb, pt end - def test_parse_line_heredoc_evstr - skip "heredoc line numbers are just gonna be screwed for a while..." + def test_dsym_to_sym + pt = s(:alias, s(:lit, :<<), s(:lit, :>>)) - rb = "<<-A\na\n\#{b}\nA" - pt = s(:dstr, "a\n", - s(:evstr, - s(:call, nil, :b).line(3)), - s(:str, "\n")).line(1) + rb = "alias :<< :>>" + assert_parse rb, pt + rb = 'alias :"<<" :">>"' assert_parse rb, pt end - def test_parse_line_multiline_str - rb = "\"a\nb\"\n1" + def test_empty + refute_parse "" + end + + def test_eq_begin_line_numbers + rb = "1\n=begin\ncomment\ncomment\n=end\n2" pt = s(:block, - s(:str, "a\nb").line(1), - s(:lit, 1).line(3)).line(1) + s(:lit, 1).line(1), + s(:lit, 2).line(6)) assert_parse rb, pt end - def test_parse_line_multiline_str_literal_n - rb = "\"a\\nb\"\n1" - pt = s(:block, - s(:str, "a\nb").line(1), - s(:lit, 1).line(2)).line(1) + def test_eq_begin_why_wont_people_use_their_spacebar? + rb = "h[k]=begin\n 42\n end" + pt = s(:attrasgn, s(:call, nil, :h), :[]=, s(:call, nil, :k), s(:lit, 42)) assert_parse rb, pt end - def test_parse_line_iter_call_parens - rb = "f(a) do |x, y|\n x + y\nend" + def test_evstr_evstr + rb = %q("#{a}#{b}") + pt = s(:dstr, "", s(:evstr, s(:call, nil, :a)), s(:evstr, s(:call, nil, :b))) - pt = s(:iter, - s(:call, nil, :f, s(:call, nil, :a)), - s(:args, :x, :y), - s(:call, s(:lvar, :x), :+, s(:lvar, :y))) + assert_parse rb, pt + end - assert_parse_line rb, pt, 1 + def test_evstr_str + rb = %q("#{a} b") + pt = s(:dstr, "", s(:evstr, s(:call, nil, :a)), s(:str, " b")) - assert_equal 1, result[1].line, "call should have line number" - assert_equal 1, result[2].line, "masgn should have line number" - assert_equal 2, result[3].line, "call should have line number" + assert_parse rb, pt end - def test_parse_line_iter_call_no_parens - rb = "f a do |x, y|\n x + y\nend" - - pt = s(:iter, - s(:call, nil, :f, s(:call, nil, :a).line(1)).line(1), - s(:args, :x, :y).line(1), - s(:call, s(:lvar, :x).line(2), :+, - s(:lvar, :y).line(2)).line(2)).line(1) + def test_flip2_env_lvar + rb = "if a..b then end" + pt = s(:if, s(:flip2, s(:call, nil, :a), s(:call, nil, :b)), nil, nil) assert_parse rb, pt - end - def test_parse_line_heredoc - rb = <<-CODE - string = <<-HEREDOC - very long string - HEREDOC - puts string - CODE + top_env = processor.env.env.first - pt = s(:block, - s(:lasgn, :string, - s(:str, " very long string\n").line(1)).line(1), - s(:call, nil, :puts, s(:lvar, :string).line(4)).line(4)).line(1) + assert_kind_of Hash, top_env - assert_parse rb, pt + flip = top_env.find { |k, _| k =~ /^flip/ } + + assert flip + assert_equal :lvar, flip.last end - def test_parse_line_heredoc_regexp_chars - rb = <<-CODE - string = <<-"^D" - very long string - ^D - puts string - CODE - - pt = s(:block, - s(:lasgn, :string, - s(:str, " very long string\n").line(1)).line(1), - s(:call, nil, :puts, s(:lvar, :string).line(4)).line(4)).line(1) - - assert_parse rb, pt - end - - def test_parse_line_newlines - rb = "true\n\n" - pt = s(:true) - - assert_parse_line rb, pt, 1 - end - - def test_parse_line_rescue - rb = "begin\n a\n rescue\n b\n rescue\n c\n end\n" - pt = s(:rescue, - s(:call, nil, :a).line(2), - s(:resbody, s(:array).line(3), - s(:call, nil, :b).line(4)).line(3), - s(:resbody, s(:array).line(5), - s(:call, nil, :c).line(6)).line(5)).line(1) - - assert_parse_line rb, pt, 1 - end - - def test_parse_line_return - rb = <<-RUBY - def blah - if true then - return 42 - end - end - RUBY - - pt = s(:defn, :blah, s(:args), - s(:if, s(:true), - s(:return, s(:lit, 42)), - nil)) - - assert_parse_line rb, pt, 1 - - assert_equal 3, result.if.return.line - assert_equal 3, result.if.return.lit.line - end - - def test_parse_line_str_with_newline_escape - rb = 'a("\n", true)' - pt = s(:call, nil, :a, - s(:str, "\n").line(1), - s(:true).line(1)) - - assert_parse rb, pt - end - - def test_parse_line_trailing_newlines - rb = "a \nb" - pt = s(:block, - s(:call, nil, :a).line(1), - s(:call, nil, :b).line(2)).line(1) - - assert_parse rb, pt - end - - def test_bug_and - rb = "true and []" - pt = s(:and, s(:true), s(:array)) - - assert_parse rb, pt - - rb = "true and\ntrue" - pt = s(:and, s(:true), s(:true)) - - assert_parse rb, pt - end - - def test_bug_cond_pct - rb = "case; when %r%blahblah%; end" - pt = s(:case, nil, s(:when, s(:array, s(:lit, /blahblah/)), nil), nil) - - assert_parse rb, pt - end - - # according to 2.3.1 parser -- added: ON 1.8 only: - # rp.process("f { |(a,b),c| }") == rp.process("f { |((a,b),c)| }") - - # ruby18 -e "p lambda { |(a,b)| }.arity" # => 2 - # ruby19 -e "p lambda { |(a,b)| }.arity" # => 1 - # ruby18 -e "p lambda { |(a,b),c| }.arity" # => 2 - # ruby19 -e "p lambda { |(a,b),c| }.arity" # => 2 - # ruby18 -e "p lambda { |((a,b),c)| }.arity" # => 2 - # ruby19 -e "p lambda { |((a,b),c)| }.arity" # => 1 - - def test_bug_args_masgn - rb = "f { |(a, b), c| }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, s(:masgn, :a, :b), :c)) + def test_fubar_nesting + err = "class definition in method body" - assert_parse rb, pt.dup + assert_syntax_error "def a; class B; end; end", err + assert_syntax_error "def a; def b; end; class B; end; end", err end - def test_bug_args_masgn2 - rb = "f { |((a, b), c), d| }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, s(:masgn, s(:masgn, :a, :b), :c), :d)) + def test_heredoc_bad_hex_escape + rb = "s = <, s(:lit, 2)) + def test_label_vs_string + rb = "_buf << ':\n'" + pt = s(:call, s(:call, nil, :_buf), :<<, s(:str, ":\n")) assert_parse rb, pt end - def test_call_lt - rb = "1 < 2" - pt = s(:call, s(:lit, 1), :<, s(:lit, 2)) + def test_lasgn_arg_rescue_arg + rb = "a = 1 rescue 2" + pt = s(:lasgn, :a, s(:rescue, s(:lit, 1), s(:resbody, s(:array), s(:lit, 2)))) assert_parse rb, pt end - def test_call_lte - rb = "1 <= 2" - pt = s(:call, s(:lit, 1), :<=, s(:lit, 2)) + def test_lasgn_call_bracket_rescue_arg + rb = "a = b(1) rescue 2" + pt = s(:lasgn, :a, + s(:rescue, + s(:call, nil, :b, s(:lit, 1)), + s(:resbody, s(:array), s(:lit, 2)))) assert_parse rb, pt end - def test_call_spaceship - rb = "1 <=> 2" - pt = s(:call, s(:lit, 1), :<=>, s(:lit, 2)) + def test_lasgn_command + rb = "a = b.c 1" + pt = s(:lasgn, :a, s(:call, s(:call, nil, :b), :c, s(:lit, 1))) assert_parse rb, pt end - def test_call_and - rb = "1 & 2" - pt = s(:call, s(:lit, 1), :&, s(:lit, 2)) + def test_lasgn_env + rb = "a = 42" + pt = s(:lasgn, :a, s(:lit, 42)) + expected_env = { :a => :lvar } + + assert_parse rb, pt + assert_equal expected_env, processor.env.all + end + + def test_lasgn_ivar_env + rb = "@a = 42" + pt = s(:iasgn, :@a, s(:lit, 42)) + + assert_parse rb, pt + assert_empty processor.env.all + end + + def test_list_append + a = s(:lit, 1) + b = s(:lit, 2) + c = s(:lit, 3) + + result = processor.list_append(s(:array, b.dup), c.dup) + + assert_equal s(:array, b, c), result + + result = processor.list_append(b.dup, c.dup) + + assert_equal s(:array, b, c), result + + result = processor.list_append(result, a.dup) + + assert_equal s(:array, b, c, a), result + + lhs, rhs = s(:array, s(:lit, :iter)), s(:when, s(:const, :BRANCHING), nil) + expected = s(:array, s(:lit, :iter), s(:when, s(:const, :BRANCHING), nil)) + + assert_equal expected, processor.list_append(lhs, rhs) + end + + def test_list_prepend + a = s(:lit, 1) + b = s(:lit, 2) + c = s(:lit, 3) + + result = processor.list_prepend(b.dup, s(:array, c.dup)) + + assert_equal s(:array, b, c), result + + result = processor.list_prepend(b.dup, c.dup) + + assert_equal s(:array, b, c), result + + result = processor.list_prepend(a.dup, result) + + assert_equal s(:array, a, b, c), result + end + + def test_literal_concat_dstr_dstr + lhs = s(:dstr, "Failed to download spec ", + s(:evstr, s(:call, nil, :spec_name)), + s(:str, " from "), + s(:evstr, s(:call, nil, :source_uri)), + s(:str, ":\n")).line 1 + rhs = s(:dstr, "\t", + s(:evstr, s(:call, s(:ivar, :@fetch_error), :message))).line 2 + + expected = s(:dstr, "Failed to download spec ", + s(:evstr, s(:call, nil, :spec_name)), + s(:str, " from "), + s(:evstr, s(:call, nil, :source_uri)), + s(:str, ":\n"), + s(:str, "\t"), + s(:evstr, s(:call, s(:ivar, :@fetch_error), :message))) + + lhs.deep_each do |s| + s.line = 1 + end + + rhs.deep_each do |s| + s.line = 1 + end + + assert_equal expected, processor.literal_concat(lhs, rhs) + end + + def test_literal_concat_dstr_evstr + lhs, rhs = s(:dstr, "a"), s(:evstr, s(:call, nil, :b)) + expected = s(:dstr, "a", s(:evstr, s(:call, nil, :b))) + + assert_equal expected, processor.literal_concat(lhs, rhs) + end + + def test_literal_concat_evstr_evstr + lhs = s(:evstr, s(:lit, 1)).line 1 + rhs = s(:evstr, s(:lit, 2)).line 2 + expected = s(:dstr, "", s(:evstr, s(:lit, 1)), s(:evstr, s(:lit, 2))) + + assert_equal expected, processor.literal_concat(lhs, rhs) + end + + def test_literal_concat_str_evstr + lhs = s(:str, "").line 1 + rhs = s(:evstr, s(:str, "blah").line(2)).line 2 + + assert_equal s(:str, "blah"), processor.literal_concat(lhs, rhs) + end + + def test_logical_op_12 + lhs = s(:lit, 1).line 1 + rhs = s(:lit, 2).line 2 + exp = s(:and, s(:lit, 1).line(1), s(:lit, 2).line(2)).line 1 + + assert_equal exp, processor.logical_op(:and, lhs, rhs) + end + + def test_logical_op_1234_5 + lhs = s(:and, + s(:lit, 1).line(1), + s(:and, + s(:lit, 2).line(2), + s(:and, + s(:lit, 3).line(3), + s(:lit, 4).line(4)).line(3)).line(2)).line 1 + rhs = s(:lit, 5).line(5) + exp = s(:and, + s(:lit, 1).line(1), + s(:and, + s(:lit, 2).line(2), + s(:and, + s(:lit, 3).line(3), + s(:and, + s(:lit, 4).line(4), + s(:lit, 5).line(5)).line(4)).line(3)).line(2)).line 1 + + assert_equal exp, processor.logical_op(:and, lhs, rhs) + end + + def test_logical_op_123_4 + lhs = s(:and, + s(:lit, 1).line(1), + s(:and, + s(:lit, 2).line(2), + s(:lit, 3).line(3)).line(2)).line 1 + rhs = s(:lit, 4).line 4 + exp = s(:and, + s(:lit, 1).line(1), + s(:and, + s(:lit, 2).line(2), + s(:and, + s(:lit, 3).line(3), + s(:lit, 4).line(4)).line(3)).line(2)).line 1 + + assert_equal exp, processor.logical_op(:and, lhs, rhs) + end + + def test_logical_op_12_3 + lhs = s(:and, + s(:lit, 1).line(1), + s(:lit, 2).line(2)).line 1 + rhs = s(:lit, 3).line 3 + exp = s(:and, + s(:lit, 1).line(1), + s(:and, + s(:lit, 2).line(2), + s(:lit, 3).line(3)).line(2)).line 1 + + assert_equal exp, processor.logical_op(:and, lhs, rhs) + end + + def test_logical_op_nested_mix + lhs = s(:or, + s(:call, nil, :a).line(1), + s(:call, nil, :b).line(2)).line 1 + rhs = s(:and, + s(:call, nil, :c).line(3), + s(:call, nil, :d).line(4)).line 3 + exp = s(:or, + s(:or, + s(:call, nil, :a).line(1), + s(:call, nil, :b).line(2)).line(1), + s(:and, + s(:call, nil, :c).line(3), + s(:call, nil, :d).line(4)).line(3)).line 1 + + lhs.paren = true + rhs.paren = true + + assert_equal exp, processor.logical_op(:or, lhs, rhs) + end + + def test_magic_encoding_comment + rb = "# encoding: utf-8\nclass ExampleUTF8ClassNameVarietà; def self.è; così = :però; end\nend\n" + + rb.force_encoding "ASCII-8BIT" if rb.respond_to? :force_encoding + + # TODO: class vars + # TODO: odd-ternary: a ?bb : c + # TODO: globals + + pt = s(:class, :"ExampleUTF8ClassNameVariet\303\240", nil, + s(:defs, s(:self), :"\303\250", s(:args), + s(:lasgn, :"cos\303\254", s(:lit, :"per\303\262")))) + + err = RUBY_VERSION =~ /^1\.8/ ? "Skipping magic encoding comment\n" : "" + + assert_output "", err do + assert_parse rb, pt + end + end + + def test_magic_encoding_comment__bad + rb = "#encoding: bunk\n0" + pt = s(:lit, 0) + + assert_parse rb, pt + end + + def test_utf8_bom + rb = "\xEF\xBB\xBF#!/usr/bin/env ruby -w\np 0\n" + pt = s(:call, nil, :p, s(:lit, 0)) + + assert_parse rb, pt + end + + def test_masgn_arg_colon_arg + rb = "a, b::c = d" + pt = s(:masgn, + s(:array, + s(:lasgn, :a).line(1), + s(:attrasgn, + s(:call, nil, :b).line(1), + :c=).line(1)).line(1), + s(:to_ary, + s(:call, nil, :d).line(1)).line(1)).line(1) + + assert_parse rb, pt + end + + def test_masgn_arg_ident + rb = "a, b.C = d" + pt = s(:masgn, + s(:array, s(:lasgn, :a), s(:attrasgn, s(:call, nil, :b), :"C=")), + s(:to_ary, s(:call, nil, :d))) + + assert_parse rb, pt + end + + def test_masgn_colon2 + rb = "a, b::C = 1, 2" + pt = s(:masgn, + s(:array, s(:lasgn, :a), s(:const, s(:colon2, s(:call, nil, :b), :C))), + s(:array, s(:lit, 1), s(:lit, 2))) + + assert_parse rb, pt + end + + def test_masgn_colon3 + rb = "::A, ::B = 1, 2" + pt = s(:masgn, + s(:array, s(:const, nil, s(:colon3, :A)), s(:const, s(:colon3, :B))), + s(:array, s(:lit, 1), s(:lit, 2))) + + assert_parse rb, pt + end + + def test_masgn_command_call + rb = "a, = b.c 1" + pt = s(:masgn, + s(:array, s(:lasgn, :a)), + s(:to_ary, s(:call, s(:call, nil, :b), :c, s(:lit, 1)))) + + assert_parse rb, pt + end + + def test_masgn_double_paren + rb = "((a,b))=c" # TODO: blog + pt = s(:masgn, + s(:array, s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b)))), + s(:to_ary, s(:call, nil, :c))) + + assert_parse rb, pt + end + + def test_masgn_lhs_splat + rb = "*a = 1, 2, 3" + pt = s(:masgn, + s(:array, s(:splat, s(:lasgn, :a))), + s(:array, s(:lit, 1), s(:lit, 2), s(:lit, 3))) + + assert_parse rb, pt + end + + def test_masgn_paren + rb = "(a, b) = c.d" + pt = s(:masgn, + s(:array, s(:lasgn, :a), s(:lasgn, :b)), + s(:to_ary, s(:call, s(:call, nil, :c), :d))) + + assert_parse rb, pt + end + + def test_masgn_star + rb = "* = 1" + pt = s(:masgn, + s(:array, s(:splat)), + s(:to_ary, s(:lit, 1))) + + assert_parse rb, pt + end + + def test_module_comments + rb = "# blah 1\n \n # blah 2\n\nmodule X\n # blah 3\n def blah\n # blah 4\n end\nend" + pt = s(:module, :X, + s(:defn, :blah, s(:args), s(:nil))) + + assert_parse rb, pt + assert_equal "# blah 1\n\n# blah 2\n\n", result.comments + assert_equal "# blah 3\n", result.defn.comments + end + + def test_non_interpolated_word_array_line_breaks + rb = "%w(\na\nb\n)\n1" + pt = s(:block, + s(:array, + s(:str, "a").line(2), + s(:str, "b").line(3)).line(1), + s(:lit, 1).line(5)) + assert_parse rb, pt + end + + def test_op_asgn_command_call + rb = "a ||= b.c 2" + pt = s(:op_asgn_or, + s(:lvar, :a), + s(:lasgn, :a, s(:call, s(:call, nil, :b), :c, s(:lit, 2)))) + + assert_parse rb, pt + end + + def test_op_asgn_dot_ident_command_call + rb = "A.B ||= c 1" + pt = s(:op_asgn, s(:const, :A), s(:call, nil, :c, s(:lit, 1)), :B, :"||") + + assert_parse rb, pt + end + + def test_op_asgn_index_command_call + rb = "a[:b] ||= c 1, 2" + pt = s(:op_asgn1, s(:call, nil, :a), s(:arglist, s(:lit, :b)), + :"||", + s(:call, nil, :c, s(:lit, 1), s(:lit, 2))) + + assert_parse rb, pt + end + + def test_op_asgn_primary_colon_identifier1 + rb = "A::b += 1" + pt = s(:op_asgn, s(:const, :A), s(:lit, 1), :b, :+) # TODO: check? looks wack + + assert_parse rb, pt + end + + def test_lasgn_middle_splat + rb = "a = b, *c, d" + pt = s(:lasgn, :a, + s(:svalue, + s(:array, + s(:call, nil, :b), + s(:splat, s(:call, nil, :c)), + s(:call, nil, :d)))) + + assert_parse rb, pt + end + + def test_op_asgn_primary_colon_const_command_call + rb = "A::B *= c d" + pt = s(:op_asgn, s(:const, :A), + s(:call, nil, :c, s(:call, nil, :d)), + :B, :*) + + assert_parse rb, pt + end + + def test_op_asgn_primary_colon_identifier_command_call + rb = "A::b *= c d" + pt = s(:op_asgn, s(:const, :A), + s(:call, nil, :c, s(:call, nil, :d)), + :b, :*) + + assert_parse rb, pt + end + + def test_op_asgn_val_dot_ident_command_call + rb = "a.b ||= c 1" + pt = s(:op_asgn, s(:call, nil, :a), s(:call, nil, :c, s(:lit, 1)), :b, :"||") + + assert_parse rb, pt + end + + def test_parse_comments + p = RubyParser.new + sexp = p.parse <<-CODE + # class comment + class Inline + def show + # woot + end + + # Returns a list of things + def list + # woot + end + end + CODE + + assert_equal "# class comment\n", sexp.comments + act = sexp.find_nodes(:defn).map(&:comments) + exp = ["", "# Returns a list of things\n"] + + assert_equal exp, act + assert_equal [], processor.comments + assert_equal "", processor.lexer.comments + end + + def test_parse_if_not_canonical + rb = "if not var.nil? then 'foo' else 'bar'\nend" + pt = s(:if, + s(:call, s(:call, nil, :var), :nil?), + s(:str, "bar"), + s(:str, "foo")) + + assert_parse rb, pt + end + + def test_parse_if_not_noncanonical + rb = "if not var.nil? then 'foo' else 'bar'\nend" + pt = s(:if, + s(:not, s(:call, s(:call, nil, :var), :nil?)), + s(:str, "foo"), + s(:str, "bar")) + + processor.canonicalize_conditions = false + + assert_parse rb, pt + end + + def test_parse_line_block + rb = "a = 42\np a" + pt = s(:block, + s(:lasgn, :a, s(:lit, 42)), + s(:call, nil, :p, s(:lvar, :a))) + + assert_parse_line rb, pt, 1 + assert_equal 1, result.lasgn.line, "lasgn should have line number" + assert_equal 2, result.call.line, "call should have line number" + + expected = "(string)" + assert_equal expected, result.file + assert_equal expected, result.lasgn.file + assert_equal expected, result.call.file + + assert_same result.file, result.lasgn.file + assert_same result.file, result.call.file + end + + def test_parse_line_block_inline_comment + rb = "a\nb # comment\nc" + pt = s(:block, + s(:call, nil, :a).line(1), + s(:call, nil, :b).line(2), + s(:call, nil, :c).line(3)) assert_parse rb, pt end - def test_call_star2 - rb = "1 ** 2" - pt = s(:call, s(:lit, 1), :"**", s(:lit, 2)) + def test_parse_line_block_inline_comment_leading_newlines + rb = "\n\n\na\nb # comment\n# another comment\nc" + pt = s(:block, + s(:call, nil, :a).line(4), + s(:call, nil, :b).line(5), + s(:call, nil, :c).line(7)).line(4) assert_parse rb, pt end - def test_call_colon2 - rb = "A::b" - pt = s(:call, s(:const, :A), :b) + def test_parse_line_block_inline_multiline_comment + rb = "a\nb # comment\n# another comment\nc" + pt = s(:block, + s(:call, nil, :a).line(1), + s(:call, nil, :b).line(2), + s(:call, nil, :c).line(4)).line(1) assert_parse rb, pt end - def test_call_star - rb = "1 * 2" - pt = s(:call, s(:lit, 1), :"*", s(:lit, 2)) + def test_parse_line_call_ivar_arg_no_parens_line_break + rb = "a @b\n" + pt = s(:call, nil, :a, s(:ivar, :@b).line(1)).line(1) assert_parse rb, pt end - def test_yield_arg - rb = "yield 42" - pt = s(:yield, s(:lit, 42)) + def test_parse_line_call_ivar_line_break_paren + rb = "a(@b\n)" + pt = s(:call, nil, :a, s(:ivar, :@b).line(1)).line(1) assert_parse rb, pt end - def test_call_div - rb = "1 / 2" - pt = s(:call, s(:lit, 1), :/, s(:lit, 2)) + def test_parse_line_call_no_args + rb = "f do |x, y|\n x + y\nend" + + pt = s(:iter, + s(:call, nil, :f), + s(:args, :x, :y), + s(:call, s(:lvar, :x), :+, s(:lvar, :y))) + + assert_parse_line rb, pt, 1 + + _, a, b, c, = result + + assert_equal 1, a.line, "call should have line number" + assert_equal 1, b.line, "masgn should have line number" + assert_equal 2, c.line, "call should have line number" + end + + def test_parse_line_defn_no_parens_args + rb = "def f a\nend" + pt = s(:defn, :f, s(:args, :a).line(1), s(:nil).line(2)).line(1) + + assert_parse_line rb, pt, 1 + end + + def test_parse_line_defn_complex + rb = "def x(y)\n p(y)\n y *= 2\n return y;\nend" # TODO: remove () & ; + pt = s(:defn, :x, s(:args, :y), + s(:call, nil, :p, s(:lvar, :y)), + s(:lasgn, :y, s(:call, s(:lvar, :y), :*, s(:lit, 2))), + s(:return, s(:lvar, :y))) + + assert_parse_line rb, pt, 1 + + body = result + assert_equal 2, body.call.line, "call should have line number" + assert_equal 3, body.lasgn.line, "lasgn should have line number" + assert_equal 4, body.return.line, "return should have line number" + end + + def test_parse_line_defn_no_parens + pt = s(:defn, :f, s(:args).line(1), s(:nil)).line(1) + + rb = "def f\nend" + assert_parse_line rb, pt, 1 + + processor.reset + + rb = "def f\n\nend" + assert_parse_line rb, pt, 1 + end + + def test_parse_line_dot2 + rb = "0..\n4\na..\nb\nc" + pt = s(:block, + s(:lit, 0..4).line(1), + s(:dot2, + s(:call, nil, :a).line(3), + s(:call, nil, :b).line(4)).line(3), + s(:call, nil, :c).line(5)).line(1) + + assert_parse_line rb, pt, 1 + end + + def test_parse_line_dot3 + rb = "0...\n4\na...\nb\nc" + pt = s(:block, + s(:lit, 0...4).line(1), + s(:dot3, + s(:call, nil, :a).line(3), + s(:call, nil, :b).line(4)).line(3), + s(:call, nil, :c).line(5)).line(1) + + assert_parse_line rb, pt, 1 + end + + def test_parse_line_dstr_newline + rb = <<-'CODE' + "a\n#{ + }" + true + CODE + + pt = s(:block, + s(:dstr, "a\n", + s(:evstr)).line(1), + s(:true).line(3)) assert_parse rb, pt end - def test_call_eq3 - rb = "1 === 2" - pt = s(:call, s(:lit, 1), :===, s(:lit, 2)) + def test_parse_line_evstr_after_break + rb = "\"a\"\\\n\"\#{b}\"" + pt = s(:dstr, "a", + s(:evstr, + s(:call, nil, :b).line(2)).line(2)).line(1) assert_parse rb, pt end - def test_call_carat - rb = "1 ^ 2" - pt = s(:call, s(:lit, 1), :^, s(:lit, 2)) + def test_parse_line_hash_lit + rb = "{\n:s1 => 1,\n}" + pt = s(:hash, + s(:lit, :s1).line(2), s(:lit, 1).line(2), + ).line(1) + + assert_parse rb, pt + end + + def test_parse_line_heredoc + rb = <<-CODE + string = <<-HEREDOC + very long string + HEREDOC + puts string + CODE + + pt = s(:block, + s(:lasgn, :string, + s(:str, " very long string\n").line(1)).line(1), + s(:call, nil, :puts, s(:lvar, :string).line(4)).line(4)).line(1) + + assert_parse rb, pt + end + + def test_parse_line_heredoc_evstr + skip "heredoc line numbers are just gonna be screwed for a while..." + + rb = "<<-A\na\n\#{b}\nA" + pt = s(:dstr, "a\n", + s(:evstr, + s(:call, nil, :b).line(3)), + s(:str, "\n")).line(1) + + assert_parse rb, pt + end + + def test_parse_line_heredoc_regexp_chars + rb = <<-CODE + string = <<-"^D" + very long string + ^D + puts string + CODE + + pt = s(:block, + s(:lasgn, :string, + s(:str, " very long string\n").line(1)).line(1), + s(:call, nil, :puts, s(:lvar, :string).line(4)).line(4)).line(1) + + assert_parse rb, pt + end + + def test_parse_line_iter_call_no_parens + rb = "f a do |x, y|\n x + y\nend" + + pt = s(:iter, + s(:call, nil, :f, s(:call, nil, :a).line(1)).line(1), + s(:args, :x, :y).line(1), + s(:call, s(:lvar, :x).line(2), :+, + s(:lvar, :y).line(2)).line(2)).line(1) + + assert_parse rb, pt + end + + def test_parse_line_iter_call_parens + rb = "f(a) do |x, y|\n x + y\nend" + + pt = s(:iter, + s(:call, nil, :f, s(:call, nil, :a)), + s(:args, :x, :y), + s(:call, s(:lvar, :x), :+, s(:lvar, :y))) + + assert_parse_line rb, pt, 1 + + _, a, b, c, = result + + assert_equal 1, a.line, "call should have line number" + assert_equal 1, b.line, "masgn should have line number" + assert_equal 2, c.line, "call should have line number" + end + + def test_parse_line_multiline_str + rb = "\"a\nb\"\n1" + pt = s(:block, + s(:str, "a\nb").line(1), + s(:lit, 1).line(3)).line(1) + + assert_parse rb, pt + end + + def test_parse_line_multiline_str_literal_n + rb = "\"a\\nb\"\n1" + pt = s(:block, + s(:str, "a\nb").line(1), + s(:lit, 1).line(2)).line(1) + + assert_parse rb, pt + end + + def test_parse_line_newlines + rb = "true\n\n" + pt = s(:true) + + assert_parse_line rb, pt, 1 + end + + def test_parse_line_op_asgn + rb = <<-CODE + foo += + bar + baz + CODE + + pt = s(:block, + s(:lasgn, :foo, + s(:call, + s(:lvar, :foo).line(1), + :+, + s(:call, nil, :bar).line(2)).line(1)).line(1), + s(:call, nil, :baz).line(3)).line(1) + + assert_parse_line rb, pt, 1 + end + + def test_parse_line_postexe + rb = "END {\nfoo\n}" + pt = s(:iter, + s(:postexe).line(1), 0, + s(:call, nil, :foo).line(2)).line(1) + + assert_parse_line rb, pt, 1 + end + + def test_parse_line_preexe + rb = "BEGIN {\nfoo\n}" + pt = s(:iter, + s(:preexe).line(1), 0, + s(:call, nil, :foo).line(2)).line(1) + + assert_parse_line rb, pt, 1 + end + + def test_parse_line_rescue + rb = "begin\n a\nrescue\n b\nrescue\n c\nend\n" + pt = s(:rescue, + s(:call, nil, :a).line(2), + s(:resbody, s(:array).line(3), + s(:call, nil, :b).line(4)).line(3), + s(:resbody, s(:array).line(5), + s(:call, nil, :c).line(6)).line(5)).line(2) - assert_parse rb, pt + assert_parse_line rb, pt, 2 end - def test_call_rshift - rb = "1 >> 2" - pt = s(:call, s(:lit, 1), :>>, s(:lit, 2)) + def test_parse_line_return + rb = <<-RUBY + def blah + if true then + return 42 + end + end + RUBY - assert_parse rb, pt - end + pt = s(:defn, :blah, s(:args), + s(:if, s(:true), + s(:return, s(:lit, 42)), + nil)) - def test_lasgn_arg_rescue_arg - rb = "a = 1 rescue 2" - pt = s(:lasgn, :a, s(:rescue, s(:lit, 1), s(:resbody, s(:array), s(:lit, 2)))) + assert_parse_line rb, pt, 1 - assert_parse rb, pt + assert_equal 3, result.if.return.line + assert_equal 3, result.if.return.lit.line end - def test_call_bang_squiggle - rb = "1 !~ 2" - pt = s(:not, s(:call, s(:lit, 1), :=~, s(:lit, 2))) # TODO: check for 1.9+ + def test_parse_line_str_with_newline_escape + rb = 'a("\n", true)' + pt = s(:call, nil, :a, + s(:str, "\n").line(1), + s(:true).line(1)) assert_parse rb, pt end - def test_super_arg - rb = "super 42" - pt = s(:super, s(:lit, 42)) + def test_parse_line_to_ary + rb = "a,\nb = c\nd" + pt = s(:block, + s(:masgn, + s(:array, s(:lasgn, :a).line(1), s(:lasgn, :b).line(2)).line(1), + s(:to_ary, s(:call, nil, :c).line(2)).line(2)).line(1), + s(:call, nil, :d).line(3)).line(1) - assert_parse rb, pt + assert_parse_line rb, pt, 1 end - def test_defns_reserved - rb = "def self.return; end" - pt = s(:defs, s(:self), :return, s(:args), s(:nil)) + def test_parse_line_trailing_newlines + rb = "a \nb" + pt = s(:block, + s(:call, nil, :a).line(1), + s(:call, nil, :b).line(2)).line(1) assert_parse rb, pt end - def test_unary_minus - rb = "-a" - pt = s(:call, s(:call, nil, :a), :"-@") - - assert_parse rb, pt - end + def test_parse_until_not_canonical + rb = "until not var.nil?\n 'foo'\nend" - def test_masgn_command_call - rb = "a, = b.c 1" - pt = s(:masgn, - s(:array, s(:lasgn, :a)), - s(:to_ary, s(:call, s(:call, nil, :b), :c, s(:lit, 1)))) + pt = s(:while, + s(:call, s(:call, nil, :var), :nil?), + s(:str, "foo"), true) assert_parse rb, pt end - def test_uminus_float - rb = "-0.0" - pt = s(:lit, -0.0) + def test_parse_until_not_noncanonical + rb = "until not var.nil?\n 'foo'\nend" + pt = s(:until, + s(:not, s(:call, s(:call, nil, :var), :nil?)), + s(:str, "foo"), true) + + processor.canonicalize_conditions = false assert_parse rb, pt end - def test_op_asgn_command_call - rb = "a ||= b.c 2" - pt = s(:op_asgn_or, - s(:lvar, :a), - s(:lasgn, :a, s(:call, s(:call, nil, :b), :c, s(:lit, 2)))) + def test_parse_while_not_canonical + rb = "while not var.nil?\n 'foo'\nend" + pt = s(:until, + s(:call, s(:call, nil, :var), :nil?), + s(:str, "foo"), true) assert_parse rb, pt end - def test_masgn_paren - rb = "(a, b) = c.d" - pt = s(:masgn, - s(:array, s(:lasgn, :a), s(:lasgn, :b)), - s(:to_ary, s(:call, s(:call, nil, :c), :d))) + def test_parse_while_not_noncanonical + rb = "while not var.nil?\n 'foo'\nend" + pt = s(:while, + s(:not, s(:call, s(:call, nil, :var), :nil?)), + s(:str, "foo"), true) + + processor.canonicalize_conditions = false assert_parse rb, pt end - def test_unary_tilde - rb = "~a" - pt = s(:call, s(:call, nil, :a), :~) + def test_pipe_space + rb = "a.b do | | end" + pt = s(:iter, s(:call, s(:call, nil, :a), :b), s(:args)) assert_parse rb, pt end - def test_unary_plus - rb = "+a" - pt = s(:call, s(:call, nil, :a), :+@) + def test_qWords_space + rb = "%W( )" + pt = s(:array) assert_parse rb, pt end @@ -1360,385 +1981,377 @@ assert_parse rb, pt end - def test_array_line_breaks - # It seems like arrays are roughly created when a certain element is created - # In ruby > 1.9 it seems like that is after the last element, so the array - # itself is assigned line 3 (since the last element is on line 3) and for - # ruby <= 1.9 it seems to get created after the first element, so the array - # itself is assigned line 2 (since the first element is on line 2). - # This seems to happen since arrays like this are created with a line in - # ruby_parser.yy like `result = s(:array, val[0])`. So, the array is not - # created by itself. The creation of the array itself is deferred until there - # is an element to create it with. That seems to mess up line numbers - # for the array. Luckily, the arary elements all seemt to get the correct - # line number. - start_line = self.class.to_s =~ /1[89]/ ? 2 : 3 - rb = "[\n'a',\n'b']\n1" - pt = s(:block, - s(:array, - s(:str, "a").line(2), - s(:str, "b").line(3)).line(start_line), - s(:lit, 1).line(4)) - assert_parse rb, pt + def test_regexp + regexps = { + "/wtf/" => /wtf/, + "/wtf/n" => /wtf/n, + "/wtf/m" => /wtf/m, + "/wtf/nm" => /wtf/nm, + "/wtf/nmnmnmnm" => /wtf/nm, + } + + regexps.each do |rb, lit| + assert_parse rb, s(:lit, lit) + end + + # TODO: add more including interpolation etc end - def test_non_interpolated_word_array_line_breaks + def test_regexp_escape_extended + assert_parse '/\“/', s(:lit, /“/) + end + + def test_str_backslashes + long_string = '\n' * 100 + rb = "x '#{long_string}'" + pt = s(:call, nil, :x, s(:str, long_string)) - rb = "%w(\na\nb\n)\n1" - pt = s(:block, - s(:array, - s(:str, "a").line(2), - s(:str, "b").line(3)).line(1), - s(:lit, 1).line(5)) assert_parse rb, pt end - def test_interpolated_word_array_line_breaks + def test_str_evstr + rb = "\"a #\{b}\"" + pt = s(:dstr, "a ", s(:evstr, s(:call, nil, :b))) - rb = "%W(\na\nb\n)\n1" - pt = s(:block, - s(:array, - s(:str, "a").line(2), - s(:str, "b").line(3)).line(1), - s(:lit, 1).line(5)) assert_parse rb, pt end - def test_qWords_space - rb = "%W( )" - pt = s(:array) + def test_str_evstr_escape + char = [0x00bd].pack("U") + rb = "\"a #\{b}\\302\\275\"" + pt = s(:dstr, "a ", s(:evstr, s(:call, nil, :b)), s(:str, char)) assert_parse rb, pt end - def test_attr_asgn_colon_id - rb = "A::b = 1" - pt = s(:attrasgn, s(:const, :A), :b=, s(:lit, 1)) + def test_str_heredoc_interp + rb = "<<\"\"\n\#{x}\nblah2\n\n" + pt = s(:dstr, "", s(:evstr, s(:call, nil, :x)), s(:str, "\nblah2\n")) assert_parse rb, pt end - def test_aref_args_assocs - rb = "[1 => 2]" - pt = s(:array, s(:hash, s(:lit, 1), s(:lit, 2))) + def test_str_interp_ternary_or_label + env = processor.env + env[:a] = :lvar + + rb = '"#{a.b? ? ""+a+"": ""}"' + pt = s(:dstr, + "", + s(:evstr, + s(:if, + s(:call, s(:lvar, :a), :b?), + s(:call, s(:call, s(:str, ""), :+, s(:lvar, :a)), :+, s(:str, "")), + s(:str, "")))) assert_parse rb, pt end - def test_BEGIN - rb = "BEGIN { 42 }" - pt = s(:iter, s(:preexe), s(:args), s(:lit, 42)) + def test_str_newline_hash_line_number + rb = "\"\\n\\n\\n\\n#\"\n1" + pt = s(:block, s(:str, "\n\n\n\n#").line(1), + s(:lit, 1).line(2)) assert_parse rb, pt end - def test_attrasgn_primary_dot_constant - rb = "a.B = 1" - pt = s(:attrasgn, s(:call, nil, :a), :"B=", s(:lit, 1)) + # def test_str_pct_nested_nested + # rb = "%{ { #\{ \"#\{1}\" } } }" + # assert_equal " { 1 } ", eval(rb) + # pt = s(:dstr, " { ", s(:evstr, s(:lit, 1)), s(:str, " } ")) + # + # assert_parse rb, pt + # end + + def test_str_pct_Q_nested + rb = "%Q[before [#\{nest}] after]" + pt = s(:dstr, "before [", s(:evstr, s(:call, nil, :nest)), s(:str, "] after")) assert_parse rb, pt end - def test_op_asgn_primary_colon_identifier - rb = "A::b += 1" - pt = s(:op_asgn, s(:const, :A), s(:lit, 1), :b, :+) # TODO: check? looks wack + def test_str_pct_q + rb = "%q{a b c}" + pt = s(:str, "a b c") assert_parse rb, pt end - def test_words_interp - rb = '%W(#{1}b)' - pt = s(:array, s(:dstr, "", s(:evstr, s(:lit, 1)), s(:str, "b"))) + def test_str_str + rb = "\"a #\{'b'}\"" + pt = s(:str, "a b") assert_parse rb, pt end - def test_op_asgn_index_command_call - rb = "a[:b] ||= c 1, 2" - pt = s(:op_asgn1, s(:call, nil, :a), s(:array, s(:lit, :b)), - :"||", - s(:call, nil, :c, s(:lit, 1), s(:lit, 2))) + def test_str_str_str + rb = "\"a #\{'b'} c\"" + pt = s(:str, "a b c") assert_parse rb, pt end - def test_op_asgn_val_dot_ident_command_call - rb = "a.b ||= c 1" - pt = s(:op_asgn, s(:call, nil, :a), s(:call, nil, :c, s(:lit, 1)), :b, :"||") + def test_super_arg + rb = "super 42" + pt = s(:super, s(:lit, 42)) assert_parse rb, pt end - def test_yield_empty_parens - rb = "yield()" - pt = s(:yield) + def test_uminus_float + rb = "-0.0" + pt = s(:lit, -0.0) assert_parse rb, pt end - def test_masgn_lhs_splat - rb = "*a = 1, 2, 3" - pt = s(:masgn, - s(:array, s(:splat, s(:lasgn, :a))), - s(:array, s(:lit, 1), s(:lit, 2), s(:lit, 3))) + def test_unary_minus + rb = "-a" + pt = s(:call, s(:call, nil, :a), :"-@") assert_parse rb, pt end - def test_masgn_arg_ident - rb = "a, b.C = d" - pt = s(:masgn, - s(:array, s(:lasgn, :a), s(:attrasgn, s(:call, nil, :b), :"C=")), - s(:to_ary, s(:call, nil, :d))) + def test_unary_plus + rb = "+a" + pt = s(:call, s(:call, nil, :a), :+@) assert_parse rb, pt end - def test_masgn_arg_colon_arg - rb = "a, b::c = d" - pt = s(:masgn, - s(:array, s(:lasgn, :a), s(:attrasgn, s(:call, nil, :b), :c=)), - s(:to_ary, s(:call, nil, :d))) + def test_unary_tilde + rb = "~a" + pt = s(:call, s(:call, nil, :a), :~) assert_parse rb, pt end - def test_masgn_star - rb = "* = 1" - pt = s(:masgn, - s(:array, s(:splat)), - s(:to_ary, s(:lit, 1))) + def test_when_splat + rb = "case a; when *b then; end" + pt = s(:case, s(:call, nil, :a), + s(:when, s(:array, s(:splat, s(:call, nil, :b))), nil), + nil) assert_parse rb, pt end - def test_op_asgn_dot_ident_command_call - rb = "A.B ||= c 1" - pt = s(:op_asgn, s(:const, :A), s(:call, nil, :c, s(:lit, 1)), :B, :"||") + def test_words_interp + rb = '%W(#{1}b)' + pt = s(:array, s(:dstr, "", s(:evstr, s(:lit, 1)), s(:str, "b"))) assert_parse rb, pt end - def test_block_decomp_splat - skip "not that smart yet" if ruby18 # HACK - - rb = "f { |(*a)| }" - pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :"*a"))) + def test_wtf_7 + rb = "a.b (1) {c}" + pt = s(:iter, + s(:call, s(:call, nil, :a), :b, s(:lit, 1)), + 0, + s(:call, nil, :c)) assert_parse rb, pt end - def test_masgn_colon3 - rb = "::A, ::B = 1, 2" - pt = s(:masgn, - s(:array, s(:const, nil, s(:colon3, :A)), s(:const, s(:colon3, :B))), - s(:array, s(:lit, 1), s(:lit, 2))) + def test_wtf_8 + rb = "a::b (1) {c}" + pt = s(:iter, + s(:call, s(:call, nil, :a), :b, s(:lit, 1)), + 0, + s(:call, nil, :c)) assert_parse rb, pt end - def test_masgn_colon2 - rb = "a, b::C = 1, 2" - pt = s(:masgn, - s(:array, s(:lasgn, :a), s(:const, s(:colon2, s(:call, nil, :b), :C))), - s(:array, s(:lit, 1), s(:lit, 2))) + def test_yield_arg + rb = "yield 42" + pt = s(:yield, s(:lit, 42)) assert_parse rb, pt end - def test_alias_gvar_backref - rb = "alias $MATCH $&" - pt = s(:valias, :$MATCH, :$&) + def test_yield_empty_parens + rb = "yield()" + pt = s(:yield) assert_parse rb, pt end +end + +module TestRubyParserShared19Plus + include TestRubyParserShared - def test_heredoc_broken_windows_theory_applies_to_microsoft_more_than_anything - rb = "<2,)" + pt = s(:call, s(:call, nil, :a), :f, s(:hash, s(:lit, 1), s(:lit, 2))) assert_parse rb, pt end - def test_call_array_lit_inline_hash - rb = "a([:b, :c => 1])" - pt = s(:call, nil, :a, s(:array, s(:lit, :b), s(:hash, s(:lit, :c), s(:lit, 1)))) + def test_method_call_trailing_comma + rb = "a.f(1,)" + pt = s(:call, s(:call, nil, :a), :f, s(:lit, 1)) assert_parse rb, pt end - def test_multiline_hash_declaration - pt = s(:call, nil, :f, s(:hash, s(:lit, :state), s(:hash))) + def test_mlhs_back_anonsplat + rb = "a, b, c, * = f" + pt = s(:masgn, + s(:array, + s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c), + s(:splat)), + s(:to_ary, s(:call, nil, :f))) - assert_parse "f(state: {})", pt - assert_parse "f(state: {\n})", pt - assert_parse "f(state:\n {\n})", pt + assert_parse rb, pt end def test_mlhs_back_splat @@ -2311,22 +3026,21 @@ assert_parse rb, pt end - def test_mlhs_back_anonsplat - rb = "a, b, c, * = f" + def test_mlhs_front_anonsplat + rb = "*, x, y, z = f" pt = s(:masgn, s(:array, - s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c), - s(:splat)), + s(:splat), + s(:lasgn, :x), s(:lasgn, :y), s(:lasgn, :z)), s(:to_ary, s(:call, nil, :f))) assert_parse rb, pt end - def test_mlhs_mid_splat - rb = "a, b, c, *s, x, y, z = f" + def test_mlhs_front_splat + rb = "*s, x, y, z = f" pt = s(:masgn, s(:array, - s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c), s(:splat, s(:lasgn, :s)), s(:lasgn, :x), s(:lasgn, :y), s(:lasgn, :z)), s(:to_ary, s(:call, nil, :f))) @@ -2334,12 +3048,16 @@ assert_parse rb, pt end + def test_mlhs_keyword + rb = "a.!=(true, true)" + pt = s(:call, s(:call, nil, :a), :"!=", s(:true), s(:true)) + + assert_parse rb, pt + end + def test_mlhs_mid_anonsplat rb = "a, b, c, *, x, y, z = f" pt = s(:masgn, - s(:array, s(:lasgn, :a), s(:splat), s(:lasgn, :z)), - s(:to_ary, s(:call, nil, :f))) - pt = s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c), s(:splat), @@ -2349,13 +3067,11 @@ assert_parse rb, pt end - def test_mlhs_front_splat - rb = "*s, x, y, z = f" - pt = s(:masgn, - s(:array, s(:splat, s(:lasgn, :s)), s(:lasgn, :z)), - s(:to_ary, s(:call, nil, :f))) + def test_mlhs_mid_splat + rb = "a, b, c, *s, x, y, z = f" pt = s(:masgn, s(:array, + s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c), s(:splat, s(:lasgn, :s)), s(:lasgn, :x), s(:lasgn, :y), s(:lasgn, :z)), s(:to_ary, s(:call, nil, :f))) @@ -2363,79 +3079,46 @@ assert_parse rb, pt end - def test_mlhs_front_anonsplat - rb = "*, x, y, z = f" - pt = s(:masgn, - s(:array, - s(:splat), - s(:lasgn, :x), s(:lasgn, :y), s(:lasgn, :z)), - s(:to_ary, s(:call, nil, :f))) - - assert_parse rb, pt - end - - def test_expr_not_bang - rb = "! a b" - pt = s(:call, s(:call, nil, :a, s(:call, nil, :b)), :"!") + def test_motherfuckin_leading_dots + rb = "a\n.b" + pt = s(:call, s(:call, nil, :a), :b) assert_parse rb, pt end - def test_do_colon_19 - rb = "while false : 42 end" + def test_motherfuckin_leading_dots2 + rb = "a\n..b" - assert_parse_error rb, "(string):1 :: parse error on value \":\" (tCOLON)" + assert_parse_error rb, '(string):2 :: parse error on value ".." (tDOT2)' end - def test_assoc_list_19 - rb = "{1, 2, 3, 4}" + def test_multiline_hash_declaration + pt = s(:call, nil, :f, s(:hash, s(:lit, :state), s(:hash))) - assert_parse_error rb, "(string):1 :: parse error on value \",\" (tCOMMA)" + assert_parse "f(state: {})", pt + assert_parse "f(state: {\n})", pt + assert_parse "f(state:\n {\n})", pt end - def test_case_then_colon_19 - rb = <<-EOM - case x - when Fixnum : # need the space to not hit new hash arg syntax - 42 - end - EOM + def test_parse_def_special_name + rb = "def next; end" + pt = s(:defn, :next, s(:args), s(:nil)) - assert_parse_error rb, "(string):2 :: parse error on value \":\" (tCOLON)" + assert_parse rb, pt end def test_parse_def_xxx1 - rb = 'def f(a, *b, c = nil) end' + rb = "def f(a, *b, c = nil) end" assert_parse_error rb, '(string):1 :: parse error on value "=" (tEQL)' end def test_parse_def_xxx2 - rb = 'def f(a = nil, *b, c = nil) end' + rb = "def f(a = nil, *b, c = nil) end" assert_parse_error rb, '(string):1 :: parse error on value "=" (tEQL)' end - def test_parse_until_not_canonical - rb = "until not var.nil?\n 'foo'\nend" - pt = s(:until, - s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), - s(:str, "foo"), true) - - assert_parse rb, pt - end - - def test_parse_until_not_noncanonical - rb = "until not var.nil?\n 'foo'\nend" - pt = s(:until, - s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), - s(:str, "foo"), true) - - processor.canonicalize_conditions = false - - assert_parse rb, pt - end - def test_parse_if_not_canonical rb = "if not var.nil? then 'foo' else 'bar'\nend" pt = s(:if, @@ -2458,26 +3141,6 @@ assert_parse rb, pt end - def test_parse_while_not_canonical - rb = "while not var.nil?\n 'foo'\nend" - pt = s(:while, - s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), - s(:str, "foo"), true) - - assert_parse rb, pt - end - - def test_parse_while_not_noncanonical - rb = "while not var.nil?\n 'foo'\nend" - pt = s(:while, - s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), - s(:str, "foo"), true) - - processor.canonicalize_conditions = false - - assert_parse rb, pt - end - def test_parse_opt_call_args_assocs_comma rb = "1[2=>3,]" pt = s(:call, s(:lit, 1), :[], s(:hash, s(:lit, 2), s(:lit, 3))) @@ -2492,501 +3155,465 @@ assert_parse rb, pt end - def test_bug_hash_args - rb = "foo(:bar, baz: nil)" - pt = s(:call, nil, :foo, - s(:lit, :bar), - s(:hash, s(:lit, :baz), s(:nil))) - - assert_parse rb, pt - end - - def test_bug_hash_args_trailing_comma - rb = "foo(:bar, baz: nil,)" - pt = s(:call, nil, :foo, # NOTE: same sexp as test_bug_hash_args - s(:lit, :bar), - s(:hash, s(:lit, :baz), s(:nil))) - - assert_parse rb, pt - end - - def test_block_arg_optional - rb = "a { |b = 1| }" - pt = s(:iter, - s(:call, nil, :a), - s(:args, s(:lasgn, :b, s(:lit, 1)))) - - assert_parse rb, pt - end - - def test_zomg_sometimes_i_hate_this_project - rb = <<-RUBY - { - a: lambda { b ? c() : d }, - e: nil, - } - RUBY - - pt = s(:hash, - s(:lit, :a), - s(:iter, - s(:call, nil, :lambda), - 0, - s(:if, s(:call, nil, :b), s(:call, nil, :c), s(:call, nil, :d))), - - s(:lit, :e), - s(:nil)) - - assert_parse rb, pt - end - - def test_pipe_semicolon - skip "not yet" - - rb = "a.b do | ; c | end" - pt = s(:iter, s(:call, s(:call, nil, :a), :b), 0) + def test_parse_until_not_canonical + rb = "until not var.nil?\n 'foo'\nend" + pt = s(:until, + s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), + s(:str, "foo"), true) assert_parse rb, pt end - def test_wtf - # lambda -> f_larglist lambda_body - # f_larglist -> f_args opt_bv_decl - # opt_bv_decl - # bv_decls - # bvar - - rb = "->(a, b=nil) { p [a, b] }" - pt = s(:iter, - s(:call, nil, :lambda), - s(:args, :a, s(:lasgn, :b, s(:nil))), - s(:call, nil, :p, s(:array, s(:lvar, :a), s(:lvar, :b)))) - - assert_parse rb, pt - - # rb = "->(a; b) { p [a, b] }" - # - # assert_parse rb, pt - end + def test_parse_until_not_noncanonical + rb = "until not var.nil?\n 'foo'\nend" + pt = s(:until, + s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), + s(:str, "foo"), true) - def test_block_args_opt1 - rb = "f { |a, b = 42| [a, b] }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:lasgn, :b, s(:lit, 42))), - s(:array, s(:lvar, :a), s(:lvar, :b))) + processor.canonicalize_conditions = false assert_parse rb, pt end - def test_block_args_opt2_2 - rb = "f { |a, b = 42, c = 24| [a, b, c] }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:lasgn, :b, s(:lit, 42)), s(:lasgn, :c, s(:lit, 24))), - s(:array, s(:lvar, :a), s(:lvar, :b), s(:lvar, :c))) + def test_parse_while_not_canonical + rb = "while not var.nil?\n 'foo'\nend" + pt = s(:while, + s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), + s(:str, "foo"), true) assert_parse rb, pt end - def test_block_args_opt3 - rb = "f { |a, b = 42, c = 24, &d| [a, b, c, d] }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:lasgn, :b, s(:lit, 42)), s(:lasgn, :c, s(:lit, 24)), :"&d"), - s(:array, s(:lvar, :a), s(:lvar, :b), s(:lvar, :c), s(:lvar, :d))) - - assert_parse rb, pt - end + def test_parse_while_not_noncanonical + rb = "while not var.nil?\n 'foo'\nend" + pt = s(:while, + s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), + s(:str, "foo"), true) - def test_i_have_no_freakin_clue - rb = "1 ? b('') : 2\na d: 3" - pt = s(:block, - s(:if, s(:lit, 1), s(:call, nil, :b, s(:str, "")), s(:lit, 2)), - s(:call, nil, :a, s(:hash, s(:lit, :d), s(:lit, 3)))) + processor.canonicalize_conditions = false assert_parse rb, pt end - def test_motherfuckin_leading_dots - rb = "a\n.b" - pt = s(:call, s(:call, nil, :a), :b) + def test_pipe_semicolon + rb = "a.b do | ; c | end" + pt = s(:iter, s(:call, s(:call, nil, :a), :b), s(:args, s(:shadow, :c))) assert_parse rb, pt end - def test_motherfuckin_leading_dots2 - rb = "a\n..b" + def test_return_call_assocs + rb = "return y(z:1)" + pt = s(:return, s(:call, nil, :y, s(:hash, s(:lit, :z), s(:lit, 1)))) - assert_parse_error rb, '(string):2 :: parse error on value ".." (tDOT2)' - end + assert_parse rb, pt - def test_kill_me - rb = "f { |a, (b, *c)| }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:masgn, :b, :"*c"))) + rb = "return y z:1" + pt = s(:return, s(:call, nil, :y, s(:hash, s(:lit, :z), s(:lit, 1)))) assert_parse rb, pt - end - def test_kill_me2 - rb = "f { |*a, b| }" - pt = s(:iter, s(:call, nil, :f), s(:args, :"*a", :b)) + rb = "return y(z=>1)" + pt = s(:return, s(:call, nil, :y, s(:hash, s(:call, nil, :z), s(:lit, 1)))) assert_parse rb, pt - end - def test_kill_me3 - rb = "f { |*a, b, &c| }" - pt = s(:iter, s(:call, nil, :f), s(:args, :"*a", :b, :"&c")) + rb = "return y :z=>1" + pt = s(:return, s(:call, nil, :y, s(:hash, s(:lit, :z), s(:lit, 1)))) assert_parse rb, pt - end - def test_kill_me4 - rb = "a=b ? true: false" - pt = s(:lasgn, :a, s(:if, s(:call, nil, :b), s(:true), s(:false))) + rb = "return 1, :z => 1" + pt = s(:return, + s(:array, + s(:lit, 1), + s(:hash, s(:lit, :z), s(:lit, 1)))) assert_parse rb, pt - end - - def test_kill_me5 - skip "not yet" - rb = "f ->() { g do end }" - pt = 42 + rb = "return 1, :z => 1, :w => 2" + pt = s(:return, + s(:array, + s(:lit, 1), + s(:hash, s(:lit, :z), s(:lit, 1), s(:lit, :w), s(:lit, 2)))) assert_parse rb, pt end - def test_iter_args_4 - rb = "f { |a, *b, c| }" - pt = s(:iter, s(:call, nil, :f), s(:args, :a, :"*b", :c)) + def test_stabby_arg_no_paren + rb = "->a{}" + pt = s(:iter, s(:lambda), s(:args, :a)) assert_parse rb, pt end - def test_iter_args_5 - skip "not yet" - - rb = "f { |a, &b| }" - pt = s(:iter, s(:call, nil, :f), s(:args, :a, :"&b")) + def test_stabby_arg_opt_splat_arg_block_omfg + rb = "->(b, c=1, *d, e, &f){}" + pt = s(:iter, + s(:lambda), + s(:args, :b, s(:lasgn, :c, s(:lit, 1)), :"*d", :e, :"&f")) assert_parse rb, pt end - def test_iter_args_6 - rb = "f { |a, b=42, c| }" - pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :c)) + def test_stabby_proc_scope + rb = "->(a; b) {}" + pt = s(:iter, s(:lambda), s(:args, :a, s(:shadow, :b))) assert_parse rb, pt end - # In 1.8, block args with an outer set of parens are superfluous. - # In 1.9, outer set of parens are NOT... they are an explicit extra masgn. - - def test_iter_args_2__19 - rb = "f { |(a, b)| }" - pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :a, :b))) + def test_symbol_empty + rb = ":''" + pt = s(:lit, "".to_sym) assert_parse rb, pt end - def test_bug_args__19 - rb = "f { |(a, b)| d }" - pt = s(:iter, s(:call, nil, :f), - s(:args, s(:masgn, :a, :b)), - s(:call, nil, :d)) + def test_thingy + pt = s(:call, s(:call, nil, :f), :call, s(:lit, 42)) + rb = "f.(42)" assert_parse rb, pt - end - - def test_bug_args_masgn_outer_parens__19 - rb = "f { |((k, v), i)| }" - pt = s(:iter, # NOTE: same sexp as test_bug_args_masgn - s(:call, nil, :f), - s(:args, s(:masgn, s(:masgn, :k, :v), :i))) - assert_parse rb, pt.dup + rb = "f::(42)" + assert_parse rb, pt end - def test_iter_args_7_1 - rb = "f { |a = 42, *b| }" - pt = s(:iter, s(:call, nil, :f), - s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b")) + def test_unary_plus_on_literal + rb = "+:a" + pt = s(:call, s(:lit, :a), :+@) assert_parse rb, pt end - def test_iter_args_7_2 - rb = "f { |a = 42, *b, &c| }" - pt = s(:iter, s(:call, nil, :f), - s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b", :"&c")) + def test_wtf + # lambda -> f_larglist lambda_body + # f_larglist -> f_args opt_bv_decl + # opt_bv_decl + # bv_decls + # bvar + + rb = "->(a, b=nil) { p [a, b] }" + pt = s(:iter, + s(:lambda), + s(:args, :a, s(:lasgn, :b, s(:nil))), + s(:call, nil, :p, s(:array, s(:lvar, :a), s(:lvar, :b)))) assert_parse rb, pt + + # rb = "->(a; b) { p [a, b] }" + # + # assert_parse rb, pt end - def test_iter_args_8_1 - rb = "f { |a = 42, *b, c| }" - pt = s(:iter, s(:call, nil, :f), - s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b", :c)) + def test_yield_call_assocs + rb = "yield y(z:1)" + pt = s(:yield, s(:call, nil, :y, s(:hash, s(:lit, :z), s(:lit, 1)))) assert_parse rb, pt - end - def test_iter_args_8_2 - rb = "f { |a = 42, *b, c, &d| }" - pt = s(:iter, s(:call, nil, :f), - s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b", :c, :"&d")) + rb = "yield y z:1" + pt = s(:yield, s(:call, nil, :y, s(:hash, s(:lit, :z), s(:lit, 1)))) assert_parse rb, pt - end - def test_iter_args_9_1 - rb = "f { |a = 42, b| }" - pt = s(:iter, s(:call, nil, :f), - s(:args, s(:lasgn, :a, s(:lit, 42)), :b)) + rb = "yield y(z=>1)" + pt = s(:yield, s(:call, nil, :y, s(:hash, s(:call, nil, :z), s(:lit, 1)))) assert_parse rb, pt - end - def test_iter_args_9_2 - rb = "f { |a = 42, b, &c| }" - pt = s(:iter, s(:call, nil, :f), - s(:args, s(:lasgn, :a, s(:lit, 42)), :b, :"&c")) + rb = "yield y :z=>1" + pt = s(:yield, s(:call, nil, :y, s(:hash, s(:lit, :z), s(:lit, 1)))) assert_parse rb, pt - end - def test_iter_args_10_1 - rb = "f { |a, b = 42, *c| }" - pt = s(:iter, s(:call, nil, :f), - s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c")) + rb = "yield 1, :z => 1" + pt = s(:yield, + s(:lit, 1), + s(:hash, s(:lit, :z), s(:lit, 1))) assert_parse rb, pt - end - def test_iter_args_10_2 - rb = "f { |a, b = 42, *c, &d| }" - pt = s(:iter, s(:call, nil, :f), - s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c", :"&d")) + rb = "yield 1, :z => 1, :w => 2" + pt = s(:yield, + s(:lit, 1), + s(:hash, s(:lit, :z), s(:lit, 1), s(:lit, :w), s(:lit, 2))) assert_parse rb, pt end - def test_iter_args_11_1 - rb = "f { |a, b = 42, *c, d| }" - pt = s(:iter, s(:call, nil, :f), - s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c", :d)) + def test_zomg_sometimes_i_hate_this_project + rb = <<-RUBY + { + a: lambda { b ? c() : d }, + e: nil, + } + RUBY + + pt = s(:hash, + s(:lit, :a), + s(:iter, + s(:call, nil, :lambda), + 0, + s(:if, s(:call, nil, :b), s(:call, nil, :c), s(:call, nil, :d))), + + s(:lit, :e), + s(:nil)) assert_parse rb, pt end +end - def test_iter_args_11_2 - rb = "f { |a, b = 42, *c, d, &e| }" - pt = s(:iter, s(:call, nil, :f), - s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c", :d, :"&e")) +module TestRubyParserShared20Plus + include TestRubyParserShared19Plus + + def test_args_kw_block + rb = "def f(a: 1, &b); end" + pt = s(:defn, :f, s(:args, s(:kwarg, :a, s(:lit, 1)), :"&b"), s(:nil)) assert_parse rb, pt end - def test_kill_me_6 - # | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list - rb = "f { |a, (b, *c, d)| }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:masgn, :b, :"*c", :d))) + def test_block_arg_kwsplat + rb = "a { |**b| }" + pt = s(:iter, s(:call, nil, :a), s(:args, :"**b")) assert_parse rb, pt end - def test_kill_me_7 - # | f_marg_list tCOMMA tSTAR - rb = "f { |a, (b, *)| }" + def test_block_call_dot_op2_brace_block + rb = "a.b c() do d end.e do |f| g end" pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:masgn, :b, :*))) + s(:call, + s(:iter, + s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)), + 0, + s(:call, nil, :d)), + :e), + s(:args, :f), + s(:call, nil, :g)) assert_parse rb, pt end - def test_kill_me_8 - # | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list - rb = "f { |a, (b, *, c)| }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:masgn, :b, :*, :c))) + def test_call_array_block_call + rb = "a [ nil, b do end ]" + pt = s(:call, nil, :a, + s(:array, + s(:nil), + s(:iter, s(:call, nil, :b), 0))) assert_parse rb, pt end - def test_kill_me_9 - # | tSTAR f_norm_arg - rb = "f { |a, (*b)| }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:masgn, :"*b"))) + def test_block_call_paren_call_block_call + rb = "a (b)\nc.d do end" + pt = s(:block, + s(:call, nil, :a, s(:call, nil, :b)), + s(:iter, s(:call, s(:call, nil, :c), :d), 0)) + assert_parse rb, pt end - def test_kill_me_10 - # | tSTAR f_norm_arg tCOMMA f_marg_list - rb = "f { |a, (*b, c)| }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:masgn, :"*b", :c))) + def test_block_call_defn_call_block_call + rb = "a def b(c)\n d\n end\n e.f do end" + pt = s(:block, + s(:call, nil, :a, + s(:defn, :b, s(:args, :c), s(:call, nil, :d))), + s(:iter, s(:call, s(:call, nil, :e), :f), 0)) assert_parse rb, pt end - def test_kill_me_11 - # | tSTAR - rb = "f { |a, (*)| }" + def test_call_array_lambda_block_call + rb = "a [->() {}] do\nend" pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:masgn, :*))) + s(:call, nil, :a, + s(:array, s(:iter, s(:lambda), s(:args)))), + 0) assert_parse rb, pt end - def test_kill_me_12 - # | tSTAR tCOMMA f_marg_list - rb = "f { |a, (*, b)| }" - pt = s(:iter, - s(:call, nil, :f), - s(:args, :a, s(:masgn, :*, :b))) + def test_call_begin_call_block_call + rb = "a begin\nb.c do end\nend" + pt = s(:call, nil, :a, + s(:iter, s(:call, s(:call, nil, :b), :c), 0)) assert_parse rb, pt end - def test_index_0 - rb = "a[] = b" - pt = s(:attrasgn, s(:call, nil, :a), :[]=, s(:call, nil, :b)) + def test_messy_op_asgn_lineno + rb = "a (B::C *= d e)" + pt = s(:call, nil, :a, + s(:op_asgn, s(:const, :B), + s(:call, nil, :d, s(:call, nil, :e)), + :C, + :*)).line(1) assert_parse rb, pt end - def test_lambda_do_vs_brace - pt = s(:call, nil, :f, s(:iter, s(:call, nil, :lambda), s(:args))) + def test_str_lit_concat_bad_encodings + rb = '"\xE3\xD3\x8B\xE3\x83\xBC\x83\xE3\x83\xE3\x82\xB3\xA3\x82\x99" \ + "\xE3\x83\xB3\xE3\x83\x8F\xE3\x82\x9A\xC3\xBD;foo@bar.com"'.b + pt = s(:str, "\xE3\xD3\x8B\xE3\x83\xBC\x83\xE3\x83\xE3\x82\xB3\xA3\x82\x99\xE3\x83\xB3\xE3\x83\x8F\xE3\x82\x9A\xC3\xBD;foo@bar.com".b) - rb = "f ->() {}" assert_parse rb, pt - rb = "f ->() do end" - assert_parse rb, pt + sexp = processor.parse rb + assert_equal Encoding::ASCII_8BIT, sexp.last.encoding + end - pt = s(:call, nil, :f, s(:iter, s(:call, nil, :lambda), 0)) + def test_block_call_dot_op2_cmd_args_do_block + rb = "a.b c() do d end.e f do |g| h end" + pt = s(:iter, + s(:call, + s(:iter, + s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)), + 0, + s(:call, nil, :d)), + :e, + s(:call, nil, :f)), + s(:args, :g), + s(:call, nil, :h)) - rb = "f -> {}" assert_parse rb, pt + end + + def test_block_kwarg_lvar + rb = "bl { |kw: :val| kw }" + pt = s(:iter, s(:call, nil, :bl), s(:args, s(:kwarg, :kw, s(:lit, :val))), + s(:lvar, :kw)) - rb = "f -> do end" assert_parse rb, pt end - def test_thingy - pt = s(:call, s(:call, nil, :f), :call, s(:lit, 42)) + def test_block_kwarg_lvar_multiple + rb = "bl { |kw: :val, kw2: :val2 | kw }" + pt = s(:iter, s(:call, nil, :bl), + s(:args, + s(:kwarg, :kw, s(:lit, :val)), + s(:kwarg, :kw2, s(:lit, :val2))), + s(:lvar, :kw)) - rb = "f.(42)" assert_parse rb, pt + end + + def test_bug_249 + rb = "mount (Class.new do\ndef initialize\nend\n end).new, :at => 'endpoint'" + pt = s(:call, nil, :mount, + s(:call, + s(:iter, + s(:call, s(:const, :Class), :new), + 0, + s(:defn, :initialize, s(:args), s(:nil))), + :new), + s(:hash, s(:lit, :at), s(:str, "endpoint"))) - rb = "f::(42)" assert_parse rb, pt end - def test_unary_plus_on_literal - rb = "+:a" - pt = s(:call, s(:lit, :a), :+@) + def test_call_arg_assoc_kwsplat + rb = "f(1, kw: 2, **3)" + pt = s(:call, nil, :f, + s(:lit, 1), + s(:hash, s(:lit, :kw), s(:lit, 2), s(:kwsplat, s(:lit, 3)))) assert_parse rb, pt end -end -module TestRubyParserShared21Plus - def test_f_kw - rb = "def x k:42; end" - pt = s(:defn, :x, s(:args, s(:kwarg, :k, s(:lit, 42))), s(:nil)) + def test_call_arg_kwsplat + rb = "a(b, **1)" + pt = s(:call, nil, :a, s(:call, nil, :b), s(:hash, s(:kwsplat, s(:lit, 1)))) assert_parse rb, pt end - def test_f_kw__required - rb = "def x k:; end" - pt = s(:defn, :x, s(:args, s(:kwarg, :k)), s(:nil)) + def test_call_kwsplat + rb = "a(**1)" + pt = s(:call, nil, :a, s(:hash, s(:kwsplat, s(:lit, 1)))) assert_parse rb, pt end - def test_block_kw - rb = "blah { |k:42| }" - pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k, s(:lit, 42)))) + def test_defn_kwarg_env + rb = "def test(**testing) test_splat(**testing) end" + pt = s(:defn, :test, s(:args, :"**testing"), + s(:call, nil, :test_splat, s(:hash, s(:kwsplat, s(:lvar, :testing))))) assert_parse rb, pt + end + + def test_defn_kwarg_kwarg + rb = "def f(a, b: 1, c: 2) end" + pt = s(:defn, :f, s(:args, :a, + s(:kwarg, :b, s(:lit, 1)), + s(:kwarg, :c, s(:lit, 2))), + s(:nil)) - rb = "blah { |k:42| }" assert_parse rb, pt end - def test_block_kw__required - rb = "blah do |k:| end" - pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k))) + def test_defn_kwarg_kwsplat + rb = "def a(b: 1, **c) end" + pt = s(:defn, :a, s(:args, s(:kwarg, :b, s(:lit, 1)), :"**c"), s(:nil)) assert_parse rb, pt + end + + def test_defn_kwarg_kwsplat_anon + rb = "def a(b: 1, **) end" + pt = s(:defn, :a, s(:args, s(:kwarg, :b, s(:lit, 1)), :"**"), s(:nil)) - rb = "blah do |k:| end" assert_parse rb, pt end - def test_stabby_block_kw - rb = "-> (k:42) { }" - pt = s(:iter, s(:call, nil, :lambda), s(:args, s(:kwarg, :k, s(:lit, 42)))) + def test_defn_kwarg_lvar + rb = "def fun(kw: :val); kw; end" + pt = s(:defn, :fun, s(:args, s(:kwarg, :kw, s(:lit, :val))), s(:lvar, :kw)) assert_parse rb, pt end - def test_stabby_block_kw__required - rb = "-> (k:) { }" - pt = s(:iter, s(:call, nil, :lambda), s(:args, s(:kwarg, :k))) + def test_defn_kwarg_no_parens + rb = "def f a: 1\nend" + pt = s(:defn, :f, s(:args, s(:kwarg, :a, s(:lit, 1))), s(:nil)) assert_parse rb, pt end - def test_parse_line_heredoc_hardnewline - skip "not yet" + def test_defn_kwarg_val + rb = "def f(a, b:1) end" + pt = s(:defn, :f, s(:args, :a, s(:kwarg, :b, s(:lit, 1))), s(:nil)) - rb = <<-'CODE'.gsub(/^ /, '') - <<-EOFOO - \n\n\n\n\n\n\n\n\n - EOFOO + assert_parse rb, pt + end - class Foo - end - CODE + def test_defn_powarg + rb = "def f(**opts) end" + pt = s(:defn, :f, s(:args, :"**opts"), s(:nil)) - pt = s(:block, - s(:str, "\n\n\n\n\n\n\n\n\n\n").line(1), - s(:class, :Foo, nil).line(5)).line(1) + assert_parse rb, pt + end + + def test_defs_kwarg + rb = "def self.a b: 1\nend" + pt = s(:defs, s(:self), :a, s(:args, s(:kwarg, :b, s(:lit, 1))), s(:nil)) assert_parse rb, pt end -end -module TestRubyParserShared20Plus - def test_non_interpolated_symbol_array_line_breaks + def test_dstr_lex_state + rb = '"#{p:a}"' + pt = s(:dstr, "", s(:evstr, s(:call, nil, :p, s(:lit, :a)))) - rb = "%i(\na\nb\n)\n1" - pt = s(:block, - s(:array, - s(:lit, :a).line(2), - s(:lit, :b).line(3)).line(1), - s(:lit, 1).line(5)) assert_parse rb, pt end def test_interpolated_symbol_array_line_breaks - rb = "%I(\na\nb\n)\n1" pt = s(:block, s(:array, @@ -2996,362 +3623,367 @@ assert_parse rb, pt end - def test_defs_kwarg - rb = "def self.a b: 1\nend" - pt = s(:defs, s(:self), :a, s(:args, s(:kwarg, :b, s(:lit, 1))), s(:nil)) + def test_iter_array_curly + skip if processor.class.version >= 25 + + rb = "f :a, [:b] { |c, d| }" # yes, this is bad code... that's their problem + pt = s(:iter, + s(:call, nil, :f, s(:lit, :a), s(:array, s(:lit, :b))), + s(:args, :c, :d)) assert_parse rb, pt end - def test_defn_kwarg_kwsplat - rb = "def a(b: 1, **c) end" - pt = s(:defn, :a, s(:args, s(:kwarg, :b, s(:lit, 1)), :"**c"), s(:nil)) + def test_iter_kwarg + rb = "a { |b: 1| }" + pt = s(:iter, s(:call, nil, :a), s(:args, s(:kwarg, :b, s(:lit, 1)))) assert_parse rb, pt end - def test_defn_kwarg_kwsplat_anon - rb = "def a(b: 1, **) end" - pt = s(:defn, :a, s(:args, s(:kwarg, :b, s(:lit, 1)), :"**"), s(:nil)) + def test_iter_kwarg_kwsplat + rb = "a { |b: 1, **c| }" + pt = s(:iter, s(:call, nil, :a), s(:args, s(:kwarg, :b, s(:lit, 1)), :"**c")) assert_parse rb, pt end - def test_defn_kwarg_env - rb = "def test(**testing) test_splat(**testing) end" - pt = s(:defn, :test, s(:args, :"**testing"), - s(:call, nil, :test_splat, s(:hash, s(:kwsplat, s(:lvar, :testing))))) - + def test_non_interpolated_symbol_array_line_breaks + rb = "%i(\na\nb\n)\n1" + pt = s(:block, + s(:array, + s(:lit, :a).line(2), + s(:lit, :b).line(3)).line(1), + s(:lit, 1).line(5)) assert_parse rb, pt end - def test_dstr_lex_state - rb = '"#{p:a}"' - pt = s(:dstr, "", s(:evstr, s(:call, nil, :p, s(:lit, :a)))) + def test_qsymbols + rb = "%I(a b c)" + pt = s(:array, s(:lit, :a), s(:lit, :b), s(:lit, :c)) assert_parse rb, pt end - def test_call_arg_kwsplat - rb = "a(b, **1)" - pt = s(:call, nil, :a, s(:call, nil, :b), s(:hash, s(:kwsplat, s(:lit, 1)))) + def test_qsymbols_empty + rb = "%I()" + pt = s(:array) assert_parse rb, pt end - def test_call_arg_assoc_kwsplat - rb = "f(1, kw: 2, **3)" - pt = s(:call, nil, :f, - s(:lit, 1), - s(:hash, s(:lit, :kw), s(:lit, 2), s(:kwsplat, s(:lit, 3)))) + def test_qsymbols_empty_space + rb = "%I( )" + pt = s(:array) assert_parse rb, pt end - def test_call_kwsplat - rb = "a(**1)" - pt = s(:call, nil, :a, s(:hash, s(:kwsplat, s(:lit, 1)))) + def test_qsymbols_interp + rb = '%I(a b#{1+1} c)' + pt = s(:array, + s(:lit, :a), + s(:dsym, "b", s(:evstr, s(:call, s(:lit, 1), :+, s(:lit, 1)))), + s(:lit, :c)) assert_parse rb, pt end - def test_iter_kwarg - rb = "a { |b: 1| }" - pt = s(:iter, s(:call, nil, :a), s(:args, s(:kwarg, :b, s(:lit, 1)))) + def test_stabby_block_iter_call + rb = "x -> () do\na.b do\nend\nend" + pt = s(:call, nil, :x, + s(:iter, + s(:lambda), + s(:args), + s(:iter, s(:call, s(:call, nil, :a), :b), 0))) assert_parse rb, pt end - def test_iter_kwarg_kwsplat - rb = "a { |b: 1, **c| }" - pt = s(:iter, s(:call, nil, :a), s(:args, s(:kwarg, :b, s(:lit, 1)), :"**c")) + def test_stabby_block_iter_call_no_target_with_arg + rb = "x -> () do\na(1) do\nend\nend" + pt = s(:call, nil, :x, + s(:iter, + s(:lambda), + s(:args), + s(:iter, + s(:call, nil, :a, + s(:lit, 1)), 0))) assert_parse rb, pt end - def test_block_kwarg_lvar - rb = "bl { |kw: :val| kw }" - pt = s(:iter, s(:call, nil, :bl), s(:args, s(:kwarg, :kw, s(:lit, :val))), - s(:lvar, :kw)) + def test_symbols + rb = "%i(a b c)" + pt = s(:array, s(:lit, :a), s(:lit, :b), s(:lit, :c)) assert_parse rb, pt end - def test_block_kwarg_lvar_multiple - rb = "bl { |kw: :val, kw2: :val2 | kw }" - pt = s(:iter, s(:call, nil, :bl), - s(:args, - s(:kwarg, :kw, s(:lit, :val)), - s(:kwarg, :kw2, s(:lit, :val2))), - s(:lvar, :kw)) + def test_symbols_empty + rb = "%i()" + pt = s(:array) assert_parse rb, pt end - def test_stabby_block_iter_call - rb = "x -> () do\na.b do\nend\nend" - pt = s(:call, nil, :x, - s(:iter, - s(:call, nil, :lambda), - s(:args), - s(:iter, s(:call, s(:call, nil, :a), :b), 0))) - + def test_symbols_empty_space + rb = "%i( )" + pt = s(:array) + assert_parse rb, pt end - def test_stabby_block_iter_call_no_target_with_arg - rb = "x -> () do\na(1) do\nend\nend" - pt = s(:call, nil, :x, - s(:iter, - s(:call, nil, :lambda), - s(:args), - s(:iter, - s(:call, nil, :a, - s(:lit, 1)), 0))) + def test_symbols_interp + rb = '%i(a b#{1+1} c)' + pt = s(:array, s(:lit, :a), s(:lit, :'b#{1+1}'), s(:lit, :c)) assert_parse rb, pt end +end - def test_block_call_dot_op2_brace_block - rb = "a.b c() do d end.e do |f| g end" - pt = s(:iter, - s(:call, - s(:iter, - s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)), - 0, - s(:call, nil, :d)), - :e), - s(:args, :f), - s(:call, nil, :g)) +module TestRubyParserShared21Plus + include TestRubyParserShared20Plus + + def test_block_kw + rb = "blah { |k:42| }" + pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k, s(:lit, 42)))) + assert_parse rb, pt + rb = "blah { |k:42| }" assert_parse rb, pt end - def test_block_call_dot_op2_cmd_args_do_block - rb = "a.b c() do d end.e f do |g| h end" - pt = s(:iter, - s(:call, - s(:iter, - s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)), - 0, - s(:call, nil, :d)), - :e, - s(:call, nil, :f)), - s(:args, :g), - s(:call, nil, :h)) + def test_block_kw__required + rb = "blah do |k:| end" + pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k))) assert_parse rb, pt - end - - def test_defn_kwarg_val - rb = "def f(a, b:1) end" - pt = s(:defn, :f, s(:args, :a, s(:kwarg, :b, s(:lit, 1))), s(:nil)) + rb = "blah do |k:| end" assert_parse rb, pt end - def test_args_kw_block - rb = "def f(a: 1, &b); end" - pt = s(:defn, :f, s(:args, s(:kwarg, :a, s(:lit, 1)), :"&b"), s(:nil)) + def test_bug162__21plus + rb = %q(<, s(:lit, 1)).line(1) + def test_safe_call_after_newline + rb = "a\n&.b" + pt = s(:safe_call, s(:call, nil, :a), :b) assert_parse rb, pt end - def test_safe_op_asgn - rb = "a&.b += x 1\n" - pt = s(:safe_op_asgn, s(:call, nil, :a), s(:call, nil, :x, s(:lit, 1)), :b, :+).line(1) + def test_safe_call_dot_parens + rb = "a&.()" + pt = s(:safe_call, s(:call, nil, :a), :call) assert_parse rb, pt end - def test_safe_op_asgn2 - rb = "a&.b ||=\nx;" - pt = s(:safe_op_asgn2, s(:call, nil, :a), :b=, :"||", s(:call, nil, :x)).line(1) + def test_safe_call_newline + rb = "a&.b\n" + pt = s(:safe_call, s(:call, nil, :a), :b) assert_parse rb, pt end - def test_ruby21_numbers - rb = "[1i, 2r, 3ri]" - pt = s(:array, s(:lit, Complex(0, 1)), s(:lit, Rational(2)), s(:lit, Complex(0, Rational(3)))) + def test_safe_call_operator + rb = "a&.> 1" + pt = s(:safe_call, s(:call, nil, :a), :>, s(:lit, 1)).line(1) assert_parse rb, pt end - def test_float_with_if_modifier - rb = "1.0if true" - pt = s(:if, s(:true), s(:lit, 1.0), nil) + def test_safe_call_rhs_newline + rb = "c = a&.b\n" + pt = s(:lasgn, :c, s(:safe_call, s(:call, nil, :a), :b)) assert_parse rb, pt end - def test_integer_with_if_modifier - rb = "1_234if true" - pt = s(:if, s(:true), s(:lit, 1234), nil) + def test_safe_calls + rb = "a&.b&.c(1)" + pt = s(:safe_call, s(:safe_call, s(:call, nil, :a), :b), :c, s(:lit, 1)) assert_parse rb, pt end - def test_heredoc_squiggly - rb = "a = <<~\"EOF\"\n blah blah\n EOF\n\n" - pt = s(:lasgn, :a, s(:str, "blah blah\n")) + def test_safe_op_asgn + rb = "a&.b += x 1\n" + pt = s(:safe_op_asgn, s(:call, nil, :a), s(:call, nil, :x, s(:lit, 1)), :b, :+).line(1) assert_parse rb, pt end - def test_required_kwarg_no_value - rb = "def x a:, b:\nend" - pt = s(:defn, :x, - s(:args, - s(:kwarg, :a), - s(:kwarg, :b)), - s(:nil)) + def test_safe_op_asgn2 + rb = "a&.b ||=\nx;" + pt = s(:safe_op_asgn2, s(:call, nil, :a), :b=, :"||", s(:call, nil, :x)).line(1) assert_parse rb, pt end @@ -3458,16 +4086,58 @@ end module TestRubyParserShared24Plus - # ...version specific tests to go here... + include TestRubyParserShared23Plus + + def test_lasgn_call_nobracket_rescue_arg + rb = "a = b 1 rescue 2" + pt = s(:lasgn, :a, + s(:rescue, + s(:call, nil, :b, s(:lit, 1)), + s(:resbody, s(:array), s(:lit, 2)))) + + assert_parse rb, pt + end end module TestRubyParserShared25Plus + include TestRubyParserShared24Plus + # ...version specific tests to go here... end +module TestRubyParserShared26Plus + include TestRubyParserShared25Plus + + def test_dot2_nil__26 + rb = "a.." + pt = s(:dot2, s(:call, nil, :a), nil) + + assert_parse rb, pt + end + + def test_dot3_nil__26 + rb = "a..." + pt = s(:dot3, s(:call, nil, :a), nil) + + assert_parse rb, pt + end + + def test_symbol_list + rb = '%I[#{a} #{b}]' + pt = s(:array, + s(:dsym, "", s(:evstr, s(:call, nil, :a)).line(1)).line(1), + s(:dsym, "", s(:evstr, s(:call, nil, :b)).line(1)).line(1)).line 1 + + assert_parse rb, pt + end +end + +module TestRubyParserShared27Plus + include TestRubyParserShared26Plus +end + class TestRubyParser < Minitest::Test def test_cls_version - assert_equal 18, RubyParser::V18.version assert_equal 23, RubyParser::V23.version assert_equal 24, RubyParser::V24.version assert_equal 24, Ruby24Parser.version @@ -3477,15 +4147,6 @@ def test_parse processor = RubyParser.new - # 1.8 only syntax - rb = "while false : 42 end" - pt = s(:while, s(:false), s(:lit, 42), true) - - assert_silent do - assert_equal pt, processor.parse(rb) - end - - # 1.9 only syntax rb = "a.()" pt = s(:call, s(:call, nil, :a), :call) @@ -3498,8 +4159,20 @@ end end - msg = "(string):1 :: parse error on value \"(\" (tLPAREN2)" - assert_equal msg, e.message.strip + assert_includes e.message, 'parse error on value false ($end)' + end + + def test_parse_error_from_first + processor = RubyParser.new + + e = assert_raises Racc::ParseError do + capture_io do + processor.parse "a -> () {" + end + end + + # This is a 2.x error, will fail on 1.8/1.9. + assert_includes e.message, 'parse error on value false ($end)' end end @@ -3514,7 +4187,7 @@ def self.generate_test klass, node, data, input_name, output_name return if node.to_s =~ /bmethod|dmethod/ - return if Array === data['Ruby'] + return if Array === data["Ruby"] output_name = "ParseTree" @@ -3526,22 +4199,6 @@ assert_equal pt, result end - def refute_parse rb - self.result = processor.parse rb - assert_nil result - end - - def assert_syntax_error rb, emsg - e = nil - assert_silent do - e = assert_raises RubyParser::SyntaxError do - processor.parse rb - end - end - - assert_equal emsg, e.message - end - def assert_parse_error rb, emsg e = nil assert_silent do @@ -3550,7 +4207,11 @@ end end - assert_equal emsg, e.message + if Regexp === emsg then + assert_match emsg, e.message + else + assert_equal emsg, e.message + end end def assert_parse_line rb, pt, line @@ -3562,212 +4223,226 @@ ensure ENV["VERBOSE"] = old_env end + + def assert_syntax_error rb, emsg + e = nil + assert_silent do + e = assert_raises RubyParser::SyntaxError do + processor.parse rb + end + end + + assert_equal emsg, e.message + end + + def refute_parse rb + self.result = processor.parse rb + assert_nil result + end end -class TestRubyParserV18 < RubyParserTestCase - include TestRubyParserShared +class TestRubyParserV20 < RubyParserTestCase + include TestRubyParserShared20Plus def setup super - self.processor = RubyParser::V18.new + self.processor = RubyParser::V20.new end - def test_assoc_list_18 - rb = "{1, 2, 3, 4}" - pt = s(:hash, s(:lit, 1), s(:lit, 2), s(:lit, 3), s(:lit, 4)) + def test_bug162__20 + skip "not ready for this yet" - assert_parse rb, pt - end + # Ignore everything after \r in heredoc marker in <= 2.0 #162 - def test_case_then_colon_18 - rb = "case x; when Fixnum: 42; end" - pt = s(:case, - s(:call, nil, :x), - s(:when, s(:array, s(:const, :Fixnum)), s(:lit, 42)), - nil) + rb = %q(< { }" => s(:iter, s(:call, nil, :lambda), 0), - "lambda { }" => s(:iter, s(:call, nil, :lambda), 0), - "proc { }" => s(:iter, s(:call, nil, :proc), 0), - "Proc.new { }" => s(:iter, s(:call, s(:const, :Proc), :new), 0), - - "-> () { }" => s(:iter, s(:call, nil, :lambda), s(:args)), - "lambda { || }" => s(:iter, s(:call, nil, :lambda), s(:args)), - "proc { || }" => s(:iter, s(:call, nil, :proc), s(:args)), - "Proc.new { || }" => s(:iter, s(:call, s(:const, :Proc), :new), s(:args)), + "-> { }" => s(:iter, s(:lambda), 0), + "lambda { }" => s(:iter, s(:call, nil, :lambda), 0), + "proc { }" => s(:iter, s(:call, nil, :proc), 0), + "Proc.new { }" => s(:iter, s(:call, s(:const, :Proc), :new), 0), + + "-> () { }" => s(:iter, s(:lambda), s(:args)), + "lambda { || }" => s(:iter, s(:call, nil, :lambda), s(:args)), + "proc { || }" => s(:iter, s(:call, nil, :proc), s(:args)), + "Proc.new { || }" => s(:iter, s(:call, s(:const, :Proc), :new), s(:args)), }.each do |input, expected| next if v == 18 and input =~ /->/ diff -Nru ruby-ruby-parser-3.11.0/tools/munge.rb ruby-ruby-parser-3.15.1/tools/munge.rb --- ruby-ruby-parser-3.11.0/tools/munge.rb 1970-01-01 00:00:00.000000000 +0000 +++ ruby-ruby-parser-3.15.1/tools/munge.rb 2021-01-18 16:48:25.000000000 +0000 @@ -0,0 +1,222 @@ +#!/usr/bin/env ruby -ws + +$v ||= false + +stack = [] +last_token = nil +reduce_line = nil + +def munge s + renames = [ + "'='", "tEQL", + "'!'", "tBANG", + "'%'", "tPERCENT", + "'&'", "tAMPER2", + "'('", "tLPAREN2", + "')'", "tRPAREN", + "'*'", "tSTAR2", + "'+'", "tPLUS", + "','", "tCOMMA", + "'-'", "tMINUS", + "'.'", "tDOT", + "'/'", "tDIVIDE", + "';'", "tSEMI", + "':'", "tCOLON", + "'<'", "tLT", + "'>'", "tGT", + "'?'", "tEH", + "'['", "tLBRACK", + "'\\n'", "tNL", + "']'", "tRBRACK", + "'^'", "tCARET", + "'`'", "tBACK_REF2", + "'{'", "tLCURLY", + "'|'", "tPIPE", + "'}'", "tRCURLY", + "'~'", "tTILDE", + '"["', "tLBRACK", + + # 2.0 changes? + '"<=>"', "tCMP", + '"=="', "tEQ", + '"==="', "tEQQ", + '"!~"', "tNMATCH", + '"=~"', "tMATCH", + '">="', "tGEQ", + '"<="', "tLEQ", + '"!="', "tNEQ", + '"<<"', "tLSHFT", + '">>"', "tRSHFT", + '"*"', "tSTAR", + + '".."', "tDOT2", + + '"&"', "tAMPER", + '"&&"', "tANDOP", + '"&."', "tLONELY", + '"||"', "tOROP", + + '"..."', "tDOT3", + '"**"', "tPOW", + '"unary+"', "tUPLUS", + '"unary-"', "tUMINUS", + '"[]"', "tAREF", + '"[]="', "tASET", + '"::"', "tCOLON2", + '"{ arg"', "tLBRACE_ARG", + '"( arg"', "tLPAREN_ARG", + '"("', "tLPAREN", + 'rparen', "tRPAREN", + '"{"', "tLBRACE", + '"=>"', "tASSOC", + '"->"', "tLAMBDA", + '":: at EXPR_BEG"', "tCOLON3", + '"**arg"', "tDSTAR", + '","', "tCOMMA", + + # other + + 'tLBRACK2', "tLBRACK", # HACK + + "' '", "tSPACE", # needs to be later to avoid bad hits + + "/* empty */", "none", + /^\s*$/, "none", + + "keyword_BEGIN", "klBEGIN", + "keyword_END", "klEND", + /keyword_(\w+)/, proc { "k#{$1.upcase}" }, + /\bk_([a-z_]+)/, proc { "k#{$1.upcase}" }, + /modifier_(\w+)/, proc { "k#{$1.upcase}_MOD" }, + "kVARIABLE", "keyword_variable", # ugh + + # 2.6 collapses klBEGIN to kBEGIN + "klBEGIN", "kBEGIN", + "klEND", "kEND", + + /keyword_(\w+)/, proc { "k#{$1.upcase}" }, + /\bk_([^_][a-z_]+)/, proc { "k#{$1.upcase}" }, + /modifier_(\w+)/, proc { "k#{$1.upcase}_MOD" }, + + "kVARIABLE", "keyword_variable", # ugh: this is a rule name + + # UGH + "k_LINE__", "k__LINE__", + "k_FILE__", "k__FILE__", + "k_ENCODING__", "k__ENCODING__", + + '"defined?"', "kDEFINED", + + "", "none", + + '"do (for condition)"', "kDO_COND", + '"do (for lambda)"', "kDO_LAMBDA", + '"do (for block)"', "kDO_BLOCK", + + /\"(\w+) \(modifier\)\"/, proc { |x| "k#{$1.upcase}_MOD" }, + /\"(\w+)\"/, proc { |x| "k#{$1.upcase}" }, + + /@(\d+)(\s+|$)/, "", + /\$?@(\d+) */, "", # TODO: remove? + + /_EXPR/, "", + ] + + renames.each_slice(2) do |(a, b)| + if Proc === b then + s.gsub!(a, &b) + else + s.gsub!(a, b) + end + end + + s.strip.squeeze " " +end + +ARGF.each_line do |line| + case line + when /^(Stack now|Entering state|Shifting|Cleanup|Starting)/ then + # do nothing + when /^vtable_/ then + # do nothing + when /Gem::MissingSpecError/ then + # do nothing -- ruby 2.5 is being bitchy? + when /^Reading a token: Next token is token (.*?) \(\)/ then + token = munge $1 + next if last_token == token + puts "next token is %p (%p)" % [token, last_token] + last_token = token + when /^Reading a token: / then + next # skip + when /^read\s+:(\w+)/ then # read :tNL(tNL) nil + token = munge $1 + next if last_token == token + puts "next token is %p (%p)" % [token, last_token] + last_token = token + when /^Next token is token ("[^"]+"|\S+)/ then + token = munge $1 + next if last_token == token + puts "next token is %p (%p)" % [token, last_token] + last_token = token + when /^read\s+false/ then # read false($end) "$end" + puts "next token is EOF" + when /^Now at end of input./ then + # do nothing + when /^.:scan=>\["([^"]+)"/ then + puts "scan = %p" % [$1] + when /^Reducing stack by rule (\d+) \(line (\d+)\):/ then + reduce_line = $2.to_i + when /^ \$\d+ = (?:token|nterm) (.+) \(.*\)/ then + item = $1 + stack << munge(item) + when /^-> \$\$ = (?:token|nterm) (.+) \(.*\)/ then + stack << "none" if stack.empty? + item = munge $1 + x = stack.map { |s| s.strip }.join " " + if x != item then # prevent kdef -> kdef + if $v && reduce_line then + puts "reduce #{x} --> #{item} at #{reduce_line}".squeeze " " + else + puts "reduce #{x} --> #{item}".squeeze " " + end + puts + end + reduce_line = nil + stack.clear + when /^reduce/ then # ruby_parser side + puts munge line.chomp + puts + when /^(\w+_stack)\.(\w+)/ then + # TODO: make pretty, but still informative w/ line numbers etc + puts line.gsub("true", "1").gsub("false", "0") + # puts "#{$1}(#{$2})" + when /^(\w+_stack(\(\w+\))?: \S+)/ then + # _data = $v ? line.chomp : $1 + # puts line + # TODO: make pretty, but still informative w/ line numbers etc + puts line.gsub("true", "1").gsub("false", "0") + when /^lex_state: :?([\w|]+) -> :?([\w|]+)(?: (?:at|from) (.*))?/ then + a, b, c = $1.upcase, $2.upcase, $3 + a.gsub! /EXPR_/, "" + b.gsub! /EXPR_/, "" + if c && $v then + puts "lex_state: #{a} -> #{b} at #{c}" + else + puts "lex_state: #{a} -> #{b}" + end + when /debug|FUCK/ then + puts line.chomp + when /^(#.*parse error|on )/ then + puts line.chomp + when /^(goto|shift| +\[|$)/ then # racc + # do nothing + # when /^Reading a token: Now at end of input./ then + # # puts "EOF" + # when /^Reading a token: Next token is token (.+)/ then + # puts "READ: #{$1.inspect}" + when /^accept/ then + puts "DONE" + else + puts "unparsed: #{line.chomp}" + end +end diff -Nru ruby-ruby-parser-3.11.0/tools/ripper.rb ruby-ruby-parser-3.15.1/tools/ripper.rb --- ruby-ruby-parser-3.11.0/tools/ripper.rb 1970-01-01 00:00:00.000000000 +0000 +++ ruby-ruby-parser-3.15.1/tools/ripper.rb 2021-01-18 16:48:25.000000000 +0000 @@ -0,0 +1,39 @@ +#!/usr/bin/env ruby -ws + +$d ||= false +$p ||= false + +require "ripper/sexp" +require "pp" if $p + +if ARGV.empty? then + warn "reading from stdin" + ARGV << "-" +end + +class MySexpBuilder < Ripper::SexpBuilderPP + def on_parse_error msg + Kernel.warn msg + end +end + +ARGV.each do |path| + src = path == "-" ? $stdin.read : File.read(path) + rip = MySexpBuilder.new src + rip.yydebug = $d + + sexp = rip.parse + + if rip.error? then + warn "skipping" + next + end + + puts "accept" + + if $p then + pp sexp + else + p sexp + end +end