# -*- encoding:utf-8; warn-indent:false -*- # line 1 "lib/parser/lexer.rl" # line 3 "lib/parser/lexer.rl" # # === BEFORE YOU START === # # Read the Ruby Hacking Guide chapter 11, available in English at # http://whitequark.org/blog/2013/04/01/ruby-hacking-guide-ch-11-finite-state-lexer/ # # Remember two things about Ragel scanners: # # 1) Longest match wins. # # 2) If two matches have the same length, the first # in source code wins. # # General rules of making Ragel and Bison happy: # # * `p` (position) and `@te` contain the index of the character # they're pointing to ("current"), plus one. `@ts` contains the index # of the corresponding character. The code for extracting matched token is: # # @source[@ts...@te] # # * If your input is `foooooooobar` and the rule is: # # 'f' 'o'+ # # the result will be: # # foooooooobar # ^ ts=0 ^ p=te=9 # # * A Ragel lexer action should not emit more than one token, unless # you know what you are doing. # # * All Ragel commands (fnext, fgoto, ...) end with a semicolon. # # * If an action emits the token and transitions to another state, use # these Ragel commands: # # emit($whatever) # fnext $next_state; fbreak; # # If you perform `fgoto` in an action which does not emit a token nor # rewinds the stream pointer, the parser's side-effectful, # context-sensitive lookahead actions will break in a hard to detect # and debug way. # # * If an action does not emit a token: # # fgoto $next_state; # # * If an action features lookbehind, i.e. matches characters with the # intent of passing them to another action: # # p = @ts - 1 # fgoto $next_state; # # or, if the lookbehind consists of a single character: # # fhold; fgoto $next_state; # # * Ragel merges actions. So, if you have `e_lparen = '(' %act` and # `c_lparen = '('` and a lexer action `e_lparen | c_lparen`, the result # _will_ invoke the action `act`. # # e_something stands for "something with **e**mbedded action". # # * EOF is explicit and is matched by `c_eof`. If you want to introspect # the state of the lexer, add this rule to the state: # # c_eof => do_eof; # # * If you proceed past EOF, the lexer will complain: # # NoMethodError: undefined method `ord' for nil:NilClass # class Parser::Lexer # line 85 "lib/parser/lexer.rb" class << self attr_accessor :_lex_trans_keys private :_lex_trans_keys, :_lex_trans_keys= end self._lex_trans_keys = [ 0, 0, 101, 101, 103, 103, 105, 105, 110, 110, 69, 69, 78, 78, 68, 68, 95, 95, 95, 95, 0, 26, 0, 127, 0, 127, 0, 127, 0, 127, 0, 45, 0, 77, 0, 77, 0, 92, 0, 26, 0, 26, 0, 45, 0, 99, 0, 26, 67, 99, 45, 45, 0, 92, 0, 77, 0, 102, 0, 127, 0, 127, 0, 127, 0, 127, 0, 45, 0, 77, 0, 77, 0, 92, 0, 26, 0, 26, 0, 45, 0, 99, 0, 26, 67, 99, 45, 45, 0, 92, 0, 77, 0, 102, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 58, 58, 0, 127, 58, 58, 60, 60, 62, 62, 10, 10, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 115, 115, 99, 99, 117, 117, 101, 101, 108, 116, 101, 101, 115, 115, 115, 115, 105, 105, 108, 108, 105, 105, 108, 108, 58, 58, 0, 127, 10, 10, 0, 127, 58, 58, 98, 98, 101, 101, 103, 103, 105, 105, 110, 110, 0, 122, 61, 61, 0, 127, 0, 127, 61, 126, 0, 127, 0, 127, 93, 93, 0, 127, 0, 127, 10, 10, 10, 34, 10, 10, 10, 39, 0, 127, 10, 96, 0, 120, 0, 45, 0, 77, 0, 77, 0, 92, 0, 26, 0, 26, 0, 45, 0, 99, 0, 26, 67, 99, 45, 45, 0, 92, 0, 77, 0, 102, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 58, 58, 58, 58, 0, 127, 43, 57, 48, 57, 48, 57, 48, 57, 48, 57, 0, 127, 58, 58, 9, 92, 9, 92, 9, 92, 9, 92, 9, 92, 9, 92, 60, 60, 10, 10, 9, 46, 0, 46, 0, 95, 9, 32, 0, 0, 10, 10, 10, 10, 98, 98, 9, 32, 10, 10, 95, 95, 0, 92, 9, 32, 36, 123, 0, 127, 48, 57, 0, 120, 0, 0, 0, 0, 48, 55, 48, 55, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 92, 45, 45, 0, 0, 0, 0, 0, 0, 0, 92, 0, 45, 0, 92, 0, 92, 0, 0, 0, 0, 0, 92, 0, 45, 10, 10, 0, 92, 0, 123, 0, 26, 0, 26, 0, 26, 0, 0, 0, 102, 0, 102, 0, 102, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 125, 0, 0, 0, 125, 0, 26, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 0, 0, 0, 48, 102, 0, 0, 0, 92, 36, 123, 0, 127, 48, 57, 0, 120, 0, 0, 0, 0, 48, 55, 48, 55, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 92, 45, 45, 0, 0, 0, 0, 0, 0, 0, 92, 0, 45, 0, 92, 0, 92, 0, 0, 0, 0, 0, 92, 0, 45, 10, 10, 0, 92, 0, 123, 0, 26, 0, 26, 0, 26, 0, 0, 0, 102, 0, 102, 0, 102, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 125, 0, 0, 0, 125, 0, 26, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 0, 0, 0, 48, 102, 0, 0, 0, 92, 9, 32, 0, 26, 0, 92, 0, 26, 65, 122, 65, 122, 36, 64, 0, 127, 48, 57, 0, 127, 0, 127, 0, 127, 0, 127, 9, 32, 0, 0, 61, 126, 10, 10, 10, 10, 0, 127, 0, 127, 48, 57, 38, 38, 42, 42, 64, 64, 58, 58, 60, 61, 62, 62, 61, 126, 61, 61, 61, 62, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 93, 93, 10, 10, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 124, 124, 0, 127, 0, 127, 9, 32, 10, 10, 10, 10, 10, 10, 0, 0, 0, 127, 0, 127, 61, 61, 0, 0, 0, 0, 9, 32, 0, 0, 61, 126, 10, 10, 10, 10, 38, 38, 42, 42, 64, 64, 60, 61, 62, 62, 61, 126, 61, 61, 61, 62, 0, 127, 93, 93, 10, 10, 124, 124, 0, 126, 0, 127, 0, 61, 9, 61, 9, 61, 0, 0, 9, 61, 9, 62, 46, 46, 46, 46, 58, 58, 9, 32, 0, 0, 0, 127, 0, 0, 9, 124, 0, 0, 10, 10, 10, 10, 0, 0, 9, 61, 58, 58, 60, 60, 62, 62, 9, 32, 10, 10, 0, 127, 102, 102, 101, 101, 110, 110, 104, 104, 0, 127, 0, 127, 0, 127, 0, 0, 0, 127, 10, 10, 0, 123, 9, 32, 10, 10, 10, 10, 10, 10, 0, 0, 111, 111, 0, 0, 0, 127, 0, 127, 9, 32, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 58, 61, 0, 0, 61, 126, 61, 61, 0, 0, 0, 0, 0, 0, 58, 58, 9, 32, 61, 61, 9, 32, 61, 126, 10, 10, 10, 10, 65, 122, 0, 122, 38, 61, 0, 0, 42, 61, 61, 61, 48, 61, 48, 62, 46, 46, 46, 46, 0, 26, 0, 127, 0, 127, 61, 61, 0, 0, 61, 126, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 126, 0, 127, 48, 57, 38, 38, 42, 42, 64, 64, 60, 61, 62, 62, 61, 61, 61, 62, 124, 124, 60, 61, 0, 0, 62, 62, 61, 126, 61, 62, 0, 122, 0, 127, 0, 127, 0, 0, 0, 0, 48, 55, 48, 55, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 92, 45, 45, 0, 0, 0, 0, 0, 0, 0, 92, 0, 45, 0, 92, 0, 92, 0, 0, 0, 0, 0, 92, 0, 45, 10, 10, 0, 92, 0, 123, 0, 26, 0, 26, 0, 26, 0, 0, 0, 102, 0, 102, 0, 102, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 125, 0, 0, 0, 125, 0, 26, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 0, 0, 0, 48, 102, 0, 0, 0, 127, 0, 127, 0, 127, 0, 0, 10, 10, 0, 0, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 61, 126, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 0, 61, 124, 0, 92, 9, 32, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 127, 0, 127, 9, 32, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 127, 0, 127, 61, 61, 0, 0, 0, 0, 9, 32, 0, 0, 61, 126, 10, 10, 10, 10, 0, 127, 0, 127, 48, 57, 61, 61, 38, 61, 0, 0, 0, 0, 42, 61, 61, 62, 46, 57, 46, 46, 48, 101, 48, 95, 46, 120, 48, 114, 43, 57, 48, 105, 0, 0, 105, 105, 0, 0, 48, 114, 48, 114, 48, 114, 48, 114, 105, 114, 0, 0, 105, 105, 0, 0, 48, 114, 48, 114, 48, 114, 48, 114, 48, 114, 48, 114, 48, 114, 48, 114, 46, 114, 48, 114, 46, 114, 48, 114, 58, 58, 60, 61, 62, 62, 61, 126, 61, 61, 61, 62, 0, 127, 0, 127, 0, 0, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 0, 10, 10, 0, 0, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 9, 92, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 0, 61, 124, 0, 0, 9, 46, 9, 46, 0, 46, 10, 61, 10, 10, 10, 101, 10, 110, 10, 100, 10, 10, 0 ] class << self attr_accessor :_lex_key_spans private :_lex_key_spans, :_lex_key_spans= end self._lex_key_spans = [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 128, 128, 128, 128, 46, 78, 78, 93, 27, 27, 46, 100, 27, 33, 1, 93, 78, 103, 128, 128, 128, 128, 46, 78, 78, 93, 27, 27, 46, 100, 27, 33, 1, 93, 78, 103, 128, 128, 128, 128, 128, 128, 1, 128, 1, 1, 1, 1, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 128, 1, 128, 1, 1, 1, 1, 1, 1, 123, 1, 128, 128, 66, 128, 128, 1, 128, 128, 1, 25, 1, 30, 128, 87, 121, 46, 78, 78, 93, 27, 27, 46, 100, 27, 33, 1, 93, 78, 103, 128, 128, 128, 128, 128, 128, 1, 1, 128, 15, 10, 10, 10, 10, 128, 1, 84, 84, 84, 84, 84, 84, 1, 1, 38, 47, 96, 24, 0, 1, 1, 1, 24, 1, 1, 93, 24, 88, 128, 10, 121, 0, 0, 8, 8, 0, 0, 93, 0, 0, 0, 93, 1, 0, 0, 0, 93, 46, 93, 93, 0, 0, 93, 46, 1, 93, 124, 27, 27, 27, 0, 103, 103, 103, 0, 126, 126, 126, 126, 126, 0, 126, 126, 0, 126, 27, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 126, 0, 0, 55, 0, 93, 88, 128, 10, 121, 0, 0, 8, 8, 0, 0, 93, 0, 0, 0, 93, 1, 0, 0, 0, 93, 46, 93, 93, 0, 0, 93, 46, 1, 93, 124, 27, 27, 27, 0, 103, 103, 103, 0, 126, 126, 126, 126, 126, 0, 126, 126, 0, 126, 27, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 126, 0, 0, 55, 0, 93, 24, 27, 93, 27, 58, 58, 29, 128, 10, 128, 128, 128, 128, 24, 0, 66, 1, 1, 128, 128, 10, 1, 1, 1, 1, 2, 1, 66, 1, 2, 128, 128, 128, 128, 128, 128, 128, 1, 1, 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, 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, 1, 128, 128, 24, 1, 1, 1, 0, 128, 128, 1, 0, 0, 24, 0, 66, 1, 1, 1, 1, 1, 2, 1, 66, 1, 2, 128, 1, 1, 1, 127, 128, 62, 53, 53, 0, 53, 54, 1, 1, 1, 24, 0, 128, 0, 116, 0, 1, 1, 0, 53, 1, 1, 1, 24, 1, 128, 1, 1, 1, 1, 128, 128, 128, 0, 128, 1, 124, 24, 1, 1, 1, 0, 1, 0, 128, 128, 24, 0, 1, 1, 1, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 4, 0, 66, 1, 0, 0, 0, 1, 24, 1, 24, 66, 1, 1, 58, 123, 24, 0, 20, 1, 14, 15, 1, 1, 27, 128, 128, 1, 0, 66, 2, 0, 0, 0, 0, 0, 66, 128, 10, 1, 1, 1, 2, 1, 1, 2, 1, 2, 0, 1, 66, 2, 123, 128, 128, 0, 0, 8, 8, 0, 0, 93, 0, 0, 0, 93, 1, 0, 0, 0, 93, 46, 93, 93, 0, 0, 93, 46, 1, 93, 124, 27, 27, 27, 0, 103, 103, 103, 0, 126, 126, 126, 126, 126, 0, 126, 126, 0, 126, 27, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 126, 0, 0, 55, 0, 128, 128, 128, 0, 1, 0, 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, 128, 128, 66, 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, 0, 64, 93, 24, 0, 1, 1, 1, 0, 128, 128, 24, 0, 1, 1, 1, 0, 128, 128, 1, 0, 0, 24, 0, 66, 1, 1, 128, 128, 10, 1, 24, 0, 0, 20, 2, 12, 1, 54, 48, 75, 67, 15, 58, 0, 1, 0, 67, 67, 67, 67, 10, 0, 1, 0, 67, 67, 67, 67, 67, 67, 67, 67, 69, 67, 69, 67, 1, 2, 1, 66, 1, 2, 128, 128, 0, 128, 128, 128, 128, 128, 128, 0, 1, 0, 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, 84, 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, 128, 128, 128, 128, 128, 128, 128, 0, 64, 0, 38, 38, 47, 52, 1, 92, 101, 91, 1 ] class << self attr_accessor :_lex_index_offsets private :_lex_index_offsets, :_lex_index_offsets= end self._lex_index_offsets = [ 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 46, 175, 304, 433, 562, 609, 688, 767, 861, 889, 917, 964, 1065, 1093, 1127, 1129, 1223, 1302, 1406, 1535, 1664, 1793, 1922, 1969, 2048, 2127, 2221, 2249, 2277, 2324, 2425, 2453, 2487, 2489, 2583, 2662, 2766, 2895, 3024, 3153, 3282, 3411, 3540, 3542, 3671, 3673, 3675, 3677, 3679, 3808, 3937, 4066, 4195, 4324, 4453, 4582, 4711, 4840, 4969, 5098, 5227, 5356, 5485, 5614, 5743, 5872, 6001, 6003, 6005, 6007, 6009, 6019, 6021, 6023, 6025, 6027, 6029, 6031, 6033, 6035, 6164, 6166, 6295, 6297, 6299, 6301, 6303, 6305, 6307, 6431, 6433, 6562, 6691, 6758, 6887, 7016, 7018, 7147, 7276, 7278, 7304, 7306, 7337, 7466, 7554, 7676, 7723, 7802, 7881, 7975, 8003, 8031, 8078, 8179, 8207, 8241, 8243, 8337, 8416, 8520, 8649, 8778, 8907, 9036, 9165, 9294, 9296, 9298, 9427, 9443, 9454, 9465, 9476, 9487, 9616, 9618, 9703, 9788, 9873, 9958, 10043, 10128, 10130, 10132, 10171, 10219, 10316, 10341, 10342, 10344, 10346, 10348, 10373, 10375, 10377, 10471, 10496, 10585, 10714, 10725, 10847, 10848, 10849, 10858, 10867, 10868, 10869, 10963, 10964, 10965, 10966, 11060, 11062, 11063, 11064, 11065, 11159, 11206, 11300, 11394, 11395, 11396, 11490, 11537, 11539, 11633, 11758, 11786, 11814, 11842, 11843, 11947, 12051, 12155, 12156, 12283, 12410, 12537, 12664, 12791, 12792, 12919, 13046, 13047, 13174, 13202, 13329, 13456, 13583, 13710, 13837, 13964, 14091, 14218, 14345, 14472, 14473, 14600, 14601, 14602, 14658, 14659, 14753, 14842, 14971, 14982, 15104, 15105, 15106, 15115, 15124, 15125, 15126, 15220, 15221, 15222, 15223, 15317, 15319, 15320, 15321, 15322, 15416, 15463, 15557, 15651, 15652, 15653, 15747, 15794, 15796, 15890, 16015, 16043, 16071, 16099, 16100, 16204, 16308, 16412, 16413, 16540, 16667, 16794, 16921, 17048, 17049, 17176, 17303, 17304, 17431, 17459, 17586, 17713, 17840, 17967, 18094, 18221, 18348, 18475, 18602, 18729, 18730, 18857, 18858, 18859, 18915, 18916, 19010, 19035, 19063, 19157, 19185, 19244, 19303, 19333, 19462, 19473, 19602, 19731, 19860, 19989, 20014, 20015, 20082, 20084, 20086, 20215, 20344, 20355, 20357, 20359, 20361, 20363, 20366, 20368, 20435, 20437, 20440, 20569, 20698, 20827, 20956, 21085, 21214, 21343, 21345, 21347, 21476, 21605, 21734, 21863, 21992, 22121, 22250, 22379, 22508, 22637, 22766, 22895, 23024, 23153, 23282, 23411, 23540, 23669, 23798, 23927, 24056, 24185, 24314, 24443, 24572, 24701, 24830, 24959, 25088, 25217, 25346, 25475, 25604, 25733, 25862, 25991, 26120, 26249, 26378, 26507, 26636, 26765, 26894, 27023, 27152, 27281, 27410, 27539, 27668, 27797, 27926, 28055, 28184, 28313, 28442, 28571, 28700, 28829, 28958, 29087, 29216, 29345, 29474, 29603, 29732, 29861, 29990, 30119, 30248, 30377, 30506, 30635, 30764, 30893, 31022, 31151, 31280, 31409, 31538, 31667, 31796, 31925, 32054, 32056, 32185, 32314, 32339, 32341, 32343, 32345, 32346, 32475, 32604, 32606, 32607, 32608, 32633, 32634, 32701, 32703, 32705, 32707, 32709, 32711, 32714, 32716, 32783, 32785, 32788, 32917, 32919, 32921, 32923, 33051, 33180, 33243, 33297, 33351, 33352, 33406, 33461, 33463, 33465, 33467, 33492, 33493, 33622, 33623, 33740, 33741, 33743, 33745, 33746, 33800, 33802, 33804, 33806, 33831, 33833, 33962, 33964, 33966, 33968, 33970, 34099, 34228, 34357, 34358, 34487, 34489, 34614, 34639, 34641, 34643, 34645, 34646, 34648, 34649, 34778, 34907, 34932, 34933, 34935, 34937, 34939, 34940, 35069, 35198, 35327, 35456, 35585, 35714, 35843, 35972, 36101, 36230, 36359, 36488, 36617, 36746, 36875, 37004, 37133, 37262, 37267, 37268, 37335, 37337, 37338, 37339, 37340, 37342, 37367, 37369, 37394, 37461, 37463, 37465, 37524, 37648, 37673, 37674, 37695, 37697, 37712, 37728, 37730, 37732, 37760, 37889, 38018, 38020, 38021, 38088, 38091, 38092, 38093, 38094, 38095, 38096, 38163, 38292, 38303, 38305, 38307, 38309, 38312, 38314, 38316, 38319, 38321, 38324, 38325, 38327, 38394, 38397, 38521, 38650, 38779, 38780, 38781, 38790, 38799, 38800, 38801, 38895, 38896, 38897, 38898, 38992, 38994, 38995, 38996, 38997, 39091, 39138, 39232, 39326, 39327, 39328, 39422, 39469, 39471, 39565, 39690, 39718, 39746, 39774, 39775, 39879, 39983, 40087, 40088, 40215, 40342, 40469, 40596, 40723, 40724, 40851, 40978, 40979, 41106, 41134, 41261, 41388, 41515, 41642, 41769, 41896, 42023, 42150, 42277, 42404, 42405, 42532, 42533, 42534, 42590, 42591, 42720, 42849, 42978, 42979, 42981, 42982, 43111, 43240, 43369, 43498, 43627, 43756, 43885, 44014, 44143, 44272, 44401, 44530, 44659, 44788, 44917, 45046, 45175, 45304, 45433, 45562, 45691, 45820, 45949, 46078, 46207, 46336, 46465, 46594, 46723, 46852, 46981, 47110, 47239, 47368, 47497, 47626, 47755, 47884, 48013, 48142, 48271, 48400, 48529, 48658, 48787, 48916, 49045, 49174, 49303, 49432, 49561, 49690, 49819, 49948, 50077, 50206, 50335, 50464, 50593, 50722, 50789, 50918, 51047, 51176, 51305, 51434, 51563, 51692, 51821, 51950, 52079, 52208, 52337, 52466, 52595, 52724, 52853, 52982, 53111, 53240, 53369, 53498, 53627, 53756, 53885, 54014, 54015, 54080, 54174, 54199, 54200, 54202, 54204, 54206, 54207, 54336, 54465, 54490, 54491, 54493, 54495, 54497, 54498, 54627, 54756, 54758, 54759, 54760, 54785, 54786, 54853, 54855, 54857, 54986, 55115, 55126, 55128, 55153, 55154, 55155, 55176, 55179, 55192, 55194, 55249, 55298, 55374, 55442, 55458, 55517, 55518, 55520, 55521, 55589, 55657, 55725, 55793, 55804, 55805, 55807, 55808, 55876, 55944, 56012, 56080, 56148, 56216, 56284, 56352, 56422, 56490, 56560, 56628, 56630, 56633, 56635, 56702, 56704, 56707, 56836, 56965, 56966, 57095, 57224, 57353, 57482, 57611, 57740, 57741, 57743, 57744, 57873, 58002, 58131, 58260, 58389, 58518, 58647, 58776, 58905, 59034, 59163, 59292, 59421, 59550, 59679, 59808, 59937, 60066, 60195, 60324, 60453, 60582, 60711, 60840, 60969, 61098, 61227, 61356, 61485, 61614, 61743, 61872, 62001, 62130, 62259, 62388, 62517, 62602, 62731, 62860, 62989, 63118, 63247, 63376, 63505, 63634, 63763, 63892, 64021, 64150, 64279, 64408, 64537, 64666, 64795, 64924, 65053, 65182, 65311, 65440, 65569, 65698, 65827, 65956, 66085, 66214, 66343, 66472, 66601, 66730, 66859, 66988, 67117, 67246, 67375, 67504, 67633, 67762, 67891, 68020, 68149, 68278, 68407, 68536, 68665, 68794, 68923, 69052, 69181, 69310, 69439, 69568, 69697, 69826, 69955, 70084, 70213, 70342, 70471, 70600, 70729, 70858, 70987, 70988, 71053, 71054, 71093, 71132, 71180, 71233, 71235, 71328, 71430, 71522 ] class << self attr_accessor :_lex_indicies private :_lex_indicies, :_lex_indicies= end self._lex_indicies = [ 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 14, 14, 12, 14, 12, 14, 14, 12, 12, 14, 14, 14, 15, 14, 14, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 14, 12, 12, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 14, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 12, 12, 12, 14, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 12, 12, 12, 12, 14, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 17, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 13, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 13, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 13, 18, 19, 19, 19, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 19, 18, 21, 21, 21, 18, 21, 21, 21, 21, 21, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 18, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 23, 21, 18, 21, 21, 21, 18, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 18, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 24, 21, 18, 25, 25, 25, 18, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 18, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 25, 18, 28, 28, 28, 18, 28, 28, 28, 28, 28, 29, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 18, 28, 18, 28, 28, 28, 18, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 18, 28, 18, 19, 19, 19, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 30, 19, 18, 31, 31, 31, 18, 31, 31, 31, 31, 31, 32, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 18, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 33, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 34, 31, 31, 31, 31, 31, 31, 35, 31, 18, 31, 31, 31, 18, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 18, 31, 36, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 37, 18, 37, 18, 18, 38, 38, 38, 18, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 18, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 40, 38, 18, 21, 21, 21, 18, 21, 21, 21, 21, 21, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 18, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 24, 21, 18, 41, 41, 41, 18, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 18, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 41, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 45, 45, 43, 45, 43, 45, 45, 43, 43, 45, 45, 45, 46, 45, 45, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 45, 45, 45, 45, 45, 45, 45, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 43, 45, 43, 43, 44, 45, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 43, 43, 43, 45, 43, 44, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 43, 43, 43, 43, 43, 43, 43, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 43, 43, 43, 43, 45, 43, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 43, 43, 43, 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 43, 43, 43, 43, 43, 43, 48, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 43, 43, 43, 43, 44, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 43, 43, 43, 43, 43, 44, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 43, 43, 43, 43, 44, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 43, 43, 43, 43, 43, 44, 49, 50, 50, 50, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, 50, 49, 52, 52, 52, 49, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 49, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 52, 49, 52, 52, 52, 49, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 49, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 55, 52, 49, 56, 56, 56, 49, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 49, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 58, 56, 49, 59, 59, 59, 49, 59, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 49, 59, 49, 59, 59, 59, 49, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 49, 59, 49, 50, 50, 50, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 61, 50, 49, 62, 62, 62, 49, 62, 62, 62, 62, 62, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 49, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 64, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 65, 62, 62, 62, 62, 62, 62, 66, 62, 49, 62, 62, 62, 49, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 49, 62, 67, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 68, 49, 68, 49, 49, 69, 69, 69, 49, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 49, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 71, 69, 49, 52, 52, 52, 49, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 49, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 55, 52, 49, 72, 72, 72, 49, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 49, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 72, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 76, 75, 76, 75, 75, 76, 76, 75, 75, 75, 77, 75, 75, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 75, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 76, 75, 76, 76, 74, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 76, 76, 76, 75, 76, 74, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 76, 76, 76, 76, 76, 76, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 76, 76, 76, 76, 79, 76, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 76, 76, 76, 76, 76, 79, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 76, 76, 76, 76, 76, 76, 76, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 76, 76, 76, 76, 81, 76, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 76, 76, 76, 76, 76, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 82, 83, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 82, 82, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 86, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 87, 84, 84, 84, 84, 86, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 85, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 85, 87, 84, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 90, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 88, 88, 88, 88, 90, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 88, 88, 88, 88, 89, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 88, 88, 88, 88, 88, 89, 91, 88, 93, 92, 94, 92, 95, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 97, 92, 97, 97, 97, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 97, 92, 92, 92, 92, 98, 99, 92, 100, 92, 101, 102, 103, 104, 105, 98, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 106, 92, 107, 103, 108, 109, 92, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 110, 111, 103, 112, 96, 92, 96, 96, 96, 96, 96, 96, 96, 96, 113, 96, 96, 96, 96, 96, 96, 96, 96, 114, 96, 96, 115, 96, 116, 96, 96, 96, 117, 118, 92, 112, 92, 96, 92, 92, 92, 92, 92, 92, 92, 92, 92, 119, 92, 119, 119, 119, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 119, 92, 92, 92, 92, 120, 121, 92, 122, 92, 123, 124, 125, 126, 127, 120, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 128, 92, 129, 125, 130, 131, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 132, 133, 125, 94, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 134, 89, 89, 89, 89, 89, 89, 89, 89, 135, 89, 89, 136, 89, 137, 89, 89, 89, 138, 139, 92, 94, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 140, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 141, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 142, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 143, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 144, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 140, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 145, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 146, 89, 89, 89, 89, 89, 89, 89, 147, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 148, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 149, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 140, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 150, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 140, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 151, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 152, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 92, 92, 92, 92, 90, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 144, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 92, 92, 89, 154, 153, 155, 153, 156, 153, 125, 153, 157, 153, 153, 153, 153, 153, 153, 153, 158, 153, 159, 153, 160, 153, 125, 153, 161, 153, 125, 153, 162, 153, 156, 153, 164, 163, 165, 165, 165, 165, 165, 165, 165, 165, 165, 167, 165, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 167, 165, 165, 165, 165, 165, 165, 165, 168, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 169, 165, 165, 166, 165, 166, 166, 166, 170, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 166, 171, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 173, 165, 173, 173, 173, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 173, 165, 165, 165, 165, 165, 165, 165, 174, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 165, 175, 165, 165, 172, 165, 172, 172, 172, 176, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 165, 165, 165, 165, 165, 172, 177, 178, 180, 179, 181, 179, 182, 179, 183, 179, 184, 179, 185, 186, 186, 186, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 188, 177, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 191, 191, 189, 191, 189, 191, 191, 189, 189, 191, 191, 191, 192, 191, 191, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 191, 191, 191, 191, 191, 191, 191, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 189, 191, 189, 189, 190, 191, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 189, 189, 189, 191, 189, 190, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 189, 189, 189, 189, 189, 189, 189, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 189, 189, 189, 189, 191, 189, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 189, 189, 189, 189, 189, 191, 194, 191, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 191, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 195, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 189, 189, 189, 189, 190, 189, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 189, 189, 189, 189, 189, 190, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 189, 189, 189, 189, 190, 189, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 189, 189, 189, 189, 189, 190, 194, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 197, 189, 189, 189, 189, 198, 189, 189, 189, 189, 189, 199, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 188, 189, 189, 189, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 189, 189, 189, 189, 196, 200, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 189, 189, 189, 189, 189, 196, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 203, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 202, 202, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 201, 202, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 201, 205, 204, 189, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 206, 197, 203, 202, 189, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 206, 198, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 197, 189, 189, 189, 189, 198, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 189, 189, 189, 189, 196, 200, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 189, 189, 189, 189, 189, 196, 189, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 206, 200, 209, 208, 208, 208, 209, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 209, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 210, 210, 210, 210, 210, 210, 210, 210, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 211, 208, 208, 208, 208, 208, 208, 208, 208, 208, 212, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 213, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 214, 208, 208, 215, 208, 207, 216, 216, 216, 207, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 207, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 217, 216, 218, 219, 219, 219, 218, 219, 219, 219, 219, 219, 220, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 218, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 221, 219, 218, 219, 219, 219, 218, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 218, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 222, 219, 218, 223, 223, 223, 218, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 218, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 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, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 225, 223, 218, 226, 226, 226, 218, 226, 226, 226, 226, 226, 227, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 218, 226, 218, 226, 226, 226, 218, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 218, 226, 207, 216, 216, 216, 207, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 207, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 228, 216, 218, 229, 229, 229, 218, 229, 229, 229, 229, 229, 230, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 218, 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, 231, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 232, 229, 229, 229, 229, 229, 229, 233, 229, 218, 229, 229, 229, 218, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 218, 229, 234, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 235, 218, 235, 218, 207, 236, 236, 236, 207, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 207, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 237, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 238, 236, 207, 219, 219, 219, 207, 219, 219, 219, 219, 219, 220, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 207, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 222, 219, 207, 239, 239, 239, 207, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 207, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 239, 239, 239, 239, 239, 239, 239, 240, 240, 240, 240, 240, 240, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 240, 240, 240, 240, 240, 240, 239, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 242, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 243, 177, 177, 244, 177, 245, 177, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 177, 177, 177, 177, 241, 177, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 177, 177, 177, 177, 177, 241, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 242, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 243, 189, 189, 244, 189, 245, 189, 241, 241, 241, 241, 241, 241, 246, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 189, 189, 189, 189, 241, 189, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 189, 189, 189, 189, 189, 241, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 242, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 243, 189, 189, 244, 189, 245, 189, 241, 241, 241, 241, 241, 241, 241, 241, 247, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 189, 189, 189, 189, 241, 189, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 189, 189, 189, 189, 189, 241, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 242, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 243, 189, 189, 244, 189, 245, 189, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 248, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 189, 189, 189, 189, 241, 189, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 189, 189, 189, 189, 189, 241, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 242, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 243, 189, 189, 244, 189, 245, 189, 241, 241, 241, 248, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 189, 189, 189, 189, 241, 189, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 189, 189, 189, 189, 189, 241, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 251, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 252, 249, 249, 249, 249, 251, 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, 249, 249, 249, 249, 250, 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, 249, 249, 249, 249, 249, 250, 252, 249, 249, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 254, 254, 254, 254, 255, 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, 254, 254, 254, 254, 254, 255, 257, 256, 257, 256, 256, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 256, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 256, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 256, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 260, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 260, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 254, 254, 254, 254, 254, 254, 254, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 254, 254, 254, 254, 263, 254, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 254, 254, 254, 254, 254, 263, 264, 260, 265, 266, 265, 265, 265, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 265, 260, 260, 267, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 268, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 269, 260, 270, 271, 270, 270, 270, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 270, 260, 260, 272, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 273, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 274, 260, 276, 277, 276, 276, 276, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 276, 275, 275, 278, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 279, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 280, 275, 282, 283, 282, 282, 282, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 281, 281, 284, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 285, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 286, 281, 282, 283, 282, 282, 282, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 281, 281, 284, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 287, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 286, 281, 282, 288, 282, 282, 282, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 281, 281, 284, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 285, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 286, 281, 289, 260, 266, 260, 291, 290, 291, 291, 291, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 291, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 292, 290, 290, 293, 293, 293, 290, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 290, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 290, 293, 295, 294, 294, 294, 295, 294, 294, 294, 294, 296, 297, 296, 296, 296, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 295, 294, 294, 294, 294, 294, 296, 294, 294, 298, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 299, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 300, 294, 294, 301, 294, 296, 302, 296, 296, 296, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 296, 302, 303, 304, 305, 306, 307, 309, 308, 311, 312, 311, 311, 311, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 311, 310, 297, 308, 313, 308, 315, 314, 314, 314, 315, 314, 314, 314, 314, 316, 317, 316, 316, 316, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 315, 314, 314, 314, 314, 314, 316, 314, 314, 318, 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, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 319, 314, 316, 320, 316, 316, 316, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 316, 320, 322, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 323, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 324, 321, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 325, 325, 325, 325, 325, 325, 325, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 325, 325, 325, 325, 13, 325, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 325, 325, 325, 325, 325, 13, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 325, 328, 327, 327, 327, 328, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 328, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 329, 329, 329, 329, 329, 329, 329, 329, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 330, 327, 327, 327, 327, 327, 327, 327, 327, 327, 331, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 332, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 333, 327, 327, 334, 327, 335, 336, 338, 338, 338, 338, 338, 338, 338, 338, 337, 339, 339, 339, 339, 339, 339, 339, 339, 337, 337, 340, 340, 38, 38, 38, 340, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 340, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 341, 38, 342, 343, 344, 344, 38, 38, 38, 344, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 344, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 345, 38, 37, 344, 346, 347, 348, 348, 25, 25, 25, 348, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 348, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 349, 25, 344, 19, 19, 19, 344, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 344, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 350, 19, 340, 25, 25, 25, 340, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 340, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 25, 340, 351, 351, 351, 340, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 340, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 352, 351, 353, 354, 354, 351, 351, 351, 354, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 354, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 355, 351, 354, 19, 19, 19, 354, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 354, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 350, 19, 356, 354, 354, 25, 25, 25, 354, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 354, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 25, 357, 358, 358, 358, 357, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 357, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 358, 358, 358, 358, 358, 358, 358, 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, 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, 360, 358, 357, 361, 361, 361, 357, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 357, 361, 357, 362, 362, 362, 357, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 357, 362, 357, 363, 363, 363, 357, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 357, 363, 357, 357, 361, 361, 361, 357, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 357, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 361, 361, 361, 361, 361, 361, 361, 364, 364, 364, 364, 364, 364, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 364, 364, 364, 364, 364, 364, 361, 357, 362, 362, 362, 357, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 357, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 362, 362, 362, 362, 362, 362, 362, 365, 365, 365, 365, 365, 365, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 365, 365, 365, 365, 365, 365, 362, 357, 363, 363, 363, 357, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 357, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 363, 363, 363, 363, 363, 363, 363, 366, 366, 366, 366, 366, 366, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 366, 366, 366, 366, 366, 366, 363, 367, 370, 369, 369, 369, 370, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 370, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 369, 369, 369, 369, 369, 369, 369, 371, 371, 371, 371, 371, 371, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 371, 371, 371, 371, 371, 371, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 361, 369, 370, 372, 372, 372, 370, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 370, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 372, 372, 372, 372, 372, 372, 372, 373, 373, 373, 373, 373, 373, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 373, 373, 373, 373, 373, 373, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 374, 372, 370, 375, 375, 375, 370, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 370, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 375, 375, 375, 375, 375, 375, 375, 376, 376, 376, 376, 376, 376, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 376, 376, 376, 376, 376, 376, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 377, 375, 370, 378, 378, 378, 370, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 378, 378, 378, 378, 378, 378, 378, 379, 379, 379, 379, 379, 379, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 379, 379, 379, 379, 379, 379, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 370, 378, 378, 378, 370, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 378, 378, 378, 378, 378, 378, 378, 379, 379, 379, 379, 379, 379, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 379, 379, 379, 379, 379, 379, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 380, 370, 379, 379, 379, 370, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 370, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 380, 379, 370, 379, 379, 379, 370, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 370, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 368, 379, 368, 370, 376, 376, 376, 370, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 370, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 363, 376, 368, 363, 363, 363, 368, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 368, 363, 370, 372, 372, 372, 370, 372, 372, 372, 372, 381, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 370, 372, 372, 372, 372, 372, 381, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 372, 372, 372, 372, 372, 372, 372, 382, 382, 382, 382, 382, 382, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 382, 382, 382, 382, 382, 382, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 383, 372, 370, 378, 378, 378, 370, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 378, 378, 378, 378, 378, 378, 378, 384, 384, 384, 384, 384, 384, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 384, 384, 384, 384, 384, 384, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 370, 378, 378, 378, 370, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 378, 378, 378, 378, 378, 378, 378, 386, 386, 386, 386, 386, 386, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 386, 386, 386, 386, 386, 386, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 387, 378, 370, 378, 378, 378, 370, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 378, 378, 378, 378, 378, 378, 378, 384, 384, 384, 384, 384, 384, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 384, 384, 384, 384, 384, 384, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 370, 378, 378, 378, 370, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 378, 378, 378, 378, 378, 378, 378, 388, 388, 388, 388, 388, 388, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 388, 388, 388, 388, 388, 388, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 387, 378, 370, 378, 378, 378, 370, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 378, 378, 378, 378, 378, 378, 378, 389, 389, 389, 389, 389, 389, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 389, 389, 389, 389, 389, 389, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 387, 378, 370, 378, 378, 378, 370, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 378, 378, 378, 378, 378, 378, 378, 390, 390, 390, 390, 390, 390, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 390, 390, 390, 390, 390, 390, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 387, 378, 370, 378, 378, 378, 370, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 378, 378, 378, 378, 378, 378, 378, 391, 391, 391, 391, 391, 391, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 391, 391, 391, 391, 391, 391, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 387, 378, 370, 378, 378, 378, 370, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 385, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 378, 378, 378, 378, 378, 378, 378, 392, 392, 392, 392, 392, 392, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 392, 392, 392, 392, 392, 392, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 387, 378, 370, 378, 378, 378, 370, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 370, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 378, 378, 378, 378, 378, 378, 378, 392, 392, 392, 392, 392, 392, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 392, 392, 392, 392, 392, 392, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 380, 378, 393, 370, 375, 375, 375, 370, 375, 375, 375, 375, 385, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 370, 375, 375, 375, 375, 375, 385, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 375, 375, 375, 375, 375, 375, 375, 388, 388, 388, 388, 388, 388, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 388, 388, 388, 388, 388, 388, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 387, 375, 394, 395, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 396, 396, 396, 396, 396, 396, 396, 397, 397, 397, 397, 397, 397, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 397, 397, 397, 397, 397, 397, 396, 396, 399, 398, 398, 398, 399, 398, 398, 398, 398, 398, 400, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 399, 398, 398, 398, 398, 398, 398, 398, 398, 401, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 402, 398, 404, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 405, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 406, 403, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 407, 407, 407, 407, 407, 407, 407, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 407, 407, 407, 407, 44, 407, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 407, 407, 407, 407, 407, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 407, 410, 409, 409, 409, 410, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 410, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 411, 411, 411, 411, 411, 411, 411, 411, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 412, 409, 409, 409, 409, 409, 409, 409, 409, 409, 413, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 414, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 415, 409, 409, 416, 409, 417, 418, 420, 420, 420, 420, 420, 420, 420, 420, 419, 421, 421, 421, 421, 421, 421, 421, 421, 419, 419, 422, 422, 69, 69, 69, 422, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 422, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 423, 69, 424, 425, 426, 426, 69, 69, 69, 426, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 426, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 427, 69, 68, 426, 428, 429, 430, 430, 56, 56, 56, 430, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 430, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 431, 56, 426, 50, 50, 50, 426, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 426, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 432, 50, 422, 56, 56, 56, 422, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 422, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 58, 56, 422, 433, 433, 433, 422, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 422, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 434, 433, 435, 436, 436, 433, 433, 433, 436, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 436, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 437, 433, 436, 50, 50, 50, 436, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 436, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 432, 50, 438, 436, 436, 56, 56, 56, 436, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 436, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 58, 56, 439, 440, 440, 440, 439, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 439, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 440, 440, 440, 440, 440, 440, 440, 441, 441, 441, 441, 441, 441, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 441, 441, 441, 441, 441, 441, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 442, 440, 439, 443, 443, 443, 439, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 439, 443, 439, 444, 444, 444, 439, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 439, 444, 439, 445, 445, 445, 439, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 439, 445, 439, 439, 443, 443, 443, 439, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 439, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 443, 443, 443, 443, 443, 443, 443, 446, 446, 446, 446, 446, 446, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 446, 446, 446, 446, 446, 446, 443, 439, 444, 444, 444, 439, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 439, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 444, 444, 444, 444, 444, 444, 444, 447, 447, 447, 447, 447, 447, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 447, 447, 447, 447, 447, 447, 444, 439, 445, 445, 445, 439, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 439, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 445, 445, 445, 445, 445, 445, 445, 448, 448, 448, 448, 448, 448, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 448, 448, 448, 448, 448, 448, 445, 449, 452, 451, 451, 451, 452, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 452, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 451, 451, 451, 451, 451, 451, 451, 453, 453, 453, 453, 453, 453, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 453, 453, 453, 453, 453, 453, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 443, 451, 452, 454, 454, 454, 452, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 452, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 454, 454, 454, 454, 454, 454, 454, 455, 455, 455, 455, 455, 455, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 455, 455, 455, 455, 455, 455, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 456, 454, 452, 457, 457, 457, 452, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 452, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 457, 457, 457, 457, 457, 457, 457, 458, 458, 458, 458, 458, 458, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 458, 458, 458, 458, 458, 458, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 459, 457, 452, 460, 460, 460, 452, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 460, 460, 460, 460, 460, 460, 460, 461, 461, 461, 461, 461, 461, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 461, 461, 461, 461, 461, 461, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 452, 460, 460, 460, 452, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 460, 460, 460, 460, 460, 460, 460, 461, 461, 461, 461, 461, 461, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 461, 461, 461, 461, 461, 461, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 462, 452, 461, 461, 461, 452, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 452, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 462, 461, 452, 461, 461, 461, 452, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 452, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 450, 461, 450, 452, 458, 458, 458, 452, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 452, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 445, 458, 450, 445, 445, 445, 450, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 450, 445, 452, 454, 454, 454, 452, 454, 454, 454, 454, 463, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 452, 454, 454, 454, 454, 454, 463, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 454, 454, 454, 454, 454, 454, 454, 464, 464, 464, 464, 464, 464, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 464, 464, 464, 464, 464, 464, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 465, 454, 452, 460, 460, 460, 452, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 460, 460, 460, 460, 460, 460, 460, 466, 466, 466, 466, 466, 466, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 466, 466, 466, 466, 466, 466, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 452, 460, 460, 460, 452, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 460, 460, 460, 460, 460, 460, 460, 468, 468, 468, 468, 468, 468, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 468, 468, 468, 468, 468, 468, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 469, 460, 452, 460, 460, 460, 452, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 460, 460, 460, 460, 460, 460, 460, 466, 466, 466, 466, 466, 466, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 466, 466, 466, 466, 466, 466, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 452, 460, 460, 460, 452, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 460, 460, 460, 460, 460, 460, 460, 470, 470, 470, 470, 470, 470, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 470, 470, 470, 470, 470, 470, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 469, 460, 452, 460, 460, 460, 452, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 460, 460, 460, 460, 460, 460, 460, 471, 471, 471, 471, 471, 471, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 471, 471, 471, 471, 471, 471, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 469, 460, 452, 460, 460, 460, 452, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 460, 460, 460, 460, 460, 460, 460, 472, 472, 472, 472, 472, 472, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 472, 472, 472, 472, 472, 472, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 469, 460, 452, 460, 460, 460, 452, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 460, 460, 460, 460, 460, 460, 460, 473, 473, 473, 473, 473, 473, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 473, 473, 473, 473, 473, 473, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 469, 460, 452, 460, 460, 460, 452, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 467, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 460, 460, 460, 460, 460, 460, 460, 474, 474, 474, 474, 474, 474, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 474, 474, 474, 474, 474, 474, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 469, 460, 452, 460, 460, 460, 452, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 452, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 460, 460, 460, 460, 460, 460, 460, 474, 474, 474, 474, 474, 474, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 474, 474, 474, 474, 474, 474, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 462, 460, 475, 452, 457, 457, 457, 452, 457, 457, 457, 457, 467, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 452, 457, 457, 457, 457, 457, 467, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 457, 457, 457, 457, 457, 457, 457, 470, 470, 470, 470, 470, 470, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 470, 470, 470, 470, 470, 470, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 469, 457, 476, 477, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 478, 478, 478, 478, 478, 478, 478, 479, 479, 479, 479, 479, 479, 478, 478, 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, 478, 478, 481, 480, 480, 480, 481, 480, 480, 480, 480, 482, 483, 482, 482, 482, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 481, 480, 480, 480, 480, 480, 482, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 484, 480, 482, 485, 482, 482, 482, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 482, 485, 486, 487, 487, 487, 486, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 486, 487, 489, 488, 488, 488, 489, 488, 488, 488, 488, 488, 490, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 489, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 491, 488, 492, 493, 493, 493, 492, 493, 493, 493, 493, 493, 494, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 492, 493, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 495, 495, 495, 495, 495, 495, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 495, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 497, 497, 497, 497, 497, 497, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 497, 498, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 499, 76, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 500, 500, 500, 500, 500, 500, 500, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 500, 500, 500, 500, 74, 500, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 500, 500, 500, 500, 500, 74, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 500, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 501, 501, 501, 501, 501, 501, 501, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 501, 501, 501, 501, 79, 501, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 501, 501, 501, 501, 501, 79, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 502, 502, 502, 502, 502, 502, 502, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 502, 502, 502, 502, 81, 502, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 502, 502, 502, 502, 502, 81, 504, 505, 505, 505, 504, 505, 505, 505, 505, 506, 507, 506, 506, 506, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 504, 505, 505, 505, 505, 505, 506, 508, 505, 509, 510, 511, 512, 505, 505, 505, 513, 514, 505, 514, 505, 511, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 515, 505, 516, 517, 518, 505, 505, 519, 520, 519, 519, 521, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 522, 523, 505, 511, 524, 511, 525, 526, 527, 528, 529, 530, 503, 503, 531, 503, 503, 503, 532, 533, 534, 503, 503, 535, 536, 537, 538, 503, 539, 503, 540, 503, 505, 541, 505, 514, 505, 503, 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, 543, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 542, 542, 542, 543, 542, 543, 542, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 542, 542, 542, 542, 503, 542, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 542, 542, 542, 542, 542, 503, 506, 544, 506, 506, 506, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 506, 544, 545, 511, 546, 546, 511, 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, 546, 511, 546, 547, 548, 549, 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, 551, 551, 551, 551, 551, 83, 83, 551, 83, 551, 83, 83, 551, 551, 83, 83, 83, 553, 83, 83, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 83, 83, 83, 83, 83, 83, 83, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 551, 83, 551, 551, 552, 83, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 551, 551, 551, 83, 551, 552, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 555, 555, 555, 555, 555, 555, 555, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 555, 555, 555, 555, 552, 555, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 555, 555, 555, 555, 555, 552, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 555, 511, 546, 511, 546, 511, 546, 557, 556, 511, 558, 546, 511, 546, 559, 511, 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, 551, 551, 551, 511, 551, 511, 546, 511, 511, 546, 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, 543, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 542, 542, 542, 543, 542, 543, 542, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 542, 542, 542, 542, 519, 542, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 542, 542, 542, 542, 542, 519, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 543, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 543, 560, 543, 560, 519, 519, 519, 519, 561, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 519, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 560, 519, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 543, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 543, 560, 543, 560, 519, 519, 519, 519, 519, 519, 562, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 519, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 560, 519, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 543, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 543, 560, 543, 560, 519, 519, 519, 519, 519, 519, 519, 519, 563, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 519, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 560, 519, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 543, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 543, 560, 543, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 564, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 519, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 560, 519, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 543, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 543, 560, 543, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 565, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 519, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 560, 519, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 543, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 543, 560, 543, 560, 519, 519, 519, 564, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 519, 560, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 560, 560, 560, 560, 560, 519, 559, 551, 507, 551, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 567, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 568, 569, 503, 503, 503, 503, 503, 570, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 571, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 572, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 573, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 574, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 575, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 576, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 577, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 578, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 579, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 580, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 581, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 577, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 582, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 581, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 583, 503, 584, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 585, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 586, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 587, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 588, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 589, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 590, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 591, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 592, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 593, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 594, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 595, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 596, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 586, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 597, 503, 503, 503, 503, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 598, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 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, 543, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 599, 599, 599, 543, 599, 543, 599, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 599, 599, 599, 599, 503, 599, 503, 503, 503, 503, 503, 503, 503, 503, 600, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 599, 599, 599, 599, 599, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 601, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 602, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 603, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 604, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 605, 503, 606, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 607, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 579, 503, 503, 503, 608, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 609, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 610, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 595, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 611, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 534, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 593, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 612, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 613, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 614, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 595, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 615, 503, 503, 503, 616, 503, 503, 503, 503, 503, 617, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 617, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 618, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 619, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 620, 621, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 579, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 622, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 595, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 623, 503, 503, 624, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 579, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 590, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 625, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 626, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 608, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 627, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 534, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 628, 503, 503, 503, 503, 503, 503, 503, 503, 503, 622, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 590, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 629, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 630, 503, 503, 503, 503, 503, 503, 503, 631, 503, 503, 503, 503, 503, 503, 503, 632, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 608, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 596, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 616, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 633, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 590, 503, 503, 503, 614, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 634, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 635, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 543, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 543, 566, 543, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 503, 566, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 584, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 566, 566, 566, 566, 566, 503, 511, 546, 637, 638, 638, 638, 637, 638, 638, 638, 638, 639, 638, 639, 639, 639, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 637, 638, 638, 638, 638, 638, 639, 638, 638, 640, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 638, 641, 638, 638, 636, 638, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 638, 638, 638, 638, 638, 636, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 86, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 87, 642, 642, 642, 642, 86, 642, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 642, 642, 642, 642, 85, 642, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 642, 642, 642, 642, 642, 85, 639, 643, 639, 639, 639, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 639, 643, 644, 645, 646, 647, 648, 642, 649, 651, 652, 652, 652, 651, 652, 652, 652, 652, 653, 654, 653, 653, 653, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 651, 652, 652, 652, 652, 652, 653, 655, 652, 656, 652, 657, 658, 652, 652, 652, 659, 660, 652, 660, 652, 657, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 661, 662, 663, 652, 652, 664, 664, 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, 666, 652, 657, 650, 657, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 652, 667, 652, 660, 652, 650, 668, 668, 668, 668, 668, 668, 668, 668, 668, 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, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 668, 668, 668, 668, 668, 670, 668, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 668, 668, 668, 668, 650, 668, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 668, 668, 668, 668, 668, 650, 672, 671, 673, 671, 653, 674, 653, 653, 653, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 653, 674, 675, 657, 676, 676, 657, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 657, 676, 677, 678, 679, 680, 657, 676, 657, 676, 657, 676, 657, 681, 676, 657, 676, 683, 657, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 657, 682, 657, 676, 657, 657, 676, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 669, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 684, 684, 684, 684, 684, 670, 684, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 684, 684, 684, 684, 664, 684, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 684, 684, 684, 684, 684, 664, 683, 682, 654, 682, 657, 676, 686, 685, 685, 685, 686, 685, 685, 685, 685, 687, 688, 687, 687, 687, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 686, 685, 685, 685, 685, 685, 687, 685, 685, 689, 685, 94, 690, 685, 691, 685, 692, 94, 125, 693, 127, 94, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 694, 685, 695, 125, 696, 697, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 125, 698, 125, 94, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 699, 685, 685, 685, 685, 685, 685, 685, 685, 700, 685, 685, 701, 685, 702, 685, 685, 685, 138, 139, 685, 94, 685, 703, 703, 703, 703, 703, 703, 703, 703, 703, 687, 703, 687, 687, 687, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 687, 703, 703, 703, 703, 120, 121, 703, 122, 703, 123, 124, 125, 126, 127, 120, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 128, 703, 129, 125, 130, 131, 703, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 132, 133, 125, 94, 89, 703, 89, 89, 89, 89, 89, 89, 89, 89, 134, 89, 89, 89, 89, 89, 89, 89, 89, 135, 89, 89, 136, 89, 137, 89, 89, 89, 138, 139, 703, 94, 703, 89, 704, 705, 705, 705, 704, 705, 705, 705, 705, 125, 706, 125, 125, 125, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 704, 705, 705, 705, 705, 705, 125, 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, 125, 705, 125, 706, 125, 125, 125, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 125, 88, 88, 88, 88, 88, 94, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 125, 88, 125, 706, 125, 125, 125, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 125, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 125, 88, 707, 125, 706, 125, 125, 125, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 125, 708, 708, 708, 708, 708, 708, 708, 708, 708, 709, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 125, 708, 125, 706, 125, 125, 125, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 125, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 125, 125, 88, 710, 704, 125, 704, 712, 711, 714, 715, 714, 714, 714, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 714, 713, 716, 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, 90, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 704, 704, 704, 704, 90, 704, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 704, 704, 704, 704, 89, 704, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 704, 704, 704, 704, 704, 89, 717, 125, 706, 125, 125, 125, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 125, 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, 125, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 94, 704, 718, 719, 720, 721, 722, 723, 125, 706, 125, 125, 125, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 125, 704, 704, 704, 704, 704, 704, 704, 704, 704, 94, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 125, 704, 125, 711, 94, 724, 94, 724, 725, 726, 725, 725, 725, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 725, 713, 727, 724, 728, 728, 728, 728, 728, 728, 728, 728, 728, 97, 728, 97, 97, 97, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 97, 728, 728, 728, 728, 98, 99, 728, 100, 728, 101, 102, 103, 104, 105, 98, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 106, 728, 107, 103, 108, 109, 728, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 110, 111, 103, 112, 96, 728, 96, 96, 96, 96, 96, 96, 96, 96, 113, 96, 96, 96, 96, 96, 96, 96, 96, 114, 96, 96, 115, 96, 116, 96, 96, 96, 117, 118, 728, 112, 728, 96, 125, 724, 729, 724, 730, 724, 731, 724, 732, 164, 164, 164, 732, 164, 164, 164, 164, 733, 164, 733, 733, 733, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 732, 164, 164, 164, 164, 164, 733, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 164, 734, 164, 164, 166, 164, 166, 166, 166, 170, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 164, 164, 164, 164, 164, 166, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 735, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 164, 163, 163, 163, 163, 735, 163, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 163, 163, 163, 163, 166, 163, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 163, 163, 163, 163, 163, 166, 736, 736, 736, 736, 736, 736, 736, 736, 736, 167, 736, 167, 167, 167, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 167, 736, 736, 736, 736, 736, 736, 736, 168, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 736, 169, 736, 736, 166, 736, 166, 166, 166, 170, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 736, 736, 736, 736, 736, 166, 737, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 735, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 164, 736, 736, 736, 736, 735, 736, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 736, 736, 736, 736, 166, 736, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 738, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 736, 736, 736, 736, 736, 166, 171, 736, 740, 739, 739, 739, 740, 739, 739, 739, 739, 741, 739, 741, 741, 741, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 740, 739, 739, 739, 739, 739, 741, 739, 739, 742, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 743, 739, 739, 739, 739, 739, 739, 739, 744, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 745, 739, 741, 746, 741, 741, 741, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 741, 746, 747, 748, 749, 750, 752, 751, 753, 754, 751, 755, 757, 758, 758, 758, 757, 758, 758, 758, 758, 759, 760, 759, 759, 759, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 757, 758, 758, 758, 758, 758, 759, 758, 758, 761, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 758, 762, 758, 758, 756, 758, 756, 756, 756, 756, 756, 756, 756, 756, 763, 756, 756, 756, 756, 756, 756, 756, 756, 764, 756, 756, 765, 756, 766, 756, 756, 756, 758, 758, 758, 758, 758, 756, 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, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 767, 767, 767, 767, 767, 767, 767, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 767, 767, 767, 767, 756, 767, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 767, 767, 767, 767, 767, 756, 759, 768, 759, 759, 759, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 759, 768, 769, 770, 771, 772, 773, 775, 774, 776, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 778, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 779, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 780, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 781, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 782, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 778, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 783, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 784, 756, 756, 756, 756, 756, 756, 756, 785, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 786, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 787, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 778, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 756, 788, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 778, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 789, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 756, 790, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 777, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 756, 777, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 782, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 777, 777, 777, 777, 777, 756, 792, 188, 188, 188, 792, 188, 188, 188, 188, 793, 794, 793, 793, 793, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 792, 188, 188, 188, 188, 188, 793, 795, 188, 796, 188, 797, 798, 188, 799, 188, 800, 801, 188, 802, 803, 804, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 805, 188, 806, 807, 808, 809, 188, 810, 811, 810, 810, 812, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 813, 814, 188, 815, 816, 188, 817, 818, 819, 820, 821, 822, 791, 791, 823, 791, 791, 791, 824, 825, 826, 791, 791, 827, 828, 829, 830, 791, 831, 791, 832, 791, 833, 834, 188, 815, 188, 791, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 242, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 177, 177, 244, 177, 245, 177, 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, 177, 177, 177, 177, 791, 177, 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, 177, 177, 177, 177, 177, 791, 836, 835, 835, 837, 835, 838, 840, 841, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 842, 839, 844, 843, 845, 846, 847, 836, 835, 793, 848, 793, 793, 793, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 793, 848, 850, 849, 852, 853, 852, 852, 852, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 852, 851, 188, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 188, 854, 855, 856, 857, 858, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 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, 860, 862, 186, 186, 186, 862, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 862, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 864, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 188, 863, 865, 867, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 188, 866, 188, 177, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 863, 863, 863, 188, 863, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 863, 863, 863, 188, 188, 863, 869, 854, 188, 854, 854, 870, 870, 870, 854, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 854, 870, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 872, 873, 854, 874, 191, 875, 873, 854, 854, 876, 877, 854, 877, 854, 191, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 878, 854, 879, 880, 881, 854, 882, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 883, 854, 854, 191, 871, 191, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 854, 884, 854, 877, 854, 871, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 886, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 885, 885, 885, 887, 885, 888, 885, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 885, 885, 885, 885, 871, 885, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 885, 885, 885, 885, 885, 871, 890, 889, 891, 893, 894, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 895, 892, 897, 898, 896, 899, 900, 901, 902, 889, 191, 885, 885, 191, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 191, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 885, 885, 885, 885, 885, 885, 885, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 885, 885, 885, 885, 190, 885, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 885, 885, 885, 885, 885, 190, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 885, 191, 885, 191, 885, 191, 885, 191, 903, 885, 191, 885, 191, 885, 191, 191, 885, 191, 885, 904, 905, 854, 906, 188, 854, 815, 188, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 188, 854, 188, 864, 854, 909, 908, 908, 908, 909, 908, 908, 908, 908, 910, 911, 910, 910, 910, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 909, 908, 908, 908, 908, 908, 910, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 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, 908, 913, 908, 908, 912, 908, 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, 908, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 914, 914, 914, 914, 915, 914, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 914, 914, 914, 914, 914, 915, 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, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 916, 916, 916, 916, 916, 916, 916, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 916, 916, 916, 916, 915, 916, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 916, 916, 916, 916, 916, 915, 917, 918, 920, 920, 920, 920, 920, 920, 920, 920, 919, 921, 921, 921, 921, 921, 921, 921, 921, 919, 919, 922, 922, 236, 236, 236, 922, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 922, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 237, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 923, 236, 924, 925, 926, 926, 236, 236, 236, 926, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 926, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 237, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 927, 236, 235, 926, 928, 929, 930, 930, 223, 223, 223, 930, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 930, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 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, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 931, 223, 926, 216, 216, 216, 926, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 926, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 932, 216, 922, 223, 223, 223, 922, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 922, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 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, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 225, 223, 922, 933, 933, 933, 922, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 922, 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, 933, 933, 933, 933, 933, 933, 933, 933, 933, 934, 933, 935, 936, 936, 933, 933, 933, 936, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 936, 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, 933, 933, 933, 933, 933, 933, 933, 933, 933, 937, 933, 936, 216, 216, 216, 936, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 936, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 932, 216, 938, 936, 936, 223, 223, 223, 936, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 936, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 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, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 225, 223, 939, 940, 940, 940, 939, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 939, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 940, 940, 940, 940, 940, 940, 940, 941, 941, 941, 941, 941, 941, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 941, 941, 941, 941, 941, 941, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 942, 940, 939, 943, 943, 943, 939, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 939, 943, 939, 944, 944, 944, 939, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 939, 944, 939, 945, 945, 945, 939, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 939, 945, 939, 939, 943, 943, 943, 939, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 939, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 943, 943, 943, 943, 943, 943, 943, 946, 946, 946, 946, 946, 946, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 946, 946, 946, 946, 946, 946, 943, 939, 944, 944, 944, 939, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 939, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 944, 944, 944, 944, 944, 944, 944, 947, 947, 947, 947, 947, 947, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 947, 947, 947, 947, 947, 947, 944, 939, 945, 945, 945, 939, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 939, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 945, 945, 945, 945, 945, 945, 945, 948, 948, 948, 948, 948, 948, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 948, 948, 948, 948, 948, 948, 945, 949, 952, 951, 951, 951, 952, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 952, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 951, 951, 951, 951, 951, 951, 951, 953, 953, 953, 953, 953, 953, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 953, 953, 953, 953, 953, 953, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 943, 951, 952, 954, 954, 954, 952, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 952, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 954, 954, 954, 954, 954, 954, 954, 955, 955, 955, 955, 955, 955, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 955, 955, 955, 955, 955, 955, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 956, 954, 952, 957, 957, 957, 952, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 952, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 957, 957, 957, 957, 957, 957, 957, 958, 958, 958, 958, 958, 958, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 958, 958, 958, 958, 958, 958, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 959, 957, 952, 960, 960, 960, 952, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 960, 960, 960, 960, 960, 960, 960, 961, 961, 961, 961, 961, 961, 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, 961, 961, 961, 961, 961, 961, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 952, 960, 960, 960, 952, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 960, 960, 960, 960, 960, 960, 960, 961, 961, 961, 961, 961, 961, 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, 961, 961, 961, 961, 961, 961, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 962, 952, 961, 961, 961, 952, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 952, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 962, 961, 952, 961, 961, 961, 952, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 952, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 950, 961, 950, 952, 958, 958, 958, 952, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 952, 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, 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, 945, 958, 950, 945, 945, 945, 950, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 950, 945, 952, 954, 954, 954, 952, 954, 954, 954, 954, 963, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 952, 954, 954, 954, 954, 954, 963, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 954, 954, 954, 954, 954, 954, 954, 964, 964, 964, 964, 964, 964, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 964, 964, 964, 964, 964, 964, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 965, 954, 952, 960, 960, 960, 952, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 960, 960, 960, 960, 960, 960, 960, 966, 966, 966, 966, 966, 966, 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, 966, 966, 966, 966, 966, 966, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 952, 960, 960, 960, 952, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 960, 960, 960, 960, 960, 960, 960, 968, 968, 968, 968, 968, 968, 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, 968, 968, 968, 968, 968, 968, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 969, 960, 952, 960, 960, 960, 952, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 960, 960, 960, 960, 960, 960, 960, 966, 966, 966, 966, 966, 966, 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, 966, 966, 966, 966, 966, 966, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 952, 960, 960, 960, 952, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 960, 960, 960, 960, 960, 960, 960, 970, 970, 970, 970, 970, 970, 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, 970, 970, 970, 970, 970, 970, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 969, 960, 952, 960, 960, 960, 952, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 960, 960, 960, 960, 960, 960, 960, 971, 971, 971, 971, 971, 971, 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, 971, 971, 971, 971, 971, 971, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 969, 960, 952, 960, 960, 960, 952, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 960, 960, 960, 960, 960, 960, 960, 972, 972, 972, 972, 972, 972, 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, 972, 972, 972, 972, 972, 972, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 969, 960, 952, 960, 960, 960, 952, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 960, 960, 960, 960, 960, 960, 960, 973, 973, 973, 973, 973, 973, 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, 973, 973, 973, 973, 973, 973, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 969, 960, 952, 960, 960, 960, 952, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 967, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 960, 960, 960, 960, 960, 960, 960, 974, 974, 974, 974, 974, 974, 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, 974, 974, 974, 974, 974, 974, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 969, 960, 952, 960, 960, 960, 952, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 952, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 960, 960, 960, 960, 960, 960, 960, 974, 974, 974, 974, 974, 974, 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, 974, 974, 974, 974, 974, 974, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 962, 960, 975, 952, 957, 957, 957, 952, 957, 957, 957, 957, 967, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 952, 957, 957, 957, 957, 957, 967, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 957, 957, 957, 957, 957, 957, 957, 970, 970, 970, 970, 970, 970, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 970, 970, 970, 970, 970, 970, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 969, 957, 976, 977, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 978, 978, 978, 978, 978, 978, 978, 979, 979, 979, 979, 979, 979, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 979, 979, 979, 979, 979, 979, 978, 978, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 242, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 243, 177, 177, 244, 177, 245, 177, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 177, 177, 177, 177, 241, 177, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 177, 177, 177, 177, 177, 241, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 242, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 243, 854, 854, 244, 854, 245, 854, 241, 241, 241, 241, 980, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 854, 854, 854, 854, 241, 854, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 854, 854, 854, 854, 854, 241, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 242, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 243, 854, 854, 244, 854, 245, 854, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 981, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 854, 854, 854, 854, 241, 854, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 854, 854, 854, 854, 854, 241, 982, 983, 854, 849, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 985, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 986, 987, 791, 791, 791, 791, 791, 988, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 989, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 990, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 991, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 992, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 791, 791, 791, 791, 993, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 994, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 791, 791, 995, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 996, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 997, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 791, 791, 791, 791, 998, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 999, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 995, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 791, 791, 791, 791, 1000, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 999, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 791, 984, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1001, 791, 1002, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 1003, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 1004, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1005, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1006, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 1007, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 1008, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1009, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 1010, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 1011, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1012, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1013, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 1014, 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, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1004, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1015, 791, 791, 791, 791, 791, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1016, 791, 1017, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1018, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 997, 791, 791, 791, 1015, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1019, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1020, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1013, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 1021, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 826, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1011, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 1022, 791, 791, 791, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1023, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 1024, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1025, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1013, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1026, 791, 791, 791, 1027, 791, 791, 791, 791, 791, 1028, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1028, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1029, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 1030, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1031, 1032, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 997, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 1033, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1034, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1035, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1038, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1039, 1036, 1036, 1040, 1036, 1041, 1036, 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, 1036, 1036, 1036, 1036, 1037, 1036, 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, 1036, 1036, 1036, 1036, 1036, 1037, 840, 1042, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 842, 839, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1043, 791, 791, 1044, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 997, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1008, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1045, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1046, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1015, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1047, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 826, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 1048, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1049, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1008, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1013, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1050, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 1051, 791, 791, 791, 791, 791, 791, 791, 1052, 791, 791, 791, 791, 791, 791, 791, 1053, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1015, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1054, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1055, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1022, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 1056, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1022, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 1057, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1008, 791, 791, 791, 1058, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1059, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1022, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 1060, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 1061, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 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, 242, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 243, 984, 984, 244, 984, 245, 984, 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, 984, 984, 984, 984, 791, 984, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1002, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 984, 984, 984, 984, 984, 791, 1062, 188, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 864, 854, 1064, 1063, 1063, 1063, 1064, 1063, 1063, 1063, 1063, 1065, 1066, 1065, 1065, 1065, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1064, 1063, 1063, 1063, 1063, 1063, 1065, 1063, 1063, 1067, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1068, 1063, 1065, 1069, 1065, 1065, 1065, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1065, 1069, 1070, 1071, 1072, 1073, 1074, 1076, 1075, 1077, 1079, 1080, 1080, 1080, 1079, 1080, 1080, 1080, 1080, 1081, 1082, 1081, 1081, 1081, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1079, 1080, 1080, 1080, 1080, 1080, 1081, 1080, 1080, 1083, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1080, 1084, 1080, 1080, 1078, 1080, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1080, 1080, 1080, 1080, 1080, 1078, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 251, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 252, 1085, 1085, 1085, 1085, 251, 1085, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 1085, 1085, 1085, 1085, 250, 1085, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 1085, 1085, 1085, 1085, 1085, 250, 1081, 1086, 1081, 1081, 1081, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1081, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1085, 1093, 1095, 1096, 1096, 1096, 1095, 1096, 1096, 1096, 1096, 1097, 1098, 1097, 1097, 1097, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1095, 1096, 1096, 1096, 1096, 1096, 1097, 1099, 1100, 1101, 1102, 1103, 1104, 1100, 1105, 1106, 1107, 1103, 1108, 1109, 1110, 1103, 1111, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1120, 1120, 1122, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1123, 1124, 1125, 1103, 1126, 1100, 1127, 1128, 1129, 1130, 1131, 1132, 1094, 1094, 1133, 1094, 1094, 1094, 1134, 1135, 1136, 1094, 1094, 1137, 1138, 1139, 1140, 1094, 1141, 1094, 1142, 1094, 1143, 1144, 1145, 1103, 1096, 1094, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 1146, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 260, 260, 260, 260, 260, 1147, 260, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 260, 260, 260, 260, 1094, 260, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 260, 260, 260, 260, 260, 1094, 1149, 1148, 1150, 1151, 1097, 1152, 1097, 1097, 1097, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1097, 1152, 1153, 1155, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1155, 1154, 1156, 1157, 1158, 1159, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 255, 255, 1160, 255, 1160, 255, 255, 1160, 1160, 255, 255, 255, 1161, 255, 255, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 255, 255, 255, 255, 255, 255, 255, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1160, 255, 1160, 1160, 263, 255, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1160, 1160, 1160, 255, 1160, 263, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1163, 1163, 1163, 1163, 263, 1163, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1163, 1163, 1163, 1163, 1163, 263, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1163, 1164, 1154, 1103, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1164, 1154, 1165, 1166, 1103, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1164, 1154, 1164, 1167, 1154, 1169, 1168, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 1168, 1108, 1170, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1172, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1173, 1171, 1171, 1171, 1171, 1171, 1172, 1171, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 257, 1171, 1175, 1174, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1177, 1174, 1178, 1179, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1180, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1181, 1174, 1174, 1174, 1174, 1174, 1174, 1182, 1174, 1174, 1177, 1174, 1178, 1179, 1174, 1174, 1174, 1183, 1174, 1174, 1174, 1174, 1174, 1180, 1174, 1174, 1184, 1174, 1174, 1174, 1174, 1174, 1181, 1174, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1186, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1187, 1185, 1185, 1185, 1185, 1185, 1186, 1185, 1185, 1185, 1188, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1189, 1185, 1190, 260, 1190, 260, 260, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 260, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1190, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1192, 1191, 1193, 1195, 1194, 1196, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1182, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1183, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1184, 1174, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1198, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1183, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1184, 1174, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1201, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1202, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1203, 1199, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1204, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1202, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1203, 1199, 1202, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1203, 1199, 1205, 1207, 1206, 1208, 1210, 1210, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1211, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1212, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1213, 1209, 1214, 1214, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1215, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1202, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1203, 1199, 1214, 1214, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1204, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1202, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1203, 1199, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1218, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1219, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1220, 1216, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1223, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1224, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1225, 1221, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1227, 1227, 1227, 1227, 1227, 1227, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1228, 1226, 1227, 1227, 1227, 1227, 1227, 1227, 1226, 1226, 1229, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1230, 1226, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1231, 1231, 1231, 1231, 1231, 1231, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1232, 1199, 1231, 1231, 1231, 1231, 1231, 1231, 1199, 1199, 1202, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1203, 1199, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1231, 1231, 1231, 1231, 1231, 1231, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1204, 1199, 1231, 1231, 1231, 1231, 1231, 1231, 1199, 1199, 1202, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1203, 1199, 1234, 1233, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1236, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1237, 1233, 1233, 1233, 1233, 1233, 1236, 1233, 1233, 1233, 1238, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1239, 1233, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1241, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1238, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1239, 1233, 1242, 1199, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1244, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1245, 1199, 1199, 1199, 1199, 1199, 1244, 1199, 1199, 1199, 1202, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1203, 1199, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1204, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1202, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1203, 1199, 1246, 1170, 1103, 1247, 1154, 1155, 1154, 1248, 1155, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1155, 1170, 1155, 1154, 1155, 1103, 1154, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1160, 1160, 1160, 1160, 1160, 1160, 1249, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1160, 1160, 1160, 1160, 263, 1160, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1160, 1160, 1160, 1160, 1160, 263, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 1146, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1250, 260, 260, 260, 260, 1147, 260, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 260, 260, 260, 260, 1120, 260, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 260, 260, 260, 260, 260, 1120, 1251, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1146, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1250, 1252, 1252, 1252, 1252, 1147, 1252, 1120, 1120, 1120, 1120, 1253, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1120, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1252, 1120, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1146, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1250, 1252, 1252, 1252, 1252, 1147, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1254, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1120, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1252, 1120, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1146, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1250, 1252, 1252, 1252, 1252, 1147, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1255, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1120, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1252, 1120, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1146, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1250, 1252, 1252, 1252, 1252, 1147, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1256, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1120, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1252, 1120, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1146, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1250, 1252, 1252, 1252, 1252, 1147, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1257, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1120, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1252, 1120, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1146, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1250, 1252, 1252, 1252, 1252, 1147, 1252, 1120, 1120, 1120, 1256, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1120, 1252, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1252, 1252, 1252, 1252, 1252, 1120, 1258, 1260, 1259, 1261, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1263, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1264, 1265, 1094, 1094, 1094, 1094, 1094, 1266, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1267, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1268, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1269, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1270, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1271, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1272, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1273, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1274, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1275, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1276, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1277, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1278, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1279, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1280, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1281, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1277, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1282, 1094, 1283, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1284, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1285, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1286, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1287, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1288, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1289, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1290, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1291, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1287, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1292, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1293, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1294, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1295, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1296, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1297, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1287, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1298, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1299, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1300, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 265, 266, 265, 265, 265, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 265, 1146, 1301, 267, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1301, 1301, 268, 1301, 1301, 1147, 1301, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1301, 269, 1301, 1301, 1094, 1301, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1301, 1301, 1301, 1301, 1301, 1094, 282, 283, 282, 282, 282, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 281, 281, 284, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 287, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 286, 281, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1303, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1304, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1305, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1146, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1306, 1306, 1306, 1306, 1306, 1147, 1306, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1306, 1306, 1306, 1306, 1094, 1306, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1307, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1306, 1306, 1306, 1306, 1306, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1308, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1309, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1310, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1311, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1312, 1094, 1313, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1314, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1287, 1094, 1094, 1094, 1315, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1287, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1280, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1316, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1317, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1297, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1318, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1136, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1319, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1320, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1280, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1287, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1321, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1287, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1322, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1323, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1324, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1297, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1325, 1094, 1094, 1094, 1326, 1094, 1094, 1094, 1094, 1094, 1327, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1328, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1294, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1280, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1329, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1330, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1331, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1332, 1333, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1280, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1334, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1335, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1321, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1336, 1094, 1094, 1337, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1280, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1338, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1294, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1339, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1340, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1341, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1280, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1342, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1343, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1329, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1344, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1345, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1291, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1320, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1346, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1347, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1348, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1349, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1350, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1286, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1351, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1352, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1321, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1353, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1321, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1354, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1291, 1094, 1094, 1094, 1355, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1356, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1321, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1357, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1358, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1359, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1146, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1147, 1262, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1094, 1262, 1094, 1094, 1094, 1329, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1262, 1262, 1262, 1262, 1262, 1094, 1360, 1164, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1103, 1154, 1361, 1363, 1362, 1363, 1363, 1363, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1363, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1364, 1362, 291, 1365, 291, 291, 291, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 291, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 292, 1365, 1365, 293, 293, 293, 1365, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 1365, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 1365, 293, 1367, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1368, 1366, 1367, 1366, 1367, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1370, 1366, 1367, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1371, 1366, 1367, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1372, 1366, 1374, 1372, 0 ] class << self attr_accessor :_lex_trans_targs private :_lex_trans_targs, :_lex_trans_targs= end self._lex_trans_targs = [ 156, 2, 3, 4, 162, 6, 7, 8, 9, 10, 156, 156, 165, 168, 165, 12, 169, 14, 165, 176, 177, 180, 181, 187, 182, 183, 184, 19, 185, 186, 189, 191, 192, 193, 194, 195, 25, 18, 178, 179, 27, 229, 230, 232, 234, 232, 30, 235, 32, 232, 242, 243, 246, 247, 253, 248, 249, 250, 37, 251, 252, 255, 257, 258, 259, 260, 261, 43, 36, 244, 245, 45, 295, 296, 306, 305, 0, 48, 307, 308, 50, 309, 310, 310, 422, 52, 53, 422, 451, 54, 55, 451, 451, 455, 455, 59, 54, 60, 453, 454, 456, 457, 455, 451, 458, 459, 461, 56, 57, 462, 463, 58, 455, 61, 62, 67, 74, 465, 466, 60, 453, 454, 456, 457, 455, 451, 458, 459, 461, 56, 57, 462, 463, 58, 61, 62, 67, 74, 465, 466, 464, 63, 64, 65, 66, 68, 69, 72, 70, 71, 73, 75, 76, 451, 78, 79, 80, 82, 85, 83, 84, 86, 88, 482, 482, 482, 483, 90, 485, 91, 486, 92, 483, 90, 485, 91, 486, 520, 520, 520, 95, 96, 97, 98, 532, 520, 520, 537, 520, 520, 559, 520, 102, 560, 566, 105, 108, 110, 112, 113, 114, 108, 109, 570, 109, 570, 111, 520, 577, 578, 579, 116, 122, 127, 602, 129, 582, 583, 520, 586, 587, 593, 588, 589, 590, 120, 591, 592, 595, 597, 598, 599, 600, 601, 126, 119, 584, 585, 128, 635, 636, 130, 522, 93, 524, 529, 132, 133, 638, 739, 135, 136, 137, 739, 747, 747, 747, 140, 769, 768, 747, 771, 773, 758, 805, 146, 147, 148, 152, 153, 146, 147, 148, 152, 153, 149, 149, 147, 148, 150, 151, 149, 149, 147, 148, 150, 151, 852, 147, 747, 921, 154, 155, 921, 156, 156, 157, 158, 159, 161, 163, 164, 156, 156, 156, 160, 156, 160, 156, 1, 156, 156, 156, 5, 165, 165, 166, 165, 167, 170, 165, 165, 11, 13, 165, 165, 165, 171, 172, 173, 15, 21, 26, 196, 28, 165, 165, 165, 174, 175, 165, 16, 165, 165, 165, 17, 165, 165, 165, 20, 188, 190, 22, 165, 165, 23, 24, 165, 197, 201, 205, 198, 199, 200, 202, 203, 204, 165, 165, 206, 210, 216, 207, 214, 215, 208, 212, 213, 209, 211, 165, 217, 227, 228, 218, 219, 220, 226, 221, 222, 223, 224, 225, 165, 165, 165, 165, 231, 232, 232, 232, 233, 236, 232, 29, 31, 232, 232, 232, 237, 238, 239, 33, 39, 44, 262, 46, 232, 232, 232, 240, 241, 232, 34, 232, 232, 232, 35, 232, 232, 232, 38, 254, 256, 40, 232, 232, 41, 42, 232, 263, 267, 271, 264, 265, 266, 268, 269, 270, 232, 232, 272, 276, 282, 273, 280, 281, 274, 278, 279, 275, 277, 232, 283, 293, 294, 284, 285, 286, 292, 287, 288, 289, 290, 291, 232, 232, 232, 232, 297, 298, 298, 299, 298, 300, 298, 298, 298, 301, 301, 301, 302, 301, 301, 301, 303, 304, 303, 47, 49, 305, 305, 305, 311, 310, 310, 312, 313, 314, 315, 317, 310, 320, 321, 322, 323, 324, 326, 328, 329, 330, 334, 336, 337, 338, 354, 359, 366, 371, 378, 385, 388, 389, 393, 387, 397, 405, 409, 411, 416, 418, 421, 310, 310, 310, 310, 310, 310, 316, 310, 316, 310, 318, 51, 319, 310, 310, 310, 325, 327, 310, 331, 332, 333, 329, 335, 310, 339, 340, 349, 352, 341, 342, 343, 344, 345, 346, 347, 348, 311, 350, 351, 353, 355, 358, 356, 357, 360, 363, 361, 362, 364, 365, 367, 369, 368, 370, 372, 373, 310, 374, 375, 376, 377, 310, 379, 382, 380, 381, 383, 384, 386, 390, 391, 392, 394, 396, 395, 398, 399, 400, 402, 401, 403, 404, 406, 407, 408, 410, 412, 413, 414, 415, 417, 419, 420, 423, 422, 422, 424, 425, 427, 422, 422, 422, 426, 422, 426, 428, 422, 430, 429, 429, 434, 435, 436, 437, 429, 439, 440, 441, 442, 444, 446, 447, 448, 449, 450, 429, 431, 433, 429, 432, 429, 429, 429, 429, 429, 438, 429, 438, 443, 429, 445, 429, 451, 451, 452, 467, 468, 454, 470, 471, 458, 472, 473, 474, 475, 476, 478, 479, 480, 481, 451, 451, 451, 451, 451, 451, 455, 460, 451, 451, 451, 451, 451, 451, 451, 451, 451, 469, 451, 469, 451, 451, 451, 451, 477, 451, 77, 81, 87, 482, 484, 487, 89, 482, 482, 483, 488, 488, 489, 490, 492, 494, 495, 488, 488, 491, 488, 491, 488, 493, 488, 488, 488, 497, 496, 496, 498, 499, 500, 502, 504, 505, 510, 517, 496, 496, 496, 496, 501, 496, 501, 496, 503, 496, 496, 497, 506, 507, 508, 509, 511, 512, 515, 513, 514, 516, 518, 519, 521, 520, 530, 531, 533, 534, 536, 538, 539, 540, 542, 543, 544, 546, 547, 569, 572, 573, 574, 638, 639, 640, 641, 642, 541, 644, 660, 665, 672, 677, 679, 685, 688, 689, 693, 687, 697, 708, 712, 715, 723, 727, 730, 731, 520, 93, 523, 520, 520, 525, 527, 528, 520, 526, 520, 520, 520, 520, 520, 94, 520, 520, 520, 520, 520, 535, 520, 535, 520, 520, 99, 520, 520, 100, 520, 520, 541, 520, 545, 520, 548, 558, 520, 101, 561, 562, 563, 520, 564, 103, 567, 104, 106, 568, 520, 549, 551, 557, 520, 550, 520, 520, 552, 555, 556, 520, 553, 554, 520, 520, 520, 520, 565, 107, 571, 520, 520, 520, 520, 520, 520, 575, 115, 520, 576, 520, 520, 520, 520, 580, 581, 520, 117, 520, 520, 520, 118, 520, 520, 520, 121, 594, 596, 123, 520, 520, 124, 125, 520, 603, 607, 611, 604, 605, 606, 608, 609, 610, 520, 520, 612, 616, 622, 613, 620, 621, 614, 618, 619, 615, 617, 520, 623, 633, 634, 624, 625, 626, 632, 627, 628, 629, 630, 631, 520, 520, 520, 520, 637, 131, 134, 520, 643, 520, 645, 646, 655, 658, 647, 648, 649, 650, 651, 652, 653, 654, 521, 656, 657, 659, 661, 664, 662, 663, 666, 669, 667, 668, 670, 671, 673, 675, 674, 676, 678, 680, 682, 681, 683, 684, 686, 521, 690, 691, 692, 694, 696, 695, 698, 699, 700, 705, 701, 702, 703, 520, 521, 522, 93, 704, 529, 527, 706, 707, 709, 710, 711, 713, 714, 716, 717, 718, 721, 719, 720, 722, 724, 725, 726, 728, 729, 520, 732, 732, 733, 734, 735, 737, 732, 732, 732, 736, 732, 736, 732, 738, 732, 740, 739, 739, 741, 742, 743, 745, 739, 739, 739, 739, 744, 739, 744, 746, 739, 748, 747, 747, 752, 753, 754, 747, 755, 757, 760, 761, 762, 763, 764, 747, 765, 766, 770, 793, 797, 747, 798, 800, 802, 747, 803, 804, 806, 810, 812, 813, 747, 815, 833, 838, 845, 853, 860, 867, 872, 873, 877, 871, 882, 892, 898, 901, 910, 914, 918, 919, 920, 749, 751, 747, 750, 747, 747, 747, 747, 747, 747, 747, 756, 747, 756, 747, 138, 759, 747, 747, 747, 747, 747, 747, 767, 747, 747, 139, 141, 747, 142, 777, 785, 788, 772, 789, 790, 778, 782, 783, 747, 772, 142, 774, 775, 143, 747, 774, 747, 747, 776, 747, 779, 781, 747, 779, 780, 782, 783, 781, 747, 747, 784, 747, 747, 786, 781, 782, 783, 786, 787, 747, 779, 781, 782, 783, 747, 779, 781, 782, 783, 747, 791, 781, 782, 783, 791, 792, 747, 142, 793, 772, 794, 782, 783, 795, 781, 142, 795, 772, 796, 747, 799, 801, 144, 145, 747, 747, 807, 808, 809, 804, 811, 747, 747, 814, 747, 747, 816, 817, 826, 831, 818, 819, 820, 821, 822, 823, 824, 825, 748, 827, 828, 829, 830, 748, 832, 834, 837, 835, 836, 748, 748, 839, 842, 840, 841, 843, 844, 748, 846, 848, 847, 849, 850, 851, 747, 747, 854, 748, 855, 747, 856, 857, 858, 859, 751, 861, 864, 862, 863, 865, 866, 868, 869, 870, 748, 874, 875, 876, 878, 880, 881, 879, 748, 883, 884, 885, 888, 886, 887, 889, 890, 891, 893, 895, 894, 896, 897, 899, 900, 902, 903, 905, 908, 904, 906, 907, 909, 911, 912, 913, 915, 916, 917, 747, 747, 921, 922, 923, 921, 925, 924, 926, 924, 927, 928, 929, 924, 924 ] class << self attr_accessor :_lex_trans_actions private :_lex_trans_actions, :_lex_trans_actions= end self._lex_trans_actions = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 0, 0, 0, 6, 0, 7, 0, 8, 0, 7, 0, 0, 0, 0, 8, 7, 0, 8, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 9, 0, 10, 0, 0, 0, 11, 0, 7, 0, 8, 0, 7, 0, 0, 0, 0, 8, 7, 0, 8, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 0, 0, 18, 19, 20, 21, 22, 23, 23, 24, 25, 23, 26, 25, 27, 25, 23, 23, 24, 23, 28, 23, 23, 29, 23, 23, 23, 23, 23, 23, 0, 30, 31, 0, 32, 31, 33, 31, 0, 0, 30, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 38, 39, 0, 0, 0, 39, 22, 40, 23, 23, 23, 40, 41, 42, 43, 0, 0, 0, 0, 0, 44, 45, 0, 46, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 50, 0, 22, 0, 51, 52, 52, 52, 52, 52, 52, 52, 52, 0, 7, 53, 0, 8, 0, 7, 0, 0, 0, 0, 8, 7, 0, 8, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 55, 0, 0, 0, 56, 57, 58, 59, 0, 7, 7, 60, 61, 61, 0, 0, 0, 22, 0, 0, 0, 23, 62, 23, 23, 23, 63, 64, 65, 64, 64, 64, 0, 66, 67, 66, 66, 66, 68, 69, 70, 71, 0, 0, 72, 75, 76, 0, 22, 0, 7, 0, 7, 77, 78, 79, 63, 80, 0, 81, 0, 82, 83, 84, 0, 85, 86, 0, 87, 7, 7, 88, 89, 0, 0, 90, 91, 92, 52, 52, 52, 52, 52, 52, 52, 52, 93, 94, 95, 0, 0, 96, 0, 97, 98, 99, 0, 100, 101, 102, 0, 7, 0, 0, 103, 104, 0, 22, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 110, 111, 112, 0, 113, 114, 115, 7, 7, 116, 0, 0, 117, 118, 119, 52, 52, 52, 52, 52, 52, 52, 52, 120, 121, 122, 0, 0, 123, 0, 124, 125, 126, 0, 127, 128, 129, 0, 7, 0, 0, 130, 131, 0, 22, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 137, 138, 139, 0, 140, 141, 0, 142, 0, 143, 144, 145, 146, 147, 148, 0, 149, 150, 151, 152, 0, 153, 0, 0, 154, 155, 156, 157, 158, 159, 0, 22, 0, 0, 7, 160, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 163, 164, 165, 166, 167, 63, 168, 0, 169, 0, 0, 0, 170, 171, 172, 0, 0, 173, 0, 0, 0, 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 178, 179, 0, 0, 0, 180, 181, 182, 63, 183, 0, 22, 184, 0, 185, 186, 0, 22, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 189, 0, 190, 191, 192, 193, 194, 63, 195, 0, 0, 196, 0, 197, 198, 199, 200, 22, 0, 21, 0, 0, 21, 0, 0, 0, 0, 0, 0, 7, 7, 7, 201, 202, 203, 204, 205, 206, 207, 0, 208, 209, 210, 211, 212, 213, 214, 215, 216, 63, 217, 0, 218, 219, 220, 221, 222, 223, 0, 0, 0, 224, 7, 7, 0, 225, 226, 227, 228, 229, 0, 0, 0, 0, 0, 230, 231, 63, 232, 0, 233, 22, 234, 235, 236, 237, 238, 239, 0, 22, 0, 0, 0, 0, 0, 0, 240, 241, 242, 243, 63, 244, 0, 245, 22, 246, 247, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 250, 0, 8, 0, 0, 7, 251, 0, 0, 0, 0, 0, 0, 7, 7, 0, 252, 7, 252, 252, 252, 0, 0, 252, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 0, 252, 253, 254, 0, 255, 256, 0, 54, 0, 257, 0, 258, 259, 260, 261, 262, 23, 263, 264, 265, 266, 267, 63, 268, 0, 269, 270, 0, 271, 272, 0, 273, 274, 251, 275, 0, 276, 0, 0, 277, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 280, 0, 281, 282, 0, 0, 0, 283, 0, 0, 284, 285, 286, 287, 0, 0, 0, 288, 289, 290, 291, 292, 293, 0, 0, 294, 0, 295, 296, 297, 298, 0, 0, 299, 0, 300, 301, 302, 0, 303, 304, 305, 0, 7, 0, 0, 306, 307, 0, 22, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 313, 314, 315, 0, 0, 0, 316, 22, 317, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 54, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 318, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 319, 320, 321, 322, 323, 323, 322, 319, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 324, 325, 326, 0, 22, 0, 0, 327, 328, 329, 63, 330, 0, 331, 22, 332, 7, 333, 334, 0, 22, 0, 0, 335, 336, 337, 338, 63, 339, 0, 22, 340, 341, 342, 343, 0, 22, 0, 344, 0, 7, 0, 0, 0, 0, 0, 345, 0, 0, 346, 346, 0, 347, 0, 0, 0, 348, 7, 349, 349, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 352, 0, 353, 354, 355, 356, 357, 358, 359, 63, 360, 0, 361, 0, 0, 362, 363, 364, 365, 366, 367, 0, 368, 369, 0, 0, 370, 371, 372, 0, 0, 373, 0, 0, 372, 374, 374, 375, 376, 0, 377, 377, 0, 378, 379, 380, 381, 0, 382, 372, 372, 383, 0, 0, 384, 384, 0, 385, 386, 0, 387, 388, 389, 389, 390, 390, 0, 0, 391, 392, 392, 393, 393, 394, 395, 395, 396, 396, 397, 398, 398, 399, 399, 0, 0, 400, 401, 402, 403, 404, 405, 405, 402, 404, 406, 346, 407, 0, 408, 0, 0, 0, 0, 409, 410, 349, 349, 349, 411, 349, 412, 413, 22, 414, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 417, 418, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 418, 420, 421, 0, 422, 0, 423, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 427, 428, 7, 0, 429, 0, 430, 0, 431, 0, 0, 0, 432, 433 ] class << self attr_accessor :_lex_to_state_actions private :_lex_to_state_actions, :_lex_to_state_actions= end self._lex_to_state_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 73, 0, 73, 0, 73, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 73, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lex_from_state_actions private :_lex_from_state_actions, :_lex_from_state_actions= end self._lex_from_state_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 74, 0, 74, 0, 74, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 74, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lex_eof_trans private :_lex_eof_trans, :_lex_eof_trans= end self._lex_eof_trans = [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 44, 44, 44, 44, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 83, 85, 85, 89, 89, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 164, 166, 166, 166, 178, 180, 180, 180, 180, 180, 186, 178, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 208, 208, 219, 219, 219, 219, 219, 208, 219, 219, 219, 219, 208, 208, 208, 178, 190, 190, 190, 190, 250, 250, 250, 255, 257, 257, 257, 261, 261, 255, 261, 261, 261, 261, 261, 261, 261, 261, 261, 291, 291, 0, 303, 304, 305, 307, 309, 311, 309, 309, 0, 321, 322, 326, 326, 327, 336, 337, 338, 338, 338, 341, 341, 343, 344, 345, 345, 345, 347, 348, 349, 349, 345, 341, 341, 354, 355, 355, 355, 355, 355, 358, 358, 358, 358, 358, 358, 358, 358, 368, 369, 369, 369, 369, 381, 381, 381, 369, 369, 369, 369, 381, 369, 381, 381, 381, 381, 381, 381, 381, 381, 394, 381, 395, 396, 397, 397, 0, 404, 408, 408, 409, 418, 419, 420, 420, 420, 423, 423, 425, 426, 427, 427, 427, 429, 430, 431, 431, 427, 423, 423, 436, 437, 437, 437, 437, 437, 440, 440, 440, 440, 440, 440, 440, 440, 450, 451, 451, 451, 451, 463, 463, 463, 451, 451, 451, 451, 463, 451, 463, 463, 463, 463, 463, 463, 463, 463, 476, 463, 477, 478, 479, 479, 0, 486, 487, 0, 493, 0, 498, 0, 501, 501, 502, 503, 0, 543, 545, 546, 547, 548, 550, 552, 556, 556, 547, 547, 547, 557, 547, 547, 552, 547, 547, 543, 561, 561, 561, 561, 561, 561, 552, 552, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 600, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 547, 0, 643, 644, 645, 647, 643, 650, 0, 669, 672, 674, 672, 675, 676, 677, 678, 680, 677, 677, 677, 677, 677, 683, 677, 677, 685, 683, 683, 677, 0, 704, 705, 89, 89, 708, 709, 89, 705, 705, 712, 714, 717, 705, 718, 705, 719, 720, 722, 724, 705, 712, 725, 725, 714, 725, 729, 725, 725, 725, 725, 0, 164, 737, 738, 737, 737, 0, 747, 748, 750, 752, 754, 752, 756, 0, 768, 769, 770, 771, 773, 775, 777, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 0, 178, 836, 839, 840, 844, 846, 847, 848, 836, 849, 850, 852, 855, 856, 858, 860, 863, 864, 866, 867, 178, 864, 864, 855, 855, 855, 855, 886, 890, 892, 893, 897, 900, 901, 902, 903, 890, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 855, 907, 855, 855, 855, 908, 915, 917, 918, 919, 920, 920, 920, 923, 923, 925, 926, 927, 927, 927, 929, 930, 931, 931, 927, 923, 923, 936, 937, 937, 937, 937, 937, 940, 940, 940, 940, 940, 940, 940, 940, 950, 951, 951, 951, 951, 963, 963, 963, 951, 951, 951, 951, 963, 951, 963, 963, 963, 963, 963, 963, 963, 963, 976, 963, 977, 978, 979, 979, 178, 855, 855, 983, 855, 850, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 1037, 840, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 1063, 855, 0, 1070, 1071, 1072, 1074, 1076, 1078, 0, 1086, 1087, 1088, 1089, 1091, 1086, 1094, 0, 261, 1149, 1151, 1152, 1153, 1154, 1155, 1157, 1159, 1161, 1164, 1164, 1155, 1155, 1166, 1167, 1155, 1155, 1169, 1171, 1172, 1172, 1175, 1186, 261, 1192, 1194, 1195, 1197, 1175, 1175, 1200, 1200, 1200, 1206, 1207, 1209, 1210, 1200, 1200, 1217, 1222, 1227, 1200, 1200, 1234, 1234, 1200, 1200, 1171, 1155, 1155, 1171, 1155, 1155, 1161, 261, 1252, 1253, 1253, 1253, 1253, 1253, 1253, 1259, 1161, 1262, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1302, 1303, 1263, 1263, 1307, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1361, 1155, 1362, 0, 1366, 1366, 0, 1370, 1370, 1370, 1370, 1374 ] class << self attr_accessor :lex_start end self.lex_start = 156; class << self attr_accessor :lex_error end self.lex_error = 0; class << self attr_accessor :lex_en_interp_words end self.lex_en_interp_words = 165; class << self attr_accessor :lex_en_interp_string end self.lex_en_interp_string = 232; class << self attr_accessor :lex_en_plain_words end self.lex_en_plain_words = 298; class << self attr_accessor :lex_en_plain_string end self.lex_en_plain_string = 301; class << self attr_accessor :lex_en_regexp_modifiers end self.lex_en_regexp_modifiers = 303; class << self attr_accessor :lex_en_expr_variable end self.lex_en_expr_variable = 305; class << self attr_accessor :lex_en_expr_fname end self.lex_en_expr_fname = 310; class << self attr_accessor :lex_en_expr_endfn end self.lex_en_expr_endfn = 422; class << self attr_accessor :lex_en_expr_dot end self.lex_en_expr_dot = 429; class << self attr_accessor :lex_en_expr_arg end self.lex_en_expr_arg = 451; class << self attr_accessor :lex_en_expr_cmdarg end self.lex_en_expr_cmdarg = 482; class << self attr_accessor :lex_en_expr_endarg end self.lex_en_expr_endarg = 488; class << self attr_accessor :lex_en_expr_mid end self.lex_en_expr_mid = 496; class << self attr_accessor :lex_en_expr_beg end self.lex_en_expr_beg = 520; class << self attr_accessor :lex_en_expr_labelarg end self.lex_en_expr_labelarg = 732; class << self attr_accessor :lex_en_expr_value end self.lex_en_expr_value = 739; class << self attr_accessor :lex_en_expr_end end self.lex_en_expr_end = 747; class << self attr_accessor :lex_en_leading_dot end self.lex_en_leading_dot = 921; class << self attr_accessor :lex_en_line_comment end self.lex_en_line_comment = 924; class << self attr_accessor :lex_en_line_begin end self.lex_en_line_begin = 156; # line 82 "lib/parser/lexer.rl" # % ESCAPES = { 'a' => "\a", 'b' => "\b", 'e' => "\e", 'f' => "\f", 'n' => "\n", 'r' => "\r", 's' => "\s", 't' => "\t", 'v' => "\v", '\\' => "\\" } attr_reader :source_buffer attr_reader :encoding attr_accessor :diagnostics attr_accessor :static_env attr_accessor :force_utf32 attr_accessor :cond, :cmdarg, :in_kwarg attr_accessor :tokens, :comments def initialize(version) @version = version @static_env = nil @tokens = nil @comments = nil reset end def reset(reset_state=true) # Ragel state: if reset_state # Unit tests set state prior to resetting lexer. @cs = self.class.lex_en_line_begin @cond = StackState.new('cond') @cmdarg = StackState.new('cmdarg') @cond_stack = [] @cmdarg_stack = [] end @force_utf32 = false # Set to true by some tests @source = nil # source string @source_pts = nil # @source as a codepoint array @encoding = nil # target encoding for output strings @p = 0 # stream position (saved manually in #advance) @ts = nil # token start @te = nil # token end @act = 0 # next action @stack = [] # state stack @top = 0 # state stack top pointer # Lexer state: @token_queue = [] @literal_stack = [] @eq_begin_s = nil # location of last encountered =begin @sharp_s = nil # location of last encountered # @newline_s = nil # location of last encountered newline @num_base = nil # last numeric base @num_digits_s = nil # starting position of numeric digits @num_suffix_s = nil # starting position of numeric suffix @num_xfrm = nil # numeric suffix-induced transformation @escape_s = nil # starting position of current sequence @escape = nil # last escaped sequence, as string # See below the section on parsing heredocs. @heredoc_e = nil @herebody_s = nil # Ruby 1.9 ->() lambdas emit a distinct token if do/{ is # encountered after a matching closing parenthesis. @paren_nest = 0 @lambda_stack = [] # If the lexer is in `command state' (aka expr_value) # at the entry to #advance, it will transition to expr_cmdarg # instead of expr_arg at certain points. @command_state = false # True at the end of "def foo a:" @in_kwarg = false end def source_buffer=(source_buffer) @source_buffer = source_buffer if @source_buffer @source = @source_buffer.source if defined?(Encoding) @encoding = @source.encoding # This is a workaround for 1.9.2, which (without force_encoding) # would convert the result to UTF-8 (source encoding of lexer.rl). @source += "\0".force_encoding(@encoding) else @source += "\0" end if defined?(Encoding) && @source.encoding == Encoding::UTF_8 @source_pts = @source.unpack('U*') else @source_pts = @source.unpack('C*') end if (@source_pts.size > 1_000_000 && @source.respond_to?(:encode)) || @force_utf32 # A heuristic: if the buffer is larger than 1M, then # store it in UTF-32 and convert the tokens as they're # going out. If it's smaller, the conversion overhead # dominates runtime and this stops being beneficial. # # This is not really a good heuristic, as the result # heavily depends on token/character ratio. If it's low, # say the gem consists mostly of long identifiers and # symbols, then storing the source in UTF-8 would be faster. # # Patches accepted. @source = @source.encode(Encoding::UTF_32LE) end if @source_pts[0] == 0xfeff # Skip byte order mark. @p = 1 end else @source = nil @source_pts = nil end end LEX_STATES = { :line_begin => lex_en_line_begin, :expr_dot => lex_en_expr_dot, :expr_fname => lex_en_expr_fname, :expr_value => lex_en_expr_value, :expr_beg => lex_en_expr_beg, :expr_mid => lex_en_expr_mid, :expr_arg => lex_en_expr_arg, :expr_cmdarg => lex_en_expr_cmdarg, :expr_end => lex_en_expr_end, :expr_endarg => lex_en_expr_endarg, :expr_endfn => lex_en_expr_endfn, :expr_labelarg => lex_en_expr_labelarg, :interp_string => lex_en_interp_string, :interp_words => lex_en_interp_words, :plain_string => lex_en_plain_string, :plain_words => lex_en_plain_string, } def state LEX_STATES.invert.fetch(@cs, @cs) end def state=(state) @cs = LEX_STATES.fetch(state) end def push_cmdarg @cmdarg_stack.push(@cmdarg) @cmdarg = StackState.new("cmdarg.#{@cmdarg_stack.count}") end def pop_cmdarg @cmdarg = @cmdarg_stack.pop end def push_cond @cond_stack.push(@cond) @cond = StackState.new("cond.#{@cond_stack.count}") end def pop_cond @cond = @cond_stack.pop end # Return next token: [type, value]. def advance if @token_queue.any? return @token_queue.shift end # Ugly, but dependent on Ragel output. Consider refactoring it somehow. _lex_trans_keys = self.class.send :_lex_trans_keys _lex_key_spans = self.class.send :_lex_key_spans _lex_index_offsets = self.class.send :_lex_index_offsets _lex_indicies = self.class.send :_lex_indicies _lex_trans_targs = self.class.send :_lex_trans_targs _lex_trans_actions = self.class.send :_lex_trans_actions _lex_to_state_actions = self.class.send :_lex_to_state_actions _lex_from_state_actions = self.class.send :_lex_from_state_actions _lex_eof_trans = self.class.send :_lex_eof_trans p, pe, eof = @p, @source.length + 1, @source.length + 1 @command_state = (@cs == self.class.lex_en_expr_value || @cs == self.class.lex_en_line_begin) # line 10667 "lib/parser/lexer.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if @cs == 0 _goto_level = _out next end end if _goto_level <= _resume case _lex_from_state_actions[ @cs] when 74 then # line 1 "NONE" begin @ts = p end # line 10695 "lib/parser/lexer.rb" end _keys = @cs << 1 _inds = _lex_index_offsets[ @cs] _slen = _lex_key_spans[ @cs] _trans = if ( _slen > 0 && _lex_trans_keys[_keys] <= ( (@source_pts[p] || 0)) && ( (@source_pts[p] || 0)) <= _lex_trans_keys[_keys + 1] ) then _lex_indicies[ _inds + ( (@source_pts[p] || 0)) - _lex_trans_keys[_keys] ] else _lex_indicies[ _inds + _slen ] end end if _goto_level <= _eof_trans @cs = _lex_trans_targs[_trans] if _lex_trans_actions[_trans] != 0 case _lex_trans_actions[_trans] when 22 then # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 52 then # line 780 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end when 23 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end when 63 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end when 66 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end when 254 then # line 1163 "lib/parser/lexer.rl" begin tm = p end when 30 then # line 1421 "lib/parser/lexer.rl" begin tm = p end when 32 then # line 1437 "lib/parser/lexer.rl" begin tm = p end when 34 then # line 1465 "lib/parser/lexer.rl" begin tm = p end when 49 then # line 1649 "lib/parser/lexer.rl" begin @heredoc_e = p end when 323 then # line 1766 "lib/parser/lexer.rl" begin tm = p end when 398 then # line 1980 "lib/parser/lexer.rl" begin @num_base = 16; @num_digits_s = p end when 392 then # line 1981 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = p end when 395 then # line 1982 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = p end when 389 then # line 1983 "lib/parser/lexer.rl" begin @num_base = 2; @num_digits_s = p end when 404 then # line 1984 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end when 372 then # line 1985 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end when 384 then # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 379 then # line 2043 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 377 then # line 2044 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 7 then # line 1 "NONE" begin @te = p+1 end when 90 then # line 1031 "lib/parser/lexer.rl" begin @te = p+1 begin literal.flush_string literal.extend_content emit(:tSTRING_DBEG, '#{') if literal.heredoc? literal.saved_herebody_s = @herebody_s @herebody_s = nil end literal.start_interp_brace begin @stack[ @top] = @cs @top+= 1 @cs = 739 _goto_level = _again next end end end when 5 then # line 979 "lib/parser/lexer.rl" begin @te = p+1 begin literal.flush_string literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 305 _goto_level = _again next end end end when 86 then # line 908 "lib/parser/lexer.rl" begin @te = p+1 begin if @te == pe diagnostic :fatal, :string_eof, nil, range(literal.str_s, literal.str_s + 1) end if literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, '') if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, '') end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source[@te...@te+2] lookahead = lookahead.encode(@encoding) if lookahead.respond_to?(:encode) end if !literal.heredoc? && (token = literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 732; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else literal.extend_string(string, @ts, @te) end end end when 91 then # line 979 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin literal.flush_string literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 305 _goto_level = _again next end end end when 88 then # line 966 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin literal.extend_space @ts, @te end end when 89 then # line 829 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin string = @source[@ts...@te] string = string.encode(@encoding) if string.respond_to?(:encode) # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source[@te...@te+2] lookahead = lookahead.encode(@encoding) if lookahead.respond_to?(:encode) end if !literal.heredoc? && (token = literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 732; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else literal.extend_string(string, @ts, @te) end end end when 6 then # line 853 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 4 then # line 829 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin string = @source[@ts...@te] string = string.encode(@encoding) if string.respond_to?(:encode) # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source[@te...@te+2] lookahead = lookahead.encode(@encoding) if lookahead.respond_to?(:encode) end if !literal.heredoc? && (token = literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 732; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else literal.extend_string(string, @ts, @te) end end end when 117 then # line 1031 "lib/parser/lexer.rl" begin @te = p+1 begin literal.flush_string literal.extend_content emit(:tSTRING_DBEG, '#{') if literal.heredoc? literal.saved_herebody_s = @herebody_s @herebody_s = nil end literal.start_interp_brace begin @stack[ @top] = @cs @top+= 1 @cs = 739 _goto_level = _again next end end end when 10 then # line 979 "lib/parser/lexer.rl" begin @te = p+1 begin literal.flush_string literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 305 _goto_level = _again next end end end when 114 then # line 908 "lib/parser/lexer.rl" begin @te = p+1 begin if @te == pe diagnostic :fatal, :string_eof, nil, range(literal.str_s, literal.str_s + 1) end if literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, '') if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, '') end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source[@te...@te+2] lookahead = lookahead.encode(@encoding) if lookahead.respond_to?(:encode) end if !literal.heredoc? && (token = literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 732; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else literal.extend_string(string, @ts, @te) end end end when 118 then # line 979 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin literal.flush_string literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 305 _goto_level = _again next end end end when 116 then # line 829 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin string = @source[@ts...@te] string = string.encode(@encoding) if string.respond_to?(:encode) # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source[@te...@te+2] lookahead = lookahead.encode(@encoding) if lookahead.respond_to?(:encode) end if !literal.heredoc? && (token = literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 732; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else literal.extend_string(string, @ts, @te) end end end when 11 then # line 853 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 9 then # line 829 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin string = @source[@ts...@te] string = string.encode(@encoding) if string.respond_to?(:encode) # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source[@te...@te+2] lookahead = lookahead.encode(@encoding) if lookahead.respond_to?(:encode) end if !literal.heredoc? && (token = literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 732; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else literal.extend_string(string, @ts, @te) end end end when 141 then # line 908 "lib/parser/lexer.rl" begin @te = p+1 begin if @te == pe diagnostic :fatal, :string_eof, nil, range(literal.str_s, literal.str_s + 1) end if literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, '') if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, '') end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source[@te...@te+2] lookahead = lookahead.encode(@encoding) if lookahead.respond_to?(:encode) end if !literal.heredoc? && (token = literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 732; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else literal.extend_string(string, @ts, @te) end end end when 143 then # line 966 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin literal.extend_space @ts, @te end end when 144 then # line 829 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin string = @source[@ts...@te] string = string.encode(@encoding) if string.respond_to?(:encode) # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source[@te...@te+2] lookahead = lookahead.encode(@encoding) if lookahead.respond_to?(:encode) end if !literal.heredoc? && (token = literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 732; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else literal.extend_string(string, @ts, @te) end end end when 147 then # line 908 "lib/parser/lexer.rl" begin @te = p+1 begin if @te == pe diagnostic :fatal, :string_eof, nil, range(literal.str_s, literal.str_s + 1) end if literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, '') if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, '') end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source[@te...@te+2] lookahead = lookahead.encode(@encoding) if lookahead.respond_to?(:encode) end if !literal.heredoc? && (token = literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 732; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else literal.extend_string(string, @ts, @te) end end end when 149 then # line 829 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin string = @source[@ts...@te] string = string.encode(@encoding) if string.respond_to?(:encode) # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source[@te...@te+2] lookahead = lookahead.encode(@encoding) if lookahead.respond_to?(:encode) end if !literal.heredoc? && (token = literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 732; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else literal.extend_string(string, @ts, @te) end end end when 152 then # line 1094 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tREGEXP_OPT, tok(@ts, @te - 1), @ts, @te - 1) p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 153 then # line 1082 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin unknown_options = tok.scan(/[^imxouesn]/) if unknown_options.any? diagnostic :error, :regexp_options, { :options => unknown_options.join } end emit(:tREGEXP_OPT) @cs = 747; begin p += 1 _goto_level = _out next end end end when 12 then # line 1222 "lib/parser/lexer.rl" begin @te = p+1 begin if tok =~ /^\$([1-9][0-9]*)$/ emit(:tNTH_REF, tok(@ts + 1).to_i) elsif tok =~ /^\$([&`'+])$/ emit(:tBACK_REF) else emit(:tGVAR) end @cs = (stack_pop); begin p += 1 _goto_level = _out next end end end when 154 then # line 1222 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if tok =~ /^\$([1-9][0-9]*)$/ emit(:tNTH_REF, tok(@ts + 1).to_i) elsif tok =~ /^\$([&`'+])$/ emit(:tBACK_REF) else emit(:tGVAR) end @cs = (stack_pop); begin p += 1 _goto_level = _out next end end end when 156 then # line 1235 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if tok =~ /^@@[0-9]/ diagnostic :error, :cvar_name, { :name => tok } end emit(:tCVAR) @cs = (stack_pop); begin p += 1 _goto_level = _out next end end end when 155 then # line 1245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if tok =~ /^@[0-9]/ diagnostic :error, :ivar_name, { :name => tok } end emit(:tIVAR) @cs = (stack_pop); begin p += 1 _goto_level = _out next end end end when 177 then # line 1266 "lib/parser/lexer.rl" begin @te = p+1 begin emit(KEYWORDS_BEGIN[tok]); @cs = 422; begin p += 1 _goto_level = _out next end end end when 163 then # line 1274 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tIDENTIFIER) @cs = 422; begin p += 1 _goto_level = _out next end end end when 14 then # line 1278 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 @cs = 747; begin @stack[ @top] = @cs @top+= 1 @cs = 305 _goto_level = _again next end end end when 160 then # line 1287 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 422; begin p += 1 _goto_level = _out next end end end when 172 then # line 1291 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 159 then # line 1299 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 158 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 176 then # line 1266 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(KEYWORDS_BEGIN[tok]); @cs = 422; begin p += 1 _goto_level = _out next end end end when 173 then # line 1270 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT) @cs = 422; begin p += 1 _goto_level = _out next end end end when 175 then # line 1274 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) @cs = 422; begin p += 1 _goto_level = _out next end end end when 170 then # line 1278 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 @cs = 747; begin @stack[ @top] = @cs @top+= 1 @cs = 305 _goto_level = _again next end end end when 166 then # line 1287 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 422; begin p += 1 _goto_level = _out next end end end when 171 then # line 1294 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 164 then # line 1296 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 169 then # line 1299 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 13 then # line 1299 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 162 then # line 1 "NONE" begin case @act when 25 then begin begin p = (( @te))-1; end emit(KEYWORDS_BEGIN[tok]); @cs = 422; begin p += 1 _goto_level = _out next end end when 26 then begin begin p = (( @te))-1; end emit(:tCONSTANT) @cs = 422; begin p += 1 _goto_level = _out next end end when 27 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) @cs = 422; begin p += 1 _goto_level = _out next end end end end when 16 then # line 1311 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tLABEL, tok(@ts, @te - 1)) @cs = 732; begin p += 1 _goto_level = _out next end end end when 179 then # line 1317 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 178 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 181 then # line 1314 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 180 then # line 1317 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 15 then # line 1317 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 187 then # line 1343 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 451; begin p += 1 _goto_level = _out next end end end when 186 then # line 1349 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 185 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 197 then # line 1328 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT) @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end end when 188 then # line 1332 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end end when 193 then # line 1343 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 451; begin p += 1 _goto_level = _out next end end end when 191 then # line 1346 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 196 then # line 1349 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 220 then # line 1407 "lib/parser/lexer.rl" begin @te = p+1 begin # Unlike expr_beg as invoked in the next rule, do not warn p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 203 then # line 1425 "lib/parser/lexer.rl" begin @te = p+1 begin if tok(tm, tm + 1) == '/' # Ambiguous regexp literal. diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1) end p = tm - 1 begin @cs = 520 _goto_level = _again next end end end when 209 then # line 1449 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 18 then # line 1457 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1; begin @cs = 520 _goto_level = _again next end end end when 211 then # line 1466 "lib/parser/lexer.rl" begin @te = p+1 begin p = tm - 1; begin @cs = 747 _goto_level = _again next end end end when 33 then # line 1475 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 198 then # line 1489 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 199 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 210 then # line 1416 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 206 then # line 1438 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) }, range(tm, @te) p = tm - 1 begin @cs = 520 _goto_level = _again next end end end when 208 then # line 1454 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 202 then # line 1475 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 201 then # line 1480 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 219 then # line 1489 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 19 then # line 1480 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end end when 35 then # line 1489 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 17 then # line 1 "NONE" begin case @act when 52 then begin begin p = (( @te))-1; end if tok(tm, tm + 1) == '/' # Ambiguous regexp literal. diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1) end p = tm - 1 begin @cs = 520 _goto_level = _again next end end when 53 then begin begin p = (( @te))-1; end diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) }, range(tm, @te) p = tm - 1 begin @cs = 520 _goto_level = _again next end end when 58 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 747 _goto_level = _again next end end else begin begin p = (( @te))-1; end end end end when 37 then # line 1525 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 451 _goto_level = _again next end end end when 224 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 225 then # line 1525 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 451 _goto_level = _again next end end end when 38 then # line 1525 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = @ts - 1 begin @cs = 451 _goto_level = _again next end end end when 36 then # line 1 "NONE" begin case @act when 65 then begin begin p = (( @te))-1; end if @cond.active? emit(:kDO_COND, 'do', @te - 2, @te) else emit(:kDO, 'do', @te - 2, @te) end @cs = 739; begin p += 1 _goto_level = _out next end end when 66 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 451 _goto_level = _again next end end end end when 235 then # line 1552 "lib/parser/lexer.rl" begin @te = p+1 begin emit_do(true) @cs = 739; begin p += 1 _goto_level = _out next end end end when 228 then # line 1558 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 229 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 230 then # line 1555 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 233 then # line 1558 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 239 then # line 1582 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 238 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 247 then # line 1574 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1; begin @cs = 520 _goto_level = _again next end end end when 241 then # line 1576 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 245 then # line 1582 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 240 then # line 1 "NONE" begin case @act when 73 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 520; begin p += 1 _goto_level = _out next end end when 74 then begin begin p = (( @te))-1; end p = @ts - 1; begin @cs = 520 _goto_level = _again next end end end end when 275 then # line 1599 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; if tok.start_with? '-' emit(:tUMINUS_NUM, '-', @ts, @ts + 1) @cs = 747; begin p += 1 _goto_level = _out next end end end end when 276 then # line 1619 "lib/parser/lexer.rl" begin @te = p+1 begin type = delimiter = tok[0].chr p = p - 1; begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 270 then # line 1626 "lib/parser/lexer.rl" begin @te = p+1 begin type, delimiter = tok[0].chr, tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 45 then # line 1633 "lib/parser/lexer.rl" begin @te = p+1 begin type, delimiter = tok[0..-2], tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 277 then # line 1673 "lib/parser/lexer.rl" begin @te = p+1 begin type, delimiter = tok, tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 48 then # line 1687 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tSYMBOL, tok(@ts + 1), @ts) @cs = 747; begin p += 1 _goto_level = _out next end end end when 290 then # line 1699 "lib/parser/lexer.rl" begin @te = p+1 begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 292 then # line 1715 "lib/parser/lexer.rl" begin @te = p+1 begin escape = { " " => '\s', "\r" => '\r', "\n" => '\n', "\t" => '\t', "\v" => '\v', "\f" => '\f' }[tok[1]] diagnostic :warning, :invalid_escape_use, { :escape => escape }, range p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 291 then # line 1725 "lib/parser/lexer.rl" begin @te = p+1 begin diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) end end when 278 then # line 1761 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end end when 42 then # line 1781 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; if version?(18) ident = tok(@ts, @te - 2) emit((tok[0] =~ /[A-Z]/) ? :tCONSTANT : :tIDENTIFIER, ident, @ts, @te - 2) p = p - 1; # continue as a symbol if !@static_env.nil? && @static_env.declared?(ident) @cs = 747; else @cs = (arg_or_cmdarg); end else emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) @cs = 732; end begin p += 1 _goto_level = _out next end end end when 264 then # line 1827 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 156 _goto_level = _again next end end end when 46 then # line 1840 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1; begin @cs = 747 _goto_level = _again next end end end when 250 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 274 then # line 1609 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSTAR) begin p += 1 _goto_level = _out next end end end when 271 then # line 1633 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin type, delimiter = tok[0..-2], tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 269 then # line 1639 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) end end when 279 then # line 1687 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1), @ts) @cs = 747; begin p += 1 _goto_level = _out next end end end when 294 then # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 289 then # line 1725 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) end end when 295 then # line 1731 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 272 then # line 1761 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end end when 317 then # line 1207 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 747; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end end end when 261 then # line 1824 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 263 then # line 1827 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 156 _goto_level = _again next end end end when 266 then # line 1840 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1; begin @cs = 747 _goto_level = _again next end end end when 44 then # line 1639 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) end end when 53 then # line 1699 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 51 then # line 1725 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) end end when 43 then # line 1824 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end end when 47 then # line 1840 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = @ts - 1; begin @cs = 747 _goto_level = _again next end end end when 41 then # line 1 "NONE" begin case @act when 95 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end when 96 then begin begin p = (( @te))-1; end emit_table(KEYWORDS_BEGIN, @ts, tm) p = tm - 1 @cs = 496; begin p += 1 _goto_level = _out next end end when 97 then begin begin p = (( @te))-1; end emit_table(KEYWORDS_BEGIN) @cs = 739; begin p += 1 _goto_level = _out next end end when 99 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 747 _goto_level = _again next end end when 100 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 747; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end end when 103 then begin begin p = (( @te))-1; end p = @ts - 1; begin @cs = 747 _goto_level = _again next end end end end when 325 then # line 1860 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 326 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 327 then # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 331 then # line 1860 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 56 then # line 1870 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 334 then # line 1879 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 333 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 336 then # line 1873 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 335 then # line 1879 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 55 then # line 1879 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 520 _goto_level = _again next end end end when 366 then # line 1890 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION, @ts, @ts + 2) @lambda_stack.push @paren_nest begin p += 1 _goto_level = _out next end end end when 70 then # line 1927 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:kCLASS, 'class', @ts, @ts + 5) emit(:tLSHFT, '<<', @te - 2, @te) @cs = 739; begin p += 1 _goto_level = _out next end end end when 344 then # line 2064 "lib/parser/lexer.rl" begin @te = p+1 begin type, delimiter = tok, tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 58 then # line 2082 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1; begin @stack[ @top] = @cs @top+= 1 @cs = 305 _goto_level = _again next end end end when 408 then # line 2089 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 429; begin p += 1 _goto_level = _out next end end end when 358 then # line 2116 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 520; begin p += 1 _goto_level = _out next end end end when 350 then # line 2120 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cond.lexpop; @cmdarg.lexpop if %w"} ]".include?(tok) @cs = 488; else # ) # fnext expr_endfn; ? end begin p += 1 _goto_level = _out next end end end when 363 then # line 2134 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tOP_ASGN, tok(@ts, @te - 1)) @cs = 520; begin p += 1 _goto_level = _out next end end end when 348 then # line 2138 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 739; begin p += 1 _goto_level = _out next end end end when 345 then # line 2146 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 520; begin p += 1 _goto_level = _out next end end end when 347 then # line 2159 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 739; begin p += 1 _goto_level = _out next end end end when 413 then # line 2162 "lib/parser/lexer.rl" begin @te = p+1 begin diagnostic :error, :bare_backslash, nil, range(@ts, @ts + 1) p = p - 1; end end when 343 then # line 2168 "lib/parser/lexer.rl" begin @te = p+1 begin diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } end end when 342 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 423 then # line 1923 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(KEYWORDS) @cs = 310; begin p += 1 _goto_level = _out next end end end when 421 then # line 1927 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:kCLASS, 'class', @ts, @ts + 5) emit(:tLSHFT, '<<', @te - 2, @te) @cs = 739; begin p += 1 _goto_level = _out next end end end when 420 then # line 1938 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(KEYWORDS) @cs = 739; begin p += 1 _goto_level = _out next end end end when 369 then # line 2014 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :error, :no_dot_digit_literal end end when 410 then # line 2074 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT) @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end end when 362 then # line 2082 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1; begin @stack[ @top] = @cs @top+= 1 @cs = 305 _goto_level = _again next end end end when 367 then # line 2089 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 429; begin p += 1 _goto_level = _out next end end end when 415 then # line 1207 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 747; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end end end when 357 then # line 2116 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 520; begin p += 1 _goto_level = _out next end end end when 368 then # line 2146 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 520; begin p += 1 _goto_level = _out next end end end when 355 then # line 2153 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 361 then # line 2168 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } end end when 59 then # line 2014 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :error, :no_dot_digit_literal end end when 57 then # line 2168 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } end end when 60 then # line 1 "NONE" begin case @act when 115 then begin begin p = (( @te))-1; end if @lambda_stack.last == @paren_nest @lambda_stack.pop if tok == '{' emit(:tLAMBEG) else # 'do' emit(:kDO_LAMBDA) end else if tok == '{' emit_table(PUNCTUATION) else # 'do' emit_do end end @cs = 739; begin p += 1 _goto_level = _out next end end when 116 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 310; begin p += 1 _goto_level = _out next end end when 117 then begin begin p = (( @te))-1; end emit(:kCLASS, 'class', @ts, @ts + 5) emit(:tLSHFT, '<<', @te - 2, @te) @cs = 739; begin p += 1 _goto_level = _out next end end when 118 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 520; begin p += 1 _goto_level = _out next end end when 119 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 739; begin p += 1 _goto_level = _out next end end when 120 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 496; begin p += 1 _goto_level = _out next end end when 121 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) if version?(18) && tok == 'not' @cs = 520; begin p += 1 _goto_level = _out next end else @cs = 451; begin p += 1 _goto_level = _out next end end end when 122 then begin begin p = (( @te))-1; end if version?(18) emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 747; else @cs = (arg_or_cmdarg); end else emit_table(KEYWORDS) end begin p += 1 _goto_level = _out next end end when 123 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) begin p += 1 _goto_level = _out next end end when 124 then begin begin p = (( @te))-1; end digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end when 126 then begin begin p = (( @te))-1; end if version?(18, 19, 20) diagnostic :error, :trailing_in_number, { :character => tok(@te - 1, @te) }, range(@te - 1, @te) else emit(:tINTEGER, tok(@ts, @te - 1).to_i) p = p - 1; begin p += 1 _goto_level = _out next end end end when 127 then begin begin p = (( @te))-1; end if version?(18, 19, 20) diagnostic :error, :trailing_in_number, { :character => tok(@te - 1, @te) }, range(@te - 1, @te) else emit(:tFLOAT, tok(@ts, @te - 1).to_f) p = p - 1; begin p += 1 _goto_level = _out next end end end when 128 then begin begin p = (( @te))-1; end digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits)) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end when 130 then begin begin p = (( @te))-1; end emit(:tCONSTANT) @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end when 134 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 747; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end end when 135 then begin begin p = (( @te))-1; end if tm == @te # Suffix was consumed, e.g. foo! emit(:tFID) else # Suffix was not consumed, e.g. foo!= emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) p = tm - 1 end @cs = 451; begin p += 1 _goto_level = _out next end end end end when 72 then # line 2180 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 428 then # line 2184 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 156; begin p += 1 _goto_level = _out next end end end when 429 then # line 2184 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 156; begin p += 1 _goto_level = _out next end end end when 71 then # line 2184 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 156; begin p += 1 _goto_level = _out next end end end when 432 then # line 2194 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_comment(@eq_begin_s, @te) begin @cs = 156 _goto_level = _again next end end end when 431 then # line 2202 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :embedded_document, nil, range(@eq_begin_s, @eq_begin_s + '=begin'.length) end end when 83 then # line 2212 "lib/parser/lexer.rl" begin @te = p+1 begin @eq_begin_s = @ts begin @cs = 924 _goto_level = _again next end end end when 2 then # line 2216 "lib/parser/lexer.rl" begin @te = p+1 begin p = pe - 3 end end when 75 then # line 2219 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 739 _goto_level = _again next end end end when 76 then # line 514 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 77 then # line 2209 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 82 then # line 2212 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin @eq_begin_s = @ts begin @cs = 924 _goto_level = _again next end end end when 81 then # line 2219 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 739 _goto_level = _again next end end end when 1 then # line 2219 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 739 _goto_level = _again next end end end when 69 then # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end when 87 then # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 908 "lib/parser/lexer.rl" begin @te = p+1 begin if @te == pe diagnostic :fatal, :string_eof, nil, range(literal.str_s, literal.str_s + 1) end if literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, '') if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, '') end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (< '\s', "\r" => '\r', "\n" => '\n', "\t" => '\t', "\v" => '\v', "\f" => '\f' }[tok[1]] diagnostic :warning, :invalid_escape_use, { :escape => escape }, range p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 265 then # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 1827 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 156 _goto_level = _again next end end end when 433 then # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 2194 "lib/parser/lexer.rl" begin @te = p+1 begin emit_comment(@eq_begin_s, @te) begin @cs = 156 _goto_level = _again next end end end when 430 then # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 2199 "lib/parser/lexer.rl" begin @te = p+1 end when 84 then # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 2212 "lib/parser/lexer.rl" begin @te = p+1 begin @eq_begin_s = @ts begin @cs = 924 _goto_level = _again next end end end when 3 then # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 2216 "lib/parser/lexer.rl" begin @te = p+1 begin p = pe - 3 end end when 386 then # line 622 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } end # line 1987 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 385 then # line 623 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, chars)) } end # line 1987 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 387 then # line 624 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } end # line 1987 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 380 then # line 628 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Float(chars))) } end # line 2046 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits)) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 381 then # line 632 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } end # line 2046 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits)) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 382 then # line 633 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } end # line 2046 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits)) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 109 then # line 648 "lib/parser/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 codepoints.split(/[ \t]/).each do |codepoint_str| codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 @escape = lambda do diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) end break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length + 1 end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 136 then # line 648 "lib/parser/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 codepoints.split(/[ \t]/).each do |codepoint_str| codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 @escape = lambda do diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) end break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length + 1 end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 312 then # line 648 "lib/parser/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 codepoints.split(/[ \t]/).each do |codepoint_str| codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 @escape = lambda do diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) end break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length + 1 end end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 93 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 120 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 296 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 96 then # line 676 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_escape end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 123 then # line 676 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_escape end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 299 then # line 676 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_escape end end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 98 then # line 697 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 125 then # line 697 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 301 then # line 697 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 95 then # line 704 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 122 then # line 704 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 298 then # line 704 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 112 then # line 708 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 139 then # line 708 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 315 then # line 708 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 106 then # line 711 "lib/parser/lexer.rl" begin @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 133 then # line 711 "lib/parser/lexer.rl" begin @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 309 then # line 711 "lib/parser/lexer.rl" begin @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 111 then # line 716 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 138 then # line 716 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 314 then # line 716 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) end end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 105 then # line 731 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 132 then # line 731 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 308 then # line 731 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 108 then # line 745 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 135 then # line 745 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 311 then # line 745 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 94 then # line 774 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 121 then # line 774 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 297 then # line 774 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 145 then # line 780 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end # line 853 "lib/parser/lexer.rl" begin @te = p+1 begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 150 then # line 780 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end # line 853 "lib/parser/lexer.rl" begin @te = p+1 begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 62 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 24 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1421 "lib/parser/lexer.rl" begin tm = p end when 26 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1437 "lib/parser/lexer.rl" begin tm = p end when 28 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1465 "lib/parser/lexer.rl" begin tm = p end when 165 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1296 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 184 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1314 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 192 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1346 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 27 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1475 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 223 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1480 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 215 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1486 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 234 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1555 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 246 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1576 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 242 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1579 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 747 _goto_level = _again next end end end when 262 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1824 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 332 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 328 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1851 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @in_kwarg p = p - 1; begin @cs = 747 _goto_level = _again next end else begin @cs = 156 _goto_level = _again next end end end end when 340 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1873 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 337 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1876 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 156 _goto_level = _again next end end end when 414 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2153 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 356 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2156 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 921 _goto_level = _again next end end end when 78 then # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2209 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 214 then # line 1003 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) if literal literal.start_interp_brace end end # line 1390 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest p = @ts - 1 begin @cs = 747 _goto_level = _again next end else emit(:tLCURLY, '{', @te - 1, @te) @cs = 739; begin p += 1 _goto_level = _out next end end end end when 236 then # line 1003 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) if literal literal.start_interp_brace end end # line 1548 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tLBRACE_ARG) @cs = 739; end end when 324 then # line 1003 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) if literal literal.start_interp_brace end end # line 1742 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest @lambda_stack.pop emit(:tLAMBEG) else emit_table(PUNCTUATION_BEGIN) end begin p += 1 _goto_level = _out next end end end when 426 then # line 1003 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) if literal literal.start_interp_brace end end # line 1898 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest @lambda_stack.pop if tok == '{' emit(:tLAMBEG) else # 'do' emit(:kDO_LAMBDA) end else if tok == '{' emit_table(PUNCTUATION) else # 'do' emit_do end end @cs = 739; begin p += 1 _goto_level = _out next end end end when 427 then # line 1011 "lib/parser/lexer.rl" begin if literal if literal.end_interp_brace_and_try_closing if version?(18, 19) emit(:tRCURLY, '}', p - 1, p) else emit(:tSTRING_DEND, '}', p - 1, p) end if literal.saved_herebody_s @herebody_s = literal.saved_herebody_s end p = p - 1; @cs = (stack_pop); begin p += 1 _goto_level = _out next end end end end # line 2120 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cond.lexpop; @cmdarg.lexpop if %w"} ]".include?(tok) @cs = 488; else # ) # fnext expr_endfn; ? end begin p += 1 _goto_level = _out next end end end when 64 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end when 67 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 168 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1296 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 183 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1314 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 195 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1346 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 217 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1483 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 747 _goto_level = _again next end end end when 232 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1555 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 244 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1576 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 268 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1824 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 330 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 339 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1873 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 360 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2153 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 80 then # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2209 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 189 then # line 1163 "lib/parser/lexer.rl" begin tm = p end # line 1336 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tFID, tok(@ts, tm), @ts, tm) @cs = (arg_or_cmdarg); p = tm - 1; begin p += 1 _goto_level = _out next end end end when 280 then # line 1163 "lib/parser/lexer.rl" begin tm = p end # line 1679 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 747; begin p += 1 _goto_level = _out next end end end when 253 then # line 1163 "lib/parser/lexer.rl" begin tm = p end # line 1812 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 352 then # line 1163 "lib/parser/lexer.rl" begin tm = p end # line 2096 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if tm == @te # Suffix was consumed, e.g. foo! emit(:tFID) else # Suffix was not consumed, e.g. foo!= emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) p = tm - 1 end @cs = 451; begin p += 1 _goto_level = _out next end end end when 354 then # line 1163 "lib/parser/lexer.rl" begin tm = p end # line 1 "NONE" begin case @act when 115 then begin begin p = (( @te))-1; end if @lambda_stack.last == @paren_nest @lambda_stack.pop if tok == '{' emit(:tLAMBEG) else # 'do' emit(:kDO_LAMBDA) end else if tok == '{' emit_table(PUNCTUATION) else # 'do' emit_do end end @cs = 739; begin p += 1 _goto_level = _out next end end when 116 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 310; begin p += 1 _goto_level = _out next end end when 117 then begin begin p = (( @te))-1; end emit(:kCLASS, 'class', @ts, @ts + 5) emit(:tLSHFT, '<<', @te - 2, @te) @cs = 739; begin p += 1 _goto_level = _out next end end when 118 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 520; begin p += 1 _goto_level = _out next end end when 119 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 739; begin p += 1 _goto_level = _out next end end when 120 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 496; begin p += 1 _goto_level = _out next end end when 121 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) if version?(18) && tok == 'not' @cs = 520; begin p += 1 _goto_level = _out next end else @cs = 451; begin p += 1 _goto_level = _out next end end end when 122 then begin begin p = (( @te))-1; end if version?(18) emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 747; else @cs = (arg_or_cmdarg); end else emit_table(KEYWORDS) end begin p += 1 _goto_level = _out next end end when 123 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) begin p += 1 _goto_level = _out next end end when 124 then begin begin p = (( @te))-1; end digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end when 126 then begin begin p = (( @te))-1; end if version?(18, 19, 20) diagnostic :error, :trailing_in_number, { :character => tok(@te - 1, @te) }, range(@te - 1, @te) else emit(:tINTEGER, tok(@ts, @te - 1).to_i) p = p - 1; begin p += 1 _goto_level = _out next end end end when 127 then begin begin p = (( @te))-1; end if version?(18, 19, 20) diagnostic :error, :trailing_in_number, { :character => tok(@te - 1, @te) }, range(@te - 1, @te) else emit(:tFLOAT, tok(@ts, @te - 1).to_f) p = p - 1; begin p += 1 _goto_level = _out next end end end when 128 then begin begin p = (( @te))-1; end digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits)) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end when 130 then begin begin p = (( @te))-1; end emit(:tCONSTANT) @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end when 134 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 747; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end end when 135 then begin begin p = (( @te))-1; end if tm == @te # Suffix was consumed, e.g. foo! emit(:tFID) else # Suffix was not consumed, e.g. foo!= emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) p = tm - 1 end @cs = 451; begin p += 1 _goto_level = _out next end end end end when 190 then # line 1164 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1336 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tFID, tok(@ts, tm), @ts, tm) @cs = (arg_or_cmdarg); p = tm - 1; begin p += 1 _goto_level = _out next end end end when 281 then # line 1164 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1679 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 747; begin p += 1 _goto_level = _out next end end end when 255 then # line 1164 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1812 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 353 then # line 1164 "lib/parser/lexer.rl" begin tm = p - 2 end # line 2096 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if tm == @te # Suffix was consumed, e.g. foo! emit(:tFID) else # Suffix was not consumed, e.g. foo!= emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) p = tm - 1 end @cs = 451; begin p += 1 _goto_level = _out next end end end when 282 then # line 1169 "lib/parser/lexer.rl" begin tm = p end # line 1679 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 747; begin p += 1 _goto_level = _out next end end end when 256 then # line 1169 "lib/parser/lexer.rl" begin tm = p end # line 1812 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 283 then # line 1170 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1679 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 747; begin p += 1 _goto_level = _out next end end end when 257 then # line 1170 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1812 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 287 then # line 1171 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1679 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 747; begin p += 1 _goto_level = _out next end end end when 260 then # line 1171 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1812 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 286 then # line 1172 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1679 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 747; begin p += 1 _goto_level = _out next end end end when 259 then # line 1172 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1 "NONE" begin case @act when 95 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end when 96 then begin begin p = (( @te))-1; end emit_table(KEYWORDS_BEGIN, @ts, tm) p = tm - 1 @cs = 496; begin p += 1 _goto_level = _out next end end when 97 then begin begin p = (( @te))-1; end emit_table(KEYWORDS_BEGIN) @cs = 739; begin p += 1 _goto_level = _out next end end when 99 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 747 _goto_level = _again next end end when 100 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 747; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg); begin p += 1 _goto_level = _out next end end end when 103 then begin begin p = (( @te))-1; end p = @ts - 1; begin @cs = 747 _goto_level = _again next end end end end when 284 then # line 1173 "lib/parser/lexer.rl" begin tm = p - 3 end # line 1679 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 747; begin p += 1 _goto_level = _out next end end end when 258 then # line 1173 "lib/parser/lexer.rl" begin tm = p - 3 end # line 1812 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 747 _goto_level = _again next end end end when 285 then # line 1178 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1679 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 747; begin p += 1 _goto_level = _out next end end end when 409 then # line 1183 "lib/parser/lexer.rl" begin tm = p - 2 end # line 2078 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT, tok(@ts, tm), @ts, tm) p = tm - 1; begin p += 1 _goto_level = _out next end end end when 213 then # line 1189 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) end # line 1384 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tLBRACK, '[', @te - 1, @te) @cs = 520; begin p += 1 _goto_level = _out next end end end when 316 then # line 1189 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) end # line 1756 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end end when 412 then # line 1189 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) end # line 2142 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 520; begin p += 1 _goto_level = _out next end end end when 205 then # line 1196 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 1365 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if version?(18) emit(:tLPAREN2, '(', @te - 1, @te) @cs = 739; begin p += 1 _goto_level = _out next end else emit(:tLPAREN_ARG, '(', @te - 1, @te) @cs = 520; begin p += 1 _goto_level = _out next end end end end when 218 then # line 1196 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 1378 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tLPAREN2) @cs = 520; begin p += 1 _goto_level = _out next end end end when 226 then # line 1196 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 1502 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tLPAREN_ARG, '(', @te - 1, @te) if version?(18) @cs = 739; begin p += 1 _goto_level = _out next end else @cs = 520; begin p += 1 _goto_level = _out next end end end end when 273 then # line 1196 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 1756 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end end when 364 then # line 1196 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 2116 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 520; begin p += 1 _goto_level = _out next end end end when 365 then # line 1202 "lib/parser/lexer.rl" begin @paren_nest -= 1 end # line 2120 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cond.lexpop; @cmdarg.lexpop if %w"} ]".include?(tok) @cs = 488; else # ) # fnext expr_endfn; ? end begin p += 1 _goto_level = _out next end end end when 50 then # line 1649 "lib/parser/lexer.rl" begin @heredoc_e = p end # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 288 then # line 1650 "lib/parser/lexer.rl" begin new_herebody_s = p end # line 1651 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin tok(@ts, @heredoc_e) =~ /^<<(-?)(["'`]?)(.*)\2$/ indent = !$1.empty? type = '<<' + ($2.empty? ? '"' : $2) delimiter = $3 @cs = (push_literal(type, delimiter, @ts, @heredoc_e, indent)); if @herebody_s.nil? @herebody_s = new_herebody_s end p = @herebody_s - 1 end end when 320 then # line 1766 "lib/parser/lexer.rl" begin tm = p end # line 1767 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(KEYWORDS_BEGIN, @ts, tm) p = tm - 1 @cs = 496; begin p += 1 _goto_level = _out next end end end when 399 then # line 1980 "lib/parser/lexer.rl" begin @num_base = 16; @num_digits_s = p end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 393 then # line 1981 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = p end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 396 then # line 1982 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = p end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 390 then # line 1983 "lib/parser/lexer.rl" begin @num_base = 2; @num_digits_s = p end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 405 then # line 1984 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 374 then # line 1985 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 406 then # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end when 8 then # line 1 "NONE" begin @te = p+1 end # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 174 then # line 1 "NONE" begin @te = p+1 end # line 1266 "lib/parser/lexer.rl" begin @act = 25; end when 161 then # line 1 "NONE" begin @te = p+1 end # line 1270 "lib/parser/lexer.rl" begin @act = 26; end when 157 then # line 1 "NONE" begin @te = p+1 end # line 1274 "lib/parser/lexer.rl" begin @act = 27; end when 20 then # line 1 "NONE" begin @te = p+1 end # line 1425 "lib/parser/lexer.rl" begin @act = 52; end when 207 then # line 1 "NONE" begin @te = p+1 end # line 1438 "lib/parser/lexer.rl" begin @act = 53; end when 21 then # line 1 "NONE" begin @te = p+1 end # line 1475 "lib/parser/lexer.rl" begin @act = 58; end when 200 then # line 1 "NONE" begin @te = p+1 end # line 1480 "lib/parser/lexer.rl" begin @act = 59; end when 227 then # line 1 "NONE" begin @te = p+1 end # line 1512 "lib/parser/lexer.rl" begin @act = 65; end when 39 then # line 1 "NONE" begin @te = p+1 end # line 1525 "lib/parser/lexer.rl" begin @act = 66; end when 248 then # line 1 "NONE" begin @te = p+1 end # line 1570 "lib/parser/lexer.rl" begin @act = 73; end when 237 then # line 1 "NONE" begin @te = p+1 end # line 1574 "lib/parser/lexer.rl" begin @act = 74; end when 251 then # line 1 "NONE" begin @te = p+1 end # line 1761 "lib/parser/lexer.rl" begin @act = 95; end when 319 then # line 1 "NONE" begin @te = p+1 end # line 1767 "lib/parser/lexer.rl" begin @act = 96; end when 318 then # line 1 "NONE" begin @te = p+1 end # line 1773 "lib/parser/lexer.rl" begin @act = 97; end when 54 then # line 1 "NONE" begin @te = p+1 end # line 1812 "lib/parser/lexer.rl" begin @act = 99; end when 249 then # line 1 "NONE" begin @te = p+1 end # line 1207 "lib/parser/lexer.rl" begin @act = 100; end when 252 then # line 1 "NONE" begin @te = p+1 end # line 1840 "lib/parser/lexer.rl" begin @act = 103; end when 422 then # line 1 "NONE" begin @te = p+1 end # line 1898 "lib/parser/lexer.rl" begin @act = 115; end when 417 then # line 1 "NONE" begin @te = p+1 end # line 1923 "lib/parser/lexer.rl" begin @act = 116; end when 425 then # line 1 "NONE" begin @te = p+1 end # line 1933 "lib/parser/lexer.rl" begin @act = 118; end when 418 then # line 1 "NONE" begin @te = p+1 end # line 1938 "lib/parser/lexer.rl" begin @act = 119; end when 419 then # line 1 "NONE" begin @te = p+1 end # line 1942 "lib/parser/lexer.rl" begin @act = 120; end when 424 then # line 1 "NONE" begin @te = p+1 end # line 1946 "lib/parser/lexer.rl" begin @act = 121; end when 416 then # line 1 "NONE" begin @te = p+1 end # line 1957 "lib/parser/lexer.rl" begin @act = 122; end when 411 then # line 1 "NONE" begin @te = p+1 end # line 1973 "lib/parser/lexer.rl" begin @act = 123; end when 346 then # line 1 "NONE" begin @te = p+1 end # line 1987 "lib/parser/lexer.rl" begin @act = 124; end when 376 then # line 1 "NONE" begin @te = p+1 end # line 2031 "lib/parser/lexer.rl" begin @act = 127; end when 61 then # line 1 "NONE" begin @te = p+1 end # line 2046 "lib/parser/lexer.rl" begin @act = 128; end when 349 then # line 1 "NONE" begin @te = p+1 end # line 2074 "lib/parser/lexer.rl" begin @act = 130; end when 341 then # line 1 "NONE" begin @te = p+1 end # line 1207 "lib/parser/lexer.rl" begin @act = 134; end when 351 then # line 1 "NONE" begin @te = p+1 end # line 2096 "lib/parser/lexer.rl" begin @act = 135; end when 151 then # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 908 "lib/parser/lexer.rl" begin @te = p+1 begin if @te == pe diagnostic :fatal, :string_eof, nil, range(literal.str_s, literal.str_s + 1) end if literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, '') if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, '') end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 126 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 302 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 104 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 131 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 307 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 103 then # line 692 "lib/parser/lexer.rl" begin @escape = @source[p - 1].chr end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 130 then # line 692 "lib/parser/lexer.rl" begin @escape = @source[p - 1].chr end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 306 then # line 692 "lib/parser/lexer.rl" begin @escape = @source[p - 1].chr end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 101 then # line 697 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 128 then # line 697 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 304 then # line 697 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 97 then # line 698 "lib/parser/lexer.rl" begin @escape = @source[p - 1].chr end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 124 then # line 698 "lib/parser/lexer.rl" begin @escape = @source[p - 1].chr end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 300 then # line 698 "lib/parser/lexer.rl" begin @escape = @source[p - 1].chr end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 110 then # line 731 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end end # line 648 "lib/parser/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 codepoints.split(/[ \t]/).each do |codepoint_str| codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 @escape = lambda do diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) end break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length + 1 end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 137 then # line 731 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end end # line 648 "lib/parser/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 codepoints.split(/[ \t]/).each do |codepoint_str| codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 @escape = lambda do diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) end break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length + 1 end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 313 then # line 731 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end end # line 648 "lib/parser/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 codepoints.split(/[ \t]/).each do |codepoint_str| codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 @escape = lambda do diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) end break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length + 1 end end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 107 then # line 731 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end end # line 745 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 134 then # line 731 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end end # line 745 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 310 then # line 731 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end end # line 745 "lib/parser/lexer.rl" begin @escape = lambda do diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 92 then # line 780 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end # line 774 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 119 then # line 780 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end # line 774 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 65 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 167 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1296 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 182 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1314 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 194 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1346 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 216 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1483 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 747 _goto_level = _again next end end end when 231 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1555 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 243 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1576 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 267 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1824 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 329 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 338 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1873 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 359 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2153 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 79 then # line 1119 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2209 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 401 then # line 1984 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end when 371 then # line 1985 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end when 383 then # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 1987 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 378 then # line 2043 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 627 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars)) } end # line 2046 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits)) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 375 then # line 2044 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 627 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars)) } end # line 2046 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits)) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 222 then # line 1 "NONE" begin @te = p+1 end # line 488 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 1480 "lib/parser/lexer.rl" begin @act = 59; end when 29 then # line 1 "NONE" begin @te = p+1 end # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1475 "lib/parser/lexer.rl" begin @act = 58; end when 40 then # line 1 "NONE" begin @te = p+1 end # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1525 "lib/parser/lexer.rl" begin @act = 66; end when 68 then # line 1 "NONE" begin @te = p+1 end # line 1122 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1927 "lib/parser/lexer.rl" begin @act = 117; end when 31 then # line 1 "NONE" begin @te = p+1 end # line 1437 "lib/parser/lexer.rl" begin tm = p end # line 1438 "lib/parser/lexer.rl" begin @act = 53; end when 322 then # line 1 "NONE" begin @te = p+1 end # line 1766 "lib/parser/lexer.rl" begin tm = p end # line 1812 "lib/parser/lexer.rl" begin @act = 99; end when 321 then # line 1 "NONE" begin @te = p+1 end # line 1766 "lib/parser/lexer.rl" begin tm = p end # line 1207 "lib/parser/lexer.rl" begin @act = 100; end when 402 then # line 1 "NONE" begin @te = p+1 end # line 1984 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 1987 "lib/parser/lexer.rl" begin @act = 124; end when 102 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 129 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 305 then # line 671 "lib/parser/lexer.rl" begin char = @source[p - 1].chr @escape = ESCAPES.fetch(char, char) end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 100 then # line 698 "lib/parser/lexer.rl" begin @escape = @source[p - 1].chr end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 127 then # line 698 "lib/parser/lexer.rl" begin @escape = @source[p - 1].chr end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 853 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if literal.nest_and_try_closing('\\', @ts, @ts + 1) # If the literal is actually closed by the backslash, # rewind the input prior to consuming the escape sequence. p = @escape_s - 1 @cs = (pop_literal); begin p += 1 _goto_level = _out next end else # Get the first character after the backslash. escaped_char = @source[@escape_s].chr if literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if literal.regexp? && "\\$()*+.<>?[]^{|}".include?(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. literal.extend_string(tok, @ts, @te) else literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! # Two things to consider here. # # 1. The `escape' rule should be pure and so won't raise any # errors by itself. Instead, it stores them in lambdas. # # 2. Non-interpolated literals do not go through the aforementioned # rule. As \\ and \' (and variants) are munged, the full token # should always be written for such literals. @escape.call if @escape.respond_to? :call if literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed. literal.extend_string(tok.gsub("\\\n", ''), @ts, @te) else literal.extend_string(@escape || tok, @ts, @te) end end end end end when 303 then # line 698 "lib/parser/lexer.rl" begin @escape = @source[p - 1].chr end # line 682 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 686 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin # Show an error if memorized. @escape.call if @escape.respond_to? :call value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value[0].ord) else emit(:tCHARACTER, value) end @cs = 747; begin p += 1 _goto_level = _out next end end end when 397 then # line 1980 "lib/parser/lexer.rl" begin @num_base = 16; @num_digits_s = p end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 1987 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 391 then # line 1981 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = p end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 1987 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 394 then # line 1982 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = p end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 1987 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 388 then # line 1983 "lib/parser/lexer.rl" begin @num_base = 2; @num_digits_s = p end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 1987 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 400 then # line 1984 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 1987 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 370 then # line 1985 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 1987 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_' diagnostic :error, :trailing_in_number, { :character => '_' }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = "0" elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base)) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 25 then # line 1 "NONE" begin @te = p+1 end # line 820 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1437 "lib/parser/lexer.rl" begin tm = p end # line 1438 "lib/parser/lexer.rl" begin @act = 53; end when 407 then # line 1 "NONE" begin @te = p+1 end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2019 "lib/parser/lexer.rl" begin @act = 126; end when 403 then # line 1 "NONE" begin @te = p+1 end # line 1984 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2019 "lib/parser/lexer.rl" begin @act = 126; end when 373 then # line 1 "NONE" begin @te = p+1 end # line 1985 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 1986 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 621 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2019 "lib/parser/lexer.rl" begin @act = 126; end # line 21263 "lib/parser/lexer.rb" end end end if _goto_level <= _again case _lex_to_state_actions[ @cs] when 73 then # line 1 "NONE" begin @ts = nil; end # line 21273 "lib/parser/lexer.rb" end if @cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof if _lex_eof_trans[ @cs] > 0 _trans = _lex_eof_trans[ @cs] - 1; _goto_level = _eof_trans next; end end end if _goto_level <= _out break end end end # line 289 "lib/parser/lexer.rl" # % @p = p if @token_queue.any? @token_queue.shift elsif @cs == self.class.lex_error [ false, [ '$error', range(p - 1, p) ] ] else [ false, [ '$eof', range(p, p) ] ] end end protected def eof_codepoint?(point) [0x04, 0x1a, 0x00].include? point end def version?(*versions) versions.include?(@version) end def stack_pop @top -= 1 @stack[@top] end if "".respond_to?(:encode) def encode_escape(ord) ord.chr.force_encoding(@encoding) end def tok(s = @ts, e = @te) @source[s...e].encode(@encoding) end else def encode_escape(ord) ord.chr end def tok(s = @ts, e = @te) @source[s...e] end end def range(s = @ts, e = @te) Parser::Source::Range.new(@source_buffer, s, e) end def emit(type, value = tok, s = @ts, e = @te) token = [ type, [ value, range(s, e) ] ] @token_queue.push(token) @tokens.push(token) if @tokens token end def emit_table(table, s = @ts, e = @te) value = tok(s, e) emit(table[value], value, s, e) end def emit_do(do_block=false) if @cond.active? emit(:kDO_COND) elsif @cmdarg.active? || do_block emit(:kDO_BLOCK) else emit(:kDO) end end def arg_or_cmdarg if @command_state self.class.lex_en_expr_cmdarg else self.class.lex_en_expr_arg end end def emit_comment(s = @ts, e = @te) if @comments @comments.push(Parser::Source::Comment.new(range(s, e))) end if @tokens @tokens.push([ :tCOMMENT, [ tok(s, e), range(s, e) ] ]) end nil end def diagnostic(type, reason, arguments=nil, location=range, highlights=[]) @diagnostics.process( Parser::Diagnostic.new(type, reason, arguments, location, highlights)) end # # === LITERAL STACK === # def push_literal(*args) new_literal = Literal.new(self, *args) @literal_stack.push(new_literal) if new_literal.words? if new_literal.interpolate? self.class.lex_en_interp_words else self.class.lex_en_plain_words end else if new_literal.interpolate? self.class.lex_en_interp_string else self.class.lex_en_plain_string end end end def literal @literal_stack.last end def pop_literal old_literal = @literal_stack.pop if old_literal.type == :tREGEXP_BEG # Fetch modifiers. self.class.lex_en_regexp_modifiers else self.class.lex_en_expr_end end end # Mapping of strings to parser tokens. PUNCTUATION = { '=' => :tEQL, '&' => :tAMPER2, '|' => :tPIPE, '!' => :tBANG, '^' => :tCARET, '+' => :tPLUS, '-' => :tMINUS, '*' => :tSTAR2, '/' => :tDIVIDE, '%' => :tPERCENT, '~' => :tTILDE, ',' => :tCOMMA, ';' => :tSEMI, '.' => :tDOT, '..' => :tDOT2, '...' => :tDOT3, '[' => :tLBRACK2, ']' => :tRBRACK, '(' => :tLPAREN2, ')' => :tRPAREN, '?' => :tEH, ':' => :tCOLON, '&&' => :tANDOP, '||' => :tOROP, '-@' => :tUMINUS, '+@' => :tUPLUS, '~@' => :tTILDE, '**' => :tPOW, '->' => :tLAMBDA, '=~' => :tMATCH, '!~' => :tNMATCH, '==' => :tEQ, '!=' => :tNEQ, '>' => :tGT, '>>' => :tRSHFT, '>=' => :tGEQ, '<' => :tLT, '<<' => :tLSHFT, '<=' => :tLEQ, '=>' => :tASSOC, '::' => :tCOLON2, '===' => :tEQQ, '<=>' => :tCMP, '[]' => :tAREF, '[]=' => :tASET, '{' => :tLCURLY, '}' => :tRCURLY, '`' => :tBACK_REF2, '!@' => :tBANG, } PUNCTUATION_BEGIN = { '&' => :tAMPER, '*' => :tSTAR, '**' => :tDSTAR, '+' => :tUPLUS, '-' => :tUMINUS, '::' => :tCOLON3, '(' => :tLPAREN, '{' => :tLBRACE, '[' => :tLBRACK, } KEYWORDS = { 'if' => :kIF_MOD, 'unless' => :kUNLESS_MOD, 'while' => :kWHILE_MOD, 'until' => :kUNTIL_MOD, 'rescue' => :kRESCUE_MOD, 'defined?' => :kDEFINED, 'BEGIN' => :klBEGIN, 'END' => :klEND, } KEYWORDS_BEGIN = { 'if' => :kIF, 'unless' => :kUNLESS, 'while' => :kWHILE, 'until' => :kUNTIL, 'rescue' => :kRESCUE, 'defined?' => :kDEFINED, } %w(class module def undef begin end then elsif else ensure case when for break next redo retry in do return yield super self nil true false and or not alias __FILE__ __LINE__ __ENCODING__).each do |keyword| KEYWORDS_BEGIN[keyword] = KEYWORDS[keyword] = :"k#{keyword.upcase}" end # line 2224 "lib/parser/lexer.rl" # % end