pax_global_header00006660000000000000000000000064140013357310014507gustar00rootroot0000000000000052 comment=45ee459ee9ad249705ecdf7d094e26c6f519a4c9 ruby-ruby-parser-3.15.1/000077500000000000000000000000001400133573100150305ustar00rootroot00000000000000ruby-ruby-parser-3.15.1/.autotest000066400000000000000000000033451400133573100167060ustar00rootroot00000000000000# -*- ruby -*- require 'autotest/restart' # require 'autotest/isolate' require 'autotest/rcov' if ENV['RCOV'] 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 ".diff" at.add_exception ".rdoc" at.add_exception ".yml" at.add_exception ".txt" at.add_exception ".output" 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 end at.libs << ':../../minitest/dev/lib' at.testlib = "minitest/autorun" at.add_mapping(/^lib\/.*\.y$/) do |f, _| 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("_", "_?") at.files_matching %r%^test/.*#{g}.rb$% end at.add_mapping(/^lib\/ruby_lexer\.rex\.rb$/) do |f, _| at.files_matching %r%^test/.*ruby_lexer\.rb$% end at.add_mapping(/^lib\/.*\.rex$/) do |f, _| g = File.basename(f, ".rex").gsub("_", "_?") at.files_matching %r%^test/.*#{g}.rb$% end at.add_mapping(/pt_testcase.rb/) do |f, _| at.files_matching(/test_.*rb$/) end %w(TestEnvironment TestStackState TestValueExpr).each do |klass| at.extra_class_map[klass] = "test/test_ruby_parser_extras.rb" end 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 ruby-ruby-parser-3.15.1/History.rdoc000066400000000000000000001301031400133573100173400ustar00rootroot00000000000000=== 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: * Expand to support ruby 2.5 parsing. * 3 bug fixes: * Fixed %r lexing when delimiter is also used in (?X) group. * Restore newline after label to detect required kwarg. (presidentbeef) * Return `s(:self)` target for `self[]` calls. (presidentbeef) === 3.10.1 / 2017-07-21 * 2 bug fixes: * Fixed identification of parser version whether Ruby##Parser or Parser::V##. * Fixed squiggly heredoc lexing when using 24 parser. === 3.10.0 / 2017-07-17 * 4 minor enhancements: * Added support for 'squiggly heredocs' (indented content). (jjoos) * Bumped oedipus_lex to ~> 2.5. * Bumped sexp_processor to ~> 4.9. * Made STRICT_SEXP=1 safe: converted indexed sexps to semantic calls where needed. * 5 bug fixes: * Clear and restore cmdarg stack around defs args and body. (presidentbeef) * Conditionalize use of sexp_body= to make it compatible w/ sexp_processor 4.9.0 * Fix up line numbers in strings with newlines and `#`. (presidentbeef) * Fixed line numbers of resbodies. * Fixed some tracking of lexical state. Fixes bug #249. === 3.9.0 / 2017-04-13 * 1 major enhancement: * Added tentative ruby 2.4 support. Probably missing things. * 13 minor enhancements: * Added RubyParser.latest. * Added RubyParser::Parser.version to make version range comparisons easier * Changed superclasses of all parsers to RubyParser::Parser * Cleaned up a lot of the version specific code to be more generic/flexible. * Documented how to add new versions in README. * Moved RubyParser from ruby_parser_extras.rb into ruby_parser.rb to fix bootstrap issues. * Renamed RubyParserStuff#get_match_node to new_match. Aliased and deprecated. * Renamed RubyParserStuff#logop to logical_op. Aliased and deprecated. * Renamed RubyParserStuff#node_assign to new_assign. Aliased and deprecated. * Renamed all parsers to RubyParser::V##. * Revamped grammar preprocessing to make adding new versions easier. * RubyParser.for_current_ruby falls back to latest if current not available. * Subclasses of RubyParser::Parser register themselves into RubyParser::VERSIONS. * 4 bug fixes: * Fixed `&.` after newline. (presidentbeef) * Fixed bug setting line number for hash literals to line of opening brace. * Fixed grammar preprocessing bug. * Properly handle kDO with no-parens stabby lambda. (presidentbeef) === 3.8.4 / 2017-01-13 * 3 bug fixes: * Fix parsing if in LHS label position. (presidentbeef) * Fixed parsing of anonymous keyword splat arg (eg f(**)). * Fixed ruby 2.4+ deprecation warnings about using Fixnum. === 3.8.3 / 2016-10-09 * 1 minor enhancement: * Support Ruby 2.1 number literals. (soutaro) * 3 bug fixes: * Fixed line numbers for strs with backslash-newlines. (maxjacobson) * Improved compatibility on tokenizing number. (soutaro) * Refactored and fixed multiline array line numbers. (ptoomey3, with changes) === 3.8.2 / 2016-05-05 * 2 bug fixes: * Fixed lex_state in interpolated strings. (whitequark) * Fixed safe operator for newline/semicolon contexts. (presidentbeef) === 3.8.1 / 2016-02-19 * 1 bug fix: * Fixed problems with tLONELY in mlhs_node. === 3.8.0 / 2016-02-18 * 1 major enhancement: * Added support for Ruby 2.3.0 and the &. operator. (presidentbeef) * 2 minor enhancements: * Add support for safe attr assign. (presidentbeef) * Added support for safe call. (presidentbeef) * 1 bug fix: * Fixed parsing of { 'a': :b }. (presidentbeef) === 3.7.3 / 2016-01-21 * 2 bug fixes: * Fixed parsing kwargs in defs with no parens. (presidentbeef) * defs should have a nil node if body is empty. === 3.7.2 / 2015-10-26 * 1 bug fix: * I hate regexen. Fixed a lexing bug confusing strings vs labels. (phiggins) === 3.7.1 / 2015-08-06 * 1 minor enhancement: * Improved understandability of lexing postfix symbols. * 2 bug fixes: * Fixed timeout caused by regexp backtracking bug w/ long strings in 2.2 parser. (presidentbeef) * Rename DEBUG env toggle to RB_LINENO_DEBUG. (tenderlove) === 3.7.0 / 2015-05-28 * 2 major enhancements: * Added preliminary support for ruby 2.2 syntax. * Now writing all 2.x parsers from one source, generating racc files. * 1 minor enhancement: * Added RubyLexer#process_label and hooked it up to "x": and 'x': productions. * 4 bug fixes: * Fixed handling of block_args to be consistent across all parse versions. * Fixed lexing of label assoc args w/ newlines in between k/v. (jeremyf) * Fixed lexing of x?'':y for ruby22 (not a label). (presidentbeef) * clear and restore cmdarg stack around def args and body. === 3.6.6 / 2015-04-13 * 1 minor enhancement: * Added expr_labelarg state (eg: a:1) * 5 bug fixes: * Fix scan logging backtrace when DEBUG=1 * Fixed kwsplat on 2.0 & 2.1. * Fixed mandatory keyword block args. (cvortmann) * Handle #$ in expanded strings/regexps where x is NOT a valid gvar name. * Invalid gvar names raise a compile error. === 3.6.5 / 2015-03-12 * 1 minor enhancement: * Add line numbers from block comments =begin/=end. (presidentbeef) === 3.6.4 / 2015-01-16 * 1 bug fix: * Removed shebangs in tests because of bugs (aka 'features') in RPM packaging tools. === 3.6.3 / 2014-09-26 * 1 bug fix: * Fixed bug caused by latest version of oedipus_lex not exporting lineno accessor. === 3.6.2 / 2014-07-18 * 1 bug fix: * Handle return/next/break/yield w/ block call (WHY). === 3.6.1 / 2014-05-12 * 1 bug fix: * Strings that don't match the encoding of the file are now returned as ASCII-8BIT. === 3.6.0 / 2014-04-23 * 1 minor enhancement: * Added new_string and switched all parsers to it. * 1 bug fix: * Fixed line numbers of nodes following multi-line strings. (presidentbeef) === 3.5.0 / 2014-03-24 * 1 major enhancement: * Added initial support for ruby 2.1 syntax. Doesn't have numeric extensions yet. * 2 minor enhancements: * Converted ruby_lexer.rex to use new grouping mechanism. ~15% improvement in speed. * Various lexer cleanup. * 2 bug fixes: * 2.0/2.1: Fixed block kw args. * Fixed env for kwargs and friends. === 3.4.1 / 2014-02-14 21 files failed to parse out of ~834k files makes this 99.9975% or 4.21σ. * 1 minor enhancement: * Added StackState#store and #restore. * 1 bug fix: * 1.8/1.9/2.0: Fixed tSTRING_DBEG w/ f'd up amounts of nesting + braces + do/end. yeah. I'm as confused as you are. === 3.4.0 / 2014-02-04 31 files failed to parse out of ~834k files makes this 99.9963% or 4.12σ. * 1 major enhancement: * Replaced hand-written/optimized f'd-up lexer with an oedipus_lex generated lexer. This makes it roughly 40-50% faster. * 30 minor enhancements: * 2.0: Added support for a.b c() do d end.e do |f| g end * 2.0: Added support for a.b c() do d end.e f do |g| h end * Added -s flag to ruby_parse_extract_error to output timings. * Added RubyLexer #command_state and #last_state to deal with oedipus_lex differences. * Added String#lineno and #lineno= because I'm a bad bad person. * Added a bunch of RubyLexer scanning methods: beginning_of_line?, check, scan, etc. * Added a bunch of process_* methods extracted from old yylex. process_amper, etc. * Added lib/.document to save my laptop's battery from pain and suffering * Adjust lineno when we lex a bunch of blank lines. * Attach lineno to tIDENTIFIER values (strings, ugh) * Cleaned up and re-ordered node_assign to be faster (ordered by actual occurrance). * Extend RubyParserStuff#gettable to set the lineno if it comes in with the id. * Extended RubyParserStuff#new_case to take line number. * Finally dropped RPStringScanner's BS #current_line. * Finally dropped RPStringScanner's BS line number calculation (lineno). * Implemented Sexp#add_all since we now have a test case for it. * Removed :call case of node_assign. I don't think it is possible. * Removed RubyLexer #extra_lines_added. No longer used. Complex heredoc lineno's possible screwed up. * Removed RubyLexer#parse_number. Handled by oedipus_lex. * Removed RubyLexer#yacc_value now that next_token returns pairs. * Removed RubyLexer's @src. Now taken care of by oedipus_lex. * Removed RubyParser#advance. RubyParser#next_token takes care of everything now. * Removed RubyParserExtras#arg_add. (presidentbeef! YAY!) * Removed lib/gauntlet_rubyparser.rb. I just don't use it anymore. Too slow. * RubyLexer#is_label_possible? doesn't need an arg * RubyLexer#process_token is now a normal oedipal lexer method. * RubyParser#next_token now expects RubyLexer#next_token to return a pair (type, val). * TRYING a new scheme to figure out encodings... but I'm about to throw in the towel. I hate this stuff so much. * Turned off oedipus_lex's automatic line counting. (pushing to oedipus_lex soon). * Updated to oedipus_lex 2.1+. * 7 bug fixes: * 1.8: Properly parse `a (:b, :c, :d => :e)`. (presidentbeef) * Fixed lexing symbol!= vs symbol!. Please use your spacebar. Think of the children. * Fixed line for dstr spanning multiple lines via backslash. (presidentbeef) * Fixed line numbers for odd cases with trailing whitespace. (presidentbeef) * Fixed line numbers on ambiguous calls w/ gvar/ivar args. (presidentbeef) * Max out unicode hex values to 2-4 or 2-6 chars or pack will overflow and puke. * Removed ESC_RE from RubyLexer. Must have slipped through. === 3.3.0 / 2014-01-14 * Notes: 39 files failed to parse out of ~834k files makes this 99.9953% or 4.07σ. * 15 minor enhancements: * 2.0: Parse kwarg as lvars. (chastell) * Added RubyLexer#beginning_of_line?, check(re), end_of_stream? * Added RubyLexer#process_token_keyword. * Added RubyLexer#scan, #matched, #beginning_of_line? and others to decouple from internals. * Added lexing of \u### and \u{###}." * Added optimizations for simple quoted symbols. * Aliased Lexer#src to ss (since that is what it is). * Allow for 20 in parser class name. * Modified parsers line number calculations for defn nodes. * Removed Env#dynamic, #dynamic?, #use, #used? * Removed RubyLexer#tern. Introduced and disused during 3.0 alpha. (whitequark) * Removed unused RubyLexer#warnings. * Renamed *_RE consts to just * (IDENT_CHAR, ESC, etc). * new_defn now sets arg node line number directly. * zero byte is allowed in symbols for 1.9 / 2.0. * 11 bug fixes: * 2.0: Fixed paren-less kwargs in defn. * Don't bother with regexp encoding options on 1.9+ to avoid warnings. * Fix constant re-build on ruby 2.0 + rake 10. * Fix lexing of %i with extra whitespace. (flori) * Fixed RubyParserStuff#new_body to deal with nonsensical code better (begin-empty+else). (snatchev) * Fixed bug lexing h[k]=begin ... end. Use your space bars people! * Fixed env scoping in new lambdas. * Fixed handling of single array arg in attrasgn. * Fixed test to call RubyLexer#reset between assertions. * No longer assigning ivar/cvars to env. Only locals should be in env. * Refactored initialize and reset to more properly re-initialize as needed. === 3.2.2 / 2013-07-11 * 5 bug fixes: * 1.9/2.0: fixed assocs in return args. (presidentbeef) * Fixed handling of parse error when class is nested in multiple defs. (whitequark) * Fixed lexing of %w[] w/ funny whitespace separators. (whitequark) * Fixed more call nodes that have trailing comma syntax. (presidentbeef) * Fixed more call_args slippage. === 3.2.1 / 2013-07-03 * 1 bug fix: * 1.9/2.0: Trailing assocs were being munged into arrays. (presidentbeef) === 3.2.0 / 2013-07-02 * 1 major enhancement: * Added (rough draft) 2.0 support. Still missing some small / rare things. * 12 minor enhancements: * Added %i(symbol-names...) support. (%I too) * Added 140 more tests, jumping test count from 1376 to 2143. Yay for test reuse! * Added RubyLexer#brace_nest. * Added compare20 rake task to diff the grammar architecture against MRI. * Added lpar_beg and paren_nest to lexer to track state of parens in stabbies * Added shadow nodes for scoped block args. * Compound RubyParser now defaults to 2.0. * Fixed rake to < 10, because 10's file dependency handling is so very broken. * Made it possible to specify version in bin/ruby_parse_extract_error w/ -v 18|19|20 * Refactored to RubyParserStuff::ENCODING_ORDER to allow custom tweaking of encoding guessing. (samlown) * Switched `rake debug` to default to 2.0. * Translated some fixes across 1.8 and 1.9 from 2.0. * 42 bug fixes: * 2.0: Fixed a number of block args scenarios w/ kwargs * 2.0: Fixed args_tail mismatching against lexer. * 2.0: Fixed assocs to return a hash node. * 2.0: Fixed f_block_kw production. * 2.0: Fixed f_block_kwarg production. * 2.0: Fixed handling of stabby proc args in parens. * 2.0: Fixed lexing of kwsplat nodes. * 2.0: Implemented kwsplat nodes. * Added tUBANG to lexer. * Apparently ruby doesn't warn for escaped octal that goes above 7. wtf. * Cleaned up a LOT of arg handling (block and defn, not calls) by using #args. * ESC_RE is set to unicode. This seems problematic. *shrug* * Either found a bug in MRI and/or fixed paren_nest count for []=? methods. * Extended IDENT_CHAR_RE on 1.9+ to top out at \u{10ffff}... because we NEED a million unicode chars. * Fixed % strings with interpolation. * Fixed BEGIN {} to return a sexp. * Fixed a[] += b. (stormbrew) * Fixed arg_blk_pass to allow for sub-args nodes. * Fixed assignable to allow for sexps to be passed to it. * Fixed assoc args in 1.9. * Fixed block_command and block_call (eg a.b c d) to #to_sym their args properly. * Fixed bug in compound RubyParser so it rescues RubyParser::SyntaxError. * Fixed env registration of cdecls. * Fixed lex value for { when expr_endfn. * Fixed lex_state for close paren/brace/bracket. * Fixed lex_state transition for 1.9 if we lexed a defn name. Only 1.8 is odd. * Fixed lexer problem with state mgmt of identifiers that also have registered var name. * Fixed lexing of "1 *\n" to have the correct lex_state. * Fixed lexing of heredocs vs chevron for some lex_states. * Fixed op_asgn nodes to #to_sym their args properly. * Fixed optional value block args. * Fixed parsing of __ENCODING__ on ruby 1.8 (vcall). * Fixed some oddity where 1.9 lexing was blowing up on "0o". Seems invalid now. * Fixed strings with escaped octals > 128. Also... wtf. * Fixed support for empty symbol (wtf?). * Lexer is now declared UTF-8 internally. Hopefully this will fix the encoding mess. * Made UTF_8 the default guess on encodings when it isn't explicit. * Parsing of __ENCODING__ on ruby 1.9+ (in ruby 1.9+) is now colon2 sexp. (whitequark) * Renamed RubyLexer#nest to string_nest * RubyLexer#unescape ignores bad octal/hex and returns unicode strings. * Switched a number of lexical constructs to use IDENT_CHAR_RE instead of \w. I wish there were something cleaner for regexps + unicode. * Switched ruby_parse_extract_error to use binread. === 3.1.3 / 2013-04-09 * 2 bug fixes: * Fixed begin w/ else but no rescue. (whitequark) * Removed literal stripping from block_append. Not its job. === 3.1.2 / 2013-03-18 * 1 minor enhancement: * OMG A SECURITY ISSUE FOR CODE NOBODY USES... EVER === 3.1.1 / 2012-12-19 * 1 minor enhancement: * Added MOVE_TIMEOUT env var for ruby_parse_extract_error to move slow files to a sibling directory * 4 bug fixes: * 1.9: Fixed lexing of "0o". (whitequark) * 1.9: Fixed parsing of unary plus on literals. (whitequark) * Added timeout arg to RubyParser#process to pass through to the real parser * Updated Synopsis to reflect new options for running RP. (louismullie) === 3.1.0 / 2012-12-06 * 2 minor enhancements: * Added RubyParser.for_current_ruby to provide a parser that matches your runtime. (neilconway) * Duck-typed IDENT_CHAR_RE instead of using RUBY_VERSION * 3 bug fixes: * Cleared out body comments in class/module/defn/defs * Flipped lexer tests to US-ASCII to avoid encoding hell * yyerror is now an alias for syntax_error === 3.0.4 / 2012-11-26 * 1 bug fix: * RPStringScanner#lineno was still using byte offset, not char offset. (brynary) === 3.0.3 / 2012-11-23 * 1 minor enhancement: * Improved error output on invalid char in expression. * 1 bug fix: * Fixed lexing of no-name ivars. (whitequark) === 3.0.2 / 2012-11-21 52 down makes 99.9767% or 3.7σ. 130 files failed to parse out of 558k. * 4 minor enhancements: * Added RP_TIMEOUT env var to override default timeout of 10 seconds. * Minor optimization to RubyLexer#parse_number * Only output parseerror output to stderr if $DEBUG. * ruby_parse_extract_error modified to include 'it' blocks in its search. * 7 bug fixes: * 1.9: Fixed args in dot-call forms (eg f.(...)). * 1.9: Fixed lexing stabby lambda w/ do/end * Deal better with DOS files. Ugh. * Fix line number of production after heredoc. * Fixed RubyParser#process to reuse parser instances across calls. * Fixed line numbers for several productions. * new_call sets line number to smallest line number of members. === 3.0.1 / 2012-11-02 * 2 bug fixes -- both based on MRI bugs... Yay?: * 1.9.2 doesn't have String#byteslice... so I have to do the *HORRIBLE*. * Lexing regexps w/ bad character encodings and no declared options will fall back to /.../n. === 3.0.0 / 2012-11-02 I've hit 99.967% success rate against 558k files! 3.6σ!! 182 files failed to parse and spot checking them shows that they're pretty much lost causes. I'm sure I missed some stuff, but it is more important at this point to release a version to get more people using it in more diverse ways than I can come up with. * 3 minor enhancements: * Added RBStringScanner#charpos using #string_to_pos. * Added RBStringScanner#string_to_pos using String#byteslice. * Optimized regexp used for escape chars in strings. (presidentbeef) * 3 bug fixes: * Fixed current_line and unread_many depending on StringScanner#pos * Fixed parsing of 'a[] = b' * Fixed the worst abuse of heredocs EVER. Just because it is valid doesn't mean you should. === 3.0.0.a10 / 2012-10-26 * 1 major enhancement: * iter nodes are now structurally the same as defs. Block args are COMPLETELY different. * 4 minor enhancements: * 1.8 and 1.9 now treat f { |(...)| } differently, per MRI. * 1.9: Added __ENCODING__ support. (witlessbird) * 1.9: Finished coverage for masgn variants in block args * 1.9: covered all forms of block args: optional, splat, block, and destructuring === 3.0.0.a9 / 2012-10-22 Holy crap! I've hit a 99.92% success rate against 558k files! 492 failed parses to go. NOW is the time to start testing ruby_parser against your code! * 16 minor enhancements: * 1.9 parser: Finished magic encoding and utf-8 bom support. * 1.9: Added leading dot support eg "a\n.b". * 1.9: Added partial handling for *arg and opt=val args in block args. * 1.9: OMFG Encoding is the worst thing ever. Overhauled encoding support once again. It is much better at doing last ditch guessing of the encoding of the source file. * 1.9: added String#grep for legacy support. * Added Sexp#block_pass? * Added ability to delete slow files when they timeout. * Added block_dup_check and refactored grammar code to use it for block arg handling. * Added in_lex_state?(*states) to clean up lexer code. * Added tentative support for optional block args. THIS IS SUBJECT TO CHANGE!! * Added toggleable debugging to StackState to make my life easier * All untested uses have not moved but have been laced with poison. * Finally got good tests for most forms of double-block arg errors. * Moved all _known_ uses of SyntaxError to RubyParser::SyntaxError * f_block_optarg now always returns a block node. * ruby_parse_extract_error uses Find.find instead of globbing so dot files aren't missed. * 12 bug fixes: * 1.9: Completely ignore IndexError in unread_many because... you know... it sucks. * 1.9: Fixed lex state after lexing ? in trinary. * 1.9: Fixed lex state in some ternarys. * 1.9: Fixed parsing of "1 ? b('') : 2\na d: 3"... ARE YOU NOT GLAD?!?! * Fix Timeout differences between 1.8 and 1.9 :( * Fixed emacs-style encodings to deal with no whitespace. * Fixed error message for bad % codes. (whitequark) * Fixed lexing of :a==>b vs :a===b vs :a==>b. P.S. Your space bar is broken. chump. * Fixed lexing of rare numeric formats. * Fixed magic comment encodings on DOS files ... :/ * Fixed ruby_parse_extract_error to exit non-zero on errors. * Removed Symbol#is_argument and switch usage to is_arg? === 3.0.0.a8 / 2012-09-26 * 1 bug fix: * Remove method #d from global namespace. (alexch) === 3.0.0.a7 / 2012-09-21 * 3 minor enhancements: * Reorganized ruby_parse_extract_error so it will start much faster with a bunch of glob directories * RubyParserStuff#process takes optional time arg and raises Timeout::Error if it goes too long. You should rescue that, ya know... * ruby_parse_extract_error now checks *.rake and Rakefile on dir scan. * 3 bug fixes: * 1.9: Fixed ternary state tracking so {a:f{f()},b:nil} won't trip up the lexer. * Fixed optional values in block args (no20/no21) * ruby_parse_extract_error skips non-files. Some asshats put .rb on their dirs. :( === 3.0.0.a6 / 2012-08-20 * 2 minor enhancements: * 1.8: Added basic encoding support to 1.8 parser. Assumes -Ku. * 1.9: Added encoding magic comment support to 1.9 parser. * 8 bug fixes: * 1.9: Fixed lexing of -1 w/in conditionals. yeah... I dunno. * 1.9: Fixed parsing of a do | | end. * 1.9: Fixed parsing of not(x). * 1.9: Fixed parsing of op_asgn + rescue: 'a ||= b rescue nil' * 1.9: added \r to the EOL backslash handler. dos files blow * 1.9: hacked in a workaround for 1.9 specific regexps running in 1.8. * Added #reset to RubyParser proxy class * Fixed lexing of conditional w/ %() tokens === 3.0.0.a5 / 2012-07-31 * 5 bug fixes: * 1.9: Fix construction of 'f(:x, y: nil,)' w/ trailing comma. * 1.9: cleaned up lexing exit lex_state handling. Fixes bug parsing 'if f :x; end' * 1.9: fixed building of right-leaning masgns: 'f { |a, (b, c)| }' * 1.9: fixed lexing 'when *splat' * 1.9: fixed lexing of regexps in whens === 3.0.0.a4 / 2012-07-26 * 10 minor enhancements: * 'rake debug' defaults to 1.9 parser since that's all I'm doing these days * 1.9: Fixed f { |(a, b, ...), ...| ... } handling. * Added 'rake extract F=path' task to quickly extract errors from large files * Added on_error handler to provide more readable error message. * Aliased #process to #parse. * Renamed #parse to #process (legacy name), added default path of '(string)' * cleaned ruby_parse_extract_error output and fixed to 1.9 parser * ruby_parse_extract_error expands shell globs from ARGV * ruby_parse_extract_error should also capture RuntimeError * yyerror(msg) now warns with the message instead of ignoring it. * 3 bug fixes: * 1.9: Fixed bug lexing/parsing [ in rhs. * 1.9: Fixed f { |((a, b), c)| ... } handling * 1.9: fixed newline handling during expr_value === 3.0.0.a3 / 2012-07-03 * 1 major enhancement: * OMG! Implemented all the 1.9 arg crap and I went from 500 lines of structural diff to 32! * 17 minor enhancements: * 1.9: !(...) is now a method call. ugh * 1.9: Added __ENCODING__ keyword (returns Unsupported atm). * 1.9: Added support for "a.()" thingy. whatever you call it. Have I ever mentioned that ruby has too much syntax? I mean really... * 1.9: Moved kRETURN/kBREAK/kNEXT from command_call to command * 1.9: Removed when_args and refactored into args production. * 1.9: Support for not/! being a call to #!. why matz? why?!? * 1.9: Support for trailing comma support in opt call args. * 1.9: Switched keyword support to deal with 1.8 vs 1.9 differences. * 1.9: refactored and created command_asgn * 1.9: removed case/else from primary * 1.9: reworked mlhs and family. Now horrible things like 'a, *, c = f' work * 1.9: reworked top level rules from program to expr. Lots of lame refactorings in mri. * Moved 'a[]' from primary down to method_call * Removed 'args trailer' production from assoc_list (eg {1, 2}). * Removed 1.9 support for : as a terminator in do/then * RubyParser no longer subclasses the 18 parser, so I had to change some consts around. * Undeprecated RubyParser - but now it is a compound parser that tries 1.9 first. * 3 bug fixes: * 1.9: fixed bang method name. * Fixed case/when/splat handling on both 1.8 and 1.9. * Removed lambda_body production from lambda === 3.0.0.a2 / 2012-06-19 * 1 minor enhancement: * Updated to sexp_processor ~> 4.0 * 1 bug fix: * Fixed new_module to remove scope/block. Not enough tests on module variance. * 1 known issue: * No parsing of "a.()" thingy. (reported by julian7) (patches welcome!) === 3.0.0.a1 / 2012-05-22 This is the first alpha release of the 3.0.0 series. It is probably woefully incomplete, bug ridden, and hasn't showered in several days. Please please please beat the crap out of it and send bugs/patches/complaints/suggestions. * 5 major enhancements: * 1.9 parsing! Thanks to EVERYONE for submitting patches for this! * Removed :arglist from everything but :op_asgn1 * Removed :block from resbody * Removed :block from when * Removed :block nodes inside of scope nodes (defn/defs/class/sclass). * Removed :scope nodes in defn/defs/class/sclass nodes. * (probably more sexp cleanup to come before 3.0.0 final) * 25 minor enhancements: * 1.9: Fix \!a. (wanabe) * 1.9: Method calling with postargs. (wanabe) * 1.9: Method definition with postargs. (wanabe) * 1.9: Support lambda args without parentheses. (wanabe) * Added R arg to `rake debug` to debug ruby straight up * Added RubyParser, subclassing Ruby18Parser but warning on instantiation. * Added backref_assign_error (needs tests) * Added bin/ruby_parse_extract_error to help with error submissions * Added debug task to help quickly get into a bug * Added more 18 vs 19 lexing tests for ?c. * Added ruby_parser.rb that pulls everything together in proper order. * Added tLABEL. (brynary) * Branched ruby_parser.y to ruby18_parser.y * Fix to pass test_lambda_args_block__19 test. (mrmargolis) * Got rid of one instance of unread_many. (Confusion) * Moved everything from RubyParser to RubyParserStuff and included module in both. * Refactored 1.9 args handling * Refactored and added new_resbody to ruby_parser_extras. * Refactored and added new_when * Refactored tests infrastructure and added both 1.8 and 1.9 test branches. * Removed unused methods: unread, begin_of_line? was_begin_of_line. (YAY!) (Confusion) * Renamed ruby_parser.y to ruby19_parser.y * RubyLexer now takes a version specifier. * Started doing comparative refactoring between MRI's 1.9 parser and RP's. Shouldn't differ functionally except where we missed stuff in RP. * `rake debug` prints the output if it succeeds. * 21 bug fixes: * Added missing gvar arg error. (1.8) * Attach parser files to isolate to ensure they can build * Conditionalize handling of tLABEL to ruby19+. Fixes issue #33. * DOH. I deactivated some tests and never reactivated them. (Confusion ftw) * Duplicate the input so that heredoc processing doesn't morph original. (banister) * Entirely reworked block arg handling. (1.8) * Fix ?x char literal. (nobu) * Fixed 4/5 of literal lambda tests (jamie) * Fixed deps for parser * Fixed lexing of ?c for ruby 1.8 and 1.9. * Fixed more Ruby 1.9 args tests (brynary) * Fixed reswords to match MRI (1.8, 1.9) * Fixed symbols with no spaces in method calls (e.g. foo:bar) (YAY! brynary) * Fixed ternary_nil_no_space and other ternary edge cases for 1.9. (lastobelus) * Fixed test_call_not_equal__19. First bug bounty! (albus522) * Made lambda w/o arg list zero out the arg slot. * Renamed awords to qwords to match stupid MRI naming. (1.8, 1.9) :( * Rolled out brynary's symbols-no-spaces (foo:bar) changes when parsing 1.8 code * Split 1.8 from 1.9 open paren lexer. Gawd that's ugly code. * Split block_var from for_var. (1.8, 1.9) * Use binread (and emulate in ruby 1.8) to avoid encoding issues === 2.3.1 / 2011-09-21 * 2 bug fixes: * Fixed line numbers at end of special var+whitespace (larsch) * Holy crap I was smokin' something good... Fixed 1.9.3 warning === 2.3.0 / 2011-09-06 * 2 minor enhancements: * Add -g flag to parser compile if DEBUG * Lexer now embeds line number in yacc_value for keywords, helping fix up line numbers * 3 bug fixes: * Fix method line numbers when no args and no parens (quix) * Fixed line numbers on return/break/next w/ result expr. (pjnz) * Fixed some lexing state in order to parse: 'f (1), 2' as 'f(1, 2)'. (invernizzi) === 2.2.0 / 2011-08-23 * 2 minor enhancements: * Moved Keyword, Environment, and StackState inside of RubyParser * Added proper dsym and dsym->sym support. * 3 bug fixes: * Added extra (failing) tests for call/iter line number checking (quix) * Fixed line numbers for certain call/iter edge cases * Fixed parsing of: alias :"<<" :">>". === 2.1.0 / 2011-08-15 * 2 minor enhancements: * Added new accessor canonicalize_conditions to toggle conditional canonicalization (on by default). (confused) * Awesome cleanup: Replaced call to append_block by block_append. (Confusion) * 2 bug fixes: * Fixed handling last line of =begin/=end. (raybaxter) * Fixed source line numbers after heredocs. (jbarreneche) === 2.0.6 / 2011-02-18 * 1 minor enhancement: * Switched to hoe's racc plugin to clean up rakefile and builds * 1 bug fix: * Fixed empty =begin/end. === 2.0.5 / 2010-09-01 * 1 minor enhancement: * Started merging like lexical cases to try to squeeze some optimization out === 2.0.4 / 2009-08-18 * 1 minor enhancement: * Changed requires around to be more accurate. * 4 bug fixes: * Fixed .autotest for minitest * Fixed emacs escape lexing bug: "\C-\\" (maglev/gemstone) * Fixed octal lexing edgecases. (maglev/gemstone) * Fixed regexp lexing edgecases. (maglev/gemstone) === 2.0.3 / 2009-06-23 * 4 minor enhancements: * Removed dead code handling d/regex match node cruft. * Switched to minitest * Updated .autotest and rakefile wrt rcov for new hoe capabilities * Updated hoe for new capabilities * 4 bug fixes: * Environment#all now deals with strange edge cases in RAD. * Fixed packaging/compilation issue. * Minor 1.9 fixes * hoe -> flay -> rubyparser rakefile circularity fixed === 2.0.2 / 2009-01-20 * 2 minor enhancements: * Added gauntlet_rubyparser plugin. YAY for easy massive bug-hunting. * Promoted Sexp's file/line/comments to sexp_processor. * 4 bug fixes: * Fixed and improved the readme * Fixed lexing heredoc newlines. * Fixed line numbers on defns. * Fixed rdoc generation bug pointed out by hugh sasse (who rocks) === 2.0.1 / 2008-11-04 * 2 minor enhancements: * Updated for changes to splat node in many contexts. * Made PT a developer dep === 2.0.0 / 2008-10-22 * 1 major enhancement * Brought on the AWESOME! 4x faster! no known lexing/parsing bugs! * 71 minor enhancements * 1.9: Added Fixnum#ord. * 1.9: Added missing Regexp constants and did it so it'd work on 1.9. * Added #store_comment and #comments * Added StringScanner #begin_of_line? * Added a bunch of tests for regexp escape chars, #parse_string, #read_escape, ? numbers, ? whitespace. * Added a hack for rubinius' r2l eval bug. * Added a new token type tSTRING that bypasses tSTRING_BEG/END entirely. Only does non-interpolated strings and then falls back to the old way. MUCH cleaner tho. * Added bin/ruby_parse * Added compare rule to Rakefile. * Added coverage files/dirs to clean rule. * Added file and line numbers to all sexp nodes. Column/ranges to come. * Added lex_state change for lvars at the end of yylex. * Added lexed comments to defn/defs/class/module nodes. * Added stats gathering for yylex. Reordered yylex for avg data * Added tSYMBOL token type and parser rule to speed up symbol lexing. * Added tally output for getch, unread, and unread_many. * Added tests for ambigous uminus/uplus, backtick in cmdarg, square and curly brackets, numeric gvars, eos edge cases, string quoting %<> and %%%. * All cases throughout yylex now return directly if they match, no passthroughs. * All lexer cases now slurp entire token in one swoop. * All zarrays are now just empty arrays. * Changed s(:block_arg, :blah) to :"&blah" in args sexp. * Cleaned up lexer error handling. Now just raises all over. * Cleaned up read_escape and regx_options * Cleaned up tokadd_string (for some definition of cleaned). * Converted single quoted strings to new tSTRING token type. * Coverage is currently 94.4% on lexer. * Done what I can to clean up heredoc lexing... still sucks. * Flattened resbodies in rescue node. Fixed .autotest file. * Folded lex_keywords back in now that it screams. * Found very last instanceof ILiteralNode in the code. haha! * Got the tests subclassing PTTC and cleaned up a lot. YAY * Handle yield(*ary) properly * MASSIVELY cleaned out =begin/=end comment processor. * Massive overhaul on Keyword class. All hail the mighty Hash! * Massively cleaned up ident= edge cases and fixed a stupid bug from jruby. * Merged @/@@ scanner together, going to try to do the same everywhere. * Refactored fix_arg_lex_state, common across the lexer. * Refactored new_fcall into new_call. * Refactored some code to get better profile numbers. * Refactored some more #fix_arg_lex_state. * Refactored tail of yylex into its own method. * Removed Module#kill * Removed Token, replaced with Sexp. * Removed all parse_number and parse_quote tests. * Removed argspush, argscat. YAY! * Removed as many token_buffer.split(//)'s as possible. 1 to go. * Removed begins from compstmts * Removed buffer arg for tokadd_string. * Removed crufty (?) solo '@' token... wtf was that anyhow? * Removed most jruby/stringio cruft from StringScanner. * Removed one unread_many... 2 to go. They're harder. * Removed store_comment, now done directly. * Removed token_buffer. Now I just use token ivar. * Removed use of s() from lexer. Changed the way line numbers are gathered. * Renamed *qwords to *awords. * Renamed StringScanner to RPStringScanner (a subclass) to fix namespace trashing. * Renamed parse to process and aliased to parse. * Renamed token_buffer to string_buffer since that arcane shit still needs it. * Resolved the rest of the lexing issues I brought up w/ ruby-core. * Revamped tokadd_escape. * Rewrote Keyword and KWtable. * Rewrote RubyLexer using StringScanner. * Rewrote tokadd_escape. 79 lines down to 21. * Split out lib/ruby_parser_extras.rb so lexer is standalone. * Started to clean up the parser and make it as skinny as possible * Stripped out as much code as possible. * Stripped yylex of some dead code. * Switched from StringIO to StringScanner. * Updated rakefile for new hoe. * Uses pure ruby racc if ENV['PURE_RUBY'], otherwise use c. * Wrote a ton of lexer tests. Coverage is as close to 100% as possible. * Wrote args to clean up the big nasty args processing grammar section. * lex_strterm is now a plain array, removed RubyLexer#s(...). * yield and super now flatten args. * 21 bug fixes: * I'm sure this list is missing a lot: * Fixed 2 bugs both involving attrasgn (and ilk) esp when lhs is an array. * Fixed a bug in the lexer for strings with single digit hex escapes. * Fixed a bug parsing: a (args) { expr }... the space caused a different route to be followed and all hell broke loose. * Fixed a bug with x\n=beginvar not putting begin back. * Fixed attrasgn to have arglists, not arrays. * Fixed bug in defn/defs with block fixing. * Fixed class/module's name slot if colon2/3. * Fixed dstr with empty interpolation body. * Fixed for 1.9 string/char changes. * Fixed lexer BS wrt determining token type of words. * Fixed lexer BS wrt pass through values and lexing words. SO STUPID. * Fixed lexing of floats. * Fixed lexing of identifiers followed by equals. I hope. * Fixed masgn with splat on lhs * Fixed new_super to deal with block_pass correctly. * Fixed parser's treatment of :colon2 and :colon3. * Fixed regexp scanning of escaped numbers, ANY number is valid, not just octs. * Fixed string scanning of escaped octs, allowing 1-3 chars. * Fixed unescape for \n * Fixed: omg this is stupid. '()' was returning bare nil * Fixed: remove_begin now goes to the end, not sure why it didn't before. === 1.0.0 / 2007-12-20 * 1 major enhancement * Birthday! ruby-ruby-parser-3.15.1/Manifest.txt000066400000000000000000000013651400133573100173440ustar00rootroot00000000000000.autotest History.rdoc Manifest.txt README.rdoc Rakefile bin/ruby_parse bin/ruby_parse_extract_error compare/normalize.rb debugging.md lib/.document lib/rp_extensions.rb lib/rp_stringscanner.rb lib/ruby20_parser.rb lib/ruby20_parser.y lib/ruby21_parser.rb lib/ruby21_parser.y lib/ruby22_parser.rb lib/ruby22_parser.y lib/ruby23_parser.rb lib/ruby23_parser.y lib/ruby24_parser.rb 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 lib/ruby_parser.rb lib/ruby_parser.yy lib/ruby_parser_extras.rb test/test_ruby_lexer.rb test/test_ruby_parser.rb test/test_ruby_parser_extras.rb tools/munge.rb tools/ripper.rb ruby-ruby-parser-3.15.1/README.rdoc000066400000000000000000000072101400133573100166360ustar00rootroot00000000000000= ruby_parser home :: https://github.com/seattlerb/ruby_parser bugs :: https://github.com/seattlerb/ruby_parser/issues rdoc :: http://docs.seattlerb.org/ruby_parser == DESCRIPTION: ruby_parser (RP) is a ruby parser written in pure ruby (utilizing 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: def conditional1 arg1 return 1 if arg1 == 0 return 0 end becomes: s(:defn, :conditional1, s(:args, :arg1), s(:if, s(:call, s(:lvar, :arg1), :==, s(:lit, 0)), s(:return, s(:lit, 1)), nil), s(:return, s(:lit, 0))) Tested against 801,039 files from the latest of all rubygems (as of 2013-05): * 1.8 parser is at 99.9739% accuracy, 3.651 sigma * 1.9 parser is at 99.9940% accuracy, 4.013 sigma * 2.0 parser is at 99.9939% accuracy, 4.008 sigma == FEATURES/PROBLEMS: * Pure ruby, no compiles. * Includes preceding comment data for defn/defs/class/module nodes! * Incredibly simple interface. * Output is 100% equivalent to ParseTree. * Can utilize PT's SexpProcessor and UnifiedRuby for language processing. * Known Issue: Speed is now pretty good, but can always improve: * RP parses a corpus of 3702 files in 125s (avg 108 Kb/s) * MRI+PT parsed the same in 67.38s (avg 200.89 Kb/s) * Known Issue: Code is much better, but still has a long way to go. * Known Issue: Totally awesome. * Known Issue: line number values can be slightly off. Parsing LR sucks. == SYNOPSIS: RubyParser.new.parse "1+1" # => s(:call, s(:lit, 1), :+, s(:lit, 1)) You can also use Ruby19Parser, Ruby18Parser, or RubyParser.for_current_ruby: RubyParser.for_current_ruby.parse "1+1" # => s(:call, s(:lit, 1), :+, s(:lit, 1)) == DEVELOPER NOTES: To add a new version: * New parser should be generated from lib/ruby_parser.yy. * Extend lib/ruby_parser.yy with new class name. * Add new version number to V2 in Rakefile for rule creation. * Require generated parser in lib/ruby_parser.rb. * Add empty TestRubyParserShared##Plus module and TestRubyParserV## to test/test_ruby_parser.rb. * Extend Manifest.txt with generated file names. * Extend sexp_processor's pt_testcase.rb to match version * add_19tests needs to have the version added * VER_RE needs to have the regexp expanded Until all of these are done, you won't have a clean test run. == REQUIREMENTS: * ruby. woot. * sexp_processor for Sexp and SexpProcessor classes, and testing. * racc full package for parser development (compiling .y to .rb). == INSTALL: * sudo gem install ruby_parser == LICENSE: (The MIT License) Copyright (c) Ryan Davis, seattle.rb Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ruby-ruby-parser-3.15.1/Rakefile000066400000000000000000000145461400133573100165070ustar00rootroot00000000000000# -*- ruby -*- require "rubygems" require "hoe" Hoe.plugin :seattlerb Hoe.plugin :racc 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" 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" license "MIT" dependency "sexp_processor", "~> 4.9" dependency "rake", "< 11", :developer dependency "oedipus_lex", "~> 2.5", :developer require_ruby_version [">= 2.1", "< 4"] if plugin? :perforce then # generated files V2.each do |n| self.perforce_ignore << "lib/ruby#{n}_parser.rb" end V2.each do |n| self.perforce_ignore << "lib/ruby#{n}_parser.y" end self.perforce_ignore << "lib/ruby_lexer.rex.rb" end if plugin?(:racc) self.racc_flags << " -t" if ENV["DEBUG"] self.racc_flags << " --superclass RubyParser::Parser" # self.racc_flags << " --runtime ruby_parser" # TODO: broken in racc end end V2.each do |n| file "lib/ruby#{n}_parser.y" => "lib/ruby_parser.yy" do |t| cmd = 'unifdef -tk -DV=%s -UDEAD %s > %s || true' % [n, t.source, t.name] sh cmd end 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 Dir["coverage.info"] + Dir["coverage"] + Dir["lib/ruby2*_parser.y"] + Dir["lib/*.output"]) end task :sort do sh "grepsort '^ +def' lib/ruby_lexer.rb" sh "grepsort '^ +def (test|util)' test/test_ruby_lexer.rb" end desc "what was that command again?" task :huh? do puts "ruby #{Hoe::RUBY_FLAGS} bin/ruby_parse -q -g ..." end def (task(:phony)).timestamp Time.at 0 end task :isolate => :phony def in_compare Dir.chdir "compare" do yield end end def dl v dir = v[/^\d+\.\d+/] url = "https://cache.ruby-lang.org/pub/ruby/#{dir}/ruby-#{v}.tar.bz2" path = File.basename url unless File.exist? path then system "curl -O #{url}" end end def ruby_parse version v = version[/^\d+\.\d+/].delete "." rp_txt = "rp#{v}.txt" mri_txt = "mri#{v}.txt" parse_y = "parse#{v}.y" tarball = "ruby-#{version}.tar.bz2" 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 c_tarball do in_compare do dl version end end file c_parse_y => c_tarball do in_compare do 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 | expand > ../#{parse_y}" else 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, normalize] do in_compare do sh "bison -r all #{parse_y}" sh "./normalize.rb parse#{v}.output > #{mri_txt}" rm ["parse#{v}.output", "parse#{v}.tab.c"] end end file rp_out => rp_y_rb file c_rp_txt => [rp_out, normalize] do in_compare do sh "./normalize.rb ../#{rp_out} > #{rp_txt}" end end compare = "compare#{v}" desc "Compare all grammars to MRI" task :compare => compare file c_diff => [c_mri_txt, c_rp_txt] do in_compare do sh "diff -du #{mri_txt} #{rp_txt} > #{diff}; true" end end desc "Compare #{v} grammar to MRI #{version}" task compare => c_diff do in_compare do system "wc -l #{diff}" end end task :clean do rm_f Dir[c_mri_txt, c_rp_txt] end task :realclean do rm_f Dir[c_parse_y, tarball] end end ruby_parse "2.0.0-p648" ruby_parse "2.1.9" 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"] ||= V2.last Rake.application[:parser].invoke # this way we can have DEBUG set Rake.application[:lexer].invoke # this way we can have DEBUG set $:.unshift "lib" require "ruby_parser" require "pp" klass = Object.const_get("Ruby#{ENV["V"]}Parser") rescue nil raise "Unsupported version #{ENV["V"]}" unless klass parser = klass.new time = (ENV["RP_TIMEOUT"] || 10).to_i n = ENV["BUG"] 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 begin pp parser.process(ruby, file, time) 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/) abort "on #{file}:#{lines.size}" end end 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"] ||= V2.last Rake.application[:parser].invoke # this way we can have DEBUG set file = ENV["F"] || ENV["FILE"] ruby "-Ilib", "bin/ruby_parse_extract_error", file end task :bugs do sh "for f in bug*.rb ; do #{Gem.ruby} -S rake debug F=$f && rm $f ; done" end # vim: syntax=Ruby ruby-ruby-parser-3.15.1/bin/000077500000000000000000000000001400133573100156005ustar00rootroot00000000000000ruby-ruby-parser-3.15.1/bin/ruby_parse000077500000000000000000000034071400133573100177050ustar00rootroot00000000000000#!/usr/bin/ruby -s $q ||= false $g ||= false require 'rubygems' require 'ruby_parser' require 'pp' good = bad = 0 multi = ARGV.size != 1 total_time = 0 total_loc = 0 total_kbytes = 0 times = {} locs = {} kbytes = {} class File RUBY19 = "<3".respond_to? :encoding class << self alias :binread :read unless RUBY19 end end begin time = (ENV["RP_TIMEOUT"] || 10).to_i ARGV.each do |file| rp = RubyParser.new loc = `wc -l #{file}`.strip.to_i size = `wc -c #{file}`.strip.to_i / 1024.0 locs[file] = loc kbytes[file] = size total_loc += loc total_kbytes += size if $q then $stderr.print "." else warn "# file = #{file} loc = #{loc}" end GC.start if $g t = Time.now begin begin rp.reset r = rp.process(File.binread(file), file, time) pp r unless $q good += 1 rescue SyntaxError => e warn "SyntaxError for #{file}: #{e.message}" bad += 1 end rescue => e warn "#{e.backtrace.first} #{e.inspect.gsub(/\n/, ' ')} for #{file}" warn " #{e.backtrace.join("\n ")}" bad += 1 end t = Time.now - t times[file] = t total_time += t end rescue Interrupt # do nothing end warn "done" total = 0 times.values.each do |t| total += t end puts puts "good = #{good} bad = #{bad}" if multi puts format = "%5.2fs:%9.2f l/s:%8.2f Kb/s:%5d Kb:%5d loc:%s" times.sort_by { |f, t| -t }.each do |f, t| next if t < 0.005 loc = locs[f] size = kbytes[f] puts format % [t, loc / t, size / t, size, loc, f] end puts puts format % [total_time, total_loc / total_time, total_kbytes / total_time, total_kbytes, total_loc, "TOTAL"] unless total_time == 0 ruby-ruby-parser-3.15.1/bin/ruby_parse_extract_error000077500000000000000000000056151400133573100226530ustar00rootroot00000000000000#!/usr/bin/ruby -ws $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' ARGV.push "-" if ARGV.empty? class RubyParser def extract_defs ss = current.lexer.ss raise "can't access source. possible encoding issue" unless ss src = ss.string pre_error = src[0...ss.pos] defs = pre_error.grep(/^ *(?:def|it)/) raise "can't figure out where the bad code starts" unless defs.last last_def_indent = defs.last[/^ */] post_error = src[ss.pos..-1] idx = post_error =~ /^#{last_def_indent}end.*/ raise "can't figure out where the bad code ends" unless idx src = pre_error + post_error[0..idx+$&.length] src.scan(/^(( *)(?:def|it) .*?^\2end)/m) end def retest_for_errors defs parser = self.class.new parser.process(defs.join("\n\n")) rescue SyntaxError, StandardError nil end end def expand path if File.directory? path then require 'find' files = [] Find.find(*Dir[path]) do |f| files << f if File.file? f end files.sort else Dir.glob path end end def process_error parser defs = parser.extract_defs if parser.retest_for_errors defs then warn "Can't reproduce error with just methods, punting..." return end catch :extract_done do (1..defs.size).each do |perm_size| defs.combination(perm_size).each do |trial| unless parser.retest_for_errors trial then puts trial.join "\n" throw :extract_done end end end end rescue RuntimeError, Racc::ParseError => e warn "# process error: #{e.message.strip}" warn "# #{e.backtrace.first}" end def process file ruby = file == "-" ? $stdin.binread : File.binread(file) time = (ENV["RP_TIMEOUT"] || 10).to_i $stderr.print "# Validating #{file}: " parser = RubyParser.new t0 = Time.now if $s parser.process(ruby, file, time) if $s then warn "good: #{Time.now - t0}" else warn "good" end File.unlink file if $d rescue Timeout::Error $exit = 1 warn "TIMEOUT parsing #{file}. Skipping." if $m then 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 rescue StandardError, SyntaxError, Racc::ParseError => e $exit = 1 warn "" warn "# error: #{e.message.strip}" unless $q warn "# #{e.backtrace.first}" warn "" return if $q process_error parser end $exit = 0 $stdout.sync = true ARGV.each do |path| expand(path).each do |file| next unless File.file? file # omg... why would you name a dir support.rb? process file end end exit $exit ruby-ruby-parser-3.15.1/checksums.yaml.gz.sig000066400000000000000000000004001400133573100210730ustar00rootroot00000000000000^YV3#X[΂8 dt ct'f!8L6$;?uy &MYscfXT'[qm㨪Ɠe>TZ |1>b+NB^;t?YvJ ?FLdlx ISt6ϧȓc_.+Ͻ Vw#9{VPC+*0 fc`sz_Buzi&](vo7=I9 x£}b$Rruby-ruby-parser-3.15.1/compare/000077500000000000000000000000001400133573100164565ustar00rootroot00000000000000ruby-ruby-parser-3.15.1/compare/normalize.rb000077500000000000000000000160061400133573100210110ustar00rootroot00000000000000#!/usr/bin/env ruby -w good = false rules = Hash.new { |h,k| h[k] = [] } rule = nil order = [] def munge s renames = [ # unquote... wtf? /`(.+?)'/, proc { $1 }, /"'(.+?)'"/, proc { "\"#{$1}\"" }, "'='", "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 # 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)| if Proc === b then s.gsub!(a, &b) else s.gsub!(a, b) end end s.strip end ARGF.each_line do |line| next unless good or line =~ /^-* ?Grammar|\$accept : / case line.strip when /^$/ then when /^(\d+) (\$?\w+): (.*)/ then # yacc rule = $2 order << rule unless rules.has_key? rule rules[rule] << munge($3) when /^(\d+) \s+\| (.*)/ then # yacc rules[rule] << munge($2) when /^(\d+) (@\d+): (.*)/ then # yacc rule = $2 order << rule unless rules.has_key? rule rules[rule] << munge($3) when /^rule (\d+) (@?\w+):(.*)/ then # racc rule = $2 order << rule unless rules.has_key? rule rules[rule] << munge($3) when /\$accept/ then # byacc? good = true when /Grammar/ then # both good = true when /^-+ Symbols/ then # racc break when /^Terminals/ then # yacc break when /^\cL/ then # byacc break else warn "unparsed: #{$.}: #{line.chomp}" end end require 'yaml' order.each do |k| next if k =~ /@/ puts puts "#{k}:" puts rules[k].map { |r| " #{r}" }.join "\n" end ruby-ruby-parser-3.15.1/data.tar.gz.sig000066400000000000000000000004001400133573100176430ustar00rootroot00000000000000~Z˭ڭ svd}T^j}A}ŭ,\_axZ Yd@;+p'WzRZm:OEY0)_ bvt lwc+S?=A=4 i_[HfNC8CZש7RZ|L R-ÞFs Ή|o/B&ʼn6Z94(l|rjD<ruby-ruby-parser-3.15.1/debugging.md000066400000000000000000000031031400133573100173020ustar00rootroot00000000000000# 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. ruby-ruby-parser-3.15.1/lib/000077500000000000000000000000001400133573100155765ustar00rootroot00000000000000ruby-ruby-parser-3.15.1/lib/.document000066400000000000000000000000051400133573100174100ustar00rootroot00000000000000*.rb ruby-ruby-parser-3.15.1/lib/rp_extensions.rb000066400000000000000000000026451400133573100210320ustar00rootroot00000000000000# :stopdoc: # WHY do I have to do this?!? class Regexp ONCE = 0 unless defined? ONCE # FIX: remove this - it makes no sense unless defined? ENC_NONE then ENC_NONE = /x/n.options ENC_EUC = /x/e.options ENC_SJIS = /x/s.options ENC_UTF8 = /x/u.options end end # :startdoc: ############################################################ # HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK unless "".respond_to?(:grep) then class String def grep re lines.grep re end end end class String ## # This is a hack used by the lexer to sneak in line numbers at the # identifier level. This should be MUCH smaller than making # process_token return [value, lineno] and modifying EVERYTHING that # reduces tIDENTIFIER. attr_accessor :lineno def clean_caller self.sub(File.dirname(__FILE__), "./lib").sub(/:in.*/, "") end if $DEBUG end require "sexp" class Sexp attr_writer :paren def paren @paren ||= false end def value raise "multi item sexp" if size > 2 last end def to_sym raise "no: #{self.inspect}.to_sym is a bug" self.value.to_sym end alias :add :<< def add_all x self.concat x.sexp_body end def block_pass? any? { |s| Sexp === s && s.sexp_type == :block_pass } end alias :node_type :sexp_type alias :values :sexp_body # TODO: retire end # END HACK ############################################################ ruby-ruby-parser-3.15.1/lib/rp_stringscanner.rb000066400000000000000000000023711400133573100215070ustar00rootroot00000000000000require "strscan" class RPStringScanner < StringScanner # if ENV['TALLY'] then # alias :old_getch :getch # def getch # warn({:getch => caller[0]}.inspect) # old_getch # end # end if "".respond_to? :encoding then if "".respond_to? :byteslice then def string_to_pos string.byteslice(0, pos) end else def string_to_pos string.bytes.first(pos).pack("c*").force_encoding(string.encoding) end end def charpos string_to_pos.length end else alias :charpos :pos def string_to_pos string[0..pos] end end def unread_many str # TODO: remove this entirely - we should not need it warn({:unread_many => caller[0]}.inspect) if ENV['TALLY'] begin string[charpos, 0] = str rescue IndexError # HACK -- this is a bandaid on a dirty rag on an open festering wound end end if ENV['DEBUG'] then alias :old_getch :getch def getch c = self.old_getch p :getch => [c, caller.first] c end alias :old_scan :scan def scan re s = old_scan re where = caller[1].split(/:/).first(2).join(":") d :scan => [s, where] if s s end end def d o $stderr.puts o.inspect end end ruby-ruby-parser-3.15.1/lib/ruby20_parser.rb000066400000000000000000007724631400133573100206450ustar00rootroot00000000000000# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.5.0 # from Racc grammar file "". # require 'racc/parser.rb' class Ruby20Parser < 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 = [ '-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| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '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,,,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,,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| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ 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, 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, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 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, -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,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| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '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,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40' ] racc_goto_check = arr = ::Array.new(3754, 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, 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, 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, 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, 0, 145, :_reduce_1, 2, 143, :_reduce_2, 2, 144, :_reduce_3, 1, 146, :_reduce_none, 1, 146, :_reduce_none, 3, 146, :_reduce_6, 2, 146, :_reduce_none, 1, 149, :_reduce_none, 0, 153, :_reduce_9, 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, 2, 151, :_reduce_28, 3, 151, :_reduce_29, 3, 151, :_reduce_30, 3, 151, :_reduce_31, 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, 1, 151, :_reduce_none, 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, 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, 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, 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, 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, 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, 4, 304, :_reduce_418, 1, 305, :_reduce_419, 3, 305, :_reduce_420, 1, 306, :_reduce_421, 1, 306, :_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, 6, 157, :_reduce_459, 0, 157, :_reduce_460, 1, 325, :_reduce_461, 1, 325, :_reduce_none, 1, 325, :_reduce_none, 2, 326, :_reduce_464, 1, 326, :_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, 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_641, 0, 148, :_reduce_642 ] racc_reduce_n = 643 racc_shift_n = 1088 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, :tLOWEST => 140, :tEQL => 141 } racc_nt_base = 142 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", "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", "arg_value", "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", "rel_expr", "primary", "relop", "@10", "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_item", "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], :wrap result end def _reduce_39(val, _values, result) result = new_masgn val[0], val[2] result end # reduce 40 omitted def _reduce_41(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_42(val, _values, result) result = new_op_asgn val result end def _reduce_43(val, _values, result) result = new_op_asgn1 val result end 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 = 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) 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) 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) self.backref_assign_error val[0] result end def _reduce_49(val, _values, result) expr, = val result = value_expr expr 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) 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) lit = s(:lit, val[1]).line lexer.lineno result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") result end 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_226(val, _values, result) result = new_call val[1], :"+@" 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[0], :"|", argl(val[2]) 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 # reduce 232 omitted def _reduce_233(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end 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) lhs, _, rhs = val result = new_match lhs, rhs result end def _reduce_237(val, _values, result) lhs, _, rhs = val result = s(:not, new_match(lhs, rhs)).line lhs.line result end def _reduce_238(val, _values, result) _, arg = val result = new_call arg, :"!" result.line arg.line result end def _reduce_239(val, _values, result) result = new_call value_expr(val[1]), :"~" result end 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_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) result = logical_op :and, val[0], val[2] result end def _reduce_243(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_244(val, _values, result) (_, line), _, arg = val result = s(:defined, arg).line line result end def _reduce_245(val, _values, result) c, _, t, _, _, f = val result = s(:if, c, t, f).line c.line result end # reduce 246 omitted # 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 254 omitted def _reduce_255(val, _values, result) result = args [val[0]] result end def _reduce_256(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_257(val, _values, result) result = args [array_to_hash(val[0])] result end # reduce 258 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)) result end def _reduce_260(val, _values, result) _, args, _ = val result = args result end # 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_266(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_267(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_268(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_269(val, _values, result) result = call_args val result end def _reduce_270(val, _values, result) result = call_args [array_to_hash(val[0]), val[1]] result end def _reduce_271(val, _values, result) result = call_args [val[0], array_to_hash(val[2]), val[3]] result end def _reduce_272(val, _values, result) result = call_args val result end 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_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_275(val, _values, result) _, arg = val result = s(:block_pass, arg).line arg.line result end def _reduce_276(val, _values, result) result = val[1] result end # reduce 277 omitted def _reduce_278(val, _values, result) arg, = val lineno = arg.line || lexer.lineno # HACK result = s(:array, arg).line lineno result end def _reduce_279(val, _values, result) _, arg = val result = s(:array, s(:splat, arg).line(arg.line)).line arg.line result end def _reduce_280(val, _values, result) args, _, id = val result = self.list_append args, id result end 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_282(val, _values, result) result = val[0] << val[2] result end 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_284(val, _values, result) _, arg = val result = s(:splat, arg).line arg.line result end # reduce 285 omitted # reduce 286 omitted # reduce 287 omitted # reduce 288 omitted # reduce 289 omitted # reduce 290 omitted # reduce 291 omitted # reduce 292 omitted # reduce 293 omitted # reduce 294 omitted def _reduce_295(val, _values, result) msg, = val result = new_call nil, msg.to_sym result end def _reduce_296(val, _values, result) lexer.cmdarg.push false result = self.lexer.lineno result end def _reduce_297(val, _values, result) lexer.cmdarg.pop result = new_begin val result end def _reduce_298(val, _values, result) lexer.lex_state = EXPR_ENDARG result = lexer.lineno result end def _reduce_299(val, _values, result) _, line, _ = val result = s(:begin).line line result end def _reduce_300(val, _values, result) lexer.lex_state = EXPR_ENDARG result end def _reduce_301(val, _values, result) _, stmt, _, _, = val # warning "(...) interpreted as grouped expression" result = stmt result end 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_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_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_307(val, _values, result) result = self.lexer.lineno result end def _reduce_308(val, _values, result) result = new_hash val result end def _reduce_309(val, _values, result) (_, line), = val result = s(:return).line line result end def _reduce_310(val, _values, result) result = new_yield val[2] result end def _reduce_311(val, _values, result) result = new_yield result end def _reduce_312(val, _values, result) result = new_yield result end def _reduce_313(val, _values, result) (_, line), _, _, arg, _ = val result = s(:defined, arg).line line result end def _reduce_314(val, _values, result) _, _, lhs, _ = val result = new_call lhs, :"!" result end def _reduce_315(val, _values, result) debug20 14, val, result result end def _reduce_316(val, _values, result) call, iter = val iter.insert 1, call result = iter # FIX: probably not: call.line = iter.line result end # reduce 317 omitted 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_319(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_320(val, _values, result) _, c, _, t, f, _ = val result = new_if c, t, f result end def _reduce_321(val, _values, result) _, c, _, t, f, _ = val result = new_if c, f, t result end def _reduce_322(val, _values, result) _, cond, body, _ = val result = new_while body, cond, true result end def _reduce_323(val, _values, result) _, cond, body, _ = val result = new_until body, cond, true result end def _reduce_324(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_325(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_326(val, _values, result) _, var, _, iter, body, _ = val result = new_for iter, var, body result end def _reduce_327(val, _values, result) result = self.lexer.lineno result end 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_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_330(val, _values, result) result = self.lexer.lineno result end def _reduce_331(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_332(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end 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_334(val, _values, result) result = self.lexer.lineno result end 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_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_337(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_338(val, _values, result) result = lexer.lineno result end def _reduce_339(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_340(val, _values, result) lexer.lex_state = EXPR_FNAME result end 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.cmdarg.push false lexer.cond.push false lexer.lex_state = EXPR_ENDFN|EXPR_LABEL self.comments.push self.lexer.comments result end def _reduce_342(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_343(val, _values, result) (_, line), = val result = s(:break).line line result end def _reduce_344(val, _values, result) (_, line), = val result = s(:next).line line result end def _reduce_345(val, _values, result) (_, line), = val result = s(:redo).line line result end def _reduce_346(val, _values, result) (_, line), = val result = s(:retry).line line result end def _reduce_347(val, _values, result) result = value_expr(val[0]) result end # reduce 348 omitted # reduce 349 omitted # reduce 350 omitted # 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 def _reduce_373(val, _values, result) (_, line), c, _, t, rest = val result = s(:if, c, t, rest).line line result end # reduce 374 omitted def _reduce_375(val, _values, result) result = val[1] result end # reduce 376 omitted def _reduce_377(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 378 omitted def _reduce_379(val, _values, result) result = val[1] result end def _reduce_380(val, _values, result) sym, = val result = s(:array, sym).line lexer.lineno result end def _reduce_381(val, _values, result) result = list_append val[0], val[2] result end def _reduce_382(val, _values, result) args, = val result = block_var args result end def _reduce_383(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_384(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_385(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_386(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_387(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_388(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_389(val, _values, result) result = block_var :* result end def _reduce_390(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_391(val, _values, result) result = call_args val result end def _reduce_392(val, _values, result) result = call_args val result end def _reduce_393(val, _values, result) result = call_args val result end def _reduce_394(val, _values, result) line = lexer.lineno result = call_args val # TODO: push line down result.line line result end def _reduce_395(val, _values, result) result = args val result end # reduce 396 omitted def _reduce_397(val, _values, result) result = args val result end def _reduce_398(val, _values, result) result = args val result end def _reduce_399(val, _values, result) result = args val result end 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) << nil 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 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 = 0 result end def _reduce_413(val, _values, result) self.lexer.command_start = true result end def _reduce_414(val, _values, result) # TODO: current_arg = 0 result = args val result end def _reduce_415(val, _values, result) result = s(:args).line lexer.lineno result end def _reduce_416(val, _values, result) # TODO: current_arg = 0 result = args val result end # reduce 417 omitted def _reduce_418(val, _values, result) result = args val result end def _reduce_419(val, _values, result) result = args val result end def _reduce_420(val, _values, result) result = args val result end def _reduce_421(val, _values, result) id, = val line = lexer.lineno result = s(:shadow, id.to_sym).line line result end # reduce 422 omitted def _reduce_423(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_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 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_426(val, _values, result) result = args val result end def _reduce_427(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_428(val, _values, result) result = val[1] result end def _reduce_429(val, _values, result) result = val[1] result end def _reduce_430(val, _values, result) (_, line), iter, _ = val result = iter.line line result end def _reduce_431(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_432(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end 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_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_435(val, _values, result) result = self.lexer.lineno result end 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_437(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_440(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_442(val, _values, result) result = new_super val[1] result end def _reduce_443(val, _values, result) result = s(:zsuper).line lexer.lineno result end def _reduce_444(val, _values, result) result = new_aref val result end def _reduce_445(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_446(val, _values, result) _, line, body, _ = val result = body result.line = line self.env.unextend result end def _reduce_447(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_448(val, _values, result) _, line, body, _ = val result = body result.line = line self.env.unextend result end def _reduce_449(val, _values, result) self.env.extend :dynamic; result = self.lexer.lineno result end 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_455(val, _values, result) result = self.lexer.lineno result end 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 457 omitted # reduce 458 omitted def _reduce_459(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_460(val, _values, result) result = nil result end def _reduce_461(val, _values, result) arg, = val result = s(:array, arg).line arg.line result end # reduce 462 omitted # reduce 463 omitted def _reduce_464(val, _values, result) result = val[1] result end # reduce 465 omitted def _reduce_466(val, _values, result) (_, line), body = val result = body || s(:nil).line(line) result end # reduce 467 omitted def _reduce_468(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end def _reduce_469(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end # reduce 470 omitted def _reduce_471(val, _values, result) str, = val str = s(:dstr, str.value) if str.sexp_type == :evstr result = str result end def _reduce_472(val, _values, result) debug20 23, val, result result end # reduce 473 omitted def _reduce_474(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_475(val, _values, result) _, str, (_, func) = val str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT result = str result end def _reduce_476(val, _values, result) result = new_string val result end def _reduce_477(val, _values, result) result = new_xstring val # TODO: dedent?!?! SERIOUSLY?!? result end def _reduce_478(val, _values, result) result = new_regexp val result end def _reduce_479(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_480(val, _values, result) result = val[1] result end def _reduce_481(val, _values, result) result = new_word_list result end def _reduce_482(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 483 omitted def _reduce_484(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_485(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_486(val, _values, result) result = lexer.lineno result end def _reduce_487(val, _values, result) _, line, list, _, = val list.line = line result = list result end def _reduce_488(val, _values, result) result = new_symbol_list.line lexer.lineno result end 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_491(val, _values, result) result = val[1] result end def _reduce_492(val, _values, result) result = s(:array).line lexer.lineno # FIX result end def _reduce_493(val, _values, result) result = val[1] result end def _reduce_494(val, _values, result) result = new_qword_list result end def _reduce_495(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_496(val, _values, result) result = new_qsym_list result end def _reduce_497(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_498(val, _values, result) result = s(:str, "").line lexer.lineno result end def _reduce_499(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_500(val, _values, result) result = nil result end def _reduce_501(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_502(val, _values, result) result = nil result end def _reduce_503(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_504(val, _values, result) result = new_string val result end def _reduce_505(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = EXPR_BEG result end def _reduce_506(val, _values, result) _, strterm, str = val lexer.lex_strterm = strterm result = s(:evstr, str).line str.line result end def _reduce_507(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_508(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_509(val, _values, result) result = s(:gvar, val[0].to_sym).line lexer.lineno result end def _reduce_510(val, _values, result) result = s(:ivar, val[0].to_sym).line lexer.lineno result end def _reduce_511(val, _values, result) result = s(:cvar, val[0].to_sym).line lexer.lineno result end # reduce 512 omitted def _reduce_513(val, _values, result) lexer.lex_state = EXPR_END result = val[1].to_sym result end def _reduce_514(val, _values, result) result = val[0].to_sym result end # reduce 515 omitted # reduce 516 omitted # reduce 517 omitted # reduce 518 omitted def _reduce_519(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 520 omitted # reduce 521 omitted def _reduce_522(val, _values, result) result = -val[1] # TODO: pt_testcase result end def _reduce_523(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 524 omitted # reduce 525 omitted # reduce 526 omitted # reduce 527 omitted # reduce 528 omitted def _reduce_529(val, _values, result) result = s(:nil).line lexer.lineno result end def _reduce_530(val, _values, result) result = s(:self).line lexer.lineno result end def _reduce_531(val, _values, result) result = s(:true).line lexer.lineno result end def _reduce_532(val, _values, result) result = s(:false).line lexer.lineno result end def _reduce_533(val, _values, result) result = s(:str, self.file).line lexer.lineno result end def _reduce_534(val, _values, result) result = s(:lit, lexer.lineno).line lexer.lineno result end def _reduce_535(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_536(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_537(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_538(val, _values, result) result = self.assignable val[0] result end def _reduce_539(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_540(val, _values, result) result = s(:nth_ref, val[0]).line lexer.lineno result end def _reduce_541(val, _values, result) result = s(:back_ref, val[0]).line lexer.lineno result end def _reduce_542(val, _values, result) lexer.lex_state = EXPR_BEG lexer.command_start = true result end def _reduce_543(val, _values, result) result = val[2] result end def _reduce_544(val, _values, result) result = nil result end def _reduce_545(val, _values, result) result = val[1] self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true result end 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_548(val, _values, result) result = args val result end def _reduce_549(val, _values, result) result = args val result end def _reduce_550(val, _values, result) result = args val result end # reduce 551 omitted def _reduce_552(val, _values, result) result = val[1] result end def _reduce_553(val, _values, result) result = nil result end def _reduce_554(val, _values, result) result = args val result end def _reduce_555(val, _values, result) result = args val result end def _reduce_556(val, _values, result) result = args val result end def _reduce_557(val, _values, result) result = args val result end def _reduce_558(val, _values, result) result = args val 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) yyerror "formal argument cannot be a constant" result end def _reduce_570(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_571(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_572(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 573 omitted def _reduce_574(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 575 omitted def _reduce_576(val, _values, result) result = val[1] result end def _reduce_577(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_578(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 def _reduce_579(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_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 end # reduce 581 omitted def _reduce_582(val, _values, result) list, _, item = val result = list << item.last result end # reduce 583 omitted def _reduce_584(val, _values, result) result = args val result end # reduce 585 omitted # reduce 586 omitted def _reduce_587(val, _values, result) name = val[1].to_sym self.assignable name result = :"**#{name}" result end def _reduce_588(val, _values, result) result = :"**" result end def _reduce_589(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_590(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_591(val, _values, result) optblk, = val result = s(:block, optblk).line optblk.line result end def _reduce_592(val, _values, result) optarg, _, optblk = val result = optarg result << optblk result end def _reduce_593(val, _values, result) opt, = val result = s(:block, opt).line opt.line result end def _reduce_594(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 595 omitted # reduce 596 omitted 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_598(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 599 omitted # reduce 600 omitted def _reduce_601(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_602(val, _values, result) result = val[1] result end def _reduce_603(val, _values, result) result = nil result end # reduce 604 omitted def _reduce_605(val, _values, result) lexer.lex_state = EXPR_BEG result end 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_607(val, _values, result) result = s(:array).line lexer.lineno result end # reduce 608 omitted # 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_611(val, _values, result) v1, _, v2 = val result = s(:array, v1, v2).line v1.line result end 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_613(val, _values, result) _, arg = val line = arg.line result = s(:array, s(:kwsplat, arg).line(line)).line line result end # reduce 614 omitted # reduce 615 omitted # reduce 616 omitted # reduce 617 omitted # reduce 618 omitted # reduce 619 omitted # reduce 620 omitted # reduce 621 omitted # reduce 622 omitted # reduce 623 omitted # 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 def _reduce_638(val, _values, result) yyerrok result end # reduce 639 omitted # reduce 640 omitted def _reduce_641(val, _values, result) yyerrok result end def _reduce_642(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby20Parser ruby-ruby-parser-3.15.1/lib/ruby20_parser.y000066400000000000000000002551711400133573100205020ustar00rootroot00000000000000# -*- racc -*- class Ruby20Parser 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 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 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_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_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 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 tINTEGER tPOW arg { lit = s(:lit, val[1]).line lexer.lineno result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") } | tUMINUS_NUM tFLOAT tPOW arg { 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 } | 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: 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 compstmt { 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: 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).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_item: f_norm_arg | 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_kw: tLABEL 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_block_kw: tLABEL 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_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: 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 { 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 } | 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 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: ** ruby-ruby-parser-3.15.1/lib/ruby21_parser.rb000066400000000000000000010016231400133573100206260ustar00rootroot00000000000000# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.5.0 # from Racc grammar file "". # require 'racc/parser.rb' class Ruby21Parser < 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 = [ '-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| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '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,,,,,,,,,,,,,,,,,,,,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| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ 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, 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, -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,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| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '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| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ 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, 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, 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, 0, 147, :_reduce_1, 2, 145, :_reduce_2, 2, 146, :_reduce_3, 1, 148, :_reduce_none, 1, 148, :_reduce_none, 3, 148, :_reduce_6, 2, 148, :_reduce_none, 1, 151, :_reduce_none, 0, 155, :_reduce_9, 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, 2, 153, :_reduce_28, 3, 153, :_reduce_29, 3, 153, :_reduce_30, 3, 153, :_reduce_31, 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, 1, 153, :_reduce_none, 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, 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, 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, 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, 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, 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, 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, 4, 308, :_reduce_418, 1, 309, :_reduce_419, 3, 309, :_reduce_420, 1, 310, :_reduce_421, 1, 310, :_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, 6, 159, :_reduce_459, 0, 159, :_reduce_460, 1, 329, :_reduce_461, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 2, 330, :_reduce_464, 1, 330, :_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, 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_646, 0, 150, :_reduce_647 ] racc_reduce_n = 648 racc_shift_n = 1089 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, :tLOWEST => 142, :tEQL => 143 } racc_nt_base = 144 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", "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_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 # reduce 49 omitted # reduce 50 omitted def _reduce_51(val, _values, result) lhs, _, rhs = val result = logical_op :and, lhs, rhs result end def _reduce_52(val, _values, result) lhs, _, rhs = val result = logical_op :or, lhs, rhs result end def _reduce_53(val, _values, result) (_, line), _, expr = val result = new_call(expr, :"!").line line # REFACTOR: call_uni_op result end 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 = value_expr(val[0]) result end def _reduce_57(val, _values, result) lexer.cond.push true result end def _reduce_58(val, _values, result) lexer.cond.pop result end def _reduce_59(val, _values, result) _, expr, _, _ = val result = expr result end # reduce 60 omitted # reduce 61 omitted # reduce 62 omitted def _reduce_63(val, _values, result) blk, _, msg, args = val result = new_call(blk, msg.to_sym, args).line blk.line result end def _reduce_64(val, _values, result) # self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_65(val, _values, result) _, line, body, _ = val result = body result.line = line # self.env.unextend result end def _reduce_66(val, _values, result) msg, = val result = new_call(nil, msg.to_sym).line lexer.lineno result end def _reduce_67(val, _values, result) call, args = val result = call.concat args.sexp_body result end def _reduce_68(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_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) 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_71(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_72(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_73(val, _values, result) result = new_super val[1] result end def _reduce_74(val, _values, result) (_, line), args = val result = new_yield args result.line line # TODO: push to new_yield result end def _reduce_75(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_76(val, _values, result) (_, line), args = val result = s(:break, ret_args(args)).line line result end def _reduce_77(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 78 omitted def _reduce_79(val, _values, result) result = val[1] result end # reduce 80 omitted def _reduce_81(val, _values, result) _, arg, _ = val l = arg.line result = s(:masgn, s(:array, arg).line(l)).line l result end def _reduce_82(val, _values, result) head, = val result = s(:masgn, head).line head.line result end 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) 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) 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) head, _ = val l = head.line result = s(:masgn, head << s(:splat).line(l)).line l result end def _reduce_87(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_88(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_89(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_90(val, _values, result) l = lexer.lineno result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l result end def _reduce_91(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 92 omitted def _reduce_93(val, _values, result) result = val[1] result end def _reduce_94(val, _values, result) lhs, _ = val result = s(:array, lhs).line lhs.line result end def _reduce_95(val, _values, result) result = val[0] << val[1].compact result end def _reduce_96(val, _values, result) item, = val result = s(:array, item).line item.line result end def _reduce_97(val, _values, result) 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] 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) 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 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_105(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_106(val, _values, result) self.backref_assign_error val[0] result end 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 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) 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 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) self.backref_assign_error val[0] result end def _reduce_116(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 117 omitted def _reduce_118(val, _values, result) _, name = val result = s(:colon3, name.to_sym).line lexer.lineno result end def _reduce_119(val, _values, result) result = val[0].to_sym result end def _reduce_120(val, _values, result) pval, _, name = val result = s(:colon2, pval, name.to_sym) result.line pval.line result end # 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 def _reduce_125(val, _values, result) (sym, _line), = val lexer.lex_state = EXPR_END result = sym result end # reduce 126 omitted # reduce 127 omitted def _reduce_128(val, _values, result) id, = val result = s(:lit, id.to_sym).line lexer.lineno result end # reduce 129 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 result end def _reduce_132(val, _values, result) result = new_undef val[0], val[3] result end # 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 # 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_206(val, _values, result) result = new_op_asgn val result end def _reduce_207(val, _values, result) result = new_op_asgn1 val result end def _reduce_208(val, _values, result) result = new_op_asgn2 val result end def _reduce_209(val, _values, result) result = new_op_asgn2 val result end 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_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_212(val, _values, result) result = self.lexer.lineno result end 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_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_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)).line v1.line else result = s(:dot2, v1, v2).line v1.line end 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(:dot3, v1, v2).line v1.line end result end def _reduce_217(val, _values, result) result = new_call val[0], :+, argl(val[2]) 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) lit = s(:lit, val[1]).line lexer.lineno result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") result end def _reduce_224(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_225(val, _values, result) result = new_call val[1], :"-@" 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_call val[0], :"<=>", argl(val[2]) result end # reduce 230 omitted 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 def _reduce_233(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_234(val, _values, result) lhs, _, rhs = val result = new_match lhs, rhs result end def _reduce_235(val, _values, result) lhs, _, rhs = val result = s(:not, new_match(lhs, rhs)).line lhs.line result end def _reduce_236(val, _values, result) _, arg = val result = new_call arg, :"!" result.line arg.line result end def _reduce_237(val, _values, result) result = new_call value_expr(val[1]), :"~" result end 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_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_240(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_241(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_242(val, _values, result) (_, line), _, arg = val result = s(:defined, arg).line line result end def _reduce_243(val, _values, result) c, _, t, _, _, f = val result = s(:if, c, t, f).line c.line result end # reduce 244 omitted # 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 252 omitted def _reduce_253(val, _values, result) result = args [val[0]] result end def _reduce_254(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_255(val, _values, result) result = args [array_to_hash(val[0])] result end # reduce 256 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)) result end def _reduce_258(val, _values, result) _, args, _ = val result = args result end # 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_264(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_265(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_266(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_267(val, _values, result) result = call_args val result end def _reduce_268(val, _values, result) result = call_args [array_to_hash(val[0]), val[1]] result end def _reduce_269(val, _values, result) result = call_args [val[0], array_to_hash(val[2]), val[3]] result end def _reduce_270(val, _values, result) result = call_args val result end 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_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_273(val, _values, result) _, arg = val result = s(:block_pass, arg).line arg.line result end def _reduce_274(val, _values, result) result = val[1] result end # reduce 275 omitted def _reduce_276(val, _values, result) arg, = val lineno = arg.line || lexer.lineno # HACK result = s(:array, arg).line lineno result end def _reduce_277(val, _values, result) _, arg = val result = s(:array, s(:splat, arg).line(arg.line)).line arg.line result end def _reduce_278(val, _values, result) args, _, id = val result = self.list_append args, id result end 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_280(val, _values, result) result = new_masgn_arg val[0] result end def _reduce_281(val, _values, result) result = new_masgn_arg val[0], :wrap result end def _reduce_282(val, _values, result) result = val[0] << val[2] result end 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_284(val, _values, result) _, arg = val result = s(:splat, arg).line arg.line result end # reduce 285 omitted # reduce 286 omitted # reduce 287 omitted # reduce 288 omitted # reduce 289 omitted # reduce 290 omitted # reduce 291 omitted # reduce 292 omitted # reduce 293 omitted # reduce 294 omitted def _reduce_295(val, _values, result) msg, = val result = new_call nil, msg.to_sym result end def _reduce_296(val, _values, result) lexer.cmdarg.push false result = self.lexer.lineno result end def _reduce_297(val, _values, result) lexer.cmdarg.pop result = new_begin val result end def _reduce_298(val, _values, result) lexer.lex_state = EXPR_ENDARG result = lexer.lineno result end def _reduce_299(val, _values, result) _, line, _ = val result = s(:begin).line line result end def _reduce_300(val, _values, result) lexer.lex_state = EXPR_ENDARG result end def _reduce_301(val, _values, result) _, stmt, _, _, = val # warning "(...) interpreted as grouped expression" result = stmt result end 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_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_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_307(val, _values, result) result = self.lexer.lineno result end def _reduce_308(val, _values, result) result = new_hash val result end def _reduce_309(val, _values, result) (_, line), = val result = s(:return).line line result end def _reduce_310(val, _values, result) result = new_yield val[2] result end def _reduce_311(val, _values, result) result = new_yield result end def _reduce_312(val, _values, result) result = new_yield result end def _reduce_313(val, _values, result) (_, line), _, _, arg, _ = val result = s(:defined, arg).line line result end def _reduce_314(val, _values, result) _, _, lhs, _ = val result = new_call lhs, :"!" result end def _reduce_315(val, _values, result) debug20 14, val, result result end def _reduce_316(val, _values, result) call, iter = val iter.insert 1, call result = iter # FIX: probably not: call.line = iter.line result end # reduce 317 omitted 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_319(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_320(val, _values, result) _, c, _, t, f, _ = val result = new_if c, t, f result end def _reduce_321(val, _values, result) _, c, _, t, f, _ = val result = new_if c, f, t result end def _reduce_322(val, _values, result) _, cond, body, _ = val result = new_while body, cond, true result end def _reduce_323(val, _values, result) _, cond, body, _ = val result = new_until body, cond, true result end def _reduce_324(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_325(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_326(val, _values, result) _, var, _, iter, body, _ = val result = new_for iter, var, body result end def _reduce_327(val, _values, result) result = self.lexer.lineno result end 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_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_330(val, _values, result) result = self.lexer.lineno result end def _reduce_331(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_332(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end 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_334(val, _values, result) result = self.lexer.lineno result end 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_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_337(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_338(val, _values, result) result = lexer.lineno result end def _reduce_339(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_340(val, _values, result) lexer.lex_state = EXPR_FNAME result end 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.cmdarg.push false lexer.cond.push false lexer.lex_state = EXPR_ENDFN|EXPR_LABEL self.comments.push self.lexer.comments result end def _reduce_342(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_343(val, _values, result) (_, line), = val result = s(:break).line line result end def _reduce_344(val, _values, result) (_, line), = val result = s(:next).line line result end def _reduce_345(val, _values, result) (_, line), = val result = s(:redo).line line result end def _reduce_346(val, _values, result) (_, line), = val result = s(:retry).line line result end def _reduce_347(val, _values, result) result = value_expr(val[0]) result end # reduce 348 omitted # reduce 349 omitted # reduce 350 omitted # 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 def _reduce_373(val, _values, result) (_, line), c, _, t, rest = val result = s(:if, c, t, rest).line line result end # reduce 374 omitted def _reduce_375(val, _values, result) result = val[1] result end # reduce 376 omitted def _reduce_377(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 378 omitted def _reduce_379(val, _values, result) result = val[1] result end def _reduce_380(val, _values, result) sym, = val result = s(:array, sym).line lexer.lineno result end def _reduce_381(val, _values, result) result = list_append val[0], val[2] result end def _reduce_382(val, _values, result) args, = val result = block_var args result end def _reduce_383(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_384(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_385(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_386(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_387(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_388(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_389(val, _values, result) result = block_var :* result end def _reduce_390(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_391(val, _values, result) result = call_args val result end def _reduce_392(val, _values, result) result = call_args val result end def _reduce_393(val, _values, result) result = call_args val result end def _reduce_394(val, _values, result) line = lexer.lineno result = call_args val # TODO: push line down result.line line result end def _reduce_395(val, _values, result) result = args val result end # reduce 396 omitted def _reduce_397(val, _values, result) result = args val result end def _reduce_398(val, _values, result) result = args val result end def _reduce_399(val, _values, result) result = args val result end 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) << nil 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 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 = 0 result end def _reduce_413(val, _values, result) self.lexer.command_start = true result end def _reduce_414(val, _values, result) # TODO: current_arg = 0 result = args val result end def _reduce_415(val, _values, result) result = s(:args).line lexer.lineno result end def _reduce_416(val, _values, result) # TODO: current_arg = 0 result = args val result end # reduce 417 omitted def _reduce_418(val, _values, result) result = args val result end def _reduce_419(val, _values, result) result = args val result end def _reduce_420(val, _values, result) result = args val result end def _reduce_421(val, _values, result) id, = val line = lexer.lineno result = s(:shadow, id.to_sym).line line result end # reduce 422 omitted def _reduce_423(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_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 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_426(val, _values, result) result = args val result end def _reduce_427(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_428(val, _values, result) result = val[1] result end def _reduce_429(val, _values, result) result = val[1] result end def _reduce_430(val, _values, result) (_, line), iter, _ = val result = iter.line line result end def _reduce_431(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_432(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end 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_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_435(val, _values, result) result = self.lexer.lineno result end 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_437(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_440(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_442(val, _values, result) result = new_super val[1] result end def _reduce_443(val, _values, result) result = s(:zsuper).line lexer.lineno result end def _reduce_444(val, _values, result) result = new_aref val result end def _reduce_445(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_446(val, _values, result) _, line, body, _ = val result = body result.line = line self.env.unextend result end def _reduce_447(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_448(val, _values, result) _, line, body, _ = val result = body result.line = line self.env.unextend result end def _reduce_449(val, _values, result) self.env.extend :dynamic; result = self.lexer.lineno result end 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_455(val, _values, result) result = self.lexer.lineno result end 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 457 omitted # reduce 458 omitted def _reduce_459(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_460(val, _values, result) result = nil result end def _reduce_461(val, _values, result) arg, = val result = s(:array, arg).line arg.line result end # reduce 462 omitted # reduce 463 omitted def _reduce_464(val, _values, result) result = val[1] result end # reduce 465 omitted def _reduce_466(val, _values, result) (_, line), body = val result = body || s(:nil).line(line) result end # reduce 467 omitted def _reduce_468(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end def _reduce_469(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end # reduce 470 omitted def _reduce_471(val, _values, result) str, = val str = s(:dstr, str.value) if str.sexp_type == :evstr result = str result end def _reduce_472(val, _values, result) debug20 23, val, result result end # reduce 473 omitted def _reduce_474(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_475(val, _values, result) _, str, (_, func) = val str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT result = str result end def _reduce_476(val, _values, result) result = new_string val result end def _reduce_477(val, _values, result) result = new_xstring val # TODO: dedent?!?! SERIOUSLY?!? result end def _reduce_478(val, _values, result) result = new_regexp val result end def _reduce_479(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_480(val, _values, result) result = val[1] result end def _reduce_481(val, _values, result) result = new_word_list result end def _reduce_482(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 483 omitted def _reduce_484(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_485(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_486(val, _values, result) result = lexer.lineno result end def _reduce_487(val, _values, result) _, line, list, _, = val list.line = line result = list result end def _reduce_488(val, _values, result) result = new_symbol_list.line lexer.lineno result end 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_491(val, _values, result) result = val[1] result end def _reduce_492(val, _values, result) result = s(:array).line lexer.lineno # FIX result end def _reduce_493(val, _values, result) result = val[1] result end def _reduce_494(val, _values, result) result = new_qword_list result end def _reduce_495(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_496(val, _values, result) result = new_qsym_list result end def _reduce_497(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_498(val, _values, result) result = s(:str, "").line lexer.lineno result end def _reduce_499(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_500(val, _values, result) result = nil result end def _reduce_501(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_502(val, _values, result) result = nil result end def _reduce_503(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_504(val, _values, result) result = new_string val result end def _reduce_505(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = EXPR_BEG result end def _reduce_506(val, _values, result) _, strterm, str = val lexer.lex_strterm = strterm result = s(:evstr, str).line str.line result end def _reduce_507(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_508(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_509(val, _values, result) result = s(:gvar, val[0].to_sym).line lexer.lineno result end def _reduce_510(val, _values, result) result = s(:ivar, val[0].to_sym).line lexer.lineno result end def _reduce_511(val, _values, result) result = s(:cvar, val[0].to_sym).line lexer.lineno result end # reduce 512 omitted def _reduce_513(val, _values, result) lexer.lex_state = EXPR_END result = val[1].to_sym result end def _reduce_514(val, _values, result) result = val[0].to_sym result end # reduce 515 omitted # reduce 516 omitted # reduce 517 omitted # reduce 518 omitted def _reduce_519(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 520 omitted def _reduce_521(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 522 omitted # reduce 523 omitted # reduce 524 omitted # reduce 525 omitted # reduce 526 omitted # reduce 527 omitted # reduce 528 omitted # reduce 529 omitted # reduce 530 omitted def _reduce_531(val, _values, result) result = s(:nil).line lexer.lineno result end def _reduce_532(val, _values, result) result = s(:self).line lexer.lineno result end def _reduce_533(val, _values, result) result = s(:true).line lexer.lineno result end def _reduce_534(val, _values, result) result = s(:false).line lexer.lineno result end def _reduce_535(val, _values, result) result = s(:str, self.file).line lexer.lineno result end def _reduce_536(val, _values, result) result = s(:lit, lexer.lineno).line lexer.lineno result end def _reduce_537(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_538(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_539(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_540(val, _values, result) result = self.assignable val[0] result end def _reduce_541(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_542(val, _values, result) result = s(:nth_ref, val[0]).line lexer.lineno result end def _reduce_543(val, _values, result) result = s(:back_ref, val[0]).line lexer.lineno result end def _reduce_544(val, _values, result) lexer.lex_state = EXPR_BEG lexer.command_start = true result end def _reduce_545(val, _values, result) result = val[2] result end def _reduce_546(val, _values, result) result = nil result end def _reduce_547(val, _values, result) result = val[1] self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true result end 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_550(val, _values, result) result = args val result end def _reduce_551(val, _values, result) result = args val result end def _reduce_552(val, _values, result) result = args val result end # reduce 553 omitted def _reduce_554(val, _values, result) result = val[1] result end def _reduce_555(val, _values, result) result = nil result end def _reduce_556(val, _values, result) result = args val result end def _reduce_557(val, _values, result) result = args val result end def _reduce_558(val, _values, result) result = args val 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) yyerror "formal argument cannot be a constant" result end def _reduce_572(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_573(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_574(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 575 omitted def _reduce_576(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 577 omitted def _reduce_578(val, _values, result) result = val[1] result end def _reduce_579(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_580(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 581 omitted def _reduce_582(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_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 end 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 end 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 end # reduce 586 omitted def _reduce_587(val, _values, result) list, _, item = val result = list << item.last result end # reduce 588 omitted def _reduce_589(val, _values, result) result = args val result end # reduce 590 omitted # reduce 591 omitted def _reduce_592(val, _values, result) name = val[1].to_sym self.assignable name result = :"**#{name}" result end def _reduce_593(val, _values, result) result = :"**" result end def _reduce_594(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_595(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_596(val, _values, result) optblk, = val result = s(:block, optblk).line optblk.line result end def _reduce_597(val, _values, result) optarg, _, optblk = val result = optarg result << optblk result end def _reduce_598(val, _values, result) opt, = val result = s(:block, opt).line opt.line result end def _reduce_599(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 600 omitted # reduce 601 omitted 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_603(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 604 omitted # reduce 605 omitted def _reduce_606(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_607(val, _values, result) result = val[1] result end def _reduce_608(val, _values, result) result = nil result end # reduce 609 omitted def _reduce_610(val, _values, result) lexer.lex_state = EXPR_BEG result end 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_612(val, _values, result) result = s(:array).line lexer.lineno result end # reduce 613 omitted # reduce 614 omitted 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_616(val, _values, result) v1, _, v2 = val result = s(:array, v1, v2).line v1.line result end 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_618(val, _values, result) _, arg = val line = arg.line result = s(:array, s(:kwsplat, arg).line(line)).line line result end # reduce 619 omitted # reduce 620 omitted # reduce 621 omitted # reduce 622 omitted # reduce 623 omitted # 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 def _reduce_643(val, _values, result) yyerrok result end # reduce 644 omitted # reduce 645 omitted def _reduce_646(val, _values, result) yyerrok result end def _reduce_647(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby21Parser ruby-ruby-parser-3.15.1/lib/ruby21_parser.y000066400000000000000000002557431400133573100205100ustar00rootroot00000000000000# -*- racc -*- class Ruby21Parser 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 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_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 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 compstmt { 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_item: f_norm_arg | 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_norm_arg tEQL arg_value { result = self.assignable val[0], val[2] # TODO: detect duplicate names } f_block_opt: f_norm_arg 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 } | 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 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: ** ruby-ruby-parser-3.15.1/lib/ruby22_parser.rb000066400000000000000000010026241400133573100206310ustar00rootroot00000000000000# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.5.0 # from Racc grammar file "". # require 'racc/parser.rb' class Ruby22Parser < 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 = [ '-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| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '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,248,248,248,,248,,,,248', '248,,,,248,,248,248,248,248,248,248,248,,,,,,248,248,248,248,248,248', '248,,,248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248,248,248,', '248,248,,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| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ 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, 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, -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,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| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '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| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ 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, 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, 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, 0, 148, :_reduce_1, 2, 146, :_reduce_2, 2, 147, :_reduce_3, 1, 149, :_reduce_none, 1, 149, :_reduce_none, 3, 149, :_reduce_6, 2, 149, :_reduce_none, 1, 152, :_reduce_none, 0, 156, :_reduce_9, 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, 2, 154, :_reduce_28, 3, 154, :_reduce_29, 3, 154, :_reduce_30, 3, 154, :_reduce_31, 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, 1, 154, :_reduce_none, 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, 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, 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, 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, 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, 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, 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, 4, 309, :_reduce_418, 1, 310, :_reduce_419, 3, 310, :_reduce_420, 1, 311, :_reduce_421, 1, 311, :_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, 6, 160, :_reduce_459, 0, 160, :_reduce_460, 1, 330, :_reduce_461, 1, 330, :_reduce_none, 1, 330, :_reduce_none, 2, 331, :_reduce_464, 1, 331, :_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, 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, 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_648, 0, 151, :_reduce_649 ] racc_reduce_n = 650 racc_shift_n = 1094 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, :tLOWEST => 143, :tEQL => 144 } racc_nt_base = 145 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", "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 # reduce 49 omitted # reduce 50 omitted def _reduce_51(val, _values, result) lhs, _, rhs = val result = logical_op :and, lhs, rhs result end def _reduce_52(val, _values, result) lhs, _, rhs = val result = logical_op :or, lhs, rhs result end def _reduce_53(val, _values, result) (_, line), _, expr = val result = new_call(expr, :"!").line line # REFACTOR: call_uni_op result end 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 = value_expr(val[0]) result end def _reduce_57(val, _values, result) lexer.cond.push true result end def _reduce_58(val, _values, result) lexer.cond.pop result end def _reduce_59(val, _values, result) _, expr, _, _ = val result = expr result end # reduce 60 omitted # reduce 61 omitted # reduce 62 omitted def _reduce_63(val, _values, result) blk, _, msg, args = val result = new_call(blk, msg.to_sym, args).line blk.line result end def _reduce_64(val, _values, result) # self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_65(val, _values, result) _, line, body, _ = val result = body result.line = line # self.env.unextend result end def _reduce_66(val, _values, result) msg, = val result = new_call(nil, msg.to_sym).line lexer.lineno result end def _reduce_67(val, _values, result) call, args = val result = call.concat args.sexp_body result end def _reduce_68(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_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) 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_71(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_72(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_73(val, _values, result) result = new_super val[1] result end def _reduce_74(val, _values, result) (_, line), args = val result = new_yield args result.line line # TODO: push to new_yield result end def _reduce_75(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_76(val, _values, result) (_, line), args = val result = s(:break, ret_args(args)).line line result end def _reduce_77(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 78 omitted def _reduce_79(val, _values, result) result = val[1] result end # reduce 80 omitted def _reduce_81(val, _values, result) _, arg, _ = val l = arg.line result = s(:masgn, s(:array, arg).line(l)).line l result end def _reduce_82(val, _values, result) head, = val result = s(:masgn, head).line head.line result end 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) 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) 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) head, _ = val l = head.line result = s(:masgn, head << s(:splat).line(l)).line l result end def _reduce_87(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_88(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_89(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_90(val, _values, result) l = lexer.lineno result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l result end def _reduce_91(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 92 omitted def _reduce_93(val, _values, result) result = val[1] result end def _reduce_94(val, _values, result) lhs, _ = val result = s(:array, lhs).line lhs.line result end def _reduce_95(val, _values, result) result = val[0] << val[1].compact result end def _reduce_96(val, _values, result) item, = val result = s(:array, item).line item.line result end def _reduce_97(val, _values, result) 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] 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) 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 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_105(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_106(val, _values, result) self.backref_assign_error val[0] result end 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 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) 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 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) self.backref_assign_error val[0] result end def _reduce_116(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 117 omitted def _reduce_118(val, _values, result) _, name = val result = s(:colon3, name.to_sym).line lexer.lineno result end def _reduce_119(val, _values, result) result = val[0].to_sym result end def _reduce_120(val, _values, result) pval, _, name = val result = s(:colon2, pval, name.to_sym) result.line pval.line result end # 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 def _reduce_125(val, _values, result) (sym, _line), = val lexer.lex_state = EXPR_END result = sym result end # reduce 126 omitted # reduce 127 omitted def _reduce_128(val, _values, result) id, = val result = s(:lit, id.to_sym).line lexer.lineno result end # reduce 129 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 result end def _reduce_132(val, _values, result) result = new_undef val[0], val[3] result end # 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 # 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_206(val, _values, result) result = new_op_asgn val result end def _reduce_207(val, _values, result) result = new_op_asgn1 val result end def _reduce_208(val, _values, result) result = new_op_asgn2 val result end def _reduce_209(val, _values, result) result = new_op_asgn2 val result end 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_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_212(val, _values, result) result = self.lexer.lineno result end 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_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_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)).line v1.line else result = s(:dot2, v1, v2).line v1.line end 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(:dot3, v1, v2).line v1.line end result end def _reduce_217(val, _values, result) result = new_call val[0], :+, argl(val[2]) 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) lit = s(:lit, val[1]).line lexer.lineno result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") result end def _reduce_224(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_225(val, _values, result) result = new_call val[1], :"-@" 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_call val[0], :"<=>", argl(val[2]) result end # reduce 230 omitted 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 def _reduce_233(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_234(val, _values, result) lhs, _, rhs = val result = new_match lhs, rhs result end def _reduce_235(val, _values, result) lhs, _, rhs = val result = s(:not, new_match(lhs, rhs)).line lhs.line result end def _reduce_236(val, _values, result) _, arg = val result = new_call arg, :"!" result.line arg.line result end def _reduce_237(val, _values, result) result = new_call value_expr(val[1]), :"~" result end 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_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_240(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_241(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_242(val, _values, result) (_, line), _, arg = val result = s(:defined, arg).line line result end def _reduce_243(val, _values, result) c, _, t, _, _, f = val result = s(:if, c, t, f).line c.line result end # reduce 244 omitted # 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 252 omitted def _reduce_253(val, _values, result) result = args [val[0]] result end def _reduce_254(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_255(val, _values, result) result = args [array_to_hash(val[0])] result end # reduce 256 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)) result end def _reduce_258(val, _values, result) _, args, _ = val result = args result end # 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_264(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_265(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_266(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_267(val, _values, result) result = call_args val result end def _reduce_268(val, _values, result) result = call_args [array_to_hash(val[0]), val[1]] result end def _reduce_269(val, _values, result) result = call_args [val[0], array_to_hash(val[2]), val[3]] result end def _reduce_270(val, _values, result) result = call_args val result end 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_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_273(val, _values, result) _, arg = val result = s(:block_pass, arg).line arg.line result end def _reduce_274(val, _values, result) result = val[1] result end # reduce 275 omitted def _reduce_276(val, _values, result) arg, = val lineno = arg.line || lexer.lineno # HACK result = s(:array, arg).line lineno result end def _reduce_277(val, _values, result) _, arg = val result = s(:array, s(:splat, arg).line(arg.line)).line arg.line result end def _reduce_278(val, _values, result) args, _, id = val result = self.list_append args, id result end 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_280(val, _values, result) result = new_masgn_arg val[0] result end def _reduce_281(val, _values, result) result = new_masgn_arg val[0], :wrap result end def _reduce_282(val, _values, result) result = val[0] << val[2] result end 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_284(val, _values, result) _, arg = val result = s(:splat, arg).line arg.line result end # reduce 285 omitted # reduce 286 omitted # reduce 287 omitted # reduce 288 omitted # reduce 289 omitted # reduce 290 omitted # reduce 291 omitted # reduce 292 omitted # reduce 293 omitted # reduce 294 omitted def _reduce_295(val, _values, result) msg, = val result = new_call nil, msg.to_sym result end def _reduce_296(val, _values, result) lexer.cmdarg.push false result = self.lexer.lineno result end def _reduce_297(val, _values, result) lexer.cmdarg.pop result = new_begin val result end def _reduce_298(val, _values, result) lexer.lex_state = EXPR_ENDARG result = lexer.lineno result end def _reduce_299(val, _values, result) _, line, _ = val result = s(:begin).line line result end def _reduce_300(val, _values, result) lexer.lex_state = EXPR_ENDARG result end def _reduce_301(val, _values, result) _, stmt, _, _, = val # warning "(...) interpreted as grouped expression" result = stmt result end 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_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_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_307(val, _values, result) result = self.lexer.lineno result end def _reduce_308(val, _values, result) result = new_hash val result end def _reduce_309(val, _values, result) (_, line), = val result = s(:return).line line result end def _reduce_310(val, _values, result) result = new_yield val[2] result end def _reduce_311(val, _values, result) result = new_yield result end def _reduce_312(val, _values, result) result = new_yield result end def _reduce_313(val, _values, result) (_, line), _, _, arg, _ = val result = s(:defined, arg).line line result end def _reduce_314(val, _values, result) _, _, lhs, _ = val result = new_call lhs, :"!" result end def _reduce_315(val, _values, result) debug20 14, val, result result end def _reduce_316(val, _values, result) call, iter = val iter.insert 1, call result = iter # FIX: probably not: call.line = iter.line result end # reduce 317 omitted 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_319(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_320(val, _values, result) _, c, _, t, f, _ = val result = new_if c, t, f result end def _reduce_321(val, _values, result) _, c, _, t, f, _ = val result = new_if c, f, t result end def _reduce_322(val, _values, result) _, cond, body, _ = val result = new_while body, cond, true result end def _reduce_323(val, _values, result) _, cond, body, _ = val result = new_until body, cond, true result end def _reduce_324(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_325(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_326(val, _values, result) _, var, _, iter, body, _ = val result = new_for iter, var, body result end def _reduce_327(val, _values, result) result = self.lexer.lineno result end 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_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_330(val, _values, result) result = self.lexer.lineno result end def _reduce_331(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_332(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end 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_334(val, _values, result) result = self.lexer.lineno result end 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_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_337(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_338(val, _values, result) result = lexer.lineno result end def _reduce_339(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_340(val, _values, result) lexer.lex_state = EXPR_FNAME result end 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.cmdarg.push false lexer.cond.push false lexer.lex_state = EXPR_ENDFN|EXPR_LABEL self.comments.push self.lexer.comments result end def _reduce_342(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_343(val, _values, result) (_, line), = val result = s(:break).line line result end def _reduce_344(val, _values, result) (_, line), = val result = s(:next).line line result end def _reduce_345(val, _values, result) (_, line), = val result = s(:redo).line line result end def _reduce_346(val, _values, result) (_, line), = val result = s(:retry).line line result end def _reduce_347(val, _values, result) result = value_expr(val[0]) result end # reduce 348 omitted # reduce 349 omitted # reduce 350 omitted # 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 def _reduce_373(val, _values, result) (_, line), c, _, t, rest = val result = s(:if, c, t, rest).line line result end # reduce 374 omitted def _reduce_375(val, _values, result) result = val[1] result end # reduce 376 omitted def _reduce_377(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 378 omitted def _reduce_379(val, _values, result) result = val[1] result end def _reduce_380(val, _values, result) sym, = val result = s(:array, sym).line lexer.lineno result end def _reduce_381(val, _values, result) result = list_append val[0], val[2] result end def _reduce_382(val, _values, result) args, = val result = block_var args result end def _reduce_383(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_384(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_385(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_386(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_387(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_388(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_389(val, _values, result) result = block_var :* result end def _reduce_390(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_391(val, _values, result) result = call_args val result end def _reduce_392(val, _values, result) result = call_args val result end def _reduce_393(val, _values, result) result = call_args val result end def _reduce_394(val, _values, result) line = lexer.lineno result = call_args val # TODO: push line down result.line line result end def _reduce_395(val, _values, result) result = args val result end # reduce 396 omitted def _reduce_397(val, _values, result) result = args val result end def _reduce_398(val, _values, result) result = args val result end def _reduce_399(val, _values, result) result = args val result end 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) << nil 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 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 = 0 result end def _reduce_413(val, _values, result) self.lexer.command_start = true result end def _reduce_414(val, _values, result) # TODO: current_arg = 0 result = args val result end def _reduce_415(val, _values, result) result = s(:args).line lexer.lineno result end def _reduce_416(val, _values, result) # TODO: current_arg = 0 result = args val result end # reduce 417 omitted def _reduce_418(val, _values, result) result = args val result end def _reduce_419(val, _values, result) result = args val result end def _reduce_420(val, _values, result) result = args val result end def _reduce_421(val, _values, result) id, = val line = lexer.lineno result = s(:shadow, id.to_sym).line line result end # reduce 422 omitted def _reduce_423(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_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 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_426(val, _values, result) result = args val result end def _reduce_427(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_428(val, _values, result) result = val[1] result end def _reduce_429(val, _values, result) result = val[1] result end def _reduce_430(val, _values, result) (_, line), iter, _ = val result = iter.line line result end def _reduce_431(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_432(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end 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_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_435(val, _values, result) result = self.lexer.lineno result end 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_437(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_440(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_442(val, _values, result) result = new_super val[1] result end def _reduce_443(val, _values, result) result = s(:zsuper).line lexer.lineno result end def _reduce_444(val, _values, result) result = new_aref val result end def _reduce_445(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_446(val, _values, result) _, line, body, _ = val result = body result.line = line self.env.unextend result end def _reduce_447(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_448(val, _values, result) _, line, body, _ = val result = body result.line = line self.env.unextend result end def _reduce_449(val, _values, result) self.env.extend :dynamic; result = self.lexer.lineno result end 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_455(val, _values, result) result = self.lexer.lineno result end 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 457 omitted # reduce 458 omitted def _reduce_459(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_460(val, _values, result) result = nil result end def _reduce_461(val, _values, result) arg, = val result = s(:array, arg).line arg.line result end # reduce 462 omitted # reduce 463 omitted def _reduce_464(val, _values, result) result = val[1] result end # reduce 465 omitted def _reduce_466(val, _values, result) (_, line), body = val result = body || s(:nil).line(line) result end # reduce 467 omitted def _reduce_468(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end def _reduce_469(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end # reduce 470 omitted def _reduce_471(val, _values, result) str, = val str = s(:dstr, str.value) if str.sexp_type == :evstr result = str result end def _reduce_472(val, _values, result) debug20 23, val, result result end # reduce 473 omitted def _reduce_474(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_475(val, _values, result) _, str, (_, func) = val str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT result = str result end def _reduce_476(val, _values, result) result = new_string val result end def _reduce_477(val, _values, result) result = new_xstring val # TODO: dedent?!?! SERIOUSLY?!? result end def _reduce_478(val, _values, result) result = new_regexp val result end def _reduce_479(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_480(val, _values, result) result = val[1] result end def _reduce_481(val, _values, result) result = new_word_list result end def _reduce_482(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 483 omitted def _reduce_484(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_485(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_486(val, _values, result) result = lexer.lineno result end def _reduce_487(val, _values, result) _, line, list, _, = val list.line = line result = list result end def _reduce_488(val, _values, result) result = new_symbol_list.line lexer.lineno result end 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_491(val, _values, result) result = val[1] result end def _reduce_492(val, _values, result) result = s(:array).line lexer.lineno # FIX result end def _reduce_493(val, _values, result) result = val[1] result end def _reduce_494(val, _values, result) result = new_qword_list result end def _reduce_495(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_496(val, _values, result) result = new_qsym_list result end def _reduce_497(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_498(val, _values, result) result = s(:str, "").line lexer.lineno result end def _reduce_499(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_500(val, _values, result) result = nil result end def _reduce_501(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_502(val, _values, result) result = nil result end def _reduce_503(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_504(val, _values, result) result = new_string val result end def _reduce_505(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = EXPR_BEG result end def _reduce_506(val, _values, result) _, strterm, str = val lexer.lex_strterm = strterm result = s(:evstr, str).line str.line result end def _reduce_507(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_508(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_509(val, _values, result) result = s(:gvar, val[0].to_sym).line lexer.lineno result end def _reduce_510(val, _values, result) result = s(:ivar, val[0].to_sym).line lexer.lineno result end def _reduce_511(val, _values, result) result = s(:cvar, val[0].to_sym).line lexer.lineno result end # reduce 512 omitted def _reduce_513(val, _values, result) lexer.lex_state = EXPR_END result = val[1].to_sym result end def _reduce_514(val, _values, result) result = val[0].to_sym result end # reduce 515 omitted # reduce 516 omitted # reduce 517 omitted # reduce 518 omitted def _reduce_519(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 520 omitted def _reduce_521(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 522 omitted # reduce 523 omitted # reduce 524 omitted # reduce 525 omitted # reduce 526 omitted # reduce 527 omitted # reduce 528 omitted # reduce 529 omitted # reduce 530 omitted def _reduce_531(val, _values, result) result = s(:nil).line lexer.lineno result end def _reduce_532(val, _values, result) result = s(:self).line lexer.lineno result end def _reduce_533(val, _values, result) result = s(:true).line lexer.lineno result end def _reduce_534(val, _values, result) result = s(:false).line lexer.lineno result end def _reduce_535(val, _values, result) result = s(:str, self.file).line lexer.lineno result end def _reduce_536(val, _values, result) result = s(:lit, lexer.lineno).line lexer.lineno result end def _reduce_537(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_538(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_539(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_540(val, _values, result) result = self.assignable val[0] result end def _reduce_541(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_542(val, _values, result) result = s(:nth_ref, val[0]).line lexer.lineno result end def _reduce_543(val, _values, result) result = s(:back_ref, val[0]).line lexer.lineno result end def _reduce_544(val, _values, result) lexer.lex_state = EXPR_BEG lexer.command_start = true result end def _reduce_545(val, _values, result) result = val[2] result end def _reduce_546(val, _values, result) result = nil result end def _reduce_547(val, _values, result) result = val[1] self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true result end 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_550(val, _values, result) result = args val result end def _reduce_551(val, _values, result) result = args val result end def _reduce_552(val, _values, result) result = args val result end # reduce 553 omitted def _reduce_554(val, _values, result) result = val[1] result end def _reduce_555(val, _values, result) result = nil result end def _reduce_556(val, _values, result) result = args val result end def _reduce_557(val, _values, result) result = args val result end def _reduce_558(val, _values, result) result = args val 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) yyerror "formal argument cannot be a constant" result end def _reduce_572(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_573(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_574(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 575 omitted def _reduce_576(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 577 omitted # reduce 578 omitted def _reduce_579(val, _values, result) result = val[1] result end def _reduce_580(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_581(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 582 omitted def _reduce_583(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_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 end 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 end 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 end # reduce 587 omitted def _reduce_588(val, _values, result) list, _, item = val result = list << item.last result end # reduce 589 omitted def _reduce_590(val, _values, result) result = args val result end # reduce 591 omitted # reduce 592 omitted def _reduce_593(val, _values, result) name = val[1].to_sym self.assignable name result = :"**#{name}" result end def _reduce_594(val, _values, result) result = :"**" result end def _reduce_595(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_596(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_597(val, _values, result) optblk, = val result = s(:block, optblk).line optblk.line result end def _reduce_598(val, _values, result) optarg, _, optblk = val result = optarg result << optblk result end def _reduce_599(val, _values, result) opt, = val result = s(:block, opt).line opt.line result end def _reduce_600(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 601 omitted # reduce 602 omitted 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_604(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 605 omitted # reduce 606 omitted def _reduce_607(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_608(val, _values, result) result = val[1] result end def _reduce_609(val, _values, result) result = nil result end # reduce 610 omitted def _reduce_611(val, _values, result) lexer.lex_state = EXPR_BEG result end 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_613(val, _values, result) result = s(:array).line lexer.lineno result end # reduce 614 omitted # 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_617(val, _values, result) v1, _, v2 = val result = s(:array, v1, v2).line v1.line result end 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_619(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value).line sym.line result end def _reduce_620(val, _values, result) _, arg = val line = arg.line result = s(:array, s(:kwsplat, arg).line(line)).line line result end # reduce 621 omitted # reduce 622 omitted # reduce 623 omitted # 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 def _reduce_645(val, _values, result) yyerrok result end # reduce 646 omitted # reduce 647 omitted def _reduce_648(val, _values, result) yyerrok result end def _reduce_649(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby22Parser ruby-ruby-parser-3.15.1/lib/ruby22_parser.y000066400000000000000000002564351400133573100205100ustar00rootroot00000000000000# -*- racc -*- class Ruby22Parser 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 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_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 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 compstmt { 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 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: ** ruby-ruby-parser-3.15.1/lib/ruby23_parser.rb000066400000000000000000010043501400133573100206300ustar00rootroot00000000000000# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.5.0 # from Racc grammar file "". # require 'racc/parser.rb' class Ruby23Parser < 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 = [ '-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| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '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,48,48', '48,,48,,,,48,48,,,,48,,48,48,48,48,48,48,48,,,,,,48,48,48,48,48,48,48', ',,48,,,,,,,48,,,48,48,48,48,48,48,48,48,,48,48,48,,48,48,,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,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,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| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ 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, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 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, 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, -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,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| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '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| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ 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, 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, 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, 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, 1, 178, :_reduce_none, 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, 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, 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, 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, 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_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, 4, 310, :_reduce_418, 1, 311, :_reduce_419, 3, 311, :_reduce_420, 1, 312, :_reduce_421, 1, 312, :_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, 6, 161, :_reduce_459, 0, 161, :_reduce_460, 1, 331, :_reduce_461, 1, 331, :_reduce_none, 1, 331, :_reduce_none, 2, 332, :_reduce_464, 1, 332, :_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, 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, 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_649, 0, 152, :_reduce_650 ] racc_reduce_n = 651 racc_shift_n = 1095 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 # reduce 49 omitted # reduce 50 omitted def _reduce_51(val, _values, result) lhs, _, rhs = val result = logical_op :and, lhs, rhs result end def _reduce_52(val, _values, result) lhs, _, rhs = val result = logical_op :or, lhs, rhs result end def _reduce_53(val, _values, result) (_, line), _, expr = val result = new_call(expr, :"!").line line # REFACTOR: call_uni_op result end 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 = value_expr(val[0]) result end def _reduce_57(val, _values, result) lexer.cond.push true result end def _reduce_58(val, _values, result) lexer.cond.pop result end def _reduce_59(val, _values, result) _, expr, _, _ = val result = expr result end # reduce 60 omitted # reduce 61 omitted # reduce 62 omitted def _reduce_63(val, _values, result) blk, _, msg, args = val result = new_call(blk, msg.to_sym, args).line blk.line result end def _reduce_64(val, _values, result) # self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_65(val, _values, result) _, line, body, _ = val result = body result.line = line # self.env.unextend result end def _reduce_66(val, _values, result) msg, = val result = new_call(nil, msg.to_sym).line lexer.lineno result end def _reduce_67(val, _values, result) call, args = val result = call.concat args.sexp_body result end def _reduce_68(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_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) 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_71(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_72(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_73(val, _values, result) result = new_super val[1] result end def _reduce_74(val, _values, result) (_, line), args = val result = new_yield args result.line line # TODO: push to new_yield result end def _reduce_75(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_76(val, _values, result) (_, line), args = val result = s(:break, ret_args(args)).line line result end def _reduce_77(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 78 omitted def _reduce_79(val, _values, result) result = val[1] result end # reduce 80 omitted def _reduce_81(val, _values, result) _, arg, _ = val l = arg.line result = s(:masgn, s(:array, arg).line(l)).line l result end def _reduce_82(val, _values, result) head, = val result = s(:masgn, head).line head.line result end 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) 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) 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) head, _ = val l = head.line result = s(:masgn, head << s(:splat).line(l)).line l result end def _reduce_87(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_88(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_89(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_90(val, _values, result) l = lexer.lineno result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l result end def _reduce_91(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 92 omitted def _reduce_93(val, _values, result) result = val[1] result end def _reduce_94(val, _values, result) lhs, _ = val result = s(:array, lhs).line lhs.line result end def _reduce_95(val, _values, result) result = val[0] << val[1].compact result end def _reduce_96(val, _values, result) item, = val result = s(:array, item).line item.line result end def _reduce_97(val, _values, result) 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] 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) 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 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_105(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_106(val, _values, result) self.backref_assign_error val[0] result end 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 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) 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 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) self.backref_assign_error val[0] result end def _reduce_116(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 117 omitted def _reduce_118(val, _values, result) _, name = val result = s(:colon3, name.to_sym).line lexer.lineno result end def _reduce_119(val, _values, result) result = val[0].to_sym result end def _reduce_120(val, _values, result) pval, _, name = val result = s(:colon2, pval, name.to_sym) result.line pval.line result end # 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 def _reduce_125(val, _values, result) (sym, _line), = val lexer.lex_state = EXPR_END result = sym result end # reduce 126 omitted # reduce 127 omitted def _reduce_128(val, _values, result) id, = val result = s(:lit, id.to_sym).line lexer.lineno result end # reduce 129 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 result end def _reduce_132(val, _values, result) result = new_undef val[0], val[3] result end # 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 # 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_206(val, _values, result) result = new_op_asgn val result end def _reduce_207(val, _values, result) result = new_op_asgn1 val result end def _reduce_208(val, _values, result) result = new_op_asgn2 val result end def _reduce_209(val, _values, result) result = new_op_asgn2 val result end 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_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_212(val, _values, result) result = self.lexer.lineno result end 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_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_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)).line v1.line else result = s(:dot2, v1, v2).line v1.line end 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(:dot3, v1, v2).line v1.line end result end def _reduce_217(val, _values, result) result = new_call val[0], :+, argl(val[2]) 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) lit = s(:lit, val[1]).line lexer.lineno result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") result end def _reduce_224(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_225(val, _values, result) result = new_call val[1], :"-@" 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_call val[0], :"<=>", argl(val[2]) result end # reduce 230 omitted 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 def _reduce_233(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_234(val, _values, result) lhs, _, rhs = val result = new_match lhs, rhs result end def _reduce_235(val, _values, result) lhs, _, rhs = val result = s(:not, new_match(lhs, rhs)).line lhs.line result end def _reduce_236(val, _values, result) _, arg = val result = new_call arg, :"!" result.line arg.line result end def _reduce_237(val, _values, result) result = new_call value_expr(val[1]), :"~" result end 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_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_240(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_241(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_242(val, _values, result) (_, line), _, arg = val result = s(:defined, arg).line line result end def _reduce_243(val, _values, result) c, _, t, _, _, f = val result = s(:if, c, t, f).line c.line result end # reduce 244 omitted # 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 252 omitted def _reduce_253(val, _values, result) result = args [val[0]] result end def _reduce_254(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_255(val, _values, result) result = args [array_to_hash(val[0])] result end # reduce 256 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)) result end def _reduce_258(val, _values, result) _, args, _ = val result = args result end # 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_264(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_265(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_266(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_267(val, _values, result) result = call_args val result end def _reduce_268(val, _values, result) result = call_args [array_to_hash(val[0]), val[1]] result end def _reduce_269(val, _values, result) result = call_args [val[0], array_to_hash(val[2]), val[3]] result end def _reduce_270(val, _values, result) result = call_args val result end 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_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_273(val, _values, result) _, arg = val result = s(:block_pass, arg).line arg.line result end def _reduce_274(val, _values, result) result = val[1] result end # reduce 275 omitted def _reduce_276(val, _values, result) arg, = val lineno = arg.line || lexer.lineno # HACK result = s(:array, arg).line lineno result end def _reduce_277(val, _values, result) _, arg = val result = s(:array, s(:splat, arg).line(arg.line)).line arg.line result end def _reduce_278(val, _values, result) args, _, id = val result = self.list_append args, id result end 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_280(val, _values, result) result = new_masgn_arg val[0] result end def _reduce_281(val, _values, result) result = new_masgn_arg val[0], :wrap result end def _reduce_282(val, _values, result) result = val[0] << val[2] result end 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_284(val, _values, result) _, arg = val result = s(:splat, arg).line arg.line result end # reduce 285 omitted # reduce 286 omitted # reduce 287 omitted # reduce 288 omitted # reduce 289 omitted # reduce 290 omitted # reduce 291 omitted # reduce 292 omitted # reduce 293 omitted # reduce 294 omitted def _reduce_295(val, _values, result) msg, = val result = new_call nil, msg.to_sym result end def _reduce_296(val, _values, result) lexer.cmdarg.push false result = self.lexer.lineno result end def _reduce_297(val, _values, result) lexer.cmdarg.pop result = new_begin val result end def _reduce_298(val, _values, result) lexer.lex_state = EXPR_ENDARG result = lexer.lineno result end def _reduce_299(val, _values, result) _, line, _ = val result = s(:begin).line line result end def _reduce_300(val, _values, result) lexer.lex_state = EXPR_ENDARG result end def _reduce_301(val, _values, result) _, stmt, _, _, = val # warning "(...) interpreted as grouped expression" result = stmt result end 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_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_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_307(val, _values, result) result = self.lexer.lineno result end def _reduce_308(val, _values, result) result = new_hash val result end def _reduce_309(val, _values, result) (_, line), = val result = s(:return).line line result end def _reduce_310(val, _values, result) result = new_yield val[2] result end def _reduce_311(val, _values, result) result = new_yield result end def _reduce_312(val, _values, result) result = new_yield result end def _reduce_313(val, _values, result) (_, line), _, _, arg, _ = val result = s(:defined, arg).line line result end def _reduce_314(val, _values, result) _, _, lhs, _ = val result = new_call lhs, :"!" result end def _reduce_315(val, _values, result) debug20 14, val, result result end def _reduce_316(val, _values, result) call, iter = val iter.insert 1, call result = iter # FIX: probably not: call.line = iter.line result end # reduce 317 omitted 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_319(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_320(val, _values, result) _, c, _, t, f, _ = val result = new_if c, t, f result end def _reduce_321(val, _values, result) _, c, _, t, f, _ = val result = new_if c, f, t result end def _reduce_322(val, _values, result) _, cond, body, _ = val result = new_while body, cond, true result end def _reduce_323(val, _values, result) _, cond, body, _ = val result = new_until body, cond, true result end def _reduce_324(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_325(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_326(val, _values, result) _, var, _, iter, body, _ = val result = new_for iter, var, body result end def _reduce_327(val, _values, result) result = self.lexer.lineno result end 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_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_330(val, _values, result) result = self.lexer.lineno result end def _reduce_331(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_332(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end 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_334(val, _values, result) result = self.lexer.lineno result end 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_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_337(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_338(val, _values, result) result = lexer.lineno result end def _reduce_339(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_340(val, _values, result) lexer.lex_state = EXPR_FNAME result end 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.cmdarg.push false lexer.cond.push false lexer.lex_state = EXPR_ENDFN|EXPR_LABEL self.comments.push self.lexer.comments result end def _reduce_342(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_343(val, _values, result) (_, line), = val result = s(:break).line line result end def _reduce_344(val, _values, result) (_, line), = val result = s(:next).line line result end def _reduce_345(val, _values, result) (_, line), = val result = s(:redo).line line result end def _reduce_346(val, _values, result) (_, line), = val result = s(:retry).line line result end def _reduce_347(val, _values, result) result = value_expr(val[0]) result end # reduce 348 omitted # reduce 349 omitted # reduce 350 omitted # 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 def _reduce_373(val, _values, result) (_, line), c, _, t, rest = val result = s(:if, c, t, rest).line line result end # reduce 374 omitted def _reduce_375(val, _values, result) result = val[1] result end # reduce 376 omitted def _reduce_377(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 378 omitted def _reduce_379(val, _values, result) result = val[1] result end def _reduce_380(val, _values, result) sym, = val result = s(:array, sym).line lexer.lineno result end def _reduce_381(val, _values, result) result = list_append val[0], val[2] result end def _reduce_382(val, _values, result) args, = val result = block_var args result end def _reduce_383(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_384(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_385(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_386(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_387(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_388(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_389(val, _values, result) result = block_var :* result end def _reduce_390(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_391(val, _values, result) result = call_args val result end def _reduce_392(val, _values, result) result = call_args val result end def _reduce_393(val, _values, result) result = call_args val result end def _reduce_394(val, _values, result) line = lexer.lineno result = call_args val # TODO: push line down result.line line result end def _reduce_395(val, _values, result) result = args val result end # reduce 396 omitted def _reduce_397(val, _values, result) result = args val result end def _reduce_398(val, _values, result) result = args val result end def _reduce_399(val, _values, result) result = args val result end 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) << nil 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 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 = 0 result end def _reduce_413(val, _values, result) self.lexer.command_start = true result end def _reduce_414(val, _values, result) # TODO: current_arg = 0 result = args val result end def _reduce_415(val, _values, result) result = s(:args).line lexer.lineno result end def _reduce_416(val, _values, result) # TODO: current_arg = 0 result = args val result end # reduce 417 omitted def _reduce_418(val, _values, result) result = args val result end def _reduce_419(val, _values, result) result = args val result end def _reduce_420(val, _values, result) result = args val result end def _reduce_421(val, _values, result) id, = val line = lexer.lineno result = s(:shadow, id.to_sym).line line result end # reduce 422 omitted def _reduce_423(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_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 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_426(val, _values, result) result = args val result end def _reduce_427(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_428(val, _values, result) result = val[1] result end def _reduce_429(val, _values, result) result = val[1] result end def _reduce_430(val, _values, result) (_, line), iter, _ = val result = iter.line line result end def _reduce_431(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_432(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end 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_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_435(val, _values, result) result = self.lexer.lineno result end 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_437(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_440(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_442(val, _values, result) result = new_super val[1] result end def _reduce_443(val, _values, result) result = s(:zsuper).line lexer.lineno result end def _reduce_444(val, _values, result) result = new_aref val result end def _reduce_445(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_446(val, _values, result) _, line, body, _ = val result = body result.line = line self.env.unextend result end def _reduce_447(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_448(val, _values, result) _, line, body, _ = val result = body result.line = line self.env.unextend result end def _reduce_449(val, _values, result) self.env.extend :dynamic; result = self.lexer.lineno result end 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_455(val, _values, result) result = self.lexer.lineno result end 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 457 omitted # reduce 458 omitted def _reduce_459(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_460(val, _values, result) result = nil result end def _reduce_461(val, _values, result) arg, = val result = s(:array, arg).line arg.line result end # reduce 462 omitted # reduce 463 omitted def _reduce_464(val, _values, result) result = val[1] result end # reduce 465 omitted def _reduce_466(val, _values, result) (_, line), body = val result = body || s(:nil).line(line) result end # reduce 467 omitted def _reduce_468(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end def _reduce_469(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end # reduce 470 omitted def _reduce_471(val, _values, result) str, = val str = s(:dstr, str.value) if str.sexp_type == :evstr result = str result end def _reduce_472(val, _values, result) debug20 23, val, result result end # reduce 473 omitted def _reduce_474(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_475(val, _values, result) _, str, (_, func) = val str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT result = str result end def _reduce_476(val, _values, result) result = new_string val result end def _reduce_477(val, _values, result) result = new_xstring val # TODO: dedent?!?! SERIOUSLY?!? result end def _reduce_478(val, _values, result) result = new_regexp val result end def _reduce_479(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_480(val, _values, result) result = val[1] result end def _reduce_481(val, _values, result) result = new_word_list result end def _reduce_482(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 483 omitted def _reduce_484(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_485(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_486(val, _values, result) result = lexer.lineno result end def _reduce_487(val, _values, result) _, line, list, _, = val list.line = line result = list result end def _reduce_488(val, _values, result) result = new_symbol_list.line lexer.lineno result end 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_491(val, _values, result) result = val[1] result end def _reduce_492(val, _values, result) result = s(:array).line lexer.lineno # FIX result end def _reduce_493(val, _values, result) result = val[1] result end def _reduce_494(val, _values, result) result = new_qword_list result end def _reduce_495(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_496(val, _values, result) result = new_qsym_list result end def _reduce_497(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_498(val, _values, result) result = s(:str, "").line lexer.lineno result end def _reduce_499(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_500(val, _values, result) result = nil result end def _reduce_501(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_502(val, _values, result) result = nil result end def _reduce_503(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_504(val, _values, result) result = new_string val result end def _reduce_505(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = EXPR_BEG result end def _reduce_506(val, _values, result) _, strterm, str = val lexer.lex_strterm = strterm result = s(:evstr, str).line str.line result end def _reduce_507(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_508(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_509(val, _values, result) result = s(:gvar, val[0].to_sym).line lexer.lineno result end def _reduce_510(val, _values, result) result = s(:ivar, val[0].to_sym).line lexer.lineno result end def _reduce_511(val, _values, result) result = s(:cvar, val[0].to_sym).line lexer.lineno result end # reduce 512 omitted def _reduce_513(val, _values, result) lexer.lex_state = EXPR_END result = val[1].to_sym result end def _reduce_514(val, _values, result) result = val[0].to_sym result end # reduce 515 omitted # reduce 516 omitted # reduce 517 omitted # reduce 518 omitted def _reduce_519(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 520 omitted def _reduce_521(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 522 omitted # reduce 523 omitted # reduce 524 omitted # reduce 525 omitted # reduce 526 omitted # reduce 527 omitted # reduce 528 omitted # reduce 529 omitted # reduce 530 omitted def _reduce_531(val, _values, result) result = s(:nil).line lexer.lineno result end def _reduce_532(val, _values, result) result = s(:self).line lexer.lineno result end def _reduce_533(val, _values, result) result = s(:true).line lexer.lineno result end def _reduce_534(val, _values, result) result = s(:false).line lexer.lineno result end def _reduce_535(val, _values, result) result = s(:str, self.file).line lexer.lineno result end def _reduce_536(val, _values, result) result = s(:lit, lexer.lineno).line lexer.lineno result end def _reduce_537(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_538(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_539(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_540(val, _values, result) result = self.assignable val[0] result end def _reduce_541(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_542(val, _values, result) result = s(:nth_ref, val[0]).line lexer.lineno result end def _reduce_543(val, _values, result) result = s(:back_ref, val[0]).line lexer.lineno result end def _reduce_544(val, _values, result) lexer.lex_state = EXPR_BEG lexer.command_start = true result end def _reduce_545(val, _values, result) result = val[2] result end def _reduce_546(val, _values, result) result = nil result end def _reduce_547(val, _values, result) result = val[1] self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true result end 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_550(val, _values, result) result = args val result end def _reduce_551(val, _values, result) result = args val result end def _reduce_552(val, _values, result) result = args val result end # reduce 553 omitted def _reduce_554(val, _values, result) result = val[1] result end def _reduce_555(val, _values, result) result = nil result end def _reduce_556(val, _values, result) result = args val result end def _reduce_557(val, _values, result) result = args val result end def _reduce_558(val, _values, result) result = args val 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) yyerror "formal argument cannot be a constant" result end def _reduce_572(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_573(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_574(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 575 omitted def _reduce_576(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 577 omitted # reduce 578 omitted def _reduce_579(val, _values, result) result = val[1] result end def _reduce_580(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_581(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 582 omitted def _reduce_583(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_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 end 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 end 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 end # reduce 587 omitted def _reduce_588(val, _values, result) list, _, item = val result = list << item.last result end # reduce 589 omitted def _reduce_590(val, _values, result) result = args val result end # reduce 591 omitted # reduce 592 omitted def _reduce_593(val, _values, result) name = val[1].to_sym self.assignable name result = :"**#{name}" result end def _reduce_594(val, _values, result) result = :"**" result end def _reduce_595(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_596(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_597(val, _values, result) optblk, = val result = s(:block, optblk).line optblk.line result end def _reduce_598(val, _values, result) optarg, _, optblk = val result = optarg result << optblk result end def _reduce_599(val, _values, result) opt, = val result = s(:block, opt).line opt.line result end def _reduce_600(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 601 omitted # reduce 602 omitted 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_604(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 605 omitted # reduce 606 omitted def _reduce_607(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_608(val, _values, result) result = val[1] result end def _reduce_609(val, _values, result) result = nil result end # reduce 610 omitted def _reduce_611(val, _values, result) lexer.lex_state = EXPR_BEG result end 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_613(val, _values, result) result = s(:array).line lexer.lineno result end # reduce 614 omitted # 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_617(val, _values, result) v1, _, v2 = val result = s(:array, v1, v2).line v1.line result end 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_619(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value).line sym.line result end def _reduce_620(val, _values, result) _, arg = val line = arg.line result = s(:array, s(:kwsplat, arg).line(line)).line line result end # reduce 621 omitted # reduce 622 omitted # reduce 623 omitted # 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 def _reduce_646(val, _values, result) yyerrok result end # reduce 647 omitted # reduce 648 omitted def _reduce_649(val, _values, result) yyerrok result end def _reduce_650(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby23Parser ruby-ruby-parser-3.15.1/lib/ruby23_parser.y000066400000000000000000002565361400133573100205130ustar00rootroot00000000000000# -*- racc -*- class Ruby23Parser 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_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 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 compstmt { 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: ** ruby-ruby-parser-3.15.1/lib/ruby24_parser.rb000066400000000000000000010074301400133573100206330ustar00rootroot00000000000000# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.5.0 # from Racc grammar file "". # require 'racc/parser.rb' class Ruby24Parser < 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 = [ '-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| 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, -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,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| 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,,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| 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, 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, 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, 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_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, 4, 310, :_reduce_419, 1, 311, :_reduce_420, 3, 311, :_reduce_421, 1, 312, :_reduce_422, 1, 312, :_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, 6, 161, :_reduce_460, 0, 161, :_reduce_461, 1, 331, :_reduce_462, 1, 331, :_reduce_none, 1, 331, :_reduce_none, 2, 332, :_reduce_465, 1, 332, :_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, 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, 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_650, 0, 152, :_reduce_651 ] racc_reduce_n = 652 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) 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) lit = s(:lit, val[1]).line lexer.lineno result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") result end def _reduce_225(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_226(val, _values, result) result = new_call val[1], :"-@" 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_call val[0], :"&", argl(val[2]) result end def _reduce_230(val, _values, result) result = new_call val[0], :"<=>", argl(val[2]) result end # reduce 231 omitted def _reduce_232(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end def _reduce_233(val, _values, result) result = new_call val[0], :"===", argl(val[2]) result end def _reduce_234(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_235(val, _values, result) lhs, _, rhs = val result = new_match lhs, rhs result end def _reduce_236(val, _values, result) lhs, _, rhs = val result = s(:not, new_match(lhs, rhs)).line lhs.line result end def _reduce_237(val, _values, result) _, arg = val result = new_call arg, :"!" result.line arg.line result end def _reduce_238(val, _values, result) result = new_call value_expr(val[1]), :"~" result end 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_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_241(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_242(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_243(val, _values, result) (_, line), _, arg = val result = s(:defined, arg).line line result end def _reduce_244(val, _values, result) c, _, t, _, _, f = val result = s(:if, c, t, f).line c.line result end # reduce 245 omitted # 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 253 omitted def _reduce_254(val, _values, result) result = args [val[0]] result end def _reduce_255(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_256(val, _values, result) result = args [array_to_hash(val[0])] result end # reduce 257 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)) result end def _reduce_259(val, _values, result) _, args, _ = val result = args result end # 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_265(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_266(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_267(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_268(val, _values, result) result = call_args val result end def _reduce_269(val, _values, result) result = call_args [array_to_hash(val[0]), val[1]] result end def _reduce_270(val, _values, result) result = call_args [val[0], array_to_hash(val[2]), val[3]] result end def _reduce_271(val, _values, result) result = call_args val result end 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_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_274(val, _values, result) _, arg = val result = s(:block_pass, arg).line arg.line result end def _reduce_275(val, _values, result) result = val[1] result end # reduce 276 omitted def _reduce_277(val, _values, result) arg, = val lineno = arg.line || lexer.lineno # HACK result = s(:array, arg).line lineno result end def _reduce_278(val, _values, result) _, arg = val result = s(:array, s(:splat, arg).line(arg.line)).line arg.line result end def _reduce_279(val, _values, result) args, _, id = val result = self.list_append args, id result end 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_281(val, _values, result) result = new_masgn_arg val[0] result end def _reduce_282(val, _values, result) result = new_masgn_arg val[0], :wrap result end def _reduce_283(val, _values, result) result = val[0] << val[2] result end 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_285(val, _values, result) _, arg = val result = s(:splat, arg).line arg.line result end # reduce 286 omitted # reduce 287 omitted # reduce 288 omitted # reduce 289 omitted # reduce 290 omitted # reduce 291 omitted # reduce 292 omitted # reduce 293 omitted # reduce 294 omitted # reduce 295 omitted def _reduce_296(val, _values, result) msg, = val result = new_call nil, msg.to_sym result end def _reduce_297(val, _values, result) lexer.cmdarg.push false result = self.lexer.lineno result end def _reduce_298(val, _values, result) lexer.cmdarg.pop result = new_begin val result end def _reduce_299(val, _values, result) lexer.lex_state = EXPR_ENDARG result = lexer.lineno result end def _reduce_300(val, _values, result) _, line, _ = val result = s(:begin).line line result end def _reduce_301(val, _values, result) lexer.lex_state = EXPR_ENDARG result end def _reduce_302(val, _values, result) _, stmt, _, _, = val # warning "(...) interpreted as grouped expression" result = stmt result end 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_305(val, _values, result) _, id = val result = s(:colon3, id.to_sym).line lexer.lineno result end def _reduce_306(val, _values, result) result = lexer.lineno result end 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_308(val, _values, result) result = self.lexer.lineno result end def _reduce_309(val, _values, result) result = new_hash val result end def _reduce_310(val, _values, result) (_, line), = val result = s(:return).line line result end def _reduce_311(val, _values, result) result = new_yield val[2] result end def _reduce_312(val, _values, result) result = new_yield result end def _reduce_313(val, _values, result) result = new_yield result end def _reduce_314(val, _values, result) (_, line), _, _, arg, _ = val result = s(:defined, arg).line line result end def _reduce_315(val, _values, result) _, _, lhs, _ = val result = new_call lhs, :"!" result end def _reduce_316(val, _values, result) debug20 14, val, result result end def _reduce_317(val, _values, result) call, iter = val iter.insert 1, call result = iter # FIX: probably not: call.line = iter.line result end # reduce 318 omitted 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_320(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_321(val, _values, result) _, c, _, t, f, _ = val result = new_if c, t, f result end def _reduce_322(val, _values, result) _, c, _, t, f, _ = val result = new_if c, f, t result end def _reduce_323(val, _values, result) _, cond, body, _ = val result = new_while body, cond, true result end def _reduce_324(val, _values, result) _, cond, body, _ = val result = new_until body, cond, true result end def _reduce_325(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_326(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_327(val, _values, result) _, var, _, iter, body, _ = val result = new_for iter, var, body result end def _reduce_328(val, _values, result) result = self.lexer.lineno result end 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_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_331(val, _values, result) result = self.lexer.lineno result end def _reduce_332(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_333(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end 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_335(val, _values, result) result = self.lexer.lineno result end 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_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_338(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_339(val, _values, result) result = lexer.lineno result end def _reduce_340(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_341(val, _values, result) lexer.lex_state = EXPR_FNAME result end 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.cmdarg.push false lexer.cond.push false lexer.lex_state = EXPR_ENDFN|EXPR_LABEL self.comments.push self.lexer.comments result end def _reduce_343(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_344(val, _values, result) (_, line), = val result = s(:break).line line result end def _reduce_345(val, _values, result) (_, line), = val result = s(:next).line line result end def _reduce_346(val, _values, result) (_, line), = val result = s(:redo).line line result end def _reduce_347(val, _values, result) (_, line), = val result = s(:retry).line line result end def _reduce_348(val, _values, result) result = value_expr(val[0]) result end # reduce 349 omitted # reduce 350 omitted # 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 def _reduce_374(val, _values, result) (_, line), c, _, t, rest = val result = s(:if, c, t, rest).line line result end # reduce 375 omitted def _reduce_376(val, _values, result) result = val[1] result end # reduce 377 omitted def _reduce_378(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 379 omitted def _reduce_380(val, _values, result) result = val[1] result end def _reduce_381(val, _values, result) sym, = val result = s(:array, sym).line lexer.lineno result end def _reduce_382(val, _values, result) result = list_append val[0], val[2] result end def _reduce_383(val, _values, result) args, = val result = block_var args result end def _reduce_384(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_385(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_386(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_387(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_388(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_389(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_390(val, _values, result) result = block_var :* result end def _reduce_391(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_392(val, _values, result) result = call_args val result end def _reduce_393(val, _values, result) result = call_args val result end def _reduce_394(val, _values, result) result = call_args val result end def _reduce_395(val, _values, result) line = lexer.lineno result = call_args val # TODO: push line down result.line line result end def _reduce_396(val, _values, result) result = args val result end # reduce 397 omitted def _reduce_398(val, _values, result) result = args val result end def _reduce_399(val, _values, result) result = args val result end 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) << nil result end def _reduce_404(val, _values, result) result = args val result end def _reduce_405(val, _values, result) result = args val 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 = 0 result end def _reduce_414(val, _values, result) self.lexer.command_start = true result end def _reduce_415(val, _values, result) # TODO: current_arg = 0 result = args val result end def _reduce_416(val, _values, result) result = s(:args).line lexer.lineno result end def _reduce_417(val, _values, result) # TODO: current_arg = 0 result = args val result end # reduce 418 omitted def _reduce_419(val, _values, result) result = args val result end def _reduce_420(val, _values, result) result = args val result end def _reduce_421(val, _values, result) result = args val result end def _reduce_422(val, _values, result) id, = val line = lexer.lineno result = s(:shadow, id.to_sym).line line result end # reduce 423 omitted def _reduce_424(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_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 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_427(val, _values, result) result = args val result end def _reduce_428(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_429(val, _values, result) result = val[1] result end def _reduce_430(val, _values, result) result = val[1] result end def _reduce_431(val, _values, result) (_, line), iter, _ = val result = iter.line line result end def _reduce_432(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_433(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end 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_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_436(val, _values, result) result = self.lexer.lineno result end 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_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_440(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_442(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_443(val, _values, result) result = new_super val[1] result end def _reduce_444(val, _values, result) result = s(:zsuper).line lexer.lineno result end def _reduce_445(val, _values, result) result = new_aref val result end def _reduce_446(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_447(val, _values, result) _, line, body, _ = val result = body result.line = line self.env.unextend 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) 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_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_457(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] result end # reduce 458 omitted # reduce 459 omitted def _reduce_460(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_461(val, _values, result) result = nil result end def _reduce_462(val, _values, result) arg, = val result = s(:array, arg).line arg.line result end # reduce 463 omitted # reduce 464 omitted def _reduce_465(val, _values, result) result = val[1] result end # reduce 466 omitted def _reduce_467(val, _values, result) (_, line), body = val result = body || s(:nil).line(line) result end # reduce 468 omitted def _reduce_469(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end def _reduce_470(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end # reduce 471 omitted def _reduce_472(val, _values, result) str, = val str = s(:dstr, str.value) if str.sexp_type == :evstr result = str result end def _reduce_473(val, _values, result) debug20 23, val, result result end # reduce 474 omitted def _reduce_475(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_476(val, _values, result) _, str, (_, func) = val str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT result = str result end def _reduce_477(val, _values, result) result = new_string val result end def _reduce_478(val, _values, result) result = new_xstring val # TODO: dedent?!?! SERIOUSLY?!? result end def _reduce_479(val, _values, result) result = new_regexp val result end def _reduce_480(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_481(val, _values, result) result = val[1] result end def _reduce_482(val, _values, result) result = new_word_list result end def _reduce_483(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 484 omitted 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_487(val, _values, result) result = lexer.lineno result end def _reduce_488(val, _values, result) _, line, list, _, = val list.line = line result = list result end def _reduce_489(val, _values, result) result = new_symbol_list.line lexer.lineno result end def _reduce_490(val, _values, result) list, * = val result = list.dup << new_symbol_list_entry(val) result end def _reduce_491(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_492(val, _values, result) result = val[1] result end def _reduce_493(val, _values, result) result = s(:array).line lexer.lineno # FIX result end def _reduce_494(val, _values, result) result = val[1] result end def _reduce_495(val, _values, result) result = new_qword_list result end def _reduce_496(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_497(val, _values, result) result = new_qsym_list result end def _reduce_498(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_499(val, _values, result) result = s(:str, "").line lexer.lineno result end def _reduce_500(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_501(val, _values, result) result = nil 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 = new_string val result end def _reduce_506(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = EXPR_BEG result end def _reduce_507(val, _values, result) _, strterm, str = val lexer.lex_strterm = strterm result = s(:evstr, str).line str.line result end def _reduce_508(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_509(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_510(val, _values, result) result = s(:gvar, val[0].to_sym).line lexer.lineno result end def _reduce_511(val, _values, result) result = s(:ivar, val[0].to_sym).line lexer.lineno result end def _reduce_512(val, _values, result) result = s(:cvar, val[0].to_sym).line lexer.lineno result end # reduce 513 omitted def _reduce_514(val, _values, result) lexer.lex_state = EXPR_END result = val[1].to_sym result end def _reduce_515(val, _values, result) result = val[0].to_sym result end # reduce 516 omitted # reduce 517 omitted # reduce 518 omitted # reduce 519 omitted def _reduce_520(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 521 omitted def _reduce_522(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 523 omitted # reduce 524 omitted # reduce 525 omitted # reduce 526 omitted # reduce 527 omitted # reduce 528 omitted # reduce 529 omitted # reduce 530 omitted # reduce 531 omitted def _reduce_532(val, _values, result) result = s(:nil).line lexer.lineno result end def _reduce_533(val, _values, result) result = s(:self).line lexer.lineno result end def _reduce_534(val, _values, result) result = s(:true).line lexer.lineno result end def _reduce_535(val, _values, result) result = s(:false).line lexer.lineno result end def _reduce_536(val, _values, result) result = s(:str, self.file).line lexer.lineno result end def _reduce_537(val, _values, result) result = s(:lit, lexer.lineno).line lexer.lineno result end def _reduce_538(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_539(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_540(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_541(val, _values, result) result = self.assignable val[0] result end def _reduce_542(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_543(val, _values, result) result = s(:nth_ref, val[0]).line lexer.lineno result end def _reduce_544(val, _values, result) result = s(:back_ref, val[0]).line lexer.lineno result end def _reduce_545(val, _values, result) lexer.lex_state = EXPR_BEG lexer.command_start = true result end def _reduce_546(val, _values, result) result = val[2] result end def _reduce_547(val, _values, result) result = nil result end def _reduce_548(val, _values, result) result = val[1] self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true result end 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_551(val, _values, result) result = args val result end def _reduce_552(val, _values, result) result = args val result end def _reduce_553(val, _values, result) result = args val result end # reduce 554 omitted def _reduce_555(val, _values, result) result = val[1] result end def _reduce_556(val, _values, result) result = nil result end def _reduce_557(val, _values, result) result = args val result end def _reduce_558(val, _values, result) result = args val 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) yyerror "formal argument cannot be a constant" result end def _reduce_573(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_574(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_575(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 576 omitted def _reduce_577(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 578 omitted # reduce 579 omitted def _reduce_580(val, _values, result) result = val[1] result end def _reduce_581(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_582(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 583 omitted def _reduce_584(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_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 end 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 end 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 end # reduce 588 omitted def _reduce_589(val, _values, result) list, _, item = val result = list << item.last result end # reduce 590 omitted def _reduce_591(val, _values, result) result = args val result end # reduce 592 omitted # reduce 593 omitted def _reduce_594(val, _values, result) name = val[1].to_sym self.assignable name result = :"**#{name}" result end def _reduce_595(val, _values, result) result = :"**" result end def _reduce_596(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_597(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_598(val, _values, result) optblk, = val result = s(:block, optblk).line optblk.line result end def _reduce_599(val, _values, result) optarg, _, optblk = val result = optarg result << optblk result end def _reduce_600(val, _values, result) opt, = val result = s(:block, opt).line opt.line result end def _reduce_601(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 602 omitted # reduce 603 omitted 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_605(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 606 omitted # reduce 607 omitted def _reduce_608(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_609(val, _values, result) result = val[1] result end def _reduce_610(val, _values, result) result = nil result end # reduce 611 omitted def _reduce_612(val, _values, result) lexer.lex_state = EXPR_BEG result end 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_614(val, _values, result) result = s(:array).line lexer.lineno result end # reduce 615 omitted # 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_618(val, _values, result) v1, _, v2 = val result = s(:array, v1, v2).line v1.line result end 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_620(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value).line sym.line result end def _reduce_621(val, _values, result) _, arg = val line = arg.line result = s(:array, s(:kwsplat, arg).line(line)).line line result end # reduce 622 omitted # reduce 623 omitted # 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 def _reduce_647(val, _values, result) yyerrok result end # reduce 648 omitted # reduce 649 omitted def _reduce_650(val, _values, result) yyerrok result end def _reduce_651(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby24Parser ruby-ruby-parser-3.15.1/lib/ruby24_parser.y000066400000000000000000002572311400133573100205050ustar00rootroot00000000000000# -*- racc -*- class Ruby24Parser 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 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 compstmt { 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: ** ruby-ruby-parser-3.15.1/lib/ruby25_parser.rb000066400000000000000000010074301400133573100206340ustar00rootroot00000000000000# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.5.0 # from Racc grammar file "". # require 'racc/parser.rb' class Ruby25Parser < 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 = [ '-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| 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, -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,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, 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, 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, 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_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, 4, 310, :_reduce_419, 1, 311, :_reduce_420, 3, 311, :_reduce_421, 1, 312, :_reduce_422, 1, 312, :_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, 6, 161, :_reduce_460, 0, 161, :_reduce_461, 1, 331, :_reduce_462, 1, 331, :_reduce_none, 1, 331, :_reduce_none, 2, 332, :_reduce_465, 1, 332, :_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, 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, 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_650, 0, 152, :_reduce_651 ] racc_reduce_n = 652 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) 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) lit = s(:lit, val[1]).line lexer.lineno result = new_call(new_call(lit, :"**", argl(val[3])), :"-@") result end def _reduce_225(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_226(val, _values, result) result = new_call val[1], :"-@" 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_call val[0], :"&", argl(val[2]) result end def _reduce_230(val, _values, result) result = new_call val[0], :"<=>", argl(val[2]) result end # reduce 231 omitted def _reduce_232(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end def _reduce_233(val, _values, result) result = new_call val[0], :"===", argl(val[2]) result end def _reduce_234(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_235(val, _values, result) lhs, _, rhs = val result = new_match lhs, rhs result end def _reduce_236(val, _values, result) lhs, _, rhs = val result = s(:not, new_match(lhs, rhs)).line lhs.line result end def _reduce_237(val, _values, result) _, arg = val result = new_call arg, :"!" result.line arg.line result end def _reduce_238(val, _values, result) result = new_call value_expr(val[1]), :"~" result end 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_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_241(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_242(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_243(val, _values, result) (_, line), _, arg = val result = s(:defined, arg).line line result end def _reduce_244(val, _values, result) c, _, t, _, _, f = val result = s(:if, c, t, f).line c.line result end # reduce 245 omitted # 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 253 omitted def _reduce_254(val, _values, result) result = args [val[0]] result end def _reduce_255(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_256(val, _values, result) result = args [array_to_hash(val[0])] result end # reduce 257 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)) result end def _reduce_259(val, _values, result) _, args, _ = val result = args result end # 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_265(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_266(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_267(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_268(val, _values, result) result = call_args val result end def _reduce_269(val, _values, result) result = call_args [array_to_hash(val[0]), val[1]] result end def _reduce_270(val, _values, result) result = call_args [val[0], array_to_hash(val[2]), val[3]] result end def _reduce_271(val, _values, result) result = call_args val result end 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_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_274(val, _values, result) _, arg = val result = s(:block_pass, arg).line arg.line result end def _reduce_275(val, _values, result) result = val[1] result end # reduce 276 omitted def _reduce_277(val, _values, result) arg, = val lineno = arg.line || lexer.lineno # HACK result = s(:array, arg).line lineno result end def _reduce_278(val, _values, result) _, arg = val result = s(:array, s(:splat, arg).line(arg.line)).line arg.line result end def _reduce_279(val, _values, result) args, _, id = val result = self.list_append args, id result end 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_281(val, _values, result) result = new_masgn_arg val[0] result end def _reduce_282(val, _values, result) result = new_masgn_arg val[0], :wrap result end def _reduce_283(val, _values, result) result = val[0] << val[2] result end 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_285(val, _values, result) _, arg = val result = s(:splat, arg).line arg.line result end # reduce 286 omitted # reduce 287 omitted # reduce 288 omitted # reduce 289 omitted # reduce 290 omitted # reduce 291 omitted # reduce 292 omitted # reduce 293 omitted # reduce 294 omitted # reduce 295 omitted def _reduce_296(val, _values, result) msg, = val result = new_call nil, msg.to_sym result end def _reduce_297(val, _values, result) lexer.cmdarg.push false result = self.lexer.lineno result end def _reduce_298(val, _values, result) lexer.cmdarg.pop result = new_begin val result end def _reduce_299(val, _values, result) lexer.lex_state = EXPR_ENDARG result = lexer.lineno result end def _reduce_300(val, _values, result) _, line, _ = val result = s(:begin).line line result end def _reduce_301(val, _values, result) lexer.lex_state = EXPR_ENDARG result end def _reduce_302(val, _values, result) _, stmt, _, _, = val # warning "(...) interpreted as grouped expression" result = stmt result end 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_305(val, _values, result) _, id = val result = s(:colon3, id.to_sym).line lexer.lineno result end def _reduce_306(val, _values, result) result = lexer.lineno result end 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_308(val, _values, result) result = self.lexer.lineno result end def _reduce_309(val, _values, result) result = new_hash val result end def _reduce_310(val, _values, result) (_, line), = val result = s(:return).line line result end def _reduce_311(val, _values, result) result = new_yield val[2] result end def _reduce_312(val, _values, result) result = new_yield result end def _reduce_313(val, _values, result) result = new_yield result end def _reduce_314(val, _values, result) (_, line), _, _, arg, _ = val result = s(:defined, arg).line line result end def _reduce_315(val, _values, result) _, _, lhs, _ = val result = new_call lhs, :"!" result end def _reduce_316(val, _values, result) debug20 14, val, result result end def _reduce_317(val, _values, result) call, iter = val iter.insert 1, call result = iter # FIX: probably not: call.line = iter.line result end # reduce 318 omitted 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_320(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_321(val, _values, result) _, c, _, t, f, _ = val result = new_if c, t, f result end def _reduce_322(val, _values, result) _, c, _, t, f, _ = val result = new_if c, f, t result end def _reduce_323(val, _values, result) _, cond, body, _ = val result = new_while body, cond, true result end def _reduce_324(val, _values, result) _, cond, body, _ = val result = new_until body, cond, true result end def _reduce_325(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_326(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_327(val, _values, result) _, var, _, iter, body, _ = val result = new_for iter, var, body result end def _reduce_328(val, _values, result) result = self.lexer.lineno result end 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_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_331(val, _values, result) result = self.lexer.lineno result end def _reduce_332(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_333(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end 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_335(val, _values, result) result = self.lexer.lineno result end 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_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_338(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_339(val, _values, result) result = lexer.lineno result end def _reduce_340(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_341(val, _values, result) lexer.lex_state = EXPR_FNAME result end 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.cmdarg.push false lexer.cond.push false lexer.lex_state = EXPR_ENDFN|EXPR_LABEL self.comments.push self.lexer.comments result end def _reduce_343(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_344(val, _values, result) (_, line), = val result = s(:break).line line result end def _reduce_345(val, _values, result) (_, line), = val result = s(:next).line line result end def _reduce_346(val, _values, result) (_, line), = val result = s(:redo).line line result end def _reduce_347(val, _values, result) (_, line), = val result = s(:retry).line line result end def _reduce_348(val, _values, result) result = value_expr(val[0]) result end # reduce 349 omitted # reduce 350 omitted # 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 def _reduce_374(val, _values, result) (_, line), c, _, t, rest = val result = s(:if, c, t, rest).line line result end # reduce 375 omitted def _reduce_376(val, _values, result) result = val[1] result end # reduce 377 omitted def _reduce_378(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 379 omitted def _reduce_380(val, _values, result) result = val[1] result end def _reduce_381(val, _values, result) sym, = val result = s(:array, sym).line lexer.lineno result end def _reduce_382(val, _values, result) result = list_append val[0], val[2] result end def _reduce_383(val, _values, result) args, = val result = block_var args result end def _reduce_384(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_385(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_386(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_387(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_388(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_389(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_390(val, _values, result) result = block_var :* result end def _reduce_391(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_392(val, _values, result) result = call_args val result end def _reduce_393(val, _values, result) result = call_args val result end def _reduce_394(val, _values, result) result = call_args val result end def _reduce_395(val, _values, result) line = lexer.lineno result = call_args val # TODO: push line down result.line line result end def _reduce_396(val, _values, result) result = args val result end # reduce 397 omitted def _reduce_398(val, _values, result) result = args val result end def _reduce_399(val, _values, result) result = args val result end 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) << nil result end def _reduce_404(val, _values, result) result = args val result end def _reduce_405(val, _values, result) result = args val 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 = 0 result end def _reduce_414(val, _values, result) self.lexer.command_start = true result end def _reduce_415(val, _values, result) # TODO: current_arg = 0 result = args val result end def _reduce_416(val, _values, result) result = s(:args).line lexer.lineno result end def _reduce_417(val, _values, result) # TODO: current_arg = 0 result = args val result end # reduce 418 omitted def _reduce_419(val, _values, result) result = args val result end def _reduce_420(val, _values, result) result = args val result end def _reduce_421(val, _values, result) result = args val result end def _reduce_422(val, _values, result) id, = val line = lexer.lineno result = s(:shadow, id.to_sym).line line result end # reduce 423 omitted def _reduce_424(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_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 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_427(val, _values, result) result = args val result end def _reduce_428(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_429(val, _values, result) result = val[1] result end def _reduce_430(val, _values, result) result = val[1] result end def _reduce_431(val, _values, result) (_, line), iter, _ = val result = iter.line line result end def _reduce_432(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_433(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end 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_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_436(val, _values, result) result = self.lexer.lineno result end 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_438(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_439(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_440(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_441(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_442(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_443(val, _values, result) result = new_super val[1] result end def _reduce_444(val, _values, result) result = s(:zsuper).line lexer.lineno result end def _reduce_445(val, _values, result) result = new_aref val result end def _reduce_446(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_447(val, _values, result) _, line, body, _ = val result = body result.line = line self.env.unextend 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) 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_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_457(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] result end # reduce 458 omitted # reduce 459 omitted def _reduce_460(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_461(val, _values, result) result = nil result end def _reduce_462(val, _values, result) arg, = val result = s(:array, arg).line arg.line result end # reduce 463 omitted # reduce 464 omitted def _reduce_465(val, _values, result) result = val[1] result end # reduce 466 omitted def _reduce_467(val, _values, result) (_, line), body = val result = body || s(:nil).line(line) result end # reduce 468 omitted def _reduce_469(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end def _reduce_470(val, _values, result) line = lexer.lineno result = s(:lit, val[0]) result.line = line result end # reduce 471 omitted def _reduce_472(val, _values, result) str, = val str = s(:dstr, str.value) if str.sexp_type == :evstr result = str result end def _reduce_473(val, _values, result) debug20 23, val, result result end # reduce 474 omitted def _reduce_475(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_476(val, _values, result) _, str, (_, func) = val str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT result = str result end def _reduce_477(val, _values, result) result = new_string val result end def _reduce_478(val, _values, result) result = new_xstring val # TODO: dedent?!?! SERIOUSLY?!? result end def _reduce_479(val, _values, result) result = new_regexp val result end def _reduce_480(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_481(val, _values, result) result = val[1] result end def _reduce_482(val, _values, result) result = new_word_list result end def _reduce_483(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 484 omitted 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_487(val, _values, result) result = lexer.lineno result end def _reduce_488(val, _values, result) _, line, list, _, = val list.line = line result = list result end def _reduce_489(val, _values, result) result = new_symbol_list.line lexer.lineno result end def _reduce_490(val, _values, result) list, * = val result = list.dup << new_symbol_list_entry(val) result end def _reduce_491(val, _values, result) result = s(:array).line lexer.lineno result end def _reduce_492(val, _values, result) result = val[1] result end def _reduce_493(val, _values, result) result = s(:array).line lexer.lineno # FIX result end def _reduce_494(val, _values, result) result = val[1] result end def _reduce_495(val, _values, result) result = new_qword_list result end def _reduce_496(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_497(val, _values, result) result = new_qsym_list result end def _reduce_498(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_499(val, _values, result) result = s(:str, "").line lexer.lineno result end def _reduce_500(val, _values, result) v1, v2 = val result = literal_concat v1, v2 result end def _reduce_501(val, _values, result) result = nil 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 = new_string val result end def _reduce_506(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = EXPR_BEG result end def _reduce_507(val, _values, result) _, strterm, str = val lexer.lex_strterm = strterm result = s(:evstr, str).line str.line result end def _reduce_508(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_509(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_510(val, _values, result) result = s(:gvar, val[0].to_sym).line lexer.lineno result end def _reduce_511(val, _values, result) result = s(:ivar, val[0].to_sym).line lexer.lineno result end def _reduce_512(val, _values, result) result = s(:cvar, val[0].to_sym).line lexer.lineno result end # reduce 513 omitted def _reduce_514(val, _values, result) lexer.lex_state = EXPR_END result = val[1].to_sym result end def _reduce_515(val, _values, result) result = val[0].to_sym result end # reduce 516 omitted # reduce 517 omitted # reduce 518 omitted # reduce 519 omitted def _reduce_520(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 521 omitted def _reduce_522(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 523 omitted # reduce 524 omitted # reduce 525 omitted # reduce 526 omitted # reduce 527 omitted # reduce 528 omitted # reduce 529 omitted # reduce 530 omitted # reduce 531 omitted def _reduce_532(val, _values, result) result = s(:nil).line lexer.lineno result end def _reduce_533(val, _values, result) result = s(:self).line lexer.lineno result end def _reduce_534(val, _values, result) result = s(:true).line lexer.lineno result end def _reduce_535(val, _values, result) result = s(:false).line lexer.lineno result end def _reduce_536(val, _values, result) result = s(:str, self.file).line lexer.lineno result end def _reduce_537(val, _values, result) result = s(:lit, lexer.lineno).line lexer.lineno result end def _reduce_538(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_539(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_540(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_541(val, _values, result) result = self.assignable val[0] result end def _reduce_542(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_543(val, _values, result) result = s(:nth_ref, val[0]).line lexer.lineno result end def _reduce_544(val, _values, result) result = s(:back_ref, val[0]).line lexer.lineno result end def _reduce_545(val, _values, result) lexer.lex_state = EXPR_BEG lexer.command_start = true result end def _reduce_546(val, _values, result) result = val[2] result end def _reduce_547(val, _values, result) result = nil result end def _reduce_548(val, _values, result) result = val[1] self.lexer.lex_state = EXPR_BEG self.lexer.command_start = true result end 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_551(val, _values, result) result = args val result end def _reduce_552(val, _values, result) result = args val result end def _reduce_553(val, _values, result) result = args val result end # reduce 554 omitted def _reduce_555(val, _values, result) result = val[1] result end def _reduce_556(val, _values, result) result = nil result end def _reduce_557(val, _values, result) result = args val result end def _reduce_558(val, _values, result) result = args val 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) yyerror "formal argument cannot be a constant" result end def _reduce_573(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_574(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_575(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 576 omitted def _reduce_577(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 578 omitted # reduce 579 omitted def _reduce_580(val, _values, result) result = val[1] result end def _reduce_581(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_582(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 583 omitted def _reduce_584(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_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 end 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 end 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 end # reduce 588 omitted def _reduce_589(val, _values, result) list, _, item = val result = list << item.last result end # reduce 590 omitted def _reduce_591(val, _values, result) result = args val result end # reduce 592 omitted # reduce 593 omitted def _reduce_594(val, _values, result) name = val[1].to_sym self.assignable name result = :"**#{name}" result end def _reduce_595(val, _values, result) result = :"**" result end def _reduce_596(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_597(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_598(val, _values, result) optblk, = val result = s(:block, optblk).line optblk.line result end def _reduce_599(val, _values, result) optarg, _, optblk = val result = optarg result << optblk result end def _reduce_600(val, _values, result) opt, = val result = s(:block, opt).line opt.line result end def _reduce_601(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 602 omitted # reduce 603 omitted 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_605(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 606 omitted # reduce 607 omitted def _reduce_608(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_609(val, _values, result) result = val[1] result end def _reduce_610(val, _values, result) result = nil result end # reduce 611 omitted def _reduce_612(val, _values, result) lexer.lex_state = EXPR_BEG result end 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_614(val, _values, result) result = s(:array).line lexer.lineno result end # reduce 615 omitted # 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_618(val, _values, result) v1, _, v2 = val result = s(:array, v1, v2).line v1.line result end 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_620(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value).line sym.line result end def _reduce_621(val, _values, result) _, arg = val line = arg.line result = s(:array, s(:kwsplat, arg).line(line)).line line result end # reduce 622 omitted # reduce 623 omitted # 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 def _reduce_647(val, _values, result) yyerrok result end # reduce 648 omitted # reduce 649 omitted def _reduce_650(val, _values, result) yyerrok result end def _reduce_651(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby25Parser ruby-ruby-parser-3.15.1/lib/ruby25_parser.y000066400000000000000000002572311400133573100205060ustar00rootroot00000000000000# -*- racc -*- class Ruby25Parser 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 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: ** ruby-ruby-parser-3.15.1/lib/ruby26_parser.rb000066400000000000000000010102641400133573100206340ustar00rootroot00000000000000# # 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 ruby-ruby-parser-3.15.1/lib/ruby26_parser.y000066400000000000000000002600471400133573100205060ustar00rootroot00000000000000# -*- 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: ** ruby-ruby-parser-3.15.1/lib/ruby27_parser.rb000066400000000000000000010102641400133573100206350ustar00rootroot00000000000000# # 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 ruby-ruby-parser-3.15.1/lib/ruby27_parser.y000066400000000000000000002600471400133573100205070ustar00rootroot00000000000000# -*- 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: ** ruby-ruby-parser-3.15.1/lib/ruby_lexer.rb000066400000000000000000001153101400133573100203040ustar00rootroot00000000000000# frozen_string_literal: true # encoding: UTF-8 $DEBUG = true if ENV["DEBUG"] class RubyLexer # :stopdoc: EOF = :eof_haha! ESCAPES = { "a" => "\007", "b" => "\010", "e" => "\033", "f" => "\f", "n" => "\n", "r" => "\r", "s" => " ", "t" => "\t", "v" => "\13", "\\" => '\\', "\n" => "", "C-\?" => 127.chr, "c\?" => 127.chr, } HAS_ENC = "".respond_to? :encoding TOKENS = { "!" => :tBANG, "!=" => :tNEQ, # "!@" => :tUBANG, "!~" => :tNMATCH, "," => :tCOMMA, ".." => :tDOT2, "..." => :tDOT3, "=" => :tEQL, "==" => :tEQ, "===" => :tEQQ, "=>" => :tASSOC, "=~" => :tMATCH, "->" => :tLAMBDA, } @@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 :cmd_state # temporary--ivar to avoid passing everywhere attr_accessor :last_state attr_accessor :cond attr_accessor :extra_lineno ## # Additional context surrounding tokens that both the lexer and # grammar use. attr_accessor :lex_strterm attr_accessor :lpar_beg attr_accessor :paren_nest attr_accessor :parser # HACK for very end of lexer... *sigh* attr_accessor :space_seen attr_accessor :string_buffer attr_accessor :string_nest # Last token read via next_token. attr_accessor :token attr_writer :comments def initialize _ = nil @lex_state = nil # remove one warning under $DEBUG self.lex_state = EXPR_NONE 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." end def arg_state 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 def check re ss.check re end def comments # TODO: remove this... maybe comment_string + attr_accessor c = @comments.join @comments.clear 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 end 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 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 ? "[ \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 " rb_compile_error err_msg if end_of_stream? 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, func] # TODO: calculate squiggle width at lex? end self.string_buffer = [] if expand then case 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 << "#" end begin c = tokadd_string func, eol, nil rb_compile_error err_msg if c == RubyLexer::EOF if c != eol then return :tSTRING_CONTENT, string_buffer.join else string_buffer << scan(/\n/) end rb_compile_error err_msg if end_of_stream? end until check(eos_re) else until check(eos_re) do string_buffer << scan(/.*(\n|\z)/) rb_compile_error err_msg if end_of_stream? end end self.lex_strterm = [:heredoc, eos, func, last_line] string_content = begin s = string_buffer.join s.b.force_encoding Encoding::UTF_8 end return :tSTRING_CONTENT, string_content end def heredoc_identifier # TODO: remove / rewrite term, func = nil, STR_FUNC_BORING self.string_buffer = [] 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? # TODO: this seems wrong func |= STR_FUNC_ICNTNT if ss[1] == "~" func |= case term when "\'" then STR_SQUOTE when '"' then STR_DQUOTE else STR_XQUOTE end string_buffer << ss[3] when scan(/[#{heredoc_indent_mods}]?([\'\"\`])(?!\1*\Z)/) then rb_compile_error "unterminated here document identifier" when scan(/([#{heredoc_indent_mods}]?)(#{IDENT_CHAR}+)/) then term = '"' func |= STR_DQUOTE unless ss[1].empty? then func |= STR_FUNC_INDENT func |= STR_FUNC_ICNTNT if ss[1] == "~" end string_buffer << ss[2] else return nil end if scan(/.*\n/) then # TODO: think about storing off the char range instead line = matched else line = nil end self.lex_strterm = [:heredoc, string_buffer.join, func, line] if term == "`" then result nil, :tXSTRING_BEG, "`" else result nil, :tSTRING_BEG, "\"" end end def in_fname? # REFACTOR lex_state =~ EXPR_FNAME end def int_with_base base rb_compile_error "Invalid numeric format" if matched =~ /__/ text = matched case 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_NUM, :tINTEGER, text.to_i(base)) end end def is_after_operator? lex_state =~ EXPR_FNAME|EXPR_DOT end def is_arg? lex_state =~ EXPR_ARG_ANY end def is_beg? lex_state =~ EXPR_BEG_ANY || lex_state == EXPR_LAB # yes, == EXPR_LAB end def is_end? lex_state =~ EXPR_END_ANY end def is_label_possible? (lex_state =~ EXPR_LABEL|EXPR_ENDFN && !cmd_state) || is_arg? end def is_label_suffix? check(/:(?!:)/) end def is_space_arg? c = "x" 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 def not_end? 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 lex_state =~ EXPR_BEG|EXPR_MID then :tAMPER else :tAMPER2 end return result(:arg_state, token, "&") end def process_backref text token = ss[1].to_sym # TODO: can't do lineno hack w/ symbol result EXPR_END, :tBACK_REF, token end def process_begin text @comments << matched unless scan(/.*?\n=end( |\t|\f)*[^\n]*(\n|\z)/m) then @comments.clear rb_compile_error("embedded document meets end of file") end @comments << matched self.lineno += matched.count("\n") nil # TODO end def process_brace_close text case matched when "}" then self.brace_nest -= 1 return :tSTRING_DEND, matched if brace_nest < 0 end # 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 = ruby24minus? ? EXPR_ENDARG : EXPR_END return :tRBRACK, matched when ")" then self.paren_nest -= 1 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 end case when scan(/\'/) then string STR_SSYM when scan(/\"/) then string STR_DSYM end result EXPR_FNAME, :tSYMBEG, text end def process_colon2 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_float text rb_compile_error "Invalid numeric format" if text =~ /__/ case 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_NUM, :tFLOAT, text.to_f end end def process_gvar text text.lineno = self.lineno result EXPR_END, :tGVAR, text end def process_gvar_oddity text 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 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 (lex_state !~ EXPR_DOT|EXPR_CLASS && !is_end? && (!is_arg? || lex_state =~ EXPR_LABELED || space_seen)) then tok = self.heredoc_identifier return tok if tok end 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 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(/^ +$/, "") end return nil if end_of_stream? end self.lineno += 1 unless hit # Replace a string of newlines with a single one self.lineno += matched.lines.to_a.size if scan(/\n+/) 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? ss.pos -= 1 return unless check(/\.\./) end self.command_start = true 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 end def process_paren text 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 :tLPAREN2 # plain "(" in parse.y end self.paren_nest += 1 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 parse_quote if is_space_arg?(check(/\s/)) || (lex_state =~ EXPR_FITEM && check(/s/)) return result :arg_state, :tPERCENT, "%" end def process_plus_minus text sign = matched utype, type = if sign == "+" then [:tUPLUS, :tPLUS] else [:tUMINUS, :tMINUS] end if is_after_operator? then if scan(/@/) then return result(EXPR_ARG, utype, "#{sign}@") else return result(EXPR_ARG, type, sign) end end return result(EXPR_BEG, :tOP_ASGN, sign) if scan(/\=/) 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 end return result EXPR_BEG, utype, sign end result EXPR_BEG, type, sign end def process_questionmark text if is_end? then return result EXPR_BEG, :tEH, "?" end if end_of_stream? then rb_compile_error "incomplete character syntax: parsed #{text.inspect}" end if check(/\s|\v/) then unless is_arg? then c2 = { " " => "s", "\n" => "n", "\t" => "t", "\v" => "v", "\r" => "r", "\f" => "f" }[matched] if c2 then warning("invalid character syntax; use ?\\" + c2) end end # ternary return result EXPR_BEG, :tEH, "?" elsif check(/\w(?=\w)/) then # ternary, also return result EXPR_BEG, :tEH, "?" end c = if scan(/\\/) then self.read_escape else getch 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 if is_beg? then string STR_REGEXP return result(nil, :tREGEXP_BEG, "/") end if scan(/\=/) then return result(EXPR_BEG, :tOP_ASGN, "/") end if is_arg? && space_seen then unless scan(/\s/) then arg_ambiguous string STR_REGEXP, "/" return result(nil, :tREGEXP_BEG, "/") end end return result(:arg_state, :tDIVIDE, "/") end def process_square_bracket text self.paren_nest += 1 token = nil 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, "[]=" when scan(/\]/) then self.paren_nest -= 1 # HACK? I dunno, or bug in MRI return result EXPR_ARG, :tAREF, "[]" else rb_compile_error "unexpected '['" end elsif is_beg? then token = :tLBRACK elsif is_arg? && (space_seen || lex_state =~ EXPR_LABELED) then token = :tLBRACK else token = :tLBRACK2 end cond.push false cmdarg.push false result EXPR_PAR, token, text end 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 token_type, c = token # 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 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 return token end def process_symbol text symbol = possibly_escape_string text, /^:\"/ # stupid emacs 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(/[\!\?](?!=)/) tok_id = case when token =~ /[!?]$/ then :tFID when lex_state =~ EXPR_FNAME && scan(/=(?:(?![~>=])|(?==>))/) then # ident=, not =~ => == or followed by => # TODO test lexing of a=>b vs a==>b token << matched :tIDENTIFIER when token =~ /^[A-Z]/ then :tCONSTANT else :tIDENTIFIER end if is_label_possible? and is_label_suffix? then scan(/:/) # TODO: propagate the lineno to ALL results return result EXPR_LAB, :tLABEL, [token, self.lineno] end # TODO: mb == ENC_CODERANGE_7BIT && lex_state !~ EXPR_DOT if lex_state !~ EXPR_DOT then # See if it is a reserved word. keyword = RubyParserStuff::Keyword.keyword token return process_token_keyword keyword if keyword end # 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 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... return result(state, tok_id, token) end def process_token_keyword keyword # matching MIDDLE of parse_ident in compare/parse23.y:8046 state = lex_state self.lex_state = keyword.state value = [token, self.lineno] return result(lex_state, keyword.id0, value) if state =~ EXPR_FNAME self.command_start = true if lex_state =~ EXPR_BEG case when keyword.id0 == :kDO then # parse26.y line 7591 case 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 lex_state, :kDO_COND, value when cmdarg.is_in_state && state != EXPR_CMDARG then result lex_state, :kDO_BLOCK, value else result lex_state, :kDO, value end when state =~ EXPR_PAD then result lex_state, keyword.id0, value when keyword.id0 != keyword.id1 then result EXPR_PAR, keyword.id1, value else result lex_state, keyword.id1, value end end def process_underscore text ss.unscan # put back "_" if beginning_of_line? && scan(/\__END__(\r?\n|\Z)/) then [RubyLexer::EOF, RubyLexer::EOF] elsif scan(/#{IDENT_CHAR}+/) then process_token matched end end def rb_compile_error msg msg += ". near line #{self.lineno}: #{ss.rest[/^.*/].inspect}" raise RubyParser::SyntaxError, msg end def read_escape # TODO: remove / rewrite case when scan(/\\/) then # Backslash '\\' when scan(/n/) then # newline self.extra_lineno -= 1 "\n" when scan(/t/) then # horizontal tab "\t" when scan(/r/) then # carriage-return "\r" when scan(/f/) then # form-feed "\f" when scan(/v/) then # vertical tab "\13" when scan(/a/) then # alarm(bell) "\007" when scan(/e/) then # escape "\033" when scan(/b/) then # backspace "\010" when scan(/s/) then # space " " when scan(/[0-7]{1,3}/) then # octal constant (matched.to_i(8) & 0xFF).chr.force_encoding Encoding::UTF_8 when scan(/x([0-9a-fA-F]{1,2})/) then # hex constant # 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 c when scan(/M-(.)/) then c = ss[1] c[0] = (c[0].ord | 0x80).chr c when check(/(C-|c)\\[\\MCc]/) then scan(/(C-|c)\\/) # eat it 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 c = ss[2] c[0] = (c[0].ord & 0x9f).chr c when scan(/^[89]/i) then # bad octal or hex... MRI ignores them :( matched 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 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 good, bad = [], [] if scan(/[a-z]+/) then good, bad = matched.split(//).partition { |s| s =~ /^[ixmonesu]$/ } end unless bad.empty? then rb_compile_error("unknown regexp option%s - %s" % [(bad.size > 1 ? "s" : ""), bad.join.inspect]) end return good.join end def reset self.brace_nest = 0 self.command_start = true self.comments = [] self.lex_state = EXPR_NONE self.lex_strterm = nil self.lineno = 1 self.lpar_beg = nil self.paren_nest = 0 self.space_seen = false self.string_nest = 0 self.token = nil self.extra_lineno = 0 self.cond.reset self.cmdarg.reset end 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 ruby22_label? ruby22plus? and is_label_possible? end def ruby22plus? parser.class.version >= 22 end def ruby23plus? parser.class.version >= 23 end def ruby24minus? parser.class.version <= 24 end def scan re ss.scan re end def scanner_class # TODO: design this out of oedipus_lex. or something. RPStringScanner end def space_vs_beginning space_type, beg_type, fallback if is_space_arg? check(/./m) then warning "`**' interpreted as argument prefix" space_type elsif is_beg? then beg_type else # TODO: warn_balanced("**", "argument prefix"); fallback end end def string type, beg = matched, nnd = "\0" self.lex_strterm = [:strterm, type, beg, nnd] end def tokadd_escape term # TODO: rewrite / remove case when scan(/\\\n/) then # just ignore when scan(/\\([0-7]{1,3}|x[0-9a-fA-F]{1,2})/) then self.string_buffer << matched when scan(/\\([MC]-|c)(?=\\)/) then self.string_buffer << matched self.tokadd_escape term when scan(/\\([MC]-|c)(.)/) then self.string_buffer << matched when scan(/\\[McCx]/) then rb_compile_error "Invalid escape character syntax" when scan(/\\(.)/m) then chr = ss[1] 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 << chr # HACK? this is such a rat's nest end else rb_compile_error "Invalid escape character syntax" end end def tokadd_string(func, term, paren) # TODO: rewrite / remove 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 = 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 scan(term_re) then if self.string_nest == 0 then ss.pos -= 1 break else self.string_nest -= 1 end 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 ss.pos -= 1 break when expand && scan(/#(?!\n)/) then # do nothing when check(/\\/) then case when qwords && scan(/\\\n/) then string_buffer << "\n" next when qwords && scan(/\\\s/) then c = " " when expand && scan(/\\\n/) then next when regexp && check(/\\/) then self.tokadd_escape term next when expand && scan(/\\/) then c = self.read_escape when scan(/\\\n/) then # do nothing when scan(/\\\\/) then string_buffer << '\\' if escape c = '\\' when scan(/\\/) then unless scan(term_re) || paren.nil? || scan(paren_re) then string_buffer << "\\" end else handled = false end # inner /\\/ case else handled = false end # top case unless handled then 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 /[^#{t}#{x}\#\\\s]+|./ # |. to pick up whatever else /[^#{t}#{x}\#\\]+|./ end scan re c = matched rb_compile_error "symbol cannot contain '\\0'" if symbol && c =~ /\0/ end # unless handled c ||= matched string_buffer << c end # until c ||= matched c = RubyLexer::EOF if end_of_stream? return c end def unescape s r = ESCAPES[s] self.extra_lineno += 1 if s == "\n" # eg backslash newline strings self.extra_lineno -= 1 if r && s == "n" # literal \n, not newline return r if r x = case s when /^[0-7]{1,3}/ then ($&.to_i(8) & 0xFF).chr when /^x([0-9a-fA-F]{1,2})/ then $1.to_i(16).chr when /^M-(.)/ then ($1[0].ord | 0x80).chr when /^(C-|c)(.)/ then ($2[0].ord & 0x9f).chr when /^[89a-f]/i then # bad octal or hex... ignore? that's what MRI does :( s when /^[McCx0-9]/ then rb_compile_error("Invalid escape character syntax") 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 end def warning s # do nothing for now end def was_label? @was_label = ruby22_label? true end 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 include Values end include State::Values end require "ruby_lexer.rex" if ENV["RP_LINENO_DEBUG"] then class RubyLexer 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]] end end end ruby-ruby-parser-3.15.1/lib/ruby_lexer.rex000066400000000000000000000174431400133573100205070ustar00rootroot00000000000000# encoding: UTF-8 # # lexical scanner definition for ruby class RubyLexer macro 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 INT_OCT /[+]?0o?[0-7_]+(ri|r|i)?|0o(ri|r|i)?/i FLOAT /[+]?\d[\d_]*\.[\d_]+(e[+-]?[\d_]+)?(?:(ri|r|i)\b)?|[+]?[\d_]+e[+-]?[\d_]+(?:(ri|r|i)\b)?/i INT_DEC2 /[+]?\d[0-9_]*(?![e])((ri|r|i)\b)?/i NUM_BAD /[+]?0[xbd]\b/i INT_OCT_BAD /[+]?0o?[0-7_]*[89]/i FLOAT_BAD /[+]?\d[\d_]*_(e|\.)/i start return process_string if lex_strterm self.cmd_state = self.command_start self.command_start = false self.space_seen = false # TODO: rename token_seen? self.last_state = lex_state rule # [:state] pattern [actions] # \s - \n + \v /[\ \t\r\f\v]/ { self.space_seen = true; next } /\n|\#/ process_newline_or_comment /[\]\)\}]/ process_brace_close : /\!/ | is_after_operator? /\!\@/ { result EXPR_ARG, :tUBANG, "!@" } | /\![=~]?/ { result :arg_state, TOKENS[text], text } : /\./ | /\.\.\.?/ { result EXPR_BEG, TOKENS[text], text } | /\.\d/ { rb_compile_error "no . floating literal anymore put 0 before dot" } | /\./ { self.lex_state = EXPR_BEG; result EXPR_DOT, :tDOT, "." } /\(/ process_paren /\,/ { result EXPR_PAR, TOKENS[text], text } : /=/ | /\=\=\=|\=\=|\=~|\=>|\=(?!begin\b)/ { result arg_state, TOKENS[text], text } | bol? /\=begin(?=\s)/ process_begin | /\=(?=begin\b)/ { result arg_state, TOKENS[text], text } ruby22_label? /\"#{SIMPLE_STRING}\":/o process_label /\"(#{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" } /\@\@?#{IDENT_CHAR}+/o process_ivar : /:/ | not_end? /:([a-zA-Z_]#{IDENT_CHAR}*(?:[?]|[!](?!=)|=(?==>)|=(?![=>]))?)/o process_symbol | not_end? /\:\"(#{SIMPLE_STRING})\"/o process_symbol | not_end? /\:\'(#{SSTRING})\'/o process_symbol | /\:\:/ process_colon2 | /\:/ process_colon1 /->/ { result EXPR_ENDFN, :tLAMBDA, nil } /[+-]/ process_plus_minus : /[+\d]/ | /#{NUM_BAD}/o { rb_compile_error "Invalid numeric format" } | /#{INT_DEC}/o { int_with_base 10 } | /#{INT_HEX}/o { int_with_base 16 } | /#{INT_BIN}/o { int_with_base 2 } | /#{INT_OCT_BAD}/o { rb_compile_error "Illegal octal digit." } | /#{INT_OCT}/o { int_with_base 8 } | /#{FLOAT_BAD}/o { rb_compile_error "Trailing '_' in number." } | /#{FLOAT}/o process_float | /#{INT_DEC2}/o { int_with_base 10 } | /[0-9]/ { rb_compile_error "Bad number format" } /\[/ process_square_bracket was_label? /\'#{SSTRING}\':?/o process_label_or_string : /\|/ | /\|\|\=/ { 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_brace_open : /\*/ | /\*\*=/ { result EXPR_BEG, :tOP_ASGN, "**" } | /\*\*/ { result(:arg_state, space_vs_beginning(:tDSTAR, :tDSTAR, :tPOW), "**") } | /\*\=/ { 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 EXPR_BEG, :tOP_ASGN, "<<" } | /\<\/ | /\>\=/ { result :arg_state, :tGEQ, ">=" } | /\>\>=/ { result EXPR_BEG, :tOP_ASGN, ">>" } | /\>\>/ { result :arg_state, :tRSHFT, ">>" } | /\>/ { result :arg_state, :tGT, ">" } : /\`/ | 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, "&.") } | /\&/ process_amper /\// process_slash : /\^/ | /\^=/ { result(EXPR_BEG, :tOP_ASGN, "^") } | /\^/ { result(:arg_state, :tCARET, "^") } /\;/ { self.command_start = true; result(EXPR_BEG, :tSEMI, ";") } : /~/ | is_after_operator? /\~@/ { result(:arg_state, :tTILDE, "~") } | /\~/ { result(:arg_state, :tTILDE, "~") } : /\\/ | /\\\r?\n/ { self.lineno += 1; self.space_seen = true; next } | /\\/ { rb_compile_error "bare backslash only allowed before newline" } /\%/ process_percent : /\$/ | /\$_\w+/ process_gvar | /\$_/ process_gvar | /\$[~*$?!@\/\\;,.=:<>\"]|\$-\w?/ process_gvar | in_fname? /\$([\&\`\'\+])/ process_gvar | /\$([\&\`\'\+])/ process_backref | in_fname? /\$([1-9]\d*)/ process_gvar | /\$([1-9]\d*)/ process_nthref | /\$0/ process_gvar | /\$#{IDENT_CHAR}+/ process_gvar | /\$\W|\$\z/ process_gvar_oddity /\_/ process_underscore /#{IDENT_CHAR}+/o process_token /\004|\032|\000|\Z/ { [RubyLexer::EOF, RubyLexer::EOF] } /./ { rb_compile_error "Invalid char #{text.inspect} in expression" } end ruby-ruby-parser-3.15.1/lib/ruby_lexer.rex.rb000066400000000000000000000317061400133573100211070ustar00rootroot00000000000000# encoding: UTF-8 #-- # This file is automatically generated. Do not modify it. # 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' # :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 INT_OCT = /[+]?0o?[0-7_]+(ri|r|i)?|0o(ri|r|i)?/i FLOAT = /[+]?\d[\d_]*\.[\d_]+(e[+-]?[\d_]+)?(?:(ri|r|i)\b)?|[+]?[\d_]+e[+-]?[\d_]+(?:(ri|r|i)\b)?/i INT_DEC2 = /[+]?\d[0-9_]*(?![e])((ri|r|i)\b)?/i 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 do_parse end ## # Read in and parse the file at +path+. def parse_file path self.filename = path open path do |f| parse f.read 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.cmd_state = self.command_start self.command_start = false self.space_seen = false # TODO: rename token_seen? self.last_state = lex_state token = nil until ss.eos? or token do token = case state when nil then case when ss.skip(/[\ \t\r\f\v]/) then action { self.space_seen = true; next } when text = ss.scan(/\n|\#/) then process_newline_or_comment text when text = ss.scan(/[\]\)\}]/) then process_brace_close text when ss.match?(/\!/) then case 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 } when ss.skip(/\.\d/) then action { rb_compile_error "no . floating literal anymore put 0 before dot" } when ss.skip(/\./) then 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_PAR, TOKENS[text], text } when ss.match?(/=/) then case when text = ss.scan(/\=\=\=|\=\=|\=~|\=>|\=(?!begin\b)/) then action { result arg_state, TOKENS[text], text } when bol? && (text = ss.scan(/\=begin(?=\s)/)) then process_begin text when text = ss.scan(/\=(?=begin\b)/) then action { result arg_state, TOKENS[text], text } end # group /=/ when ruby22_label? && (text = ss.scan(/\"#{SIMPLE_STRING}\":/o)) then process_label text when text = ss.scan(/\"(#{SIMPLE_STRING})\"/o) then process_simple_string text when text = ss.scan(/\"/) then action { string STR_DQUOTE; result nil, :tSTRING_BEG, text } when text = ss.scan(/\@\@?\d/) then action { rb_compile_error "`#{text}` is not allowed as a variable name" } when text = ss.scan(/\@\@?#{IDENT_CHAR}+/o) then process_ivar text when ss.match?(/:/) then case when not_end? && (text = ss.scan(/:([a-zA-Z_]#{IDENT_CHAR}*(?:[?]|[!](?!=)|=(?==>)|=(?![=>]))?)/o)) then process_symbol text when not_end? && (text = ss.scan(/\:\"(#{SIMPLE_STRING})\"/o)) then process_symbol text when not_end? && (text = ss.scan(/\:\'(#{SSTRING})\'/o)) then process_symbol text when text = ss.scan(/\:\:/) then process_colon2 text when text = ss.scan(/\:/) then process_colon1 text end # group /:/ when ss.skip(/->/) then action { result EXPR_ENDFN, :tLAMBDA, nil } when text = ss.scan(/[+-]/) then process_plus_minus text when ss.match?(/[+\d]/) then case when ss.skip(/#{NUM_BAD}/o) then action { rb_compile_error "Invalid numeric format" } when ss.skip(/#{INT_DEC}/o) then action { int_with_base 10 } when ss.skip(/#{INT_HEX}/o) then action { int_with_base 16 } when ss.skip(/#{INT_BIN}/o) then action { int_with_base 2 } when ss.skip(/#{INT_OCT_BAD}/o) then action { rb_compile_error "Illegal octal digit." } when ss.skip(/#{INT_OCT}/o) then action { int_with_base 8 } when ss.skip(/#{FLOAT_BAD}/o) then action { rb_compile_error "Trailing '_' in number." } when text = ss.scan(/#{FLOAT}/o) then process_float text when ss.skip(/#{INT_DEC2}/o) then action { int_with_base 10 } when ss.skip(/[0-9]/) then action { rb_compile_error "Bad number format" } end # group /[+\d]/ when text = ss.scan(/\[/) then process_square_bracket text when was_label? && (text = ss.scan(/\'#{SSTRING}\':?/o)) then process_label_or_string text when ss.match?(/\|/) then case when ss.skip(/\|\|\=/) then action { result EXPR_BEG, :tOP_ASGN, "||" } when ss.skip(/\|\|/) then action { result EXPR_BEG, :tOROP, "||" } when ss.skip(/\|\=/) then action { result EXPR_BEG, :tOP_ASGN, "|" } when ss.skip(/\|/) then action { state = is_after_operator? ? EXPR_ARG : EXPR_PAR; result state, :tPIPE, "|" } end # group /\|/ when text = ss.scan(/\{/) then process_brace_open text when ss.match?(/\*/) then case when ss.skip(/\*\*=/) then 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, "*") } when ss.skip(/\*/) then action { result(:arg_state, space_vs_beginning(:tSTAR, :tSTAR, :tSTAR2), "*") } end # group /\*/ when ss.match?(//) then action { result :arg_state, :tCMP, "<=>" } when ss.skip(/\<\=/) then action { result :arg_state, :tLEQ, "<=" } when ss.skip(/\<\<\=/) then action { result EXPR_BEG, :tOP_ASGN, "<<" } when text = ss.scan(/\<\/) then case when ss.skip(/\>\=/) then action { result :arg_state, :tGEQ, ">=" } when ss.skip(/\>\>=/) then action { result EXPR_BEG, :tOP_ASGN, ">>" } when ss.skip(/\>\>/) then action { result :arg_state, :tRSHFT, ">>" } when ss.skip(/\>/) then action { result :arg_state, :tGT, ">" } end # group />/ when ss.match?(/\`/) then case when expr_fname? && (ss.skip(/\`/)) then action { result(EXPR_END, :tBACK_REF2, "`") } when expr_dot? && (ss.skip(/\`/)) then action { result((cmd_state ? EXPR_CMDARG : EXPR_ARG), :tBACK_REF2, "`") } when ss.skip(/\`/) then action { string STR_XQUOTE, '`'; result(nil, :tXSTRING_BEG, "`") } end # group /\`/ when text = ss.scan(/\?/) then process_questionmark text when ss.match?(/&/) then case when ss.skip(/\&\&\=/) then action { result(EXPR_BEG, :tOP_ASGN, "&&") } when ss.skip(/\&\&/) then action { result(EXPR_BEG, :tANDOP, "&&") } when ss.skip(/\&\=/) then action { result(EXPR_BEG, :tOP_ASGN, "&" ) } when ss.skip(/\&\./) then action { result(EXPR_DOT, :tLONELY, "&.") } when text = ss.scan(/\&/) then process_amper text end # group /&/ when text = ss.scan(/\//) then process_slash text when ss.match?(/\^/) then case when ss.skip(/\^=/) then 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, ";") } when ss.match?(/~/) then case when is_after_operator? && (ss.skip(/\~@/)) then action { result(:arg_state, :tTILDE, "~") } when ss.skip(/\~/) then action { result(:arg_state, :tTILDE, "~") } end # group /~/ when ss.match?(/\\/) then case when ss.skip(/\\\r?\n/) then action { self.lineno += 1; self.space_seen = true; next } when ss.skip(/\\/) then action { rb_compile_error "bare backslash only allowed before newline" } end # group /\\/ when text = ss.scan(/\%/) then process_percent text when ss.match?(/\$/) then case when text = ss.scan(/\$_\w+/) then process_gvar text when text = ss.scan(/\$_/) then process_gvar text when text = ss.scan(/\$[~*$?!@\/\\;,.=:<>\"]|\$-\w?/) then process_gvar text when in_fname? && (text = ss.scan(/\$([\&\`\'\+])/)) then process_gvar text when text = ss.scan(/\$([\&\`\'\+])/) then process_backref text when in_fname? && (text = ss.scan(/\$([1-9]\d*)/)) then process_gvar text when text = ss.scan(/\$([1-9]\d*)/) then 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 end # group /\$/ when text = ss.scan(/\_/) then process_underscore text when text = ss.scan(/#{IDENT_CHAR}+/o) then process_token text when ss.skip(/\004|\032|\000|\Z/) then action { [RubyLexer::EOF, RubyLexer::EOF] } when text = ss.scan(/./) then action { rb_compile_error "Invalid char #{text.inspect} in expression" } else text = ss.string[ss.pos .. -1] raise ScanError, "can not match (#{state.inspect}) at #{location}: '#{text}'" end else raise ScanError, "undefined state at #{location}: '#{state}'" end # token = case state next unless token # allow functions to trigger redo w/ nil end # while raise LexerError, "bad lexical result at #{location}: #{token.inspect}" unless token.nil? || (Array === token && token.size >= 2) # auto-switch state self.state = token.last if token && token.first == :state token end # def next_token end # class ruby-ruby-parser-3.15.1/lib/ruby_parser.rb000066400000000000000000000037431400133573100204670ustar00rootroot00000000000000require "ruby_parser_extras" require "racc/parser" ## # RubyParser is a compound parser that uses all known versions to # attempt to parse. class RubyParser VERSIONS = [] attr_accessor :current 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 klass.new end def self.latest VERSIONS.first.new end def process s, f = "(string)", t = 10 e = nil VERSIONS.each do |klass| self.current = parser = klass.new begin return parser.process s, f, t rescue Racc::ParseError, RubyParser::SyntaxError => exc e ||= exc end end raise e end alias :parse :process def reset # do nothing end class Parser < Racc::Parser include RubyParserStuff def self.inherited x RubyParser::VERSIONS << x end 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::V25, I still have to generate # the old Ruby25Parser and shove it in as V25. 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 end ruby-ruby-parser-3.15.1/lib/ruby_parser.yy000066400000000000000000002641131400133573100205250ustar00rootroot00000000000000# -*- racc -*- #if V==20 class Ruby20Parser #elif V==21 class Ruby21Parser #elif V == 22 class Ruby22Parser #elif V == 23 class Ruby23Parser #elif V == 24 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 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 #if V >= 21 tRATIONAL tIMAGINARY #endif #if V >= 22 tLABEL_END #endif #if V >= 23 tLONELY #endif 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) } #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_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 } #if V >= 24 | 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)) } #endif | 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 #if V >= 20 # TODO: tUBANG dead? | tUBANG #endif 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 } #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]) } | 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]) } #if V == 20 | tUMINUS_NUM tINTEGER tPOW arg { 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 { 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 #endif } | 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) } #if V >= 21 mrhs_arg: mrhs { result = new_masgn_arg val[0] } | arg_value { result = new_masgn_arg val[0], :wrap } #endif 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 #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: 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 } #if V == 20 numeric: tINTEGER | tFLOAT | tUMINUS_NUM tINTEGER =tLOWEST #else numeric: simple_numeric | tUMINUS_NUM simple_numeric #endif { result = -val[1] # TODO: pt_testcase #if V == 20 } | tUMINUS_NUM tFLOAT =tLOWEST { result = -val[1] # TODO: pt_testcase #endif } #if V >= 21 simple_numeric: tINTEGER | tFLOAT | tRATIONAL | tIMAGINARY #endif 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 } #if V >= 22 f_arg_asgn: f_norm_arg f_arg_item: f_arg_asgn | tLPAREN f_margs rparen { result = val[1] } #else f_arg_item: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } #endif 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 } #if V == 20 f_kw: tLABEL arg_value #else f_label: tLABEL f_kw: f_label arg_value #endif { # 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 } #if V >= 21 | f_label { (label, line), = val id = label.to_sym self.env[id] = :lvar result = s(:array, s(:kwarg, id).line(line)).line line } #endif #if V == 20 f_block_kw: tLABEL primary_value #else f_block_kw: f_label primary_value #endif { # 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 } #if V >= 21 | 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 } #endif 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 = :"**" } #if V == 20 f_opt: tIDENTIFIER tEQL arg_value #elif V == 21 f_opt: f_norm_arg tEQL arg_value #else f_opt: f_arg_asgn tEQL arg_value #endif { result = self.assignable val[0], val[2] # TODO: detect duplicate names } #if V == 20 f_block_opt: tIDENTIFIER tEQL primary_value #elif V == 21 f_block_opt: f_norm_arg tEQL primary_value #else f_block_opt: f_arg_asgn tEQL primary_value #endif { 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 } #if V >= 22 | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value).line sym.line } #endif | 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 #if V >= 23 | tLONELY # TODO: rename tANDDOT? #endif 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: ** ruby-ruby-parser-3.15.1/lib/ruby_parser_extras.rb000066400000000000000000001147521400133573100220600ustar00rootroot00000000000000# encoding: ASCII-8BIT # TODO: remove require "sexp" require "ruby_lexer" require "timeout" 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.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[ ].map(&:to_i).each do |n| $good20[n] = n end def debug20 n, v = nil, r = nil raise "not yet #{n} #{v.inspect} => #{r.inspect}" unless $good20[n] end def self.deprecate old, new define_method old do |*args| warn "DEPRECATED: #{old} -> #{new} from #{caller.first}" send new, *args 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 # charlock_holmes against 500k files, with UTF_8 forced # to the top. # # Overwrite this contstant if you need something different. ENCODING_ORDER = [ Encoding::UTF_8, # moved to top to reflect default in 2.0 Encoding::ISO_8859_1, Encoding::ISO_8859_2, Encoding::ISO_8859_9, Encoding::SHIFT_JIS, Encoding::WINDOWS_1252, Encoding::EUC_JP ] if has_enc JUMP_TYPE = [:return, :next, :break, :yield].map { |k| [k, true] }.to_h TAB_WIDTH = 8 def initialize(options = {}) super() v = self.class.name[/2\d/] raise "Bad Class name #{self.class}" unless v self.lexer = RubyLexer.new v && v.to_i self.lexer.parser = self self.in_kwarg = false @env = RubyParserStuff::Environment.new @comments = [] @canonicalize_conditions = true self.reset end def arg_concat node1, node2 # TODO: nuke raise "huh" unless node2 splat = s(:splat, node2) splat.line node2.line node1 << splat end 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 case arg.sexp_type when :args, :block, :array, :call_args then # HACK call_args mismatch result.concat arg.sexp_body 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 << name else result << arg end when :masgn, :block_pass, :hash then # HACK: remove. prolly call_args result << arg else raise "unhandled: #{arg.sexp_type} in #{args.inspect}" end when Symbol then name = arg.to_s.delete("&*") self.env[name.to_sym] = :lvar unless name.empty? result << arg when ",", "|", ";", "(", ")", nil then # ignore else raise "unhandled: #{arg.inspect} in #{args.inspect}" end end 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() 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__)$/ raise SyntaxError, "Can't change the value of #{id}" if id.to_s =~ /^(?:self|nil|true|false|__LINE__|__FILE__)$/ result = case id.to_s when /^@@/ then asgn = in_def || in_single > 0 s((asgn ? :cvasgn : :cvdecl), id) when /^@/ then s(:iasgn, id) when /^\$/ then s(:gasgn, id) when /^[A-Z]/ then s(:cdecl, id) else case self.env[id] when :lvar, :dvar, nil then s(:lasgn, id) else raise "wtf? unknown type: #{self.env[id]}" end end 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? line = [head.line, tail.line].compact.min head = remove_begin(head) head = s(:block, head) unless head.node_type == :block head.line = line 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 case node.sexp_type when :lit then if Regexp === node.last then s(:match, node) else node end when :and then _, lhs, rhs = node s(:and, cond(lhs), cond(rhs)) when :or then _, lhs, rhs = node s(:or, cond(lhs), cond(rhs)) when :dot2 then label = "flip#{node.hash}" env[label] = :lvar _, lhs, rhs = node s(:flip2, lhs, rhs) # TODO: recurse? when :dot3 then label = "flip#{node.hash}" env[label] = :lvar _, lhs, rhs = node s(:flip3, lhs, rhs) else node end.line node.line end def dedent sexp dedent_count = dedent_size sexp 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 s(:str, str).line obj.line else warn "unprocessed sexp %p" % [obj] end else warn "unprocessed: %p" % [obj] end } end 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 string[characters_skipped..-1] end def gettable(id) lineno = id.lineno if id.respond_to? :lineno id = id.to_sym if String === id result = case id.to_s when /^@@/ then s(:cvar, id) when /^@/ then s(:ivar, id) when /^\$/ then s(:gvar, id) when /^[A-Z]/ then s(:const, id) else type = env[id] if type then s(type, id) else new_call(nil, id) end end result.line lineno if lineno raise "identifier #{id.inspect} is not valid" unless result 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 ## # 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.each_line.first(2) header.map! { |s| s.force_encoding "ASCII-8BIT" } if has_enc first = header.first || "" encoding, str = "utf-8", str.b[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 end str end 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* return s(:array, item) unless list list = s(:array, list) unless Sexp === list && list.sexp_type == :array list << item end def list_prepend item, list # TODO: nuke me *sigh* list = s(:array, list) unless Sexp === list && list.sexp_type == :array list.insert 1, item list end def literal_concat head, tail # TODO: ugh. rewrite return tail unless head return head unless tail htype, ttype = head.sexp_type, tail.sexp_type head = s(:dstr, "", head).line head.line if htype == :evstr case ttype when :str then if htype == :str 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 head << tail end when :dstr then if htype == :str then lineno = head.line tail[1] = head.last + tail[1] head = tail head.line = lineno else tail.sexp_type = :array 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).line head.line head.file = f head.line = l end if head.size == 2 and tail.size > 1 and tail[1].sexp_type == :str then head.last << tail[1].last head.sexp_type = :str if head.size == 2 # HACK ? else head.push(tail) end else x = [head, tail] raise "unknown type: #{x.inspect}" end return head end def logical_op type, left, right left = value_expr left if left and left.sexp_type == type and not left.paren then node, rhs = left, nil loop do _, _lhs, rhs = node break unless rhs && rhs.sexp_type == type and not rhs.paren node = rhs end node.pop node << s(type, rhs, right).line(rhs.line) return left end result = s(type, left, right) result.line left.line if left.line result end 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 result = body if resbody then result = s(:rescue) result << body if body res = resbody while res do result << res res = res.resbody(true) end result << elsebody if elsebody result.line = (body || resbody).line end if elsebody and not resbody then warning("else without rescue is useless") result = s(:begin, result).line result.line if result result = block_append(result, elsebody) end if ensurebody lineno = (result || ensurebody).line result = s(:ensure, result, ensurebody).compact.line lineno end result end def new_brace_body args, body, lineno new_iter(nil, args, body).line lineno end def new_call recv, meth, args = nil, call_op = :"." result = case call_op.to_sym when :"." s(:call, recv, meth) when :"&." s(:safe_call, recv, meth) else raise "unknown call operator: `#{type.inspect}`" end # TODO: need a test with f(&b) to produce block_pass # TODO: need a test with f(&b) { } to produce warning if args 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 = recv.line if recv result.line ||= lexer.lineno result end def new_case expr, body, line result = s(:case, expr) while body and body.node_type == :when result << body body = body.delete_at 3 end result[2..-1].each do |node| block = node.block(:delete) node.concat block.sexp_body if block end # else body = nil if body == s(:block) result << body result.line = line result end def new_class val line, path, superclass, body = val[1], val[2], val[3], val[5] result = s(:class, path, superclass) if body then if body.sexp_type == :block then result.push(*body.sexp_body) else result.push body end end result.line = line result.comments = self.comments.pop result end def new_compstmt val result = void_stmts(val.grep(Sexp)[0]) result = remove_begin(result) if result 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, nil_body_line, * = val body ||= s(:nil).line nil_body_line args.line line result = s(:defn, name.to_sym, args).line line if body then if body.sexp_type == :block then result.push(*body.sexp_body) else result.push body end end result.comments = self.comments.pop result end def new_defs val _, 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) else result.push body end end result.line = recv.line result.comments = self.comments.pop 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 result end def new_hash val _, line, assocs = val s(:hash).line(line).concat assocs.values end def new_if c, t, f l = [c.line, t && t.line, f && f.line].compact.min c = cond c c, t, f = c.last, f, t if c.sexp_type == :not and canonicalize_conditions s(:if, c, t, f).line(l) end def new_iter call, args, body body ||= nil args ||= s(:args) args = s(:args, args) if Symbol === args result = s(:iter) result << call if call result << args result << body if body result.line call.line if call unless args == 0 then args.line call.line if call args.sexp_type = :args end 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 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 line, path, body = val[1], val[2], val[4] result = s(:module, path) if body then # REFACTOR? if body.sexp_type == :block then result.push(*body.sexp_body) else result.push body end end result.line = line result.comments = self.comments.pop result end def new_op_asgn val lhs, asgn_op, arg = val[0], val[1].to_sym, val[2] name = gettable(lhs.value).line lhs.line arg = remove_begin(arg) result = case asgn_op # REFACTOR when :"||" then lhs << arg s(:op_asgn_or, name, lhs) when :"&&" then lhs << arg s(:op_asgn_and, name, lhs) else 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 :"." s(:op_asgn2, recv, meth, op.to_sym, arg) when :"&." s(:safe_op_asgn2, recv, meth, op.to_sym, arg) else raise "unknown call operator: `#{type.inspect}`" end result.line = recv.line 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, 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, }[c] raise "unknown regexp option: #{c}" unless v o += v end case node.sexp_type when :str then node.sexp_type = :lit node[1] = if k then Regexp.new(node[1], o, k) else begin Regexp.new(node[1], o) rescue RegexpError => e warn "WA\RNING: #{e.message} for #{node[1].inspect} #{options.inspect}" begin warn "WA\RNING: trying to recover with ENC_UTF8" Regexp.new(node[1], Regexp::ENC_UTF8) rescue RegexpError => e warn "WA\RNING: trying to recover with ENC_NONE" Regexp.new(node[1], Regexp::ENC_NONE) end end end when :dstr then if options =~ /o/ then node.sexp_type = :dregx_once else node.sexp_type = :dregx end node << o if o and o != 0 else node = s(:dregx, "", node).line node.line node.sexp_type = :dregx_once if options =~ /o/ node << o if o and o != 0 end node end def new_resbody cond, body if body && body.sexp_type == :block then body.shift # remove block and splat it in directly 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] result = s(:sclass, recv) if body then if body.sexp_type == :block then result.push(*body.sexp_body) else result.push body end end result.line = val[2] self.in_def = in_def self.in_single = in_single result end def new_string val 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_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).line lexer.lineno self.lexer.fixup_lineno result end def new_symbol_list_entry val _, sym, _ = val sym ||= s(:str, "") line = lexer.lineno case sym.sexp_type when :dstr then sym.sexp_type = :dsym when :str then sym = s(:lit, sym.last.to_sym) else sym = s(:dsym, "", sym || s(:str, "").line(line)) end sym.line line self.lexer.fixup_lineno sym end def new_undef n, m = nil if m then block_append(n, s(:undef, m).line(m.line)) else s(:undef, n).line n.line end end def new_until block, expr, pre new_until_or_while :until, block, expr, pre end def new_until_or_while type, block, expr, pre other = type == :until ? :while : :until line = [block && block.line, expr.line].compact.min block, pre = block.last, false if block && block.sexp_type == :begin expr = cond expr result = unless expr.sexp_type == :not and canonicalize_conditions then s(type, expr, block, pre) else s(other, expr.last, block, pre) end result.line = line result end def new_when cond, body s(:when, cond, body) end def new_while block, expr, pre new_until_or_while :while, block, expr, pre end 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 node.sexp_type = :xstr when :dstr node.sexp_type = :dxstr else node = s(:dxstr, "", node).line node.line end end node end def new_yield args = nil # TODO: raise args.inspect unless [:arglist].include? args.first # HACK raise "write a test 4" if args && args.node_type == :block_pass raise SyntaxError, "Block argument should not be given." if args && args.node_type == :block_pass args ||= s(:arglist).line lexer.lineno args.sexp_type = :arglist if [:call_args, :array].include? args.sexp_type args = s(:arglist, args).line args.line unless args.sexp_type == :arglist 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, false] end 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 end ## # Parse +str+ at path +file+ and return a sexp. Raises # Timeout::Error if it runs for more than +time+ seconds. def process(str, file = "(string)", time = 10) Timeout.timeout time do raise "bad val: #{str.inspect}" unless String === str str = handle_encoding str self.file = file.dup @yydebug = ENV.has_key? "DEBUG" # HACK -- need to get tests passing more than have graceful code self.lexer.ss = RPStringScanner.new str do_parse end end alias parse process def remove_begin node 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 self.last_token_type = nil end def ret_args node if node then raise "write a test 5" if node.sexp_type == :block_pass raise SyntaxError, "block argument should not be given" if node.sexp_type == :block_pass node.sexp_type = :array if node.sexp_type == :call_args node = node.last if node.sexp_type == :array && node.size == 2 # HACK matz wraps ONE of the FOUR splats in a newline to # distinguish. I use paren for now. ugh 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 node end def s(*args) result = Sexp.new(*args) # result.line ||= lexer.lineno if lexer.ss unless ENV["CHECK_LINE_NUMS"] # otherwise... result.file = self.file result end 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 if node.respond_to? :sexp_body= then node.sexp_body = node.sexp_body.map { |n| remove_begin n } else node[1..-1] = node[1..-1].map { |n| remove_begin(n) } end node end def warning s # do nothing for now end 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 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) @name = name @id0, @id1 = id @state = state end end ## # :stopdoc: # # :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 = [ ["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: WORDLIST = Hash[*wordlist.map { |o| [o.name, o] }.flatten] def self.keyword str WORDLIST[str] end end class Environment attr_reader :env, :dyn def [] k self.all[k] end def []= k, v raise "no" if v == true self.current[k] = v end def all idx = @dyn.index(false) || 0 @env[0..idx].reverse.inject { |env, scope| env.merge scope } end def current @env.first end def extend dyn = false @dyn.unshift dyn @env.unshift({}) end def initialize dyn = false @dyn = [] @env = [] self.reset end def reset @dyn.clear @env.clear self.extend end def unextend @dyn.shift @env.shift raise "You went too far unextending env" if @env.empty? end end class StackState attr_reader :name attr_reader :stack attr_accessor :debug def initialize name, debug=false @name = name @stack = [false] @debug = debug end def inspect "StackState(#{@name}, #{@stack.inspect})" end def is_in_state log :is_in_state if debug @stack.last end def lexpop 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 @stack.push false if @stack.empty? log :pop if debug r end def push val @stack.push val log :push if debug end 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 ruby-ruby-parser-3.15.1/metadata.gz.sig000066400000000000000000000004001400133573100177250ustar00rootroot00000000000000KJqp* !-3(c[sr%Hqivа_Sxދ7~Yqܘk y_H׊Qp *ւ|51+l$'^qQgLY1QlwBJ֣\,ⵦA BJ)%U\sGه^(2S,%<(`kk6 Hx7d;,Ôt; =HDnzmq! rgIƆ,ruby-ruby-parser-3.15.1/ruby_parser.gemspec000066400000000000000000000132401400133573100207320ustar00rootroot00000000000000######################################################### # This file has been automatically generated by gem2tgz # ######################################################### # -*- encoding: utf-8 -*- # stub: ruby_parser 3.15.1 ruby lib Gem::Specification.new do |s| s.name = "ruby_parser".freeze 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-----\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, "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 if s.respond_to? :specification_version then s.specification_version = 4 if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then 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, ["< 7", ">= 4.0"]) s.add_runtime_dependency(%q.freeze, ["~> 4.9"]) else 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, ["< 7", ">= 4.0"]) s.add_dependency(%q.freeze, ["~> 4.9"]) end else 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, ["< 7", ">= 4.0"]) s.add_dependency(%q.freeze, ["~> 4.9"]) end end ruby-ruby-parser-3.15.1/test/000077500000000000000000000000001400133573100160075ustar00rootroot00000000000000ruby-ruby-parser-3.15.1/test/test_ruby_lexer.rb000077500000000000000000002660021400133573100215640ustar00rootroot00000000000000require "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= def setup 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 = lex_state end def setup_lexer_class parser_class self.parser_class = parser_class setup_new_parser setup_lexer "blah blah" end 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 yield if block_given? args.each_slice(5) do |token, value, state, paren, brace| assert_next_lexeme token, value, state, paren, brace end refute_lexeme end def assert_lex3 input, exp_sexp, *args, &block args = args.each_slice(3).map { |a, b, c| [a, b, c, nil, nil] }.flatten assert_lex(input, exp_sexp, *args, &block) end def assert_lex_fname name, type, end_state = EXPR_ARG # TODO: swap name/type assert_lex3("def #{name} ", nil, :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, 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] 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 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 end 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 def assert_parse input, exp_sexp assert_equal exp_sexp, processor.class.new.parse(input) end def assert_read_escape expected, 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 @lex.ss.string = input assert_raises RubyParser::SyntaxError do @lex.read_escape 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 refute x, "not empty: #{y.inspect}" end ## Utility Methods: def emulate_string_interpolation lex_strterm = lexer.lex_strterm string_nest = lexer.string_nest brace_nest = lexer.brace_nest lexer.string_nest = 0 lexer.brace_nest = 0 lexer.cond.push false lexer.cmdarg.push false lexer.lex_strterm = nil lexer.lex_state = EXPR_BEG yield 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.string_nest = string_nest lexer.brace_nest = brace_nest lexer.cond.lexpop lexer.cmdarg.lexpop end ## Tests: def test_next_token assert_equal [:tIDENTIFIER, "blah"], @lex.next_token assert_equal [:tIDENTIFIER, "blah"], @lex.next_token assert_nil @lex.next_token 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 assert_read_escape "\\", "\\" assert_read_escape "\n", "n" assert_read_escape "\t", "t" assert_read_escape "\r", "r" assert_read_escape "\f", "f" assert_read_escape "\13", "v" assert_read_escape "\0", "0" assert_read_escape "\07", "a" assert_read_escape "\007", "a" assert_read_escape "\033", "e" assert_read_escape "\377", "377" assert_read_escape "\377", "xff" assert_read_escape "\010", "b" assert_read_escape " ", "s" assert_read_escape "q", "q" # plain vanilla escape assert_read_escape "8", "8" # ugh... mri... WHY?!? assert_read_escape "9", "9" # ugh... mri... WHY?!? assert_read_escape "$", "444" # ugh end def test_read_escape_c assert_read_escape "\030", "C-x" assert_read_escape "\030", "cx" assert_read_escape "\230", 'C-\M-x' assert_read_escape "\230", 'c\M-x' assert_read_escape "\177", "C-?" assert_read_escape "\177", "c?" end def test_read_escape_errors assert_read_escape_bad "" assert_read_escape_bad "M" assert_read_escape_bad "M-" assert_read_escape_bad "Mx" assert_read_escape_bad "Cx" assert_read_escape_bad "C" assert_read_escape_bad "C-" assert_read_escape_bad "c" end def test_read_escape_m assert_read_escape "\370", "M-x" assert_read_escape "\230", 'M-\C-x' 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_NUM) # TODO: verify warning end def test_yylex_ambiguous_uplus assert_lex3("m +3", nil, :tIDENTIFIER, "m", EXPR_CMDARG, :tINTEGER, 3, EXPR_NUM) # TODO: verify warning end def test_yylex_and assert_lex3("&", nil, :tAMPER, "&", EXPR_BEG) end def test_yylex_and2 assert_lex3("&&", nil, :tANDOP, "&&", EXPR_BEG) end def test_yylex_and2_equals 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) 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, "y") end def test_yylex_and_dot_call_newline setup_lexer_class Ruby23Parser assert_lex3("x\n&.y", nil, :tIDENTIFIER, "x", EXPR_CMDARG, :tLONELY, "&.", EXPR_DOT, :tIDENTIFIER, "y") end def test_yylex_and_equals assert_lex3("&=", nil, :tOP_ASGN, "&", EXPR_BEG) end def test_yylex_and_expr self.lex_state = EXPR_ARG assert_lex3("x & y", nil, :tIDENTIFIER, "x", EXPR_CMDARG, :tAMPER2, "&", EXPR_BEG, :tIDENTIFIER, "y", EXPR_ARG) end def test_yylex_and_meth assert_lex_fname "&", :tAMPER2 end def test_yylex_assoc assert_lex3 "=>", nil, :tASSOC, "=>", EXPR_BEG end def test_yylex_back_ref assert_lex3("[$&, $`, $', $+]", nil, :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_NUM, :tPLUS, "+", EXPR_BEG, :tINTEGER, 2, EXPR_NUM) end def test_yylex_backslash_bad refute_lex("1 \\ + 2", :tINTEGER, 1) end def test_yylex_backtick assert_lex3("`ls`", nil, :tXSTRING_BEG, "`", EXPR_BEG, :tSTRING_CONTENT, "ls", EXPR_BEG, :tSTRING_END, "`", EXPR_LIT) end def test_yylex_backtick_cmdarg self.lex_state = EXPR_DOT # \n ensures expr_cmd (TODO: why?) assert_lex3("\n`", nil, :tBACK_REF2, "`", EXPR_CMDARG) end def test_yylex_backtick_dot self.lex_state = EXPR_DOT assert_lex3("a.`(3)", nil, :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 assert_lex3("`", nil, :tBACK_REF2, "`", EXPR_END) end def test_yylex_bad_char refute_lex(" \010 ") end def test_yylex_bang assert_lex3("!", nil, :tBANG, "!", EXPR_BEG) end def test_yylex_bang_equals assert_lex3("!=", nil, :tNEQ, "!=", EXPR_BEG) end def test_yylex_bang_tilde 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) end def test_yylex_carat_equals 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) end def test_yylex_colon2_argh assert_lex3("module X::Y\n c\nend", nil, :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) end def test_yylex_comma assert_lex3(",", nil, :tCOMMA, ",", EXPR_PAR) end def test_yylex_comment assert_lex3("1 # one\n# two\n2", nil, :tINTEGER, 1, EXPR_NUM, :tNL, nil, EXPR_BEG, :tINTEGER, 2, EXPR_NUM) assert_equal "# one\n# two\n", @lex.comments end def test_yylex_comment_begin assert_lex3("=begin\nblah\nblah\n=end\n42", nil, :tINTEGER, 42, EXPR_NUM) assert_equal "=begin\nblah\nblah\n=end\n", @lex.comments end def test_yylex_comment_begin_bad refute_lex("=begin\nblah\nblah\n") assert_equal "", @lex.comments end 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_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 assert_lex3("=begin blah\nblah\n=end\n", nil) assert_equal "=begin blah\nblah\n=end\n", @lex.comments end def test_yylex_comment_end_space_and_text assert_lex3("=begin blah\nblah\n=end blab\n", nil) assert_equal "=begin blah\nblah\n=end blab\n", @lex.comments end def test_yylex_comment_eos 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) end def test_yylex_constant_semi assert_lex3("ArgumentError;", nil, :tCONSTANT, "ArgumentError", EXPR_CMDARG, :tSEMI, ";", EXPR_BEG) end def test_yylex_cvar assert_lex3("@@blah", nil, :tCVAR, "@@blah", EXPR_END) end def test_yylex_cvar_bad assert_raises RubyParser::SyntaxError do assert_lex3("@@1", nil) end end def test_yylex_def_bad_name 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_NUM) end def test_yylex_div_equals assert_lex3("a /= 2", nil, :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_NUM, :kEND, "end", EXPR_END) end def test_yylex_do_block 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_NUM, :kEND, "end", EXPR_END) do @lex.cmdarg.push true end end def test_yylex_do_block2 self.lex_state = EXPR_ENDARG assert_lex3("do 42 end", nil, :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_NUM, :kEND, "end", EXPR_END) do @lex.cond.push true end end def test_yylex_dollar_bad e = refute_lex("$%") assert_includes(e.message, "is not allowed as a global variable name") end def test_yylex_dollar_eos assert_lex3("$", nil, "$", "$", EXPR_END) # FIX: wtf is this?!? end def test_yylex_dot # HINT message sends assert_lex3(".", nil, :tDOT, ".", EXPR_DOT) end def test_yylex_dot2 assert_lex3("..", nil, :tDOT2, "..", EXPR_BEG) end def test_yylex_dot3 assert_lex3("...", nil, :tDOT3, "...", EXPR_BEG) end def test_yylex_equals # FIX: this sucks assert_lex3("=", nil, :tEQL, "=", EXPR_BEG) end def test_yylex_equals2 assert_lex3("==", nil, :tEQ, "==", EXPR_BEG) end def test_yylex_equals3 assert_lex3("===", nil, :tEQQ, "===", EXPR_BEG) end def test_yylex_equals_tilde assert_lex3("=~", nil, :tMATCH, "=~", EXPR_BEG) end def test_yylex_float assert_lex3("1.0", nil, :tFLOAT, 1.0, EXPR_NUM) end def test_yylex_float_bad_no_underscores refute_lex "1__0.0" end def test_yylex_float_bad_no_zero_leading refute_lex ".0" end def test_yylex_float_bad_trailing_underscore refute_lex "123_.0" end def test_yylex_float_call assert_lex3("1.0.to_s", nil, :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_NUM) end def test_yylex_float_dot_E_neg assert_lex3("-1.0E10", nil, :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_NUM) end def test_yylex_float_dot_e_neg assert_lex3("-1.0e10", nil, :tUMINUS_NUM, "-", EXPR_BEG, :tFLOAT, 10000000000.0, EXPR_NUM) end def test_yylex_float_e assert_lex3("1e10", nil, :tFLOAT, 10000000000.0, EXPR_NUM) end def test_yylex_float_e_bad_double_e assert_lex3("1e2e3", nil, :tFLOAT, 100, EXPR_NUM, :tIDENTIFIER, "e3", EXPR_END) end def test_yylex_float_e_bad_trailing_underscore refute_lex "123_e10" end def test_yylex_float_e_minus 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_NUM) end def test_yylex_float_e_neg_minus assert_lex3("-1e-10", nil, :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_NUM) end def test_yylex_float_e_plus 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_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_NUM) end def test_yylex_ge assert_lex3("a >= 2", nil, :tIDENTIFIER, "a", EXPR_CMDARG, :tGEQ, ">=", EXPR_BEG, :tINTEGER, 2, EXPR_NUM) end def test_yylex_global assert_lex3("$blah", nil, :tGVAR, "$blah", EXPR_END) end def test_yylex_global_backref self.lex_state = EXPR_FNAME assert_lex3("$`", nil, :tGVAR, "$`", EXPR_END) end def test_yylex_global_dash_nothing assert_lex3("$- ", nil, :tGVAR, "$-", EXPR_END) end def test_yylex_global_dash_something assert_lex3("$-x", nil, :tGVAR, "$-x", EXPR_END) end def test_yylex_global_number self.lex_state = EXPR_FNAME assert_lex3("$1", nil, :tGVAR, "$1", EXPR_END) end def test_yylex_global_number_big self.lex_state = EXPR_FNAME assert_lex3("$1234", nil, :tGVAR, "$1234", EXPR_END) 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_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) end def test_yylex_global_wierd assert_lex3("$__blah", nil, :tGVAR, "$__blah", EXPR_END) end def test_yylex_global_zero 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_NUM) end 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_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_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_hash_colon_double_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_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)), :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, :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 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 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_LIT, :tNL, nil, EXPR_BEG) end def test_yylex_heredoc_double_eos refute_lex("a = <<\"EOF\"\nblah", :tIDENTIFIER, "a", :tEQL, "=", :tSTRING_BEG, "\"") end def test_yylex_heredoc_double_eos_nl refute_lex("a = <<\"EOF\"\nblah\n", :tIDENTIFIER, "a", :tEQL, "=", :tSTRING_BEG, "\"") end def test_yylex_heredoc_double_interp 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, " 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_LIT, :tNL, nil, EXPR_BEG) end def test_yylex_heredoc_none assert_lex3("a = <", :tCMP end def test_yylex_identifier_def__20 setup_lexer_class RubyParser::V20 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_equals3 assert_lex3(":a===b", nil, :tSYMBOL, "a", EXPR_LIT, :tEQQ, "===", EXPR_BEG, :tIDENTIFIER, "b", EXPR_ARG) end def test_yylex_identifier_equals_arrow assert_lex3(":blah==>", nil, :tSYMBOL, "blah=", EXPR_LIT, :tASSOC, "=>", EXPR_BEG) end def test_yylex_identifier_equals_caret assert_lex_fname "^", :tCARET end def test_yylex_identifier_equals_def2 assert_lex_fname "==", :tEQ end def test_yylex_identifier_equals_def__20 setup_lexer_class RubyParser::V20 assert_lex_fname "identifier=", :tIDENTIFIER, EXPR_ENDFN end 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 assert_lex3("y = arg", nil, :tIDENTIFIER, "y", EXPR_CMDARG, :tEQL, "=", EXPR_BEG, :tIDENTIFIER, "arg", EXPR_ARG) end def test_yylex_identifier_equals_or assert_lex_fname "|", :tPIPE end def test_yylex_identifier_equals_slash assert_lex_fname "/", :tDIVIDE end def test_yylex_identifier_equals_tilde self.lex_state = EXPR_FNAME # can only set via parser's defs assert_lex3("identifier=~", nil, :tIDENTIFIER, "identifier", EXPR_ENDFN, :tMATCH, "=~", EXPR_BEG) end def test_yylex_identifier_gt assert_lex_fname ">", :tGT end def test_yylex_identifier_le assert_lex_fname "<=", :tLEQ end def test_yylex_identifier_lt assert_lex_fname "<", :tLT end def test_yylex_identifier_tilde assert_lex_fname "~", :tTILDE end def test_yylex_index assert_lex_fname "[]", :tAREF end def test_yylex_index_equals assert_lex_fname "[]=", :tASET end def test_yylex_integer assert_lex3("42", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_integer_bin assert_lex3("0b101010", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_integer_bin_bad_none refute_lex "0b " end def test_yylex_integer_bin_bad_underscores refute_lex "0b10__01" end def test_yylex_integer_dec assert_lex3("42", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_integer_dec_bad_underscores refute_lex "42__24" end def test_yylex_integer_dec_d assert_lex3("0d42", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_integer_dec_d_bad_none refute_lex "0d" end def test_yylex_integer_dec_d_bad_underscores refute_lex "0d42__24" end def test_yylex_integer_hex assert_lex3 "0x2a", nil, :tINTEGER, 42, EXPR_NUM end def test_yylex_integer_hex_bad_none refute_lex "0x " end def test_yylex_integer_hex_bad_underscores refute_lex "0xab__cd" end def test_yylex_integer_if_modifier assert_lex3("123if", nil, :tINTEGER, 123, EXPR_NUM, :kIF_MOD, "if", EXPR_PAR) end def test_yylex_integer_oct assert_lex3("052", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_integer_oct_O assert_lex3 "0O52", nil, :tINTEGER, 42, EXPR_NUM 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_NUM end def test_yylex_integer_oct_bad_range refute_lex "08" end def test_yylex_integer_oct_bad_range2 refute_lex "08" end def test_yylex_integer_oct_bad_underscores refute_lex "01__23" end def test_yylex_integer_oct_o assert_lex3 "0o52", nil, :tINTEGER, 42, EXPR_NUM 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_NUM end def test_yylex_integer_trailing assert_lex3("1.to_s", nil, :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_NUM) end def test_yylex_integer_underscore_bad refute_lex "4__2" end def test_yylex_integer_zero 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) end def test_yylex_ivar_bad refute_lex "@1" end def test_yylex_ivar_bad_0_length refute_lex "1+@\n", :tINTEGER, 1, :tPLUS, "+", EXPR_NUM end def test_yylex_keyword_expr 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 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) end def test_yylex_lt2 assert_lex3("a << b", nil, :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) end def test_yylex_lt_equals 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_NUM, :tMINUS, "-", EXPR_BEG, :tINTEGER, 2, EXPR_NUM) end def test_yylex_minus_equals assert_lex3("-=", nil, :tOP_ASGN, "-", EXPR_BEG) end def test_yylex_minus_method self.lex_state = EXPR_FNAME assert_lex3("-", nil, :tMINUS, "-", EXPR_ARG) end def test_yylex_minus_unary_method self.lex_state = EXPR_FNAME assert_lex3("-@", nil, :tUMINUS, "-@", EXPR_ARG) end def test_yylex_minus_unary_number assert_lex3("-42", nil, :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_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_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_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 def test_yylex_open_bracket assert_lex3("(", nil, :tLPAREN, "(", EXPR_PAR) end def test_yylex_open_bracket_cmdarg self.lex_state = EXPR_CMDARG assert_lex3(" (", nil, :tLPAREN_ARG, "(", EXPR_PAR) end def test_yylex_open_bracket_exprarg__20 setup_lexer_class RubyParser::V20 self.lex_state = EXPR_ARG assert_lex3(" (", nil, :tLPAREN_ARG, "(", EXPR_PAR) end def test_yylex_open_curly_bracket assert_lex3("{", nil, :tLBRACE, "{", EXPR_PAR) end def test_yylex_open_curly_bracket_arg self.lex_state = EXPR_ARG assert_lex3("m { 3 }", nil, :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) assert_lex3("{ 4 }", nil, :tLBRACE_ARG, "{", EXPR_BEG, :tINTEGER, 4, EXPR_NUM, :tRCURLY, "}", EXPR_END) end def test_yylex_open_square_bracket_arg self.lex_state = EXPR_ARG assert_lex3("m [ 3 ]", nil, :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_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_PAR, :tINTEGER, 3, EXPR_NUM, :tRBRACK, "]", EXPR_END) end def test_yylex_or assert_lex3("|", nil, :tPIPE, "|", EXPR_PAR) end def test_yylex_or2 assert_lex3("||", nil, :tOROP, "||", EXPR_BEG) end def test_yylex_or2_equals assert_lex3("||=", nil, :tOP_ASGN, "||", EXPR_BEG) end def test_yylex_or_equals 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_NUM) end def test_yylex_percent_equals assert_lex3("a %= 2", nil, :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_NUM, :tPLUS, "+", EXPR_BEG, :tINTEGER, 1, EXPR_NUM) end def test_yylex_plus_equals assert_lex3("+=", nil, :tOP_ASGN, "+", EXPR_BEG) end def test_yylex_plus_method self.lex_state = EXPR_FNAME 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_plus_unary_number assert_lex3("+42", nil, :tINTEGER, 42, EXPR_NUM) end def test_yylex_question_bad_eos refute_lex "?" end def test_yylex_question_eh_a__20 setup_lexer_class RubyParser::V20 assert_lex3("?a", nil, :tSTRING, "a", EXPR_END) end def test_yylex_question_eh_escape_M_escape_C__20 setup_lexer_class RubyParser::V20 assert_lex3("?\\M-\\C-a", nil, :tSTRING, "\M-\C-a", EXPR_END) end 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_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_END) end def test_yylex_rcurly 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_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_LIT) end def test_yylex_regexp_bad refute_lex("/.*/xyz", :tREGEXP_BEG, "/", :tSTRING_CONTENT, ".*") end 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_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_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_LIT) end def test_yylex_regexp_escape_C_bad_dash refute_lex '/regex\\Cx/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_C_bad_dash_eos refute_lex '/regex\\C-/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_C_bad_dash_eos2 refute_lex '/regex\\C-', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_C_bad_eos refute_lex '/regex\\C/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_C_bad_eos2 refute_lex '/regex\\c', :tREGEXP_BEG, "/" end 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_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_LIT) end def test_yylex_regexp_escape_M_bad_dash refute_lex '/regex\\Mx/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_M_bad_dash_eos refute_lex '/regex\\M-/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_M_bad_dash_eos2 refute_lex '/regex\\M-', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_M_bad_eos refute_lex '/regex\\M/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_backslash_slash assert_lex3("/\\//", nil, :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_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_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_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_LIT) end def test_yylex_regexp_escape_bad_eos refute_lex '/regex\\', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_bs assert_lex3("/regex\\\\regex/", nil, :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_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_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_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_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_LIT) end def test_yylex_regexp_escape_hex_bad refute_lex '/regex\\xzxp/', :tREGEXP_BEG, "/" end 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_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_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_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_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_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_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) end def test_yylex_rshft assert_lex3("a >> 2", nil, :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_NUM) end def test_yylex_star assert_lex3("a * ", nil, :tIDENTIFIER, "a", EXPR_CMDARG, :tSTAR2, "*", EXPR_BEG) end def test_yylex_star2 assert_lex3("a ** ", nil, :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) end def test_yylex_star_arg self.lex_state = EXPR_ARG assert_lex3(" *a", nil, :tSTAR, "*", EXPR_BEG, :tIDENTIFIER, "a", EXPR_ARG) end def test_yylex_star_arg_beg self.lex_state = EXPR_BEG assert_lex3("*a", nil, :tSTAR, "*", EXPR_BEG, :tIDENTIFIER, "a", EXPR_ARG) end def test_yylex_star_arg_beg_fname self.lex_state = EXPR_FNAME assert_lex3("*a", nil, :tSTAR2, "*", EXPR_ARG, :tIDENTIFIER, "a", EXPR_ARG) end def test_yylex_star_arg_beg_fname2 self.lex_state = EXPR_FNAME assert_lex3("*a", nil, :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) end def test_yylex_string_bad_eos refute_lex("%", :tSTRING_BEG, "%") end def test_yylex_string_bad_eos_quote refute_lex("%{nest", :tSTRING_BEG, "%}") end def test_yylex_string_double 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) 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_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_LIT) end def test_yylex_string_double_escape_C_question assert_lex3("\"\\C-?\"", nil, :tSTRING, "\177", EXPR_END) end def test_yylex_string_double_escape_M chr = "\341" 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_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_LIT) end def test_yylex_string_double_escape_bs1 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) end def test_yylex_string_double_escape_c assert_lex3("\"\\ca\"", nil, :tSTRING, "\001", EXPR_END) end def test_yylex_string_double_escape_c_backslash 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_LIT) end def test_yylex_string_double_escape_c_question 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) end def test_yylex_string_double_escape_hex 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) end def test_yylex_string_double_escape_octal_fucked 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_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_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) 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_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_LIT) end def test_yylex_string_pct_I_extra_space 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_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_Q_null_wtf? assert_lex3("%Q\0s1 s2\0", nil, :tSTRING_BEG, "%Q\0", EXPR_BEG, :tSTRING_CONTENT, "s1 s2", EXPR_BEG, :tSTRING_END, "\0", EXPR_LIT) end def test_yylex_string_pct_Q_bang assert_lex3("%Q!s1 s2!", nil, :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_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_LIT) end def test_yylex_string_pct_angle assert_lex3("%", nil, :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_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 refute_lex("%w[s1 s2 ", :tQWORDS_BEG, "%w[", :tSTRING_CONTENT, "s1", :tSPACE, nil, :tSTRING_CONTENT, "s2", :tSPACE, nil) end 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_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_LIT) end def test_yylex_string_single 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) 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) 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_string_utf8_bad_encoding_with_escapes str = "\"\\xBADπ\"" exp = "\xBADπ".b assert_lex(str, s(:str, exp), :tSTRING, exp, EXPR_END) 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_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_LIT) end def test_yylex_symbol_single assert_lex3(":'symbol'", nil, :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_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_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) assert_lex3("42 ?", nil, :tINTEGER, 42, EXPR_NUM, :tEH, "?", EXPR_BEG) end def test_yylex_tilde assert_lex3("~", nil, :tTILDE, "~", EXPR_BEG) end def test_yylex_tilde_unary self.lex_state = EXPR_FNAME assert_lex3("~@", nil, :tTILDE, "~", EXPR_ARG) end def test_yylex_uminus assert_lex3("-blah", nil, :tUMINUS, "-", EXPR_BEG, :tIDENTIFIER, "blah", EXPR_ARG) end def test_yylex_underscore assert_lex3("_var", nil, :tIDENTIFIER, "_var", EXPR_CMDARG) end def test_yylex_underscore_end assert_lex3("__END__\n", nil, RubyLexer::EOF, RubyLexer::EOF, nil) end def test_yylex_uplus assert_lex3("+blah", nil, :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_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_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_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 ruby-ruby-parser-3.15.1/test/test_ruby_parser.rb000077500000000000000000003103621400133573100217400ustar00rootroot00000000000000# encoding: utf-8 # ENV["VERBOSE"] = "1" require "minitest/autorun" require "ruby_parser" $: << File.expand_path("~/Work/p4/zss/src/sexp_processor/dev/lib") require "pt_testcase" class Sexp alias oldeq2 == # TODO: push up to Sexp def == other # :nodoc: if other.class == self.class then super and (line.nil? or other.line.nil? or line == other.line) else false end end end module TestRubyParserShared def setup super # p :test => [self.class, __name__] end BLOCK_DUP_MSG = "Both block arg and actual block given." 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 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_BEGIN rb = "BEGIN { 42 }" pt = s(:iter, s(:preexe), 0, s(:lit, 42)) assert_parse rb, pt end 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___ENCODING__ rb = "__ENCODING__" pt = s(:colon2, s(:const, :Encoding), :UTF_8) assert_parse rb, pt end def test_alias_gvar_backref rb = "alias $MATCH $&" pt = s(:valias, :$MATCH, :$&) assert_parse rb, pt end def test_alias_resword rb = "alias in out" pt = s(:alias, s(:lit, :in), s(:lit, :out)) assert_parse rb, pt end 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_aref_args_assocs rb = "[1 => 2]" pt = s(:array, s(:hash, s(:lit, 1), s(:lit, 2))) 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. 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_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 def test_attrasgn_array_lhs rb = '[1, 2, 3, 4][from .. to] = ["a", "b", "c"]' pt = s(:attrasgn, s(:array, s(:lit, 1), s(:lit, 2), s(:lit, 3), s(:lit, 4)), :[]=, s(:dot2, s(:call, nil, :from), s(:call, nil, :to)), s(:array, s(:str, "a"), s(:str, "b"), s(:str, "c"))) 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)) 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).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).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).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 def test_block_append_nil_head head = nil tail = s(:zsuper) expected = s(:zsuper) assert_equal expected, processor.block_append(head, tail) end def test_block_append_nil_tail head = s(:args) tail = nil expected = s(:args) assert_equal expected, processor.block_append(head, tail) end def test_block_append_tail_block 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).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_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_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_bug169 rb = "m () {}" pt = s(:iter, s(:call, nil, :m, s(:nil)), 0) assert_parse rb, pt end 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_bug179 rb = "p ()..nil" pt = s(:call, nil, :p, s(:dot2, s(:begin), s(:nil))) assert_parse rb, pt end 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 end 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 end def test_bug202 rb = "$测试 = 1\n测试 = 1" pt = s(:block, s(:gasgn, :$测试, s(:lit, 1)), s(:lasgn, :测试, s(:lit, 1))) assert_parse rb, pt end 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_bug290 rb = "begin\n foo\nend" pt = s(:call, nil, :foo).line(2) 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_args_masgn rb = "f { |(a, b), c| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :a, :b), :c)) assert_parse rb, pt.dup 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)) assert_parse rb, pt end def test_bug_begin_else rb = "begin 1; else; 2 end" assert_syntax_error rb, "else without rescue is useless" end def test_bug_call_arglist_parens rb = "g ( 1), 2" pt = s(:call, nil, :g, s(:lit, 1), s(:lit, 2)) assert_parse rb, pt rb = <<-CODE def f g ( 1), 2 end CODE pt = s(:defn, :f, s(:args), s(:call, nil, :g, s(:lit, 1), s(:lit, 2))) assert_parse rb, pt rb = <<-CODE def f() g (1), 2 end CODE assert_parse rb, pt end 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_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_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_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_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_bug_not_parens rb = "not(a)" pt = s(:call, s(:call, nil, :a), :"!") assert_parse rb, pt end 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 end def test_call_and rb = "1 & 2" pt = s(:call, s(:lit, 1), :&, s(:lit, 2)) assert_parse rb, pt end 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_parse rb, pt end def test_call_array_arg rb = "1 == [:b, :c]" pt = s(:call, s(:lit, 1), :==, s(:array, s(:lit, :b), s(:lit, :c))) assert_parse rb, pt end def test_call_bang_command_call rb = "! a.b 1" pt = s(:not, s(:call, s(:call, nil, :a), :b, s(:lit, 1))) assert_parse rb, pt 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+ assert_parse rb, pt end def test_call_carat rb = "1 ^ 2" pt = s(:call, s(:lit, 1), :^, s(:lit, 2)) assert_parse rb, pt end def test_call_colon2 rb = "A::b" pt = s(:call, s(:const, :A), :b) assert_parse rb, pt end def test_call_div rb = "1 / 2" pt = s(:call, s(:lit, 1), :/, s(:lit, 2)) assert_parse rb, pt end def test_call_env processor.env[:a] = :lvar rb = "a.happy" pt = s(:call, s(:lvar, :a), :happy) assert_parse rb, pt end def test_call_eq3 rb = "1 === 2" pt = s(:call, s(:lit, 1), :===, s(:lit, 2)) assert_parse rb, pt end def test_call_gt rb = "1 > 2" pt = s(:call, s(:lit, 1), :>, s(:lit, 2)) assert_parse rb, pt end def test_call_lt rb = "1 < 2" pt = s(:call, s(:lit, 1), :<, s(:lit, 2)) assert_parse rb, pt end def test_call_lte rb = "1 <= 2" pt = s(:call, s(:lit, 1), :<=, s(:lit, 2)) assert_parse rb, pt end def test_call_not rb = "not 42" pt = s(:not, s(:lit, 42)) assert_parse rb, pt end def test_call_pipe rb = "1 | 2" pt = s(:call, s(:lit, 1), :|, s(:lit, 2)) assert_parse rb, pt end def test_call_rshift rb = "1 >> 2" pt = s(:call, s(:lit, 1), :>>, s(:lit, 2)) assert_parse rb, pt end def test_call_self_brackets rb = "self[1]" pt = s(:call, s(:self), :[], s(:lit, 1)) assert_parse rb, pt end def test_call_spaceship rb = "1 <=> 2" pt = s(:call, s(:lit, 1), :<=>, s(:lit, 2)) assert_parse rb, pt end def test_call_star rb = "1 * 2" pt = s(:call, s(:lit, 1), :"*", s(:lit, 2)) assert_parse rb, pt end def test_call_star2 rb = "1 ** 2" pt = s(:call, s(:lit, 1), :"**", s(:lit, 2)) assert_parse rb, pt end def test_call_unary_bang rb = "!1" pt = s(:not, s(:lit, 1)) 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))) 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_cond_unary_minus rb = "if -1; end" pt = s(:if, s(:lit, -1), nil, nil) 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))))) assert_parse rb, pt end def test_defined_eh_parens rb = "defined?(42)" pt = s(:defined, s(:lit, 42)) assert_parse rb, pt end 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_defns_reserved rb = "def self.return; end" pt = s(:defs, s(:self), :return, s(:args), s(:nil)) assert_parse rb, pt end 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 rb, pt 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)) 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))) assert_parse rb, pt end def test_double_block_error_01 assert_syntax_error "a(1, &b) { }", BLOCK_DUP_MSG end def test_double_block_error_02 assert_syntax_error "a(1, &b) do end", BLOCK_DUP_MSG end def test_double_block_error_03 assert_syntax_error "a 1, &b do end", BLOCK_DUP_MSG end def test_double_block_error_04 assert_syntax_error "m.a(1, &b) { }", BLOCK_DUP_MSG end def test_double_block_error_05 assert_syntax_error "m.a(1, &b) do end", BLOCK_DUP_MSG end def test_double_block_error_06 assert_syntax_error "m.a 1, &b do end", BLOCK_DUP_MSG end def test_double_block_error_07 assert_syntax_error "m::a(1, &b) { }", BLOCK_DUP_MSG end def test_double_block_error_08 assert_syntax_error "m::a(1, &b) do end", BLOCK_DUP_MSG end def test_double_block_error_09 assert_syntax_error "m::a 1, &b do end", BLOCK_DUP_MSG end def test_dstr_evstr rb = %q("#{'a'}#{b}") pt = s(:dstr, "a", s(:evstr, s(:call, nil, :b))) assert_parse rb, pt end def test_dstr_evstr_empty_end rb = ':"#{field}"' pt = s(:dsym, "", s(:evstr, s(:call, nil, :field))) assert_parse rb, pt end def test_dstr_str rb = %q("#{'a'} b") pt = s(:str, "a b") assert_parse rb, pt end def test_dsym_to_sym pt = s(:alias, s(:lit, :<<), s(:lit, :>>)) rb = "alias :<< :>>" assert_parse rb, pt rb = 'alias :"<<" :">>"' assert_parse rb, pt end 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(:lit, 1).line(1), s(:lit, 2).line(6)) assert_parse rb, pt 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)) assert_parse rb, pt end def test_evstr_evstr rb = %q("#{a}#{b}") pt = s(:dstr, "", s(:evstr, s(:call, nil, :a)), s(:evstr, s(:call, nil, :b))) assert_parse rb, pt end def test_evstr_str rb = %q("#{a} b") pt = s(:dstr, "", s(:evstr, s(:call, nil, :a)), s(:str, " b")) assert_parse rb, pt end 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 top_env = processor.env.env.first assert_kind_of Hash, top_env flip = top_env.find { |k, _| k =~ /^flip/ } assert flip assert_equal :lvar, flip.last end def test_fubar_nesting err = "class definition in method body" 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_heredoc_bad_hex_escape rb = "s = < :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_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_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_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_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_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_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_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_line rb, pt, 2 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_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_line rb, pt, 1 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_parse_until_not_canonical rb = "until not var.nil?\n 'foo'\nend" pt = s(:while, 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(:not, s(:call, s(:call, nil, :var), :nil?)), s(:str, "foo"), true) processor.canonicalize_conditions = false assert_parse rb, pt end 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_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_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_qWords_space rb = "%W( )" pt = s(:array) assert_parse rb, pt end def test_qwords_empty rb = "%w()" pt = s(:array) 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 # TODO: add more including interpolation etc end 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)) assert_parse rb, pt end def test_str_evstr rb = "\"a #\{b}\"" pt = s(:dstr, "a ", s(:evstr, s(:call, nil, :b))) assert_parse rb, pt end 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_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_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_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_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_str_pct_q rb = "%q{a b c}" pt = s(:str, "a b c") assert_parse rb, pt end def test_str_str rb = "\"a #\{'b'}\"" pt = s(:str, "a b") assert_parse rb, pt end def test_str_str_str rb = "\"a #\{'b'} c\"" pt = s(:str, "a b c") assert_parse rb, pt end def test_super_arg rb = "super 42" pt = s(:super, s(:lit, 42)) assert_parse rb, pt end def test_uminus_float rb = "-0.0" pt = s(:lit, -0.0) 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_unary_plus rb = "+a" pt = s(:call, s(:call, nil, :a), :+@) assert_parse rb, pt end def test_unary_tilde rb = "~a" pt = s(:call, s(:call, nil, :a), :~) assert_parse rb, pt end 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_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_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_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_yield_arg rb = "yield 42" pt = s(:yield, s(:lit, 42)) assert_parse rb, pt end def test_yield_empty_parens rb = "yield()" pt = s(:yield) assert_parse rb, pt end end module TestRubyParserShared19Plus include TestRubyParserShared def test_aref_args_lit_assocs rb = "[1, 2 => 3]" pt = s(:array, s(:lit, 1), s(:hash, s(:lit, 2), s(:lit, 3))) assert_parse rb, pt end def test_assoc_label rb = "a(b:1)" pt = s(:call, nil, :a, s(:hash, s(:lit, :b), s(:lit, 1))) assert_parse rb, pt end def test_assoc_list_19 rb = "{1, 2, 3, 4}" assert_parse_error rb, "(string):1 :: parse error on value \",\" (tCOMMA)" end def test_bang_eq rb = "1 != 2" pt = s(:call, s(:lit, 1), :"!=", s(:lit, 2)) assert_parse rb, pt end def test_block_arg_opt_arg_block rb = "a { |b, c=1, d, &e| }" pt = s(:iter, s(:call, nil, :a), s(:args, :b, s(:lasgn, :c, s(:lit, 1)), :d, :"&e")) assert_parse rb, pt end def test_block_arg_opt_splat rb = "a { |b, c = 1, *d| }" pt = s(:iter, s(:call, nil, :a), s(:args, :b, s(:lasgn, :c, s(:lit, 1)), :"*d")) assert_parse rb, pt end def test_block_arg_opt_splat_arg_block_omfg rb = "a { |b, c=1, *d, e, &f| }" pt = s(:iter, s(:call, nil, :a), s(:args, :b, s(:lasgn, :c, s(:lit, 1)), :"*d", :e, :"&f")) 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_block_arg_scope rb = "a { |b; c| }" pt = s(:iter, s(:call, nil, :a), s(:args, :b, s(:shadow, :c))) assert_parse rb, pt end def test_block_arg_scope2 rb = "a {|b; c, d| }" pt = s(:iter, s(:call, nil, :a), s(:args, :b, s(:shadow, :c, :d))) assert_parse rb, pt end def test_block_arg_splat_arg rb = "a { |b, *c, d| }" pt = s(:iter, s(:call, nil, :a), s(:args, :b, :"*c", :d)) assert_parse rb, pt end 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))) assert_parse rb, pt end def test_block_args_opt2 rb = "a { | b=1, c=2 | }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:lasgn, :b, s(:lit, 1)), s(:lasgn, :c, s(:lit, 2)))) 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))) 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_block_break rb = "break foo arg do |bar| end" pt = s(:break, s(:iter, s(:call, nil, :foo, s(:call, nil, :arg)), s(:args, :bar))) assert_parse rb, pt end def test_block_call_operation_colon rb = "a.b c do end::d" pt = s(:call, s(:iter, s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)), 0), :d) assert_parse rb, pt end def test_block_call_operation_dot rb = "a.b c do end.d" pt = s(:call, s(:iter, s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)), 0), :d) assert_parse rb, pt end def test_block_command_operation_colon rb = "a :b do end::c :d" pt = s(:call, s(:iter, s(:call, nil, :a, s(:lit, :b)), 0), :c, s(:lit, :d)) assert_parse rb, pt end def test_block_command_operation_dot rb = "a :b do end.c :d" pt = s(:call, s(:iter, s(:call, nil, :a, s(:lit, :b)), 0), :c, s(:lit, :d)) assert_parse rb, pt end def test_block_decomp_anon_splat_arg rb = "f { |(*, a)| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :*, :a))) assert_parse rb, pt end def test_block_decomp_arg_splat rb = "a { |(b, *)| }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:masgn, :b, :*))) assert_parse rb, pt end def test_block_decomp_arg_splat_arg rb = "f { |(a, *b, c)| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :a, :"*b", :c))) assert_parse rb, pt end def test_block_next rb = "next foo arg do |bar| end" pt = s(:next, s(:iter, s(:call, nil, :foo, s(:call, nil, :arg)), s(:args, :bar))) assert_parse rb, pt end def test_block_opt_arg rb = "a { |b=1, c| }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:lasgn, :b, s(:lit, 1)), :c)) assert_parse rb, pt end def test_block_opt_splat rb = "a { |b = 1, *c| }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:lasgn, :b, s(:lit, 1)), :"*c")) assert_parse rb, pt end def test_block_opt_splat_arg_block_omfg rb = "a { |b=1, *c, d, &e| }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:lasgn, :b, s(:lit, 1)), :"*c", :d, :"&e")) assert_parse rb, pt end def test_block_optarg rb = "a { |b = :c| }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:lasgn, :b, s(:lit, :c)))) assert_parse rb, pt end def test_block_paren_splat # TODO: rename # TODO: should work on 1.8 rb = "a { |(b, *c)| }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:masgn, :b, :"*c"))) assert_parse rb, pt end def test_block_reg_optarg rb = "a { |b, c = :d| }" pt = s(:iter, s(:call, nil, :a), s(:args, :b, s(:lasgn, :c, s(:lit, :d)))) assert_parse rb, pt end def test_block_return rb = "return foo arg do |bar| end" pt = s(:return, s(:iter, s(:call, nil, :foo, s(:call, nil, :arg)), s(:args, :bar))) assert_parse rb, pt end def test_block_scope rb = "a { |;b| }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:shadow, :b))) assert_parse rb, pt end def test_block_splat_reg rb = "a { |*b, c| }" pt = s(:iter, s(:call, nil, :a), s(:args, :"*b", :c)) assert_parse rb, pt end def test_block_yield rb = "yield foo arg do |bar| end" pt = s(:yield, s(:iter, s(:call, nil, :foo, s(:call, nil, :arg)), s(:args, :bar))) assert_parse rb, pt end def test_bug_187 rb = "private def f\na.b do end\nend" pt = s(:call, nil, :private, s(:defn, :f, s(:args), s(:iter, s(:call, s(:call, nil, :a), :b), 0))) 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)) 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 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_call_arg_assoc rb = "f(1, 2=>3)" pt = s(:call, nil, :f, s(:lit, 1), s(:hash, s(:lit, 2), s(:lit, 3))) assert_parse rb, pt end def test_call_args_assoc_trailing_comma rb = "f(1, 2=>3,)" pt = s(:call, nil, :f, s(:lit, 1), s(:hash, s(:lit, 2), s(:lit, 3))) 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)))) assert_parse rb, pt end def test_call_assoc rb = "f(2=>3)" pt = s(:call, nil, :f, s(:hash, s(:lit, 2), s(:lit, 3))) assert_parse rb, pt end def test_call_assoc_new rb = "f(a:3)" pt = s(:call, nil, :f, s(:hash, s(:lit, :a), s(:lit, 3))) assert_parse rb, pt end def test_call_assoc_new_if_multiline rb = "a(b: if :c\n1\nelse\n2\nend)" pt = s(:call, nil, :a, s(:hash, s(:lit, :b), s(:if, s(:lit, :c), s(:lit, 1), s(:lit, 2)))) assert_parse rb, pt end def test_call_assoc_trailing_comma rb = "f(1=>2,)" pt = s(:call, nil, :f, s(:hash, s(:lit, 1), s(:lit, 2))) assert_parse rb, pt end def test_call_bang_command_call rb = "! a.b 1" pt = s(:call, s(:call, s(:call, nil, :a), :b, s(:lit, 1)), :"!") assert_parse rb, pt end def test_call_colon_parens rb = "1::()" pt = s(:call, s(:lit, 1), :call) assert_parse rb, pt end def test_call_dot_parens rb = "1.()" pt = s(:call, s(:lit, 1), :call) assert_parse rb, pt end def test_call_not rb = "not 42" pt = s(:call, s(:lit, 42), :"!") assert_parse rb, pt end def test_call_stabby_do_end_with_block rb = "a -> do 1 end do 2 end" pt = s(:iter, s(:call, nil, :a, s(:iter, s(:lambda), 0, s(:lit, 1))), 0, s(:lit, 2)) assert_parse rb, pt end def test_call_stabby_with_braces_block rb = "a -> { 1 } do 2 end" pt = s(:iter, s(:call, nil, :a, s(:iter, s(:lambda), 0, s(:lit, 1))), 0, s(:lit, 2)) assert_parse rb, pt end def test_call_trailing_comma rb = "f(1,)" pt = s(:call, nil, :f, s(:lit, 1)) assert_parse rb, pt end def test_call_unary_bang rb = "!1" pt = s(:call, s(:lit, 1), :"!") assert_parse rb, 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 assert_parse_error rb, "(string):2 :: parse error on value \":\" (tCOLON)" end def test_defn_arg_asplat_arg rb = "def call(interp, *, args) end" pt = s(:defn, :call, s(:args, :interp, :*, :args), s(:nil)) assert_parse rb, pt end def test_defn_opt_last_arg rb = "def m arg = false\nend" pt = s(:defn, :m, s(:args, s(:lasgn, :arg, s(:false).line(1)).line(1)).line(1), s(:nil).line(2)).line(1) assert_parse rb, pt end def test_defn_opt_reg rb = "def f(a=nil, b) end" pt = s(:defn, :f, s(:args, s(:lasgn, :a, s(:nil)), :b), s(:nil)) assert_parse rb, pt end def test_defn_opt_splat_arg rb = "def f (a = 1, *b, c) end" pt = s(:defn, :f, s(:args, s(:lasgn, :a, s(:lit, 1)), :"*b", :c), s(:nil)) assert_parse rb, pt end def test_defn_reg_opt_reg rb = "def f(a, b = :c, d) end" pt = s(:defn, :f, s(:args, :a, s(:lasgn, :b, s(:lit, :c)), :d), s(:nil)) assert_parse rb, pt end def test_defn_splat_arg rb = "def f(*, a) end" pt = s(:defn, :f, s(:args, :*, :a), s(:nil)) assert_parse rb, pt end def test_do_colon_19 rb = "while false : 42 end" assert_parse_error rb, "(string):1 :: parse error on value \":\" (tCOLON)" end def test_do_lambda rb = "->() do end" pt = s(:iter, s(:lambda), s(:args)) assert_parse rb, pt end def test_expr_not_bang rb = "! a b" pt = s(:call, s(:call, nil, :a, s(:call, nil, :b)), :"!") assert_parse rb, pt end 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)))) assert_parse rb, pt end def test_index_0 rb = "a[] = b" pt = s(:attrasgn, s(:call, nil, :a), :[]=, s(:call, nil, :b)) 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")) 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")) 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)) assert_parse rb, pt 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")) assert_parse rb, pt end def test_iter_args_2__19 rb = "f { |(a, b)| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :a, :b))) 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)) assert_parse rb, pt end def test_iter_args_5 rb = "f { |a, &b| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, :"&b")) 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)) 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")) 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")) 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)) 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")) 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)) 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")) assert_parse rb, pt end def test_kill_me 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_kill_me2 rb = "f { |*a, b| }" pt = s(:iter, s(:call, nil, :f), s(:args, :"*a", :b)) 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")) 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))) assert_parse rb, pt end def test_kill_me5 rb = "f ->() { g do end }" pt = s(:call, nil, :f, s(:iter, s(:lambda), s(:args), s(:iter, s(:call, nil, :g), 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))) assert_parse rb, pt end def test_kill_me_11 # | tSTAR rb = "f { |a, (*)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :*))) 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))) 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))) assert_parse rb, pt end def test_kill_me_7 # | f_marg_list tCOMMA tSTAR rb = "f { |a, (b, *)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :b, :*))) 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))) 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"))) assert_parse rb, pt end def test_lambda_do_vs_brace pt = s(:call, nil, :f, s(:iter, s(:lambda), s(:args))) rb = "f ->() {}" assert_parse rb, pt rb = "f ->() do end" assert_parse rb, pt pt = s(:call, nil, :f, s(:iter, s(:lambda), 0)) rb = "f -> {}" assert_parse rb, pt rb = "f -> do end" assert_parse rb, pt end def test_lasgn_lasgn_command_call rb = "a = b = c 1" pt = s(:lasgn, :a, s(:lasgn, :b, s(:call, nil, :c, s(:lit, 1)))) assert_parse rb, pt end def test_masgn_anon_splat_arg rb = "*, a = b" pt = s(:masgn, s(:array, s(:splat), s(:lasgn, :a)), s(:to_ary, s(:call, nil, :b))) assert_parse rb, pt end def test_masgn_arg_splat_arg rb = "a, *b, c = d" pt = s(:masgn, s(:array, s(:lasgn, :a), s(:splat, s(:lasgn, :b)), s(:lasgn, :c)), s(:to_ary, s(:call, nil, :d))) assert_parse rb, pt end def test_masgn_splat_arg rb = "*a, b = c" pt = s(:masgn, s(:array, s(:splat, s(:lasgn, :a)), s(:lasgn, :b)), s(:to_ary, s(:call, nil, :c))) assert_parse rb, pt end def test_masgn_splat_arg_arg rb = "*a, b, c = d" pt = s(:masgn, s(:array, s(:splat, s(:lasgn, :a)), s(:lasgn, :b), s(:lasgn, :c)), s(:to_ary, s(:call, nil, :d))) assert_parse rb, pt end def test_masgn_var_star_var rb = "a, *, b = c" # TODO: blog pt = s(:masgn, s(:array, s(:lasgn, :a), s(:splat), s(:lasgn, :b)), s(:to_ary, s(:call, nil, :c))) assert_parse rb, pt end def test_method_call_assoc_trailing_comma rb = "a.f(1=>2,)" pt = s(:call, s(:call, nil, :a), :f, s(:hash, s(:lit, 1), s(:lit, 2))) assert_parse rb, pt end 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_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 rb, pt end def test_mlhs_back_splat rb = "a, b, c, *s = f" pt = s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c), s(:splat, s(:lasgn, :s))), s(:to_ary, s(:call, nil, :f))) 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_mlhs_front_splat rb = "*s, x, y, z = f" pt = s(:masgn, s(:array, s(:splat, s(:lasgn, :s)), s(:lasgn, :x), s(:lasgn, :y), s(:lasgn, :z)), s(:to_ary, s(:call, nil, :f))) 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(:lasgn, :b), s(:lasgn, :c), 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" 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))) assert_parse rb, pt end def test_motherfuckin_leading_dots rb = "a\n.b" pt = s(:call, s(:call, nil, :a), :b) assert_parse rb, pt end def test_motherfuckin_leading_dots2 rb = "a\n..b" assert_parse_error rb, '(string):2 :: parse error on value ".." (tDOT2)' end def test_multiline_hash_declaration pt = s(:call, nil, :f, s(:hash, s(:lit, :state), s(:hash))) assert_parse "f(state: {})", pt assert_parse "f(state: {\n})", pt assert_parse "f(state:\n {\n})", pt end def test_parse_def_special_name rb = "def next; end" pt = s(:defn, :next, s(:args), s(:nil)) assert_parse rb, pt end def test_parse_def_xxx1 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" assert_parse_error rb, '(string):1 :: parse error on value "=" (tEQL)' end def test_parse_if_not_canonical rb = "if not var.nil? then 'foo' else 'bar'\nend" pt = s(:if, s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), s(:str, "foo"), s(:str, "bar")) 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(:call, 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_opt_call_args_assocs_comma rb = "1[2=>3,]" pt = s(:call, s(:lit, 1), :[], s(:hash, s(:lit, 2), s(:lit, 3))) assert_parse rb, pt end def test_parse_opt_call_args_lit_comma rb = "1[2,]" pt = s(:call, s(:lit, 1), :[], s(:lit, 2)) assert_parse rb, pt 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_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_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_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 rb, pt rb = "return y z:1" pt = s(:return, s(:call, nil, :y, s(:hash, s(:lit, :z), s(:lit, 1)))) assert_parse rb, pt 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 rb = "return y :z=>1" pt = s(:return, s(:call, nil, :y, s(:hash, s(:lit, :z), s(:lit, 1)))) assert_parse rb, pt 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 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_stabby_arg_no_paren rb = "->a{}" pt = s(:iter, s(:lambda), s(:args, :a)) assert_parse rb, pt end 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_stabby_proc_scope rb = "->(a; b) {}" pt = s(:iter, s(:lambda), s(:args, :a, s(:shadow, :b))) assert_parse rb, pt end def test_symbol_empty rb = ":''" pt = s(:lit, "".to_sym) assert_parse rb, pt end def test_thingy pt = s(:call, s(:call, nil, :f), :call, s(:lit, 42)) rb = "f.(42)" assert_parse rb, pt rb = "f::(42)" assert_parse rb, pt end def test_unary_plus_on_literal rb = "+:a" pt = s(:call, s(:lit, :a), :+@) 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(: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_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 rb = "yield y z:1" pt = s(:yield, s(:call, nil, :y, s(:hash, s(:lit, :z), s(:lit, 1)))) assert_parse rb, pt 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 rb = "yield y :z=>1" pt = s(:yield, s(:call, nil, :y, s(:hash, s(:lit, :z), s(:lit, 1)))) assert_parse rb, pt rb = "yield 1, :z => 1" pt = s(:yield, s(:lit, 1), s(:hash, s(:lit, :z), s(:lit, 1))) assert_parse rb, pt 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_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 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_block_arg_kwsplat rb = "a { |**b| }" pt = s(:iter, s(:call, nil, :a), s(:args, :"**b")) assert_parse rb, pt 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)) assert_parse rb, pt end 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_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_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_call_array_lambda_block_call rb = "a [->() {}] do\nend" pt = s(:iter, s(:call, nil, :a, s(:array, s(:iter, s(:lambda), s(:args)))), 0) assert_parse rb, pt end 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_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_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) assert_parse rb, pt sexp = processor.parse rb assert_equal Encoding::ASCII_8BIT, sexp.last.encoding 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)) 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)) 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)) 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"))) 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)))) 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)))) assert_parse rb, pt end 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_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)) 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)) 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)) assert_parse rb, pt end 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_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_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)) assert_parse rb, pt end def test_defn_powarg rb = "def f(**opts) end" pt = s(:defn, :f, s(:args, :"**opts"), s(:nil)) 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 def test_dstr_lex_state rb = '"#{p:a}"' pt = s(:dstr, "", s(:evstr, s(:call, nil, :p, s(:lit, :a)))) assert_parse rb, pt end def test_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_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_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_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_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_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_qsymbols_empty rb = "%I()" pt = s(:array) assert_parse rb, pt end def test_qsymbols_empty_space rb = "%I( )" pt = s(:array) assert_parse rb, pt end 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_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_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_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_symbols_empty rb = "%i()" pt = s(:array) assert_parse rb, pt end def test_symbols_empty_space rb = "%i( )" pt = s(:array) assert_parse rb, pt end 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 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_kw__required rb = "blah do |k:| end" pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k))) assert_parse rb, pt rb = "blah do |k:| end" assert_parse rb, pt end def test_bug162__21plus rb = %q(<, s(:lit, 1)).line(1) assert_parse rb, pt end 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_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_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_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 def test_slashy_newlines_within_string rb = %(puts "hello\\ my\\ dear\\ friend" a + b ) pt = s(:block, s(:call, nil, :puts, s(:str, "hello my dear friend").line(1)).line(1), s(:call, s(:call, nil, :a).line(6), :+, s(:call, nil, :b).line(6)).line(6) ).line(1) assert_parse rb, pt end end module TestRubyParserShared24Plus 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 23, RubyParser::V23.version assert_equal 24, RubyParser::V24.version assert_equal 24, Ruby24Parser.version refute RubyParser::Parser.version end def test_parse processor = RubyParser.new rb = "a.()" pt = s(:call, s(:call, nil, :a), :call) assert_equal pt, processor.parse(rb) # bad syntax e = assert_raises Racc::ParseError do capture_io do processor.parse "a.(" end end 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 class RubyParserTestCase < ParseTreeTestCase attr_accessor :result, :processor make_my_diffs_pretty! def self.previous key "Ruby" end def self.generate_test klass, node, data, input_name, output_name return if node.to_s =~ /bmethod|dmethod/ return if Array === data["Ruby"] output_name = "ParseTree" super end def assert_parse rb, pt self.result = processor.parse rb assert_equal pt, result end def assert_parse_error rb, emsg e = nil assert_silent do e = assert_raises Racc::ParseError do processor.parse rb end end if Regexp === emsg then assert_match emsg, e.message else assert_equal emsg, e.message end end def assert_parse_line rb, pt, line old_env = ENV["VERBOSE"] ENV["VERBOSE"] = "1" assert_parse rb, pt assert_equal line, result.line, "call should have line number" 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 TestRubyParserV20 < RubyParserTestCase include TestRubyParserShared20Plus def setup super self.processor = RubyParser::V20.new end def test_bug162__20 skip "not ready for this yet" # Ignore everything after \r in heredoc marker in <= 2.0 #162 rb = %q(< { }" => 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 =~ /->/ next if v == 19 and input =~ /-> \(\)/ it "parses '#{input}'" do assert_equal expected, parser.parse(input) end input = input.sub(/\{/, "do").sub(/\}/, "end") it "parses '#{input}'" do assert_equal expected, parser.parse(input) end end end end ruby-ruby-parser-3.15.1/test/test_ruby_parser_extras.rb000066400000000000000000000163221400133573100233220ustar00rootroot00000000000000# encoding: US-ASCII require "minitest/autorun" require "ruby_parser_extras" require "ruby_parser" class TestStackState < Minitest::Test attr_reader :s def setup @s = RubyParserStuff::StackState.new :test end def assert_encoding str, default = false orig_str = str.dup p = RubyParser.latest s = nil out, err = capture_io { s = p.handle_encoding str } assert_equal orig_str.sub(/\357\273\277/, ""), s exp_err = "" if defined?(Encoding) then assert_equal "UTF-8", s.encoding.to_s, str.inspect else exp_err = "Skipping magic encoding comment\n" unless default end assert_equal "", out, str.inspect assert_equal exp_err, err, str.inspect # HACK end def test_handle_encoding_bom # bom support, default to utf-8 assert_encoding "\xEF\xBB\xBF# blah" # we force_encode to US-ASCII, then encode to UTF-8 so our lexer will work assert_encoding "\xEF\xBB\xBF# encoding: US-ASCII" end def test_handle_encoding_default assert_encoding "blah", :default end def test_handle_encoding_emacs # Q: how many different ways can we screw these up? A: ALL OF THEM assert_encoding "# - encoding: utf-8 -" assert_encoding "# - encoding:utf-8" assert_encoding "# -* coding: UTF-8 -*-" assert_encoding "# -*- coding: UTF-8 -*-" assert_encoding "# -*- coding: utf-8 -*" assert_encoding "# -*- coding: utf-8 -*-" assert_encoding "# -*- coding: utf-8; mode: ruby -*-" assert_encoding "# -*- coding: utf-8; mode: ruby; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2" assert_encoding "# -*- coding:utf-8; mode:ruby; -*-" assert_encoding "# -*- encoding: UTF-8 -*-" assert_encoding "# -*- encoding: utf-8 -*" assert_encoding "# -*- encoding: utf-8 -*-" assert_encoding "# -*- mode:ruby; coding:utf-8 -*-" assert_encoding "# -*- ruby encoding: utf-8 -*-" assert_encoding "# -- encoding: utf-8 --" assert_encoding "# ~*~ encoding: utf-8 ~*~" assert_encoding "#-*- coding: utf-8 -*-" assert_encoding "#-*- coding:utf-8" assert_encoding "#-- -*- mode: ruby; encoding: utf-8 -*-\n" end def test_handle_encoding_wtf assert_encoding "# coding : utf-8" assert_encoding "# Ruby 1.9: encoding: utf-8" assert_encoding "# Encoding: UTF-8 <-- required, please leave this in." assert_encoding "# Encoding: UTF-8" assert_encoding "# coding: utf-8" assert_encoding "# coding:utf-8" assert_encoding "# coding=utf-8" assert_encoding "# encoding: ASCII" assert_encoding "# encoding: ASCII-8BIT" assert_encoding "# encoding: ISO-8859-1" assert_encoding "# encoding: UTF-8" assert_encoding "# encoding: ascii-8bit" assert_encoding "# encoding: cp1252" assert_encoding "# encoding: euc-jp -*-" assert_encoding "# encoding: utf-8 # -*- ruby -*-" assert_encoding "# encoding: utf-8 require 'github_api/utils/url'" assert_encoding "# encoding: utf-8!" assert_encoding "# encoding: utf-8" assert_encoding "#" assert_encoding "#Encoding: UTF-8" assert_encoding "#coding:utf-8" assert_encoding "#encoding: UTF-8!" assert_encoding "#encoding: UTF-8" assert_encoding "#encoding: cp1252" assert_encoding "#encoding: sjis" assert_encoding "#encoding: utf-8" end def test_handle_encoding_normal assert_encoding "# encoding: UTF-8" assert_encoding "# encoding: UTF-8\r\n" # UGH I hate windoze assert_encoding "# coding: UTF-8" assert_encoding "# encoding = UTF-8" assert_encoding "# coding = UTF-8" end def test_handle_encoding_vim assert_encoding "# vim: set fileencoding=utf-8 filetype=ruby ts=2 : " assert_encoding "# vim: fileencoding=UTF-8 ft=ruby syn=ruby ts=2 sw=2 ai eol et si" assert_encoding "# vim: fileencoding=UTF-8 nobomb sw=2 ts=2 et" assert_encoding "# vim: filetype=ruby, fileencoding=UTF-8, tabsize=2, shiftwidth=2" assert_encoding "# vim: set fileencoding=utf-8" assert_encoding "# vim:encoding=UTF-8:" assert_encoding "# vim:fileencoding=UTF-8:" assert_encoding "# vim:set fileencoding=utf-8 filetype=ruby" assert_encoding "# vim:set fileencoding=utf-8:" end def test_stack_state s.push true s.push false s.lexpop assert_equal [false, true], s.stack end def test_is_in_state assert_equal false, s.is_in_state s.push false assert_equal false, s.is_in_state s.push true assert_equal true, s.is_in_state s.push false assert_equal false, s.is_in_state end def test_lexpop assert_equal [false], s.stack s.push true s.push false assert_equal [false, true, false], s.stack s.lexpop assert_equal [false, true], s.stack end def test_pop assert_equal [false], s.stack s.push true assert_equal [false, true], s.stack assert_equal true, s.pop assert_equal [false], s.stack end def test_push assert_equal [false], s.stack s.push true s.push false assert_equal [false, true, false], s.stack end end class TestEnvironment < Minitest::Test def deny t assert !t end def setup @env = RubyParserStuff::Environment.new @env[:blah] = 42 assert_equal 42, @env[:blah] end def test_var_scope_dynamic @env.extend :dynamic assert_equal 42, @env[:blah] @env.unextend assert_equal 42, @env[:blah] end def test_var_scope_static @env.extend assert_nil @env[:blah] @env.unextend assert_equal 42, @env[:blah] end def test_all_dynamic expected = { :blah => 42 } @env.extend :dynamic assert_equal expected, @env.all @env.unextend assert_equal expected, @env.all end def test_all_static @env.extend expected = { } assert_equal expected, @env.all @env.unextend expected = { :blah => 42 } assert_equal expected, @env.all end def test_all_static_deeper expected0 = { :blah => 42 } expected1 = { :blah => 42, :blah2 => 24 } expected2 = { :blah => 27 } @env.extend :dynamic @env[:blah2] = 24 assert_equal expected1, @env.all @env.extend @env[:blah] = 27 assert_equal expected2, @env.all @env.unextend assert_equal expected1, @env.all @env.unextend 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 ruby-ruby-parser-3.15.1/tools/000077500000000000000000000000001400133573100161705ustar00rootroot00000000000000ruby-ruby-parser-3.15.1/tools/munge.rb000077500000000000000000000162061400133573100176400ustar00rootroot00000000000000#!/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 ruby-ruby-parser-3.15.1/tools/ripper.rb000077500000000000000000000010221400133573100200140ustar00rootroot00000000000000#!/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