# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # line 1 "lib/parser/ruby-next/lexer.rl" # line 3 "lib/parser/ruby-next/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_buffer.slice(@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 class Next # line 86 "lib/parser/ruby-next/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, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 26, 0, 127, 58, 58, 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, 9, 92, 10, 10, 9, 92, 58, 58, 98, 98, 101, 101, 103, 103, 105, 105, 110, 110, 0, 122, 61, 61, 9, 92, 9, 92, 9, 92, 9, 92, 9, 92, 10, 10, 0, 127, 0, 127, 61, 126, 93, 93, 0, 127, 0, 127, 10, 10, 34, 34, 10, 10, 39, 39, 0, 127, 10, 96, 96, 96, 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, 10, 10, 48, 57, 48, 57, 115, 115, 99, 99, 117, 117, 101, 101, 99, 99, 117, 117, 101, 101, 0, 127, 58, 58, 9, 92, 9, 92, 9, 92, 9, 92, 9, 92, 9, 92, 60, 60, 10, 10, 9, 92, 9, 92, 10, 10, 10, 10, 10, 10, 10, 10, 46, 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, 127, 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, 48, 123, 48, 102, 48, 102, 48, 102, 0, 0, 0, 125, 0, 125, 0, 0, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 0, 48, 102, 0, 0, 0, 92, 36, 123, 0, 127, 48, 57, 0, 127, 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, 48, 123, 48, 102, 48, 102, 48, 102, 0, 0, 0, 125, 0, 125, 0, 0, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 0, 48, 102, 0, 0, 0, 92, 9, 32, 0, 26, 0, 92, 0, 26, 0, 35, 36, 123, 0, 127, 48, 57, 0, 127, 0, 26, 0, 35, 9, 32, 36, 123, 0, 127, 48, 57, 0, 127, 0, 32, 9, 32, 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, 115, 115, 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, 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, 9, 32, 61, 61, 9, 32, 61, 126, 10, 10, 10, 10, 65, 122, 0, 122, 38, 61, 0, 0, 42, 61, 61, 61, 9, 92, 9, 92, 9, 92, 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, 61, 126, 0, 127, 48, 57, 38, 38, 42, 42, 64, 64, 60, 61, 62, 62, 61, 61, 61, 62, 0, 127, 48, 57, 0, 127, 124, 124, 64, 64, 60, 61, 0, 0, 10, 34, 10, 39, 96, 96, 62, 62, 61, 126, 61, 62, 0, 122, 0, 0, 0, 127, 0, 127, 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, 48, 123, 48, 102, 48, 102, 48, 102, 0, 0, 0, 125, 0, 125, 0, 0, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 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, 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, 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, 58, 46, 46, 10, 10, 48, 101, 48, 95, 9, 92, 9, 92, 46, 120, 48, 114, 43, 57, 48, 105, 102, 102, 0, 0, 101, 105, 0, 0, 0, 0, 48, 114, 48, 114, 48, 114, 48, 114, 105, 114, 102, 102, 0, 0, 101, 105, 115, 115, 0, 0, 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, 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, 92, 9, 92, 9, 92, 10, 10, 46, 46, 10, 10, 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, 128, 128, 128, 128, 128, 128, 128, 27, 128, 1, 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, 84, 1, 84, 1, 1, 1, 1, 1, 1, 123, 1, 84, 84, 84, 84, 84, 1, 128, 128, 66, 1, 128, 128, 1, 1, 1, 1, 128, 87, 1, 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, 1, 10, 10, 1, 1, 1, 1, 1, 1, 1, 128, 1, 84, 84, 84, 84, 84, 84, 1, 1, 84, 84, 1, 1, 1, 1, 1, 96, 24, 0, 1, 1, 1, 24, 1, 1, 93, 24, 88, 128, 10, 128, 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, 76, 55, 55, 55, 0, 126, 126, 0, 126, 0, 126, 126, 126, 126, 0, 126, 126, 126, 126, 126, 126, 0, 0, 55, 0, 93, 88, 128, 10, 128, 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, 76, 55, 55, 55, 0, 126, 126, 0, 126, 0, 126, 126, 126, 126, 0, 126, 126, 126, 126, 126, 126, 0, 0, 55, 0, 93, 24, 27, 93, 27, 36, 88, 128, 10, 128, 27, 36, 24, 88, 128, 10, 128, 33, 24, 58, 58, 29, 128, 10, 128, 128, 128, 128, 24, 0, 66, 1, 1, 128, 128, 10, 1, 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, 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, 24, 1, 24, 66, 1, 1, 58, 123, 24, 0, 20, 1, 84, 84, 84, 1, 1, 27, 128, 128, 1, 0, 66, 2, 0, 0, 0, 0, 66, 128, 10, 1, 1, 1, 2, 1, 1, 2, 128, 10, 128, 1, 1, 2, 0, 25, 30, 1, 1, 66, 2, 123, 0, 128, 128, 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, 76, 55, 55, 55, 0, 126, 126, 0, 126, 0, 126, 126, 126, 126, 0, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 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, 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, 24, 0, 66, 1, 1, 128, 128, 10, 1, 24, 0, 0, 20, 2, 13, 1, 1, 54, 48, 84, 84, 75, 67, 15, 58, 1, 0, 5, 0, 0, 67, 67, 67, 67, 10, 1, 0, 5, 1, 0, 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, 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, 84, 84, 84, 1, 1, 1, 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, 3669, 3798, 3927, 4056, 4185, 4314, 4443, 4471, 4600, 4602, 4604, 4733, 4735, 4737, 4739, 4741, 4870, 4999, 5128, 5257, 5386, 5515, 5644, 5773, 5902, 6031, 6160, 6289, 6418, 6547, 6676, 6805, 6934, 7063, 7065, 7067, 7069, 7071, 7081, 7083, 7085, 7087, 7089, 7091, 7093, 7095, 7097, 7226, 7228, 7357, 7442, 7444, 7529, 7531, 7533, 7535, 7537, 7539, 7541, 7665, 7667, 7752, 7837, 7922, 8007, 8092, 8094, 8223, 8352, 8419, 8421, 8550, 8679, 8681, 8683, 8685, 8687, 8816, 8904, 8906, 8953, 9032, 9111, 9205, 9233, 9261, 9308, 9409, 9437, 9471, 9473, 9567, 9646, 9750, 9879, 10008, 10137, 10266, 10395, 10524, 10526, 10528, 10657, 10673, 10684, 10695, 10697, 10708, 10719, 10721, 10723, 10725, 10727, 10729, 10731, 10733, 10862, 10864, 10949, 11034, 11119, 11204, 11289, 11374, 11376, 11378, 11463, 11548, 11550, 11552, 11554, 11556, 11558, 11655, 11680, 11681, 11683, 11685, 11687, 11712, 11714, 11716, 11810, 11835, 11924, 12053, 12064, 12193, 12315, 12316, 12317, 12326, 12335, 12336, 12337, 12431, 12432, 12433, 12434, 12528, 12530, 12531, 12532, 12533, 12627, 12674, 12768, 12862, 12863, 12864, 12958, 13005, 13007, 13101, 13178, 13234, 13290, 13346, 13347, 13474, 13601, 13602, 13729, 13730, 13857, 13984, 14111, 14238, 14239, 14366, 14493, 14620, 14747, 14874, 15001, 15002, 15003, 15059, 15060, 15154, 15243, 15372, 15383, 15512, 15634, 15635, 15636, 15645, 15654, 15655, 15656, 15750, 15751, 15752, 15753, 15847, 15849, 15850, 15851, 15852, 15946, 15993, 16087, 16181, 16182, 16183, 16277, 16324, 16326, 16420, 16497, 16553, 16609, 16665, 16666, 16793, 16920, 16921, 17048, 17049, 17176, 17303, 17430, 17557, 17558, 17685, 17812, 17939, 18066, 18193, 18320, 18321, 18322, 18378, 18379, 18473, 18498, 18526, 18620, 18648, 18685, 18774, 18903, 18914, 19043, 19071, 19108, 19133, 19222, 19351, 19362, 19491, 19525, 19550, 19609, 19668, 19698, 19827, 19838, 19967, 20096, 20225, 20354, 20379, 20380, 20447, 20449, 20451, 20580, 20709, 20720, 20722, 20724, 20726, 20728, 20730, 20733, 20735, 20802, 20804, 20807, 20936, 21065, 21194, 21323, 21452, 21581, 21710, 21712, 21714, 21843, 21972, 22101, 22230, 22359, 22488, 22617, 22746, 22875, 23004, 23133, 23262, 23391, 23520, 23649, 23778, 23907, 24036, 24165, 24294, 24423, 24552, 24681, 24810, 24939, 25068, 25197, 25326, 25455, 25584, 25713, 25842, 25971, 26100, 26229, 26358, 26487, 26616, 26745, 26874, 27003, 27132, 27261, 27390, 27519, 27648, 27777, 27906, 28035, 28164, 28293, 28422, 28551, 28680, 28809, 28938, 29067, 29196, 29325, 29454, 29583, 29712, 29841, 29970, 30099, 30228, 30357, 30486, 30615, 30744, 30873, 31002, 31131, 31260, 31389, 31518, 31647, 31776, 31905, 32034, 32163, 32292, 32421, 32423, 32552, 32681, 32706, 32708, 32710, 32712, 32713, 32842, 32971, 32973, 32974, 32999, 33000, 33067, 33069, 33071, 33073, 33075, 33077, 33080, 33082, 33149, 33151, 33154, 33283, 33285, 33287, 33289, 33417, 33546, 33609, 33663, 33717, 33718, 33772, 33827, 33829, 33831, 33833, 33858, 33859, 33988, 33989, 34106, 34107, 34109, 34111, 34112, 34166, 34168, 34170, 34172, 34197, 34199, 34328, 34330, 34332, 34334, 34336, 34465, 34594, 34723, 34724, 34853, 34855, 34980, 35005, 35007, 35009, 35011, 35012, 35014, 35015, 35144, 35273, 35298, 35299, 35301, 35303, 35305, 35306, 35435, 35564, 35693, 35822, 35951, 36080, 36209, 36338, 36467, 36596, 36725, 36854, 36983, 37112, 37241, 37370, 37499, 37628, 37633, 37634, 37701, 37703, 37704, 37705, 37706, 37731, 37733, 37758, 37825, 37827, 37829, 37888, 38012, 38037, 38038, 38059, 38061, 38146, 38231, 38316, 38318, 38320, 38348, 38477, 38606, 38608, 38609, 38676, 38679, 38680, 38681, 38682, 38683, 38750, 38879, 38890, 38892, 38894, 38896, 38899, 38901, 38903, 38906, 39035, 39046, 39175, 39177, 39179, 39182, 39183, 39209, 39240, 39242, 39244, 39311, 39314, 39438, 39439, 39568, 39697, 39819, 39820, 39821, 39830, 39839, 39840, 39841, 39935, 39936, 39937, 39938, 40032, 40034, 40035, 40036, 40037, 40131, 40178, 40272, 40366, 40367, 40368, 40462, 40509, 40511, 40605, 40682, 40738, 40794, 40850, 40851, 40978, 41105, 41106, 41233, 41234, 41361, 41488, 41615, 41742, 41743, 41870, 41997, 42124, 42251, 42378, 42505, 42632, 42759, 42886, 43013, 43140, 43267, 43394, 43521, 43648, 43775, 43902, 44029, 44156, 44157, 44158, 44214, 44215, 44344, 44473, 44602, 44603, 44605, 44606, 44735, 44864, 44993, 45122, 45251, 45380, 45509, 45638, 45767, 45896, 46025, 46154, 46283, 46412, 46541, 46670, 46799, 46928, 47057, 47186, 47315, 47444, 47573, 47702, 47831, 47960, 48089, 48218, 48347, 48476, 48605, 48734, 48863, 48992, 49121, 49250, 49379, 49508, 49637, 49766, 49895, 50024, 50153, 50282, 50411, 50540, 50669, 50798, 50927, 51056, 51185, 51314, 51443, 51572, 51701, 51830, 51959, 52088, 52217, 52346, 52475, 52542, 52671, 52800, 52929, 53058, 53187, 53316, 53445, 53574, 53703, 53832, 53961, 54090, 54219, 54348, 54477, 54606, 54735, 54864, 54993, 55122, 55251, 55380, 55509, 55638, 55767, 55768, 55833, 55927, 55952, 55953, 55955, 55957, 55959, 55960, 56089, 56218, 56243, 56244, 56246, 56248, 56250, 56251, 56380, 56509, 56511, 56512, 56537, 56538, 56605, 56607, 56609, 56738, 56867, 56878, 56880, 56905, 56906, 56907, 56928, 56931, 56945, 56947, 56949, 57004, 57053, 57138, 57223, 57299, 57367, 57383, 57442, 57444, 57445, 57451, 57452, 57453, 57521, 57589, 57657, 57725, 57736, 57738, 57739, 57745, 57747, 57748, 57749, 57817, 57885, 57953, 58021, 58089, 58157, 58225, 58293, 58363, 58431, 58501, 58569, 58571, 58574, 58576, 58643, 58645, 58648, 58777, 58906, 58907, 59036, 59165, 59294, 59423, 59552, 59681, 59682, 59684, 59685, 59686, 59815, 59944, 60073, 60202, 60331, 60460, 60589, 60718, 60847, 60976, 61105, 61234, 61363, 61492, 61621, 61750, 61879, 62008, 62137, 62266, 62395, 62524, 62653, 62782, 62911, 63040, 63169, 63298, 63427, 63556, 63685, 63814, 63943, 64072, 64201, 64330, 64459, 64544, 64673, 64802, 64931, 65060, 65189, 65318, 65447, 65576, 65705, 65834, 65963, 66092, 66221, 66350, 66479, 66608, 66737, 66866, 66995, 67124, 67253, 67382, 67511, 67640, 67769, 67898, 68027, 68156, 68285, 68414, 68543, 68672, 68801, 68930, 69059, 69188, 69317, 69446, 69575, 69704, 69833, 69962, 70091, 70220, 70349, 70478, 70607, 70736, 70865, 70994, 71123, 71252, 71381, 71510, 71639, 71768, 71897, 72026, 72155, 72284, 72413, 72542, 72671, 72800, 72929, 72930, 72995, 72996, 73081, 73166, 73251, 73253, 73255, 73257, 73310, 73312, 73405, 73507, 73599 ] 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 12, 12, 12, 12, 12, 12, 18, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 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, 19, 20, 20, 20, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 19, 22, 22, 22, 19, 22, 22, 22, 22, 22, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 19, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24, 22, 19, 22, 22, 22, 19, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 19, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 25, 22, 19, 26, 26, 26, 19, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 19, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28, 26, 19, 29, 29, 29, 19, 29, 29, 29, 29, 29, 30, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 19, 29, 19, 29, 29, 29, 19, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 19, 29, 19, 20, 20, 20, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 31, 20, 19, 32, 32, 32, 19, 32, 32, 32, 32, 32, 33, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 19, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 34, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 35, 32, 32, 32, 32, 32, 32, 36, 32, 19, 32, 32, 32, 19, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 19, 32, 37, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 38, 19, 38, 19, 19, 39, 39, 39, 19, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 19, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 41, 39, 19, 22, 22, 22, 19, 22, 22, 22, 22, 22, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 19, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 25, 22, 19, 42, 42, 42, 19, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 19, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 42, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 46, 46, 44, 46, 44, 46, 46, 44, 44, 46, 46, 46, 47, 46, 46, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 46, 46, 46, 46, 46, 46, 46, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 44, 46, 44, 44, 45, 46, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 44, 44, 44, 46, 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, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 44, 44, 44, 44, 44, 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 44, 44, 44, 44, 46, 44, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 44, 44, 44, 44, 44, 46, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 44, 44, 44, 44, 44, 44, 50, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 44, 44, 44, 44, 45, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 44, 44, 44, 44, 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, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 44, 44, 44, 44, 45, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 44, 44, 44, 44, 44, 45, 51, 52, 52, 52, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 52, 51, 54, 54, 54, 51, 54, 54, 54, 54, 54, 55, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 51, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 56, 54, 51, 54, 54, 54, 51, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 51, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 57, 54, 51, 58, 58, 58, 51, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 51, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 60, 58, 51, 61, 61, 61, 51, 61, 61, 61, 61, 61, 62, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 51, 61, 51, 61, 61, 61, 51, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 51, 61, 51, 52, 52, 52, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 63, 52, 51, 64, 64, 64, 51, 64, 64, 64, 64, 64, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 51, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 67, 64, 64, 64, 64, 64, 64, 68, 64, 51, 64, 64, 64, 51, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 51, 64, 69, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 70, 51, 70, 51, 51, 71, 71, 71, 51, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 51, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 73, 71, 51, 54, 54, 54, 51, 54, 54, 54, 54, 54, 55, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 51, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 57, 54, 51, 74, 74, 74, 51, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 51, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 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, 75, 75, 75, 75, 75, 75, 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, 78, 78, 76, 78, 76, 78, 78, 76, 76, 78, 78, 78, 79, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 78, 76, 76, 77, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 78, 76, 77, 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, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 76, 78, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 76, 76, 78, 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, 82, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 77, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 77, 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, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 77, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 77, 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, 83, 83, 83, 83, 83, 83, 83, 85, 85, 83, 85, 83, 85, 85, 83, 83, 85, 85, 85, 86, 85, 85, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 85, 85, 85, 85, 85, 85, 85, 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, 83, 85, 83, 83, 84, 85, 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, 83, 83, 83, 85, 83, 84, 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, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 83, 83, 83, 83, 83, 83, 83, 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, 83, 83, 83, 83, 85, 83, 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, 83, 83, 83, 83, 83, 85, 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, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 83, 83, 83, 83, 83, 83, 89, 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, 83, 83, 83, 83, 84, 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, 83, 83, 83, 83, 83, 84, 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, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 83, 83, 83, 83, 83, 83, 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, 83, 83, 83, 83, 84, 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, 83, 83, 83, 83, 83, 84, 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, 91, 91, 92, 91, 92, 91, 91, 92, 92, 91, 91, 91, 93, 91, 91, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 91, 91, 91, 91, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 92, 91, 92, 92, 90, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 92, 92, 92, 91, 92, 90, 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, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 91, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 91, 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, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92, 92, 92, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92, 95, 92, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92, 92, 95, 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, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 92, 92, 92, 92, 92, 92, 92, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 92, 92, 92, 92, 97, 92, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 92, 92, 92, 92, 92, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 99, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 99, 100, 101, 101, 101, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 104, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 102, 102, 102, 102, 104, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 103, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 103, 105, 102, 102, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 109, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 107, 107, 107, 107, 109, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 108, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 108, 110, 107, 112, 111, 113, 111, 114, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 116, 111, 116, 116, 116, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 116, 111, 111, 111, 111, 117, 118, 111, 119, 111, 120, 121, 122, 123, 124, 117, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 125, 111, 126, 122, 127, 128, 111, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 129, 130, 122, 131, 115, 111, 115, 115, 115, 115, 115, 115, 115, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 133, 115, 115, 134, 115, 135, 115, 115, 115, 136, 137, 111, 131, 111, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 138, 111, 138, 138, 138, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 138, 111, 111, 111, 111, 139, 140, 111, 141, 111, 142, 143, 144, 145, 146, 139, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 147, 111, 148, 144, 149, 150, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 151, 152, 144, 113, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 153, 108, 108, 108, 108, 108, 108, 108, 108, 154, 108, 108, 155, 108, 156, 108, 108, 108, 157, 158, 111, 113, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 159, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 160, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 161, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 162, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 163, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 159, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 164, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 165, 108, 108, 108, 108, 108, 108, 108, 166, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 167, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 168, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 159, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 169, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 159, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 170, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 171, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 163, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 173, 172, 174, 172, 175, 172, 144, 172, 176, 172, 172, 172, 172, 172, 172, 172, 177, 172, 178, 172, 179, 172, 144, 172, 180, 172, 144, 172, 181, 172, 175, 172, 183, 182, 184, 184, 184, 184, 184, 184, 184, 184, 184, 186, 184, 186, 186, 186, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 186, 184, 184, 184, 184, 184, 184, 184, 187, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 184, 188, 184, 184, 185, 184, 185, 185, 185, 189, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 184, 184, 184, 184, 184, 185, 190, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 192, 184, 192, 192, 192, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 192, 184, 184, 184, 184, 184, 184, 184, 193, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 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, 184, 194, 184, 184, 191, 184, 191, 191, 191, 195, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 184, 184, 184, 184, 184, 191, 197, 196, 197, 197, 197, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 197, 196, 196, 196, 196, 196, 196, 196, 198, 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, 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, 199, 196, 200, 196, 201, 196, 201, 201, 201, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 201, 196, 196, 196, 196, 196, 196, 196, 202, 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, 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, 203, 196, 204, 205, 207, 206, 208, 206, 209, 206, 210, 206, 211, 206, 212, 213, 213, 213, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 213, 215, 204, 216, 217, 216, 216, 216, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 216, 204, 204, 218, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 220, 204, 221, 222, 221, 221, 221, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 221, 204, 204, 223, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 225, 204, 227, 228, 227, 227, 227, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 227, 226, 226, 229, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 231, 226, 233, 234, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 233, 232, 232, 235, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 237, 232, 233, 238, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 233, 232, 232, 235, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 237, 232, 217, 204, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 241, 241, 239, 241, 239, 241, 241, 239, 239, 241, 241, 241, 242, 241, 241, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 241, 241, 241, 241, 241, 241, 241, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 239, 241, 239, 239, 240, 241, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 239, 239, 239, 241, 239, 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, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 239, 239, 239, 239, 239, 239, 239, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 239, 239, 239, 239, 241, 239, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 239, 239, 239, 239, 239, 241, 244, 241, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 241, 239, 244, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 246, 239, 239, 239, 239, 247, 239, 239, 239, 239, 239, 248, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 215, 239, 239, 239, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 239, 239, 239, 239, 245, 249, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 239, 239, 239, 248, 239, 245, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 252, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 250, 251, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 250, 254, 253, 257, 256, 252, 251, 257, 258, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 246, 239, 239, 239, 239, 247, 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, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 239, 239, 239, 239, 245, 249, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 239, 239, 239, 239, 239, 245, 260, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 257, 259, 257, 260, 261, 262, 262, 262, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 263, 262, 261, 264, 264, 264, 261, 264, 264, 264, 264, 264, 265, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 261, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 266, 264, 261, 264, 264, 264, 261, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 261, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 267, 264, 261, 268, 268, 268, 261, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 261, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 270, 268, 261, 271, 271, 271, 261, 271, 271, 271, 271, 271, 272, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 261, 271, 261, 271, 271, 271, 261, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 261, 271, 261, 262, 262, 262, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 273, 262, 261, 274, 274, 274, 261, 274, 274, 274, 274, 274, 275, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 261, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 276, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 277, 274, 274, 274, 274, 274, 274, 278, 274, 261, 274, 274, 274, 261, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 261, 274, 279, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 280, 261, 280, 261, 261, 281, 281, 281, 261, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 261, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 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, 283, 281, 261, 264, 264, 264, 261, 264, 264, 264, 264, 264, 265, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 261, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 267, 264, 261, 284, 284, 284, 261, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 261, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 284, 284, 284, 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 284, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 287, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 204, 204, 289, 204, 287, 204, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 204, 204, 204, 204, 286, 204, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 204, 204, 204, 204, 204, 286, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 287, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 239, 239, 289, 239, 287, 239, 286, 286, 286, 286, 286, 286, 290, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 286, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 239, 286, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 287, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 239, 239, 289, 239, 287, 239, 286, 286, 286, 286, 286, 286, 286, 286, 291, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 286, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 239, 286, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 287, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 239, 239, 289, 239, 287, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 292, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 286, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 239, 286, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 287, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 239, 239, 289, 239, 287, 239, 286, 286, 286, 292, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 286, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 239, 286, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 295, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 296, 293, 293, 293, 293, 295, 293, 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, 293, 293, 293, 293, 294, 293, 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, 293, 293, 293, 293, 293, 294, 296, 293, 293, 297, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 298, 298, 298, 298, 298, 298, 298, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 298, 298, 298, 298, 299, 298, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 298, 298, 298, 298, 298, 299, 301, 300, 301, 300, 300, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 300, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 300, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 300, 305, 304, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 304, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 304, 309, 308, 310, 308, 311, 308, 312, 308, 314, 313, 315, 313, 316, 313, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 298, 298, 298, 298, 298, 298, 298, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 298, 298, 298, 298, 317, 298, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 298, 298, 298, 298, 298, 317, 318, 304, 319, 320, 319, 319, 319, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 319, 304, 304, 321, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 322, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 323, 304, 324, 325, 324, 324, 324, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 324, 304, 304, 326, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 327, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 328, 304, 330, 331, 330, 330, 330, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 330, 329, 329, 332, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 333, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 334, 329, 336, 337, 336, 336, 336, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 336, 335, 335, 338, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 339, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 340, 335, 336, 337, 336, 336, 336, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 336, 335, 335, 338, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 341, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 340, 335, 336, 342, 336, 336, 336, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 336, 335, 335, 338, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 339, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 340, 335, 343, 304, 320, 304, 345, 346, 345, 345, 345, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 345, 344, 344, 347, 344, 344, 348, 344, 344, 344, 344, 344, 344, 344, 349, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 350, 344, 352, 346, 352, 352, 352, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 352, 351, 351, 347, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 350, 351, 355, 354, 357, 356, 358, 353, 359, 353, 360, 344, 362, 361, 361, 361, 362, 361, 361, 361, 361, 363, 364, 363, 363, 363, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 362, 361, 361, 361, 361, 361, 363, 361, 361, 365, 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, 366, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 367, 361, 361, 368, 361, 363, 369, 363, 363, 363, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 363, 369, 370, 371, 372, 373, 374, 376, 375, 378, 379, 378, 378, 378, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 378, 377, 364, 375, 380, 375, 382, 381, 381, 381, 382, 381, 381, 381, 381, 383, 384, 383, 383, 383, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 382, 381, 381, 381, 381, 381, 383, 381, 381, 385, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 386, 381, 383, 387, 383, 383, 383, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 383, 387, 389, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 390, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 391, 388, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 392, 392, 392, 392, 392, 392, 392, 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, 392, 392, 392, 392, 13, 392, 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, 392, 392, 392, 392, 392, 13, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 392, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 393, 393, 393, 393, 393, 393, 393, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 393, 393, 393, 393, 17, 393, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 393, 393, 393, 393, 393, 17, 396, 395, 395, 395, 396, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 396, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 397, 397, 397, 397, 397, 397, 397, 397, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 398, 395, 395, 395, 395, 395, 395, 395, 395, 395, 399, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 400, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 401, 395, 395, 402, 395, 403, 404, 406, 406, 406, 406, 406, 406, 406, 406, 405, 407, 407, 407, 407, 407, 407, 407, 407, 405, 405, 408, 408, 39, 39, 39, 408, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 408, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 409, 39, 410, 411, 412, 412, 39, 39, 39, 412, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 412, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 413, 39, 38, 412, 414, 415, 416, 416, 26, 26, 26, 416, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 416, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 417, 26, 412, 20, 20, 20, 412, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 412, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 418, 20, 408, 26, 26, 26, 408, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 408, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28, 26, 408, 419, 419, 419, 408, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 408, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 420, 419, 421, 422, 422, 419, 419, 419, 422, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 422, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 423, 419, 422, 20, 20, 20, 422, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 422, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 418, 20, 424, 422, 422, 26, 26, 26, 422, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 422, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28, 26, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 425, 425, 425, 425, 425, 425, 425, 426, 426, 426, 426, 426, 426, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 426, 426, 426, 426, 426, 426, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 427, 425, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 425, 425, 425, 425, 425, 425, 425, 428, 428, 428, 428, 428, 428, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 428, 428, 428, 428, 428, 428, 425, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 425, 425, 425, 425, 425, 425, 425, 429, 429, 429, 429, 429, 429, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 429, 429, 429, 429, 429, 429, 425, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 425, 425, 425, 425, 425, 425, 425, 430, 430, 430, 430, 430, 430, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 430, 430, 430, 430, 430, 430, 425, 431, 434, 433, 433, 433, 434, 433, 433, 433, 433, 435, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 434, 433, 433, 433, 433, 433, 435, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 433, 433, 433, 433, 433, 433, 433, 436, 436, 436, 436, 436, 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, 436, 436, 436, 436, 436, 436, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 437, 433, 434, 433, 433, 433, 434, 433, 433, 433, 433, 432, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 434, 433, 433, 433, 433, 433, 432, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 433, 433, 433, 433, 433, 433, 433, 438, 438, 438, 438, 438, 438, 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, 438, 438, 438, 438, 438, 438, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 439, 433, 432, 434, 438, 438, 438, 434, 438, 438, 438, 438, 432, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 434, 438, 438, 438, 438, 438, 432, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 432, 438, 440, 434, 441, 441, 441, 434, 441, 441, 441, 441, 435, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 441, 441, 441, 441, 435, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 441, 441, 441, 441, 441, 441, 441, 436, 436, 436, 436, 436, 436, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 436, 436, 436, 436, 436, 436, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 432, 441, 434, 441, 441, 441, 434, 441, 441, 441, 441, 432, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 441, 441, 441, 441, 432, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 441, 441, 441, 441, 441, 441, 441, 438, 438, 438, 438, 438, 438, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 438, 438, 438, 438, 438, 438, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 434, 441, 441, 441, 434, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 441, 441, 441, 441, 441, 441, 441, 443, 443, 443, 443, 443, 443, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 443, 443, 443, 443, 443, 443, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 444, 441, 434, 441, 441, 441, 434, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 441, 441, 441, 441, 441, 441, 441, 436, 436, 436, 436, 436, 436, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 436, 436, 436, 436, 436, 436, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 444, 441, 445, 434, 441, 441, 441, 434, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 441, 441, 441, 441, 441, 441, 441, 446, 446, 446, 446, 446, 446, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 446, 446, 446, 446, 446, 446, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 444, 441, 434, 441, 441, 441, 434, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 441, 441, 441, 441, 441, 441, 441, 447, 447, 447, 447, 447, 447, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 447, 447, 447, 447, 447, 447, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 444, 441, 434, 441, 441, 441, 434, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 441, 441, 441, 441, 441, 441, 441, 448, 448, 448, 448, 448, 448, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 448, 448, 448, 448, 448, 448, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 444, 441, 434, 441, 441, 441, 434, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 441, 441, 441, 441, 441, 441, 441, 449, 449, 449, 449, 449, 449, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 449, 449, 449, 449, 449, 449, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 444, 441, 434, 441, 441, 441, 434, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 441, 441, 441, 441, 442, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 441, 441, 441, 441, 441, 441, 441, 450, 450, 450, 450, 450, 450, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 450, 450, 450, 450, 450, 450, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 444, 441, 434, 441, 441, 441, 434, 441, 441, 441, 441, 432, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 434, 441, 441, 441, 441, 441, 432, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 441, 441, 441, 441, 441, 441, 441, 450, 450, 450, 450, 450, 450, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 450, 450, 450, 450, 450, 450, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 432, 441, 451, 452, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 453, 453, 453, 453, 453, 453, 453, 454, 454, 454, 454, 454, 454, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 454, 454, 454, 454, 454, 454, 453, 453, 456, 455, 455, 455, 456, 455, 455, 455, 455, 455, 457, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 456, 455, 455, 455, 455, 455, 455, 455, 455, 458, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 459, 455, 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, 460, 462, 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, 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, 460, 460, 460, 460, 460, 460, 463, 460, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 464, 464, 464, 464, 464, 464, 464, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 464, 464, 464, 464, 45, 464, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 464, 464, 464, 464, 464, 45, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 464, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 465, 465, 465, 465, 465, 465, 465, 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, 465, 465, 465, 465, 49, 465, 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, 465, 465, 465, 465, 465, 49, 468, 467, 467, 467, 468, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 468, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 469, 469, 469, 469, 469, 469, 469, 469, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 470, 467, 467, 467, 467, 467, 467, 467, 467, 467, 471, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 472, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 473, 467, 467, 474, 467, 475, 476, 478, 478, 478, 478, 478, 478, 478, 478, 477, 479, 479, 479, 479, 479, 479, 479, 479, 477, 477, 480, 480, 71, 71, 71, 480, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 480, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 481, 71, 482, 483, 484, 484, 71, 71, 71, 484, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 484, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 485, 71, 70, 484, 486, 487, 488, 488, 58, 58, 58, 488, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 488, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 489, 58, 484, 52, 52, 52, 484, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 484, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 490, 52, 480, 58, 58, 58, 480, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 480, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 60, 58, 480, 491, 491, 491, 480, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 480, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 492, 491, 493, 494, 494, 491, 491, 491, 494, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 494, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 495, 491, 494, 52, 52, 52, 494, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 494, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 490, 52, 496, 494, 494, 58, 58, 58, 494, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 494, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 60, 58, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 497, 497, 497, 497, 497, 497, 497, 498, 498, 498, 498, 498, 498, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 498, 498, 498, 498, 498, 498, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 499, 497, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 497, 497, 497, 497, 497, 497, 497, 500, 500, 500, 500, 500, 500, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 500, 500, 500, 500, 500, 500, 497, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 497, 497, 497, 497, 497, 497, 497, 501, 501, 501, 501, 501, 501, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 501, 501, 501, 501, 501, 501, 497, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 497, 497, 497, 497, 497, 497, 497, 502, 502, 502, 502, 502, 502, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 502, 502, 502, 502, 502, 502, 497, 503, 506, 505, 505, 505, 506, 505, 505, 505, 505, 507, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 506, 505, 505, 505, 505, 505, 507, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 505, 505, 505, 505, 505, 505, 505, 508, 508, 508, 508, 508, 508, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 508, 508, 508, 508, 508, 508, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 509, 505, 506, 505, 505, 505, 506, 505, 505, 505, 505, 504, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 506, 505, 505, 505, 505, 505, 504, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 505, 505, 505, 505, 505, 505, 505, 510, 510, 510, 510, 510, 510, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 510, 510, 510, 510, 510, 510, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 511, 505, 504, 506, 510, 510, 510, 506, 510, 510, 510, 510, 504, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 506, 510, 510, 510, 510, 510, 504, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 504, 510, 512, 506, 513, 513, 513, 506, 513, 513, 513, 513, 507, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 513, 513, 513, 513, 507, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 513, 513, 513, 513, 513, 513, 513, 508, 508, 508, 508, 508, 508, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 508, 508, 508, 508, 508, 508, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 504, 513, 506, 513, 513, 513, 506, 513, 513, 513, 513, 504, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 513, 513, 513, 513, 504, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 513, 513, 513, 513, 513, 513, 513, 510, 510, 510, 510, 510, 510, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 510, 510, 510, 510, 510, 510, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 506, 513, 513, 513, 506, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 513, 513, 513, 513, 513, 513, 513, 515, 515, 515, 515, 515, 515, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 515, 515, 515, 515, 515, 515, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 516, 513, 506, 513, 513, 513, 506, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 513, 513, 513, 513, 513, 513, 513, 508, 508, 508, 508, 508, 508, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 508, 508, 508, 508, 508, 508, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 516, 513, 517, 506, 513, 513, 513, 506, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 513, 513, 513, 513, 513, 513, 513, 518, 518, 518, 518, 518, 518, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 518, 518, 518, 518, 518, 518, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 516, 513, 506, 513, 513, 513, 506, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 513, 513, 513, 513, 513, 513, 513, 519, 519, 519, 519, 519, 519, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 519, 519, 519, 519, 519, 519, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 516, 513, 506, 513, 513, 513, 506, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 513, 513, 513, 513, 513, 513, 513, 520, 520, 520, 520, 520, 520, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 520, 520, 520, 520, 520, 520, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 516, 513, 506, 513, 513, 513, 506, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 513, 513, 513, 513, 513, 513, 513, 521, 521, 521, 521, 521, 521, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 521, 521, 521, 521, 521, 521, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 516, 513, 506, 513, 513, 513, 506, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 513, 513, 513, 513, 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 513, 513, 513, 513, 513, 513, 513, 522, 522, 522, 522, 522, 522, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 522, 522, 522, 522, 522, 522, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 516, 513, 506, 513, 513, 513, 506, 513, 513, 513, 513, 504, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 506, 513, 513, 513, 513, 513, 504, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 513, 513, 513, 513, 513, 513, 513, 522, 522, 522, 522, 522, 522, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 522, 522, 522, 522, 522, 522, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 504, 513, 523, 524, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 525, 525, 525, 525, 525, 525, 525, 526, 526, 526, 526, 526, 526, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 526, 526, 526, 526, 526, 526, 525, 525, 528, 527, 527, 527, 528, 527, 527, 527, 527, 529, 530, 529, 529, 529, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 528, 527, 527, 527, 527, 527, 529, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 531, 527, 529, 532, 529, 529, 529, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 529, 532, 533, 534, 534, 534, 533, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 533, 534, 536, 535, 535, 535, 536, 535, 535, 535, 535, 535, 537, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 536, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 538, 535, 539, 540, 540, 540, 539, 540, 540, 540, 540, 540, 541, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 539, 540, 543, 542, 542, 542, 543, 542, 542, 542, 542, 542, 544, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 543, 542, 542, 542, 542, 542, 542, 542, 542, 545, 542, 547, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 548, 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, 549, 546, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 550, 550, 550, 550, 550, 550, 550, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 550, 550, 550, 550, 77, 550, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 550, 550, 550, 550, 550, 77, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 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, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 551, 551, 551, 551, 551, 551, 551, 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, 551, 551, 551, 551, 81, 551, 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, 551, 551, 551, 551, 551, 81, 553, 552, 552, 552, 553, 552, 552, 552, 552, 552, 554, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 553, 552, 556, 555, 555, 555, 556, 555, 555, 555, 555, 557, 558, 557, 557, 557, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 556, 555, 555, 555, 555, 555, 557, 555, 555, 559, 555, 557, 560, 557, 557, 557, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 557, 560, 562, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 563, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 564, 561, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 565, 565, 565, 565, 565, 565, 565, 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, 565, 565, 565, 565, 84, 565, 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, 565, 565, 565, 565, 565, 84, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 565, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 566, 566, 566, 566, 566, 566, 566, 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, 566, 566, 566, 566, 88, 566, 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, 566, 566, 566, 566, 566, 88, 568, 567, 567, 567, 568, 567, 567, 567, 567, 569, 570, 569, 569, 569, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 568, 567, 567, 567, 567, 567, 569, 567, 569, 571, 569, 569, 569, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 569, 571, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 572, 572, 572, 572, 572, 572, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 572, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 574, 574, 574, 574, 574, 574, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 574, 575, 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, 576, 92, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 577, 577, 577, 577, 577, 577, 577, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 577, 577, 577, 577, 90, 577, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 577, 577, 577, 577, 577, 90, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 577, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 578, 578, 578, 578, 578, 578, 578, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 578, 578, 578, 578, 95, 578, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 578, 578, 578, 578, 578, 95, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 579, 579, 579, 579, 579, 579, 579, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 579, 579, 579, 579, 97, 579, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 579, 579, 579, 579, 579, 97, 581, 582, 582, 582, 581, 582, 582, 582, 582, 583, 584, 583, 583, 583, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 581, 582, 582, 582, 582, 582, 583, 585, 582, 586, 587, 588, 589, 582, 582, 582, 590, 591, 582, 591, 582, 592, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 593, 582, 594, 595, 596, 582, 582, 597, 598, 597, 597, 599, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 600, 601, 582, 592, 602, 592, 603, 604, 605, 606, 607, 608, 580, 580, 609, 580, 580, 580, 610, 611, 612, 580, 580, 613, 614, 615, 616, 580, 617, 580, 618, 580, 582, 619, 582, 591, 582, 580, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 621, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 620, 620, 620, 621, 620, 621, 620, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 620, 620, 620, 620, 580, 620, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 620, 620, 620, 620, 620, 580, 583, 622, 583, 583, 583, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 583, 622, 623, 592, 624, 624, 592, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 592, 624, 625, 626, 627, 628, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 99, 99, 629, 99, 629, 99, 99, 629, 629, 99, 99, 99, 631, 99, 99, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 99, 99, 99, 99, 99, 99, 99, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 629, 99, 629, 629, 630, 99, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 629, 629, 629, 99, 629, 630, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 633, 633, 633, 633, 633, 633, 633, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 633, 633, 633, 633, 630, 633, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 633, 633, 633, 633, 633, 630, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 633, 634, 624, 592, 624, 592, 624, 592, 624, 636, 635, 592, 637, 624, 592, 624, 638, 592, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 592, 629, 592, 624, 592, 592, 624, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 621, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 620, 620, 620, 621, 620, 621, 620, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 620, 620, 620, 620, 597, 620, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 620, 620, 620, 620, 620, 597, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 621, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 621, 639, 621, 639, 597, 597, 597, 597, 640, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 597, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 639, 597, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 621, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 621, 639, 621, 639, 597, 597, 597, 597, 597, 597, 641, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 597, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 639, 597, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 621, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 621, 639, 621, 639, 597, 597, 597, 597, 597, 597, 597, 597, 642, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 597, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 639, 597, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 621, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 621, 639, 621, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 643, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 597, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 639, 597, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 621, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 621, 639, 621, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 644, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 597, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 639, 597, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 621, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 621, 639, 621, 639, 597, 597, 597, 643, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 597, 639, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 639, 639, 639, 639, 639, 597, 638, 629, 584, 629, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 646, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 647, 648, 580, 580, 580, 580, 580, 649, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 650, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 651, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 652, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 653, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 654, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 655, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 656, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 657, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 658, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 659, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 660, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 656, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 661, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 660, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 662, 580, 663, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 664, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 665, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 666, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 667, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 668, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 669, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 670, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 671, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 672, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 673, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 674, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 675, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 665, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 676, 580, 580, 580, 580, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 677, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 621, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 678, 678, 678, 621, 678, 621, 678, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 678, 678, 678, 678, 580, 678, 580, 580, 580, 580, 580, 580, 580, 580, 679, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 678, 678, 678, 678, 678, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 680, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 681, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 682, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 683, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 684, 580, 685, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 686, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 658, 580, 580, 580, 687, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 688, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 689, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 674, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 690, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 612, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 672, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 691, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 692, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 693, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 674, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 694, 580, 580, 580, 695, 580, 580, 580, 580, 580, 696, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 696, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 697, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 698, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 699, 700, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 658, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 701, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 674, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 702, 580, 580, 703, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 658, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 669, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 704, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 705, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 687, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 706, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 612, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 707, 580, 580, 580, 580, 580, 580, 580, 580, 580, 701, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 669, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 708, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 709, 580, 580, 580, 580, 580, 580, 580, 710, 580, 580, 580, 580, 580, 580, 580, 711, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 687, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 675, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 695, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 712, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 669, 580, 580, 580, 693, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 713, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 714, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 621, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 621, 645, 621, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 580, 645, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 663, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 645, 645, 645, 645, 645, 580, 592, 624, 716, 717, 717, 717, 716, 717, 717, 717, 717, 718, 717, 718, 718, 718, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 716, 717, 717, 717, 717, 717, 718, 717, 717, 719, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 717, 720, 717, 717, 715, 717, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 717, 717, 717, 717, 717, 715, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 104, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 721, 721, 721, 721, 104, 721, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 721, 721, 721, 721, 103, 721, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 721, 721, 721, 721, 721, 103, 718, 722, 718, 718, 718, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 718, 722, 723, 724, 725, 726, 727, 721, 728, 730, 731, 731, 731, 730, 731, 731, 731, 731, 732, 733, 732, 732, 732, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 730, 731, 731, 731, 731, 731, 732, 734, 731, 735, 731, 736, 737, 731, 731, 731, 738, 739, 731, 739, 731, 736, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 740, 741, 742, 731, 731, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 744, 745, 731, 736, 729, 736, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 731, 746, 731, 739, 731, 729, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 748, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 747, 747, 747, 747, 747, 748, 747, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 747, 747, 747, 747, 729, 747, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 747, 747, 747, 747, 747, 729, 750, 749, 751, 732, 752, 732, 732, 732, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 732, 752, 753, 736, 754, 754, 736, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 736, 754, 755, 756, 757, 758, 736, 754, 736, 754, 736, 754, 736, 759, 754, 736, 754, 761, 736, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 736, 760, 736, 754, 736, 736, 754, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 748, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 762, 762, 762, 762, 762, 748, 762, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 762, 762, 762, 762, 743, 762, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 762, 762, 762, 762, 762, 743, 761, 760, 733, 760, 736, 754, 764, 763, 763, 763, 764, 763, 763, 763, 763, 765, 766, 765, 765, 765, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 764, 763, 763, 763, 763, 763, 765, 763, 763, 767, 763, 113, 768, 763, 769, 763, 770, 113, 144, 771, 146, 113, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 772, 763, 773, 144, 774, 775, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 144, 776, 144, 113, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 777, 763, 763, 763, 763, 763, 763, 763, 763, 778, 763, 763, 779, 763, 780, 763, 763, 763, 157, 158, 763, 113, 763, 781, 781, 781, 781, 781, 781, 781, 781, 781, 765, 781, 765, 765, 765, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 765, 781, 781, 781, 781, 139, 140, 781, 141, 781, 142, 143, 144, 145, 146, 139, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 147, 781, 148, 144, 149, 150, 781, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 151, 152, 144, 113, 108, 781, 108, 108, 108, 108, 108, 108, 108, 108, 153, 108, 108, 108, 108, 108, 108, 108, 108, 154, 108, 108, 155, 108, 156, 108, 108, 108, 157, 158, 781, 113, 781, 108, 782, 783, 783, 783, 782, 783, 783, 783, 783, 144, 784, 144, 144, 144, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 782, 783, 783, 783, 783, 783, 144, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 144, 783, 144, 784, 144, 144, 144, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 144, 107, 107, 107, 107, 107, 113, 107, 107, 107, 107, 107, 107, 107, 144, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 144, 107, 144, 784, 144, 144, 144, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 144, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 144, 107, 785, 144, 784, 144, 144, 144, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 144, 786, 786, 786, 786, 786, 786, 786, 786, 786, 787, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 144, 786, 144, 784, 144, 144, 144, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 144, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 144, 144, 107, 788, 782, 144, 782, 790, 789, 792, 793, 792, 792, 792, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 792, 791, 794, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 109, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 782, 782, 782, 782, 109, 782, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 782, 782, 782, 782, 108, 782, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 782, 782, 782, 782, 782, 108, 795, 144, 784, 144, 144, 144, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 144, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 144, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 113, 782, 796, 797, 798, 799, 800, 801, 144, 784, 144, 144, 144, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 144, 782, 782, 782, 782, 782, 782, 782, 782, 782, 113, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 144, 782, 144, 789, 113, 802, 113, 802, 803, 804, 803, 803, 803, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 803, 791, 805, 802, 806, 806, 806, 806, 806, 806, 806, 806, 806, 116, 806, 116, 116, 116, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 116, 806, 806, 806, 806, 117, 118, 806, 119, 806, 120, 121, 122, 123, 124, 117, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 125, 806, 126, 122, 127, 128, 806, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 129, 130, 122, 131, 115, 806, 115, 115, 115, 115, 115, 115, 115, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 133, 115, 115, 134, 115, 135, 115, 115, 115, 136, 137, 806, 131, 806, 115, 144, 802, 807, 802, 808, 802, 809, 802, 810, 183, 183, 183, 810, 183, 183, 183, 183, 811, 183, 811, 811, 811, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 810, 183, 183, 183, 183, 183, 811, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 183, 812, 183, 183, 185, 183, 185, 185, 185, 189, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 183, 183, 183, 183, 183, 185, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 813, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 183, 182, 182, 182, 182, 813, 182, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 182, 182, 182, 182, 185, 182, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 182, 182, 182, 182, 182, 185, 814, 814, 814, 814, 814, 814, 814, 814, 814, 186, 814, 186, 186, 186, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 186, 814, 814, 814, 814, 814, 814, 814, 187, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 814, 188, 814, 814, 185, 814, 185, 185, 185, 189, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 814, 814, 814, 814, 814, 185, 815, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 813, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 183, 814, 814, 814, 814, 813, 814, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 814, 814, 814, 814, 185, 814, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 816, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 814, 814, 814, 814, 814, 185, 190, 814, 818, 817, 817, 817, 818, 817, 817, 817, 817, 819, 817, 819, 819, 819, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 818, 817, 817, 817, 817, 817, 819, 817, 817, 820, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 821, 817, 817, 817, 817, 817, 817, 817, 822, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 823, 817, 819, 824, 819, 819, 819, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 819, 824, 825, 826, 827, 828, 830, 829, 831, 832, 829, 833, 835, 836, 836, 836, 835, 836, 836, 836, 836, 837, 838, 837, 837, 837, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 835, 836, 836, 836, 836, 836, 837, 836, 836, 839, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 836, 840, 836, 836, 834, 836, 834, 834, 834, 834, 834, 834, 834, 834, 841, 834, 834, 834, 834, 834, 834, 834, 834, 842, 834, 834, 843, 834, 844, 834, 834, 834, 836, 836, 836, 836, 836, 834, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 845, 845, 845, 845, 845, 845, 845, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 845, 845, 845, 845, 834, 845, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 845, 845, 845, 845, 845, 834, 837, 846, 837, 837, 837, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 837, 846, 847, 848, 849, 850, 851, 853, 852, 854, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 856, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 857, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 858, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 859, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 860, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 856, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 861, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 862, 834, 834, 834, 834, 834, 834, 834, 863, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 864, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 865, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 856, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 834, 866, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 856, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 867, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 834, 868, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 855, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 834, 855, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 860, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 855, 855, 855, 855, 855, 834, 870, 215, 215, 215, 870, 215, 215, 215, 215, 871, 872, 871, 871, 871, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 870, 215, 215, 215, 215, 215, 871, 873, 215, 874, 215, 875, 876, 215, 877, 215, 878, 879, 215, 880, 881, 882, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 883, 215, 884, 885, 886, 887, 215, 888, 889, 888, 888, 890, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 891, 892, 215, 893, 894, 215, 895, 896, 897, 898, 899, 900, 869, 869, 901, 869, 869, 869, 902, 903, 904, 869, 869, 905, 906, 907, 908, 869, 909, 869, 910, 869, 911, 912, 215, 893, 215, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 917, 916, 916, 918, 916, 919, 921, 922, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 923, 920, 925, 924, 926, 927, 928, 871, 929, 871, 871, 871, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 871, 929, 931, 930, 933, 934, 933, 933, 933, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 933, 932, 215, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 215, 935, 936, 937, 938, 939, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 941, 941, 941, 941, 941, 941, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 941, 943, 213, 213, 213, 943, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 943, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 213, 945, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 215, 944, 946, 948, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 215, 947, 215, 204, 216, 217, 216, 216, 216, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 216, 944, 944, 218, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 944, 944, 944, 215, 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, 944, 944, 944, 944, 220, 944, 233, 234, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 233, 232, 232, 235, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 237, 232, 216, 217, 216, 216, 216, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 216, 944, 944, 218, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 944, 944, 944, 215, 215, 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, 944, 944, 944, 220, 944, 950, 935, 952, 951, 935, 953, 953, 953, 935, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 935, 953, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 955, 956, 935, 957, 241, 958, 956, 935, 935, 959, 960, 935, 960, 935, 241, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 961, 935, 962, 963, 964, 935, 965, 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, 966, 935, 935, 241, 954, 241, 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, 935, 967, 935, 968, 935, 954, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 970, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 969, 969, 969, 971, 969, 970, 969, 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, 969, 969, 969, 969, 954, 969, 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, 969, 969, 969, 969, 969, 954, 973, 972, 974, 976, 977, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 978, 975, 980, 981, 979, 982, 983, 984, 985, 241, 969, 969, 986, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 241, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 969, 969, 969, 969, 969, 969, 969, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 969, 969, 969, 969, 240, 969, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 969, 969, 969, 969, 969, 240, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 969, 987, 969, 241, 969, 241, 969, 241, 988, 969, 241, 969, 241, 969, 241, 241, 969, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 989, 989, 989, 989, 989, 989, 992, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 989, 989, 989, 989, 990, 989, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 989, 989, 989, 989, 989, 990, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 993, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 995, 995, 995, 995, 995, 995, 995, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 995, 995, 995, 995, 996, 995, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 995, 995, 995, 995, 995, 996, 987, 969, 986, 969, 998, 999, 935, 1000, 256, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 257, 246, 258, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 257, 247, 257, 260, 215, 935, 893, 215, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 215, 935, 215, 945, 935, 1004, 1003, 1003, 1003, 1004, 1003, 1003, 1003, 1003, 1005, 1006, 1005, 1005, 1005, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1004, 1003, 1003, 1003, 1003, 1003, 1005, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1003, 1008, 1003, 1003, 1007, 1003, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1003, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1009, 1009, 1009, 1009, 1010, 1009, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1009, 1009, 1009, 1009, 1009, 1010, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1011, 1011, 1011, 1011, 1012, 1011, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1011, 1011, 1011, 1011, 1011, 1012, 1015, 1014, 1014, 1014, 1015, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1015, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1017, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1018, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1019, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1020, 1014, 1014, 1021, 1014, 1022, 1023, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1024, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1024, 1024, 1027, 1027, 281, 281, 281, 1027, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 1027, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 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, 1028, 281, 1029, 1030, 1031, 1031, 281, 281, 281, 1031, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 1031, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 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, 1032, 281, 280, 1031, 1033, 1034, 1035, 1035, 268, 268, 268, 1035, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 1035, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 1036, 268, 1031, 262, 262, 262, 1031, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1031, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1037, 262, 1027, 268, 268, 268, 1027, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 1027, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 270, 268, 1027, 1038, 1038, 1038, 1027, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1027, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1039, 1038, 1040, 1041, 1041, 1038, 1038, 1038, 1041, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1041, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1042, 1038, 1041, 262, 262, 262, 1041, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1041, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1037, 262, 1043, 1041, 1041, 268, 268, 268, 1041, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 1041, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 270, 268, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1045, 1045, 1045, 1045, 1045, 1045, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1045, 1045, 1045, 1045, 1045, 1045, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1046, 1044, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1047, 1047, 1047, 1047, 1047, 1047, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1047, 1047, 1047, 1047, 1047, 1047, 1044, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1048, 1048, 1048, 1048, 1048, 1048, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1048, 1048, 1048, 1048, 1048, 1048, 1044, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1049, 1049, 1049, 1049, 1049, 1049, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1049, 1049, 1049, 1049, 1049, 1049, 1044, 1050, 1053, 1052, 1052, 1052, 1053, 1052, 1052, 1052, 1052, 1054, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1053, 1052, 1052, 1052, 1052, 1052, 1054, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1055, 1055, 1055, 1055, 1055, 1055, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1055, 1055, 1055, 1055, 1055, 1055, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1056, 1052, 1053, 1052, 1052, 1052, 1053, 1052, 1052, 1052, 1052, 1051, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1053, 1052, 1052, 1052, 1052, 1052, 1051, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1057, 1057, 1057, 1057, 1057, 1057, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1057, 1057, 1057, 1057, 1057, 1057, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1058, 1052, 1051, 1053, 1057, 1057, 1057, 1053, 1057, 1057, 1057, 1057, 1051, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1053, 1057, 1057, 1057, 1057, 1057, 1051, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1051, 1057, 1059, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1054, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1054, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1061, 1061, 1061, 1061, 1061, 1061, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1061, 1061, 1061, 1061, 1061, 1061, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1051, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1051, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1051, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1057, 1057, 1057, 1057, 1057, 1057, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1057, 1057, 1057, 1057, 1057, 1057, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1063, 1063, 1063, 1063, 1063, 1063, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1063, 1063, 1063, 1063, 1063, 1063, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1061, 1061, 1061, 1061, 1061, 1061, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1061, 1061, 1061, 1061, 1061, 1061, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1065, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1066, 1066, 1066, 1066, 1066, 1066, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1066, 1066, 1066, 1066, 1066, 1066, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1067, 1067, 1067, 1067, 1067, 1067, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1067, 1067, 1067, 1067, 1067, 1067, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1068, 1068, 1068, 1068, 1068, 1068, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1068, 1068, 1068, 1068, 1068, 1068, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1069, 1069, 1069, 1069, 1069, 1069, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1069, 1069, 1069, 1069, 1069, 1069, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1062, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1051, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1051, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1051, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1072, 1072, 1072, 1072, 1072, 1072, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1072, 1072, 1072, 1072, 1072, 1072, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1073, 1073, 1073, 1073, 1073, 1073, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1073, 1073, 1073, 1073, 1073, 1073, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1074, 1074, 1074, 1074, 1074, 1074, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1074, 1074, 1074, 1074, 1074, 1074, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1051, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1075, 1075, 1075, 1075, 1075, 1075, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1075, 1075, 1075, 1075, 1075, 1075, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1051, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1076, 1076, 1076, 1076, 1076, 1076, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1076, 1076, 1076, 1076, 1076, 1076, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1051, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1077, 1077, 1077, 1077, 1077, 1077, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1077, 1077, 1077, 1077, 1077, 1077, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1051, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1078, 1078, 1078, 1078, 1078, 1078, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1078, 1078, 1078, 1078, 1078, 1078, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1051, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1051, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1079, 1079, 1079, 1079, 1079, 1079, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1079, 1079, 1079, 1079, 1079, 1079, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1080, 1080, 1080, 1080, 1080, 1080, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1080, 1080, 1080, 1080, 1080, 1080, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1081, 1081, 1081, 1081, 1081, 1081, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1081, 1081, 1081, 1081, 1081, 1081, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1082, 1082, 1082, 1082, 1082, 1082, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1082, 1082, 1082, 1082, 1082, 1082, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1053, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1053, 1060, 1060, 1060, 1060, 1060, 1071, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1070, 1070, 1070, 1070, 1070, 1070, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1064, 1060, 1083, 1084, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1086, 1086, 1086, 1086, 1086, 1086, 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, 1086, 1086, 1086, 1086, 1086, 1086, 1085, 1085, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 287, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 204, 204, 289, 204, 287, 204, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 204, 204, 204, 204, 286, 204, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 204, 204, 204, 204, 204, 286, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 287, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 935, 935, 289, 935, 287, 935, 286, 286, 286, 286, 1087, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 935, 935, 935, 935, 286, 935, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 935, 935, 935, 935, 935, 286, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 287, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 935, 935, 289, 935, 287, 935, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 1088, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 935, 935, 935, 935, 286, 935, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 935, 935, 935, 935, 935, 286, 1089, 1090, 935, 930, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 1091, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 1092, 1093, 869, 869, 869, 869, 869, 1094, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1095, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 1096, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1097, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 1098, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 1099, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1100, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 1101, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 1102, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 1103, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 287, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 204, 204, 289, 204, 287, 204, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 204, 204, 204, 204, 869, 204, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 204, 204, 204, 204, 204, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 1104, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1105, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 1101, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 1106, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1105, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1107, 869, 1108, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 1109, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 1110, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1111, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1112, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 1113, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 1114, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1115, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 1116, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 1117, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1118, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1119, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 1120, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1110, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1121, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1122, 869, 1123, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1124, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1103, 869, 869, 869, 1121, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1125, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1126, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1119, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 1127, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 904, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1117, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 1128, 869, 869, 869, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1129, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 1130, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1131, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1119, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1132, 869, 869, 869, 1133, 869, 869, 869, 869, 869, 1134, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1134, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1135, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 1136, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1137, 1138, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1103, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 1139, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1140, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1141, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1144, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1145, 1142, 1142, 1146, 1142, 1144, 1142, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1142, 1142, 1142, 1142, 1143, 1142, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1142, 1142, 1142, 1142, 1142, 1143, 921, 1147, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 923, 920, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1148, 869, 869, 1149, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1103, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1114, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1150, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1151, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1121, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1152, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 904, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 1153, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1154, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1114, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1119, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1155, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 1156, 869, 869, 869, 869, 869, 869, 869, 1157, 869, 869, 869, 869, 869, 869, 869, 1158, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1121, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1159, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1160, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1128, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 1161, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1128, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 1162, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1114, 869, 869, 869, 1163, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1164, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1128, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 1165, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 1166, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 913, 914, 914, 914, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 287, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 288, 913, 913, 289, 913, 287, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 915, 913, 913, 869, 913, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1108, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 913, 913, 913, 913, 913, 869, 1167, 215, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 1168, 935, 1170, 1169, 1169, 1169, 1170, 1169, 1169, 1169, 1169, 1171, 1172, 1171, 1171, 1171, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170, 1169, 1169, 1169, 1169, 1169, 1171, 1169, 1169, 1173, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1174, 1169, 1171, 1175, 1171, 1171, 1171, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1171, 1175, 1176, 1177, 1178, 1179, 1180, 1182, 1181, 1183, 1185, 1186, 1186, 1186, 1185, 1186, 1186, 1186, 1186, 1187, 1188, 1187, 1187, 1187, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1185, 1186, 1186, 1186, 1186, 1186, 1187, 1186, 1189, 1190, 1186, 1186, 1186, 1189, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1186, 1191, 1186, 1186, 1184, 1186, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1186, 1186, 1186, 1186, 1186, 1184, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 295, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 296, 1192, 1192, 1192, 1192, 295, 1192, 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, 1192, 1192, 1192, 1192, 294, 1192, 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, 1192, 1192, 1192, 1192, 1192, 294, 1187, 1193, 1187, 1187, 1187, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1187, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1192, 1200, 1202, 1203, 1203, 1203, 1202, 1203, 1203, 1203, 1203, 1204, 1205, 1204, 1204, 1204, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1202, 1203, 1203, 1203, 1203, 1203, 1204, 1206, 1207, 1208, 1209, 1210, 1211, 1207, 1212, 1213, 1214, 1210, 1215, 1216, 1217, 1210, 1218, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1227, 1227, 1229, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1230, 1231, 1232, 1210, 1233, 1207, 1234, 1235, 1236, 1237, 1238, 1239, 1201, 1201, 1240, 1201, 1201, 1201, 1241, 1242, 1243, 1201, 1201, 1244, 1245, 1246, 1247, 1201, 1248, 1201, 1249, 1201, 1250, 1251, 1252, 1253, 1203, 1201, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 1254, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 304, 304, 304, 304, 304, 1254, 304, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 304, 304, 304, 304, 1201, 304, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 304, 304, 304, 304, 304, 1201, 1256, 1255, 1257, 1204, 1258, 1204, 1204, 1204, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1204, 1258, 1259, 1261, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1261, 1260, 1262, 1263, 1264, 1265, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 299, 299, 1266, 299, 1266, 299, 299, 1266, 1266, 299, 299, 299, 1267, 299, 299, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 299, 299, 299, 299, 299, 299, 299, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 1266, 299, 1266, 1266, 317, 299, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 1266, 1266, 1266, 299, 1266, 317, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 1269, 1269, 1269, 1269, 317, 1269, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 1269, 1269, 1269, 1269, 1269, 317, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1269, 1270, 304, 1210, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1272, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1270, 1271, 1273, 1274, 1210, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1270, 1275, 1270, 1276, 1271, 1278, 1277, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 1279, 1277, 1281, 1280, 1282, 1280, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1284, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1285, 1283, 1283, 1283, 1283, 1283, 1284, 1283, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 301, 1283, 1286, 304, 1286, 1286, 1286, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 1286, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 1287, 304, 1289, 1288, 1289, 1289, 1289, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1289, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1290, 1288, 1292, 1291, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1294, 1291, 1295, 1296, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1297, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1298, 1291, 1291, 1291, 1291, 1291, 1291, 1299, 1291, 1291, 1294, 1291, 1295, 1296, 1291, 1291, 1291, 1300, 1291, 1291, 1291, 1291, 1291, 1297, 1291, 1291, 1301, 1291, 1291, 1291, 1291, 1291, 1298, 1291, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1303, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1304, 1302, 1302, 1302, 1302, 1302, 1303, 1302, 1302, 1302, 1305, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1306, 1302, 1307, 304, 1307, 304, 304, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 304, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1307, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1309, 1308, 1311, 1310, 1312, 1314, 1313, 1313, 1313, 1315, 1313, 1316, 1317, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1299, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1300, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1301, 1291, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1319, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1300, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1301, 1291, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1322, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1323, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1324, 1320, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1325, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1323, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1324, 1320, 1323, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1324, 1320, 1327, 1326, 1328, 1330, 1329, 1329, 1329, 1331, 1329, 1333, 1332, 1334, 1335, 1337, 1337, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1338, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1339, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1340, 1336, 1341, 1341, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1342, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1323, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1324, 1320, 1341, 1341, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1325, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1323, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1324, 1320, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1345, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1346, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1347, 1343, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1350, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1351, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1352, 1348, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1354, 1354, 1354, 1354, 1354, 1354, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1355, 1353, 1354, 1354, 1354, 1354, 1354, 1354, 1353, 1353, 1356, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1357, 1353, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1358, 1358, 1358, 1358, 1358, 1358, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1359, 1320, 1358, 1358, 1358, 1358, 1358, 1358, 1320, 1320, 1323, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1324, 1320, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1358, 1358, 1358, 1358, 1358, 1358, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1325, 1320, 1358, 1358, 1358, 1358, 1358, 1358, 1320, 1320, 1323, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1324, 1320, 1361, 1360, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1363, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1364, 1360, 1360, 1360, 1360, 1360, 1363, 1360, 1360, 1360, 1365, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1366, 1360, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1368, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1365, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1366, 1360, 1369, 1320, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1371, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1372, 1320, 1320, 1320, 1320, 1320, 1371, 1320, 1320, 1320, 1323, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1324, 1320, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1325, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1323, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1324, 1320, 1272, 1280, 1210, 1373, 1271, 1261, 1271, 1374, 1375, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1261, 1280, 1261, 1271, 1261, 1210, 1271, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 1266, 1266, 1266, 1266, 1266, 1266, 1376, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 1266, 1266, 1266, 1266, 317, 1266, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 1266, 1266, 1266, 1266, 1266, 317, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 1254, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1377, 304, 304, 304, 304, 1254, 304, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 304, 304, 304, 304, 1227, 304, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 304, 304, 304, 304, 304, 1227, 1378, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1254, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1377, 1379, 1379, 1379, 1379, 1254, 1379, 1227, 1227, 1227, 1227, 1380, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1227, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1379, 1227, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1254, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1377, 1379, 1379, 1379, 1379, 1254, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1381, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1227, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1379, 1227, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1254, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1377, 1379, 1379, 1379, 1379, 1254, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1382, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1227, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1379, 1227, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1254, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1377, 1379, 1379, 1379, 1379, 1254, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1383, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1227, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1379, 1227, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1254, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1377, 1379, 1379, 1379, 1379, 1254, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1384, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1227, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1379, 1227, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1254, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1377, 1379, 1379, 1379, 1379, 1254, 1379, 1227, 1227, 1227, 1383, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1227, 1379, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1379, 1379, 1379, 1379, 1379, 1227, 1385, 1387, 1386, 1388, 1389, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1391, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1392, 1393, 1201, 1201, 1201, 1201, 1201, 1394, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1395, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1396, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1397, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1398, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1399, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1400, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1401, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1402, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1403, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1404, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1405, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1406, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1407, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1408, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1409, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1405, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1410, 1201, 1411, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1412, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1413, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1414, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1415, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1416, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1417, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1418, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1419, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1415, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1420, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1421, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1422, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1423, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1424, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1425, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1415, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1426, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1427, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1428, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 319, 320, 319, 319, 319, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 319, 1254, 1429, 321, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1429, 1429, 322, 1429, 1429, 1254, 1429, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1429, 323, 1429, 1429, 1201, 1429, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1429, 1429, 1429, 1429, 1429, 1201, 336, 337, 336, 336, 336, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 336, 335, 335, 338, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 341, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 340, 335, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1431, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1432, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1433, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1254, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1434, 1434, 1434, 1434, 1434, 1254, 1434, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1434, 1434, 1434, 1434, 1201, 1434, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1435, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1434, 1434, 1434, 1434, 1434, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1436, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1437, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1438, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1439, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1440, 1201, 1441, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1442, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1415, 1201, 1201, 1201, 1443, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1415, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1408, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1444, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1445, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1425, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1446, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1243, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1447, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1448, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1408, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1415, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1449, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1415, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1450, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1451, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1452, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1425, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1453, 1201, 1201, 1201, 1454, 1201, 1201, 1201, 1201, 1201, 1455, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1456, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1422, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1408, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1457, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1458, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1459, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1460, 1461, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1408, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1462, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1463, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1449, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1464, 1201, 1201, 1465, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1408, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1466, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1422, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1467, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1468, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1469, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1408, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1470, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1471, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1457, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1472, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1473, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1419, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1448, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1474, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1475, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1476, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1477, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1478, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1414, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1479, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1480, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1449, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1481, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1449, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1482, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1419, 1201, 1201, 1201, 1483, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1484, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1449, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1485, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1486, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1487, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1254, 1390, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1201, 1390, 1201, 1201, 1201, 1457, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1390, 1390, 1390, 1390, 1390, 1201, 1488, 1270, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1210, 1260, 1489, 1491, 1490, 1491, 1491, 1491, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1491, 1490, 1490, 1492, 1490, 1490, 1493, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 349, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1494, 1490, 345, 346, 345, 345, 345, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 345, 1495, 1495, 347, 1495, 1495, 348, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 349, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 350, 1495, 352, 1496, 352, 352, 352, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 352, 1496, 1496, 347, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 350, 1496, 355, 354, 360, 1495, 358, 1495, 1498, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1499, 1497, 1498, 1497, 1498, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1501, 1497, 1498, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1502, 1497, 1498, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1503, 1497, 1505, 1503, 0 ] class << self attr_accessor :_lex_trans_targs private :_lex_trans_targs, :_lex_trans_targs= end self._lex_trans_targs = [ 186, 2, 3, 4, 192, 6, 7, 8, 9, 10, 186, 186, 195, 198, 195, 12, 199, 200, 14, 195, 207, 208, 211, 212, 218, 213, 214, 215, 19, 216, 217, 220, 222, 223, 224, 225, 226, 25, 18, 209, 210, 27, 249, 250, 252, 254, 252, 30, 255, 256, 32, 252, 263, 264, 267, 268, 274, 269, 270, 271, 37, 272, 273, 276, 278, 279, 280, 281, 282, 43, 36, 265, 266, 45, 305, 306, 313, 315, 313, 48, 316, 317, 50, 319, 322, 319, 52, 323, 324, 54, 330, 329, 0, 56, 331, 332, 58, 333, 334, 334, 334, 334, 447, 61, 62, 63, 447, 475, 64, 65, 475, 475, 479, 479, 69, 64, 70, 477, 478, 480, 481, 479, 475, 482, 483, 485, 66, 67, 486, 487, 68, 479, 71, 72, 77, 84, 489, 490, 70, 477, 478, 480, 481, 479, 475, 482, 483, 485, 66, 67, 486, 487, 68, 71, 72, 77, 84, 489, 490, 488, 73, 74, 75, 76, 78, 79, 82, 80, 81, 83, 85, 86, 475, 88, 89, 90, 92, 95, 93, 94, 96, 98, 506, 506, 506, 507, 100, 509, 101, 510, 102, 507, 100, 509, 101, 510, 544, 103, 544, 104, 105, 103, 544, 104, 544, 544, 544, 108, 109, 110, 111, 555, 544, 544, 560, 544, 114, 115, 116, 544, 119, 114, 115, 116, 544, 119, 117, 117, 115, 116, 566, 118, 117, 117, 115, 116, 566, 118, 115, 544, 582, 544, 121, 583, 589, 125, 598, 599, 130, 131, 125, 126, 597, 126, 597, 544, 127, 128, 129, 600, 132, 544, 614, 615, 618, 619, 625, 620, 621, 622, 137, 623, 624, 627, 629, 630, 631, 632, 633, 143, 136, 616, 617, 145, 669, 670, 147, 546, 106, 548, 149, 150, 672, 774, 152, 153, 154, 774, 782, 782, 782, 157, 804, 803, 782, 806, 808, 810, 782, 163, 164, 165, 814, 782, 167, 168, 825, 792, 847, 171, 172, 173, 177, 178, 171, 172, 173, 177, 178, 174, 174, 172, 173, 175, 176, 174, 174, 172, 173, 175, 176, 895, 172, 782, 964, 179, 966, 181, 185, 964, 183, 964, 180, 964, 182, 966, 182, 966, 184, 966, 964, 186, 186, 187, 188, 189, 191, 193, 194, 186, 186, 186, 190, 186, 190, 186, 1, 186, 186, 186, 5, 195, 195, 196, 195, 197, 201, 195, 195, 11, 13, 195, 195, 195, 195, 202, 203, 204, 15, 21, 26, 227, 28, 195, 195, 195, 205, 206, 195, 16, 195, 195, 195, 17, 195, 195, 195, 20, 219, 221, 22, 195, 195, 23, 24, 195, 228, 232, 229, 230, 231, 195, 195, 233, 234, 237, 239, 248, 235, 236, 195, 238, 240, 242, 241, 195, 243, 244, 245, 246, 247, 195, 195, 195, 251, 252, 252, 252, 253, 257, 252, 29, 31, 252, 252, 252, 252, 258, 259, 260, 33, 39, 44, 283, 46, 252, 252, 252, 261, 262, 252, 34, 252, 252, 252, 35, 252, 252, 252, 38, 275, 277, 40, 252, 252, 41, 42, 252, 284, 288, 285, 286, 287, 252, 252, 289, 290, 293, 295, 304, 291, 292, 252, 294, 296, 298, 297, 252, 299, 300, 301, 302, 303, 252, 252, 252, 307, 308, 308, 309, 308, 310, 308, 308, 308, 311, 311, 311, 312, 311, 311, 311, 313, 313, 313, 314, 313, 47, 49, 313, 313, 313, 318, 318, 318, 319, 319, 320, 319, 321, 319, 319, 51, 53, 319, 319, 319, 325, 325, 326, 325, 325, 327, 328, 327, 55, 57, 329, 329, 329, 335, 334, 334, 336, 337, 338, 339, 341, 344, 345, 346, 347, 334, 348, 349, 351, 353, 354, 355, 359, 361, 362, 363, 379, 384, 391, 396, 403, 410, 413, 414, 418, 412, 422, 430, 434, 436, 441, 443, 446, 334, 334, 334, 334, 334, 334, 340, 334, 340, 334, 342, 59, 343, 334, 60, 334, 334, 350, 352, 334, 356, 357, 358, 354, 360, 334, 364, 365, 374, 377, 366, 367, 368, 369, 370, 371, 372, 373, 335, 375, 376, 378, 380, 383, 381, 382, 385, 388, 386, 387, 389, 390, 392, 394, 393, 395, 397, 398, 334, 399, 400, 401, 402, 334, 404, 407, 405, 406, 408, 409, 411, 415, 416, 417, 419, 421, 420, 423, 424, 425, 427, 426, 428, 429, 431, 432, 433, 435, 437, 438, 439, 440, 442, 444, 445, 448, 447, 447, 449, 450, 452, 447, 447, 447, 451, 447, 451, 453, 447, 455, 454, 454, 458, 459, 460, 461, 454, 463, 464, 465, 466, 468, 470, 471, 472, 473, 474, 454, 456, 454, 457, 454, 454, 454, 454, 454, 462, 454, 462, 467, 454, 469, 454, 475, 475, 476, 491, 492, 478, 494, 495, 482, 496, 497, 498, 499, 500, 502, 503, 504, 505, 475, 475, 475, 475, 475, 475, 479, 484, 475, 475, 475, 475, 475, 475, 475, 475, 475, 493, 475, 493, 475, 475, 475, 475, 501, 475, 87, 91, 97, 506, 508, 511, 99, 506, 506, 507, 512, 512, 513, 514, 516, 518, 519, 512, 512, 515, 512, 515, 512, 517, 512, 512, 512, 521, 520, 520, 522, 523, 524, 526, 528, 529, 534, 541, 520, 520, 520, 520, 525, 520, 525, 520, 527, 520, 520, 521, 530, 531, 532, 533, 535, 536, 539, 537, 538, 540, 542, 543, 545, 544, 553, 554, 556, 557, 559, 561, 562, 563, 565, 567, 568, 570, 571, 596, 602, 603, 604, 672, 673, 674, 675, 676, 564, 678, 695, 700, 707, 712, 714, 720, 723, 724, 728, 722, 732, 743, 747, 750, 758, 762, 765, 766, 544, 103, 104, 544, 106, 547, 544, 544, 549, 551, 552, 544, 550, 544, 544, 544, 544, 544, 107, 544, 544, 544, 544, 544, 558, 544, 558, 544, 544, 112, 544, 544, 113, 544, 544, 564, 544, 569, 544, 544, 544, 572, 581, 544, 120, 584, 585, 586, 544, 587, 122, 590, 591, 123, 594, 595, 544, 573, 575, 544, 574, 544, 544, 576, 579, 580, 544, 577, 578, 544, 544, 544, 544, 544, 544, 588, 544, 582, 592, 593, 544, 592, 544, 582, 592, 124, 601, 544, 544, 544, 605, 544, 544, 544, 606, 608, 544, 607, 544, 607, 544, 609, 610, 611, 133, 139, 144, 634, 146, 544, 544, 544, 612, 613, 544, 134, 544, 544, 544, 135, 544, 544, 544, 138, 626, 628, 140, 544, 544, 141, 142, 544, 635, 639, 636, 637, 638, 544, 544, 640, 641, 644, 655, 668, 642, 643, 544, 645, 646, 647, 649, 648, 544, 650, 651, 652, 653, 654, 656, 663, 657, 658, 659, 660, 661, 662, 664, 665, 666, 667, 544, 544, 544, 671, 148, 151, 544, 677, 679, 680, 690, 693, 681, 682, 683, 684, 685, 686, 687, 688, 689, 691, 692, 694, 696, 699, 697, 698, 701, 704, 702, 703, 705, 706, 708, 710, 709, 711, 713, 715, 717, 716, 718, 719, 721, 689, 725, 726, 727, 729, 731, 730, 733, 734, 735, 740, 736, 737, 738, 544, 545, 546, 106, 739, 551, 741, 742, 744, 745, 746, 748, 749, 751, 752, 753, 756, 754, 755, 757, 759, 760, 761, 763, 764, 544, 564, 767, 767, 768, 769, 770, 772, 767, 767, 767, 771, 767, 771, 767, 773, 767, 775, 774, 774, 776, 777, 774, 778, 780, 774, 774, 774, 774, 779, 774, 779, 781, 774, 783, 782, 782, 786, 787, 788, 782, 789, 791, 794, 795, 796, 797, 798, 782, 799, 800, 807, 835, 839, 782, 840, 842, 844, 782, 845, 846, 848, 852, 854, 855, 857, 858, 876, 881, 888, 896, 903, 910, 915, 916, 920, 914, 925, 935, 941, 944, 953, 957, 961, 962, 963, 794, 784, 782, 785, 782, 782, 782, 782, 782, 782, 790, 782, 790, 782, 155, 793, 782, 782, 782, 782, 782, 782, 782, 782, 782, 801, 805, 782, 802, 782, 782, 156, 158, 805, 159, 782, 805, 159, 782, 160, 816, 827, 830, 809, 831, 832, 817, 821, 823, 782, 809, 160, 811, 813, 161, 782, 811, 782, 812, 782, 782, 162, 815, 782, 782, 818, 820, 782, 818, 819, 821, 823, 820, 782, 822, 782, 782, 824, 826, 782, 166, 782, 782, 782, 828, 820, 821, 823, 828, 829, 782, 818, 820, 821, 823, 782, 818, 820, 821, 823, 782, 833, 820, 821, 823, 833, 834, 782, 160, 835, 809, 836, 821, 823, 837, 820, 160, 837, 809, 838, 841, 843, 782, 169, 170, 782, 782, 849, 850, 851, 846, 853, 782, 782, 856, 782, 782, 782, 859, 860, 869, 874, 861, 862, 863, 864, 865, 866, 867, 868, 783, 870, 871, 872, 873, 783, 875, 877, 880, 878, 879, 783, 783, 882, 885, 883, 884, 886, 887, 783, 889, 891, 890, 892, 893, 894, 782, 782, 897, 783, 898, 782, 899, 900, 901, 902, 784, 904, 907, 905, 906, 908, 909, 911, 912, 913, 783, 917, 918, 919, 921, 923, 924, 922, 783, 926, 927, 928, 931, 929, 930, 932, 933, 934, 936, 938, 937, 939, 940, 942, 943, 945, 946, 948, 951, 947, 949, 950, 952, 954, 955, 956, 958, 959, 960, 782, 782, 964, 965, 967, 968, 969, 964, 964, 971, 970, 972, 970, 973, 974, 975, 970, 970 ] 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, 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, 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, 12, 0, 13, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 0, 0, 0, 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, 29, 30, 31, 29, 32, 31, 33, 31, 29, 29, 30, 29, 34, 29, 29, 35, 29, 29, 29, 29, 29, 29, 0, 36, 37, 0, 38, 37, 39, 37, 0, 0, 36, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 43, 44, 45, 0, 0, 0, 45, 28, 46, 29, 29, 29, 46, 47, 0, 48, 0, 28, 29, 49, 29, 50, 51, 52, 0, 0, 0, 0, 0, 53, 54, 0, 55, 0, 28, 0, 56, 0, 29, 57, 29, 58, 29, 59, 60, 61, 60, 62, 60, 0, 63, 64, 63, 65, 63, 66, 67, 0, 68, 0, 0, 0, 0, 69, 69, 0, 0, 70, 70, 71, 0, 28, 72, 0, 0, 0, 69, 0, 73, 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, 74, 0, 0, 0, 0, 74, 75, 0, 0, 0, 76, 77, 78, 79, 0, 7, 7, 80, 81, 82, 82, 83, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 57, 29, 29, 29, 59, 60, 61, 60, 60, 60, 0, 63, 64, 63, 63, 63, 85, 66, 86, 87, 0, 88, 0, 89, 90, 0, 91, 0, 92, 59, 93, 0, 94, 28, 95, 96, 99, 100, 0, 28, 0, 7, 0, 7, 101, 102, 103, 59, 104, 0, 105, 0, 106, 107, 108, 0, 109, 110, 0, 111, 7, 7, 112, 113, 0, 0, 114, 115, 116, 117, 118, 118, 118, 118, 118, 118, 118, 118, 119, 120, 121, 0, 0, 122, 0, 123, 124, 125, 0, 126, 127, 128, 0, 7, 0, 0, 129, 130, 0, 28, 131, 0, 0, 0, 0, 0, 132, 133, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 136, 137, 138, 0, 139, 140, 141, 7, 7, 142, 0, 0, 143, 144, 145, 146, 118, 118, 118, 118, 118, 118, 118, 118, 147, 148, 149, 0, 0, 150, 0, 151, 152, 153, 0, 154, 155, 156, 0, 7, 0, 0, 157, 158, 0, 28, 159, 0, 0, 0, 0, 0, 160, 161, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 164, 165, 166, 0, 167, 168, 0, 169, 0, 170, 171, 172, 173, 174, 175, 0, 176, 177, 178, 179, 180, 181, 7, 182, 0, 0, 183, 184, 185, 186, 187, 188, 189, 190, 0, 191, 7, 192, 193, 0, 0, 194, 195, 196, 197, 198, 0, 199, 200, 201, 0, 202, 0, 0, 203, 204, 205, 206, 207, 208, 0, 28, 0, 0, 7, 7, 0, 0, 0, 209, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 212, 213, 214, 215, 216, 59, 217, 0, 218, 0, 0, 0, 219, 0, 220, 221, 0, 0, 222, 0, 0, 0, 223, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 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, 227, 228, 0, 0, 0, 229, 230, 231, 59, 232, 0, 28, 233, 0, 234, 235, 0, 28, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 239, 240, 241, 242, 243, 59, 244, 0, 0, 245, 0, 246, 247, 248, 249, 28, 0, 27, 0, 0, 27, 0, 0, 0, 0, 0, 0, 7, 7, 7, 250, 251, 252, 253, 254, 255, 256, 0, 257, 258, 259, 260, 261, 262, 263, 264, 265, 59, 266, 0, 267, 268, 269, 270, 271, 272, 0, 0, 0, 273, 7, 7, 0, 274, 275, 276, 277, 278, 0, 0, 0, 0, 0, 279, 280, 59, 281, 0, 282, 28, 283, 284, 285, 286, 287, 288, 0, 28, 0, 0, 0, 0, 0, 0, 289, 290, 291, 292, 59, 293, 0, 294, 28, 295, 296, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 299, 0, 8, 0, 0, 7, 300, 0, 0, 300, 300, 0, 0, 7, 301, 0, 301, 0, 301, 301, 301, 0, 0, 301, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 0, 0, 302, 303, 303, 304, 305, 0, 306, 307, 0, 74, 0, 308, 0, 309, 310, 311, 312, 313, 29, 314, 315, 316, 317, 318, 59, 319, 0, 320, 321, 0, 322, 323, 0, 324, 325, 300, 326, 0, 327, 328, 329, 0, 0, 330, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 333, 0, 334, 335, 0, 0, 0, 336, 0, 0, 337, 338, 339, 340, 341, 342, 0, 343, 344, 344, 0, 345, 0, 346, 347, 347, 0, 0, 348, 349, 350, 0, 351, 352, 353, 0, 7, 354, 355, 356, 0, 357, 118, 118, 118, 118, 118, 118, 118, 118, 358, 359, 360, 0, 0, 361, 0, 362, 363, 364, 0, 365, 366, 367, 0, 7, 0, 0, 368, 369, 0, 28, 370, 0, 0, 0, 0, 0, 371, 372, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 376, 377, 0, 0, 0, 378, 28, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 74, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 379, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 380, 381, 382, 383, 384, 384, 380, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 385, 386, 387, 388, 0, 28, 0, 0, 389, 390, 391, 59, 392, 0, 393, 28, 394, 7, 395, 396, 0, 28, 397, 0, 0, 398, 399, 400, 401, 59, 402, 0, 28, 403, 404, 405, 406, 0, 28, 0, 407, 0, 7, 408, 0, 0, 0, 0, 409, 0, 0, 410, 410, 0, 411, 0, 0, 0, 412, 7, 413, 413, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 0, 417, 418, 419, 420, 421, 422, 59, 423, 0, 424, 0, 0, 425, 426, 427, 428, 429, 430, 431, 432, 433, 0, 434, 435, 0, 436, 437, 0, 0, 438, 0, 439, 440, 29, 441, 442, 443, 0, 0, 444, 0, 0, 443, 445, 445, 446, 447, 0, 448, 449, 0, 450, 451, 452, 0, 453, 454, 0, 0, 455, 456, 443, 443, 457, 0, 0, 458, 458, 0, 459, 0, 460, 461, 7, 0, 462, 0, 463, 464, 465, 466, 466, 467, 467, 0, 0, 468, 469, 469, 470, 470, 471, 472, 472, 473, 473, 474, 475, 475, 476, 476, 0, 0, 477, 478, 479, 480, 481, 482, 482, 479, 481, 483, 410, 484, 0, 0, 0, 485, 0, 0, 486, 487, 413, 413, 413, 488, 413, 489, 490, 28, 491, 492, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 495, 496, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 496, 498, 499, 0, 500, 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, 505, 506, 507, 507, 89, 507, 508, 509, 0, 510, 0, 511, 0, 0, 0, 512, 513 ] 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 97, 0, 97, 0, 0, 0, 0, 97, 97, 0, 0, 0, 0, 0, 97, 0, 97, 0, 97, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 97, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 98, 0, 98, 0, 0, 0, 0, 98, 98, 0, 0, 0, 0, 0, 98, 0, 98, 0, 98, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 98, 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, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 45, 45, 45, 45, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 77, 77, 77, 77, 84, 84, 84, 84, 0, 0, 0, 0, 99, 101, 103, 103, 103, 108, 108, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 183, 185, 185, 185, 197, 197, 197, 205, 207, 207, 207, 207, 207, 213, 205, 205, 205, 205, 205, 205, 205, 240, 240, 240, 240, 240, 240, 205, 256, 205, 256, 240, 240, 205, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 205, 240, 240, 240, 240, 294, 294, 294, 299, 301, 301, 301, 305, 305, 305, 309, 309, 309, 309, 314, 314, 314, 299, 305, 305, 305, 305, 305, 305, 305, 305, 305, 345, 352, 354, 354, 354, 354, 345, 0, 370, 371, 372, 374, 376, 378, 376, 376, 0, 388, 389, 393, 393, 394, 395, 404, 405, 406, 406, 406, 409, 409, 411, 412, 413, 413, 413, 415, 416, 417, 417, 413, 409, 409, 422, 423, 423, 423, 423, 423, 426, 426, 426, 426, 432, 433, 433, 433, 433, 441, 433, 433, 433, 433, 446, 433, 433, 433, 433, 433, 433, 452, 453, 454, 454, 0, 461, 465, 465, 466, 467, 476, 477, 478, 478, 478, 481, 481, 483, 484, 485, 485, 485, 487, 488, 489, 489, 485, 481, 481, 494, 495, 495, 495, 495, 495, 498, 498, 498, 498, 504, 505, 505, 505, 505, 513, 505, 505, 505, 505, 518, 505, 505, 505, 505, 505, 505, 524, 525, 526, 526, 0, 533, 534, 0, 540, 0, 547, 551, 551, 552, 0, 0, 561, 562, 566, 566, 567, 0, 572, 0, 575, 0, 578, 578, 579, 580, 0, 621, 623, 624, 625, 626, 628, 630, 634, 634, 625, 625, 625, 625, 636, 625, 625, 630, 625, 625, 621, 640, 640, 640, 640, 640, 640, 630, 630, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 679, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 625, 0, 722, 723, 724, 726, 722, 729, 0, 748, 750, 752, 753, 754, 755, 756, 758, 755, 755, 755, 755, 755, 761, 755, 755, 763, 761, 761, 755, 0, 782, 783, 108, 108, 786, 787, 108, 783, 783, 790, 792, 795, 783, 796, 783, 797, 798, 800, 802, 783, 790, 803, 803, 792, 803, 807, 803, 803, 803, 803, 0, 183, 815, 816, 815, 815, 0, 825, 826, 828, 830, 832, 830, 834, 0, 846, 847, 848, 849, 851, 853, 855, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 0, 914, 917, 920, 921, 925, 927, 928, 929, 930, 931, 933, 936, 937, 939, 941, 944, 945, 947, 948, 205, 945, 950, 945, 936, 952, 936, 936, 970, 973, 975, 976, 980, 983, 984, 985, 986, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 990, 994, 996, 970, 970, 936, 1001, 1002, 1002, 1002, 936, 936, 936, 1003, 1010, 1010, 1012, 1014, 1023, 1024, 1025, 1025, 1025, 1028, 1028, 1030, 1031, 1032, 1032, 1032, 1034, 1035, 1036, 1036, 1032, 1028, 1028, 1041, 1042, 1042, 1042, 1042, 1042, 1045, 1045, 1045, 1045, 1051, 1052, 1052, 1052, 1052, 1060, 1052, 1052, 1052, 1052, 1066, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1084, 1085, 1086, 1086, 205, 936, 936, 1090, 936, 931, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 205, 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, 1143, 921, 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, 1168, 936, 0, 1176, 1177, 1178, 1180, 1182, 1184, 0, 1193, 1194, 1195, 1196, 1198, 1193, 1201, 0, 305, 1256, 1258, 1259, 1260, 1261, 1263, 1265, 1267, 1270, 1270, 305, 1272, 1274, 1275, 1276, 1272, 1278, 1281, 1281, 1284, 1284, 305, 1289, 1292, 1303, 305, 1309, 1311, 1313, 1314, 1317, 1318, 1292, 1292, 1321, 1321, 1321, 1327, 1329, 1330, 1333, 1335, 1336, 1337, 1321, 1321, 1344, 1349, 1354, 1321, 1321, 1361, 1361, 1321, 1321, 1281, 1272, 1272, 1281, 1272, 1272, 1267, 305, 1379, 1380, 1380, 1380, 1380, 1380, 1380, 1386, 1267, 1389, 1390, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1430, 1431, 1391, 1391, 1435, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1489, 1261, 1490, 0, 1496, 1497, 1496, 1496, 1496, 0, 1501, 1501, 1501, 1501, 1505 ] class << self attr_accessor :lex_start end self.lex_start = 186; 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 = 195; class << self attr_accessor :lex_en_interp_string end self.lex_en_interp_string = 252; class << self attr_accessor :lex_en_plain_words end self.lex_en_plain_words = 308; class << self attr_accessor :lex_en_plain_string end self.lex_en_plain_string = 311; class << self attr_accessor :lex_en_interp_backslash_delimited end self.lex_en_interp_backslash_delimited = 313; class << self attr_accessor :lex_en_plain_backslash_delimited end self.lex_en_plain_backslash_delimited = 318; class << self attr_accessor :lex_en_interp_backslash_delimited_words end self.lex_en_interp_backslash_delimited_words = 319; class << self attr_accessor :lex_en_plain_backslash_delimited_words end self.lex_en_plain_backslash_delimited_words = 325; class << self attr_accessor :lex_en_regexp_modifiers end self.lex_en_regexp_modifiers = 327; class << self attr_accessor :lex_en_expr_variable end self.lex_en_expr_variable = 329; class << self attr_accessor :lex_en_expr_fname end self.lex_en_expr_fname = 334; class << self attr_accessor :lex_en_expr_endfn end self.lex_en_expr_endfn = 447; class << self attr_accessor :lex_en_expr_dot end self.lex_en_expr_dot = 454; class << self attr_accessor :lex_en_expr_arg end self.lex_en_expr_arg = 475; class << self attr_accessor :lex_en_expr_cmdarg end self.lex_en_expr_cmdarg = 506; class << self attr_accessor :lex_en_expr_endarg end self.lex_en_expr_endarg = 512; class << self attr_accessor :lex_en_expr_mid end self.lex_en_expr_mid = 520; class << self attr_accessor :lex_en_expr_beg end self.lex_en_expr_beg = 544; class << self attr_accessor :lex_en_expr_labelarg end self.lex_en_expr_labelarg = 767; class << self attr_accessor :lex_en_expr_value end self.lex_en_expr_value = 774; class << self attr_accessor :lex_en_expr_end end self.lex_en_expr_end = 782; class << self attr_accessor :lex_en_leading_dot end self.lex_en_leading_dot = 964; class << self attr_accessor :lex_en_line_comment end self.lex_en_line_comment = 970; class << self attr_accessor :lex_en_line_begin end self.lex_en_line_begin = 186; # line 83 "lib/parser/ruby-next/lexer.rl" # % ESCAPES = { ?a.ord => "\a", ?b.ord => "\b", ?e.ord => "\e", ?f.ord => "\f", ?n.ord => "\n", ?r.ord => "\r", ?s.ord => "\s", ?t.ord => "\t", ?v.ord => "\v", ?\\.ord => "\\" }.freeze REGEXP_META_CHARACTERS = Regexp.union(*"\\$()*+.<>?[]^{|}".chars).freeze attr_reader :source_buffer attr_accessor :diagnostics attr_accessor :static_env attr_accessor :force_utf32 attr_accessor :cond, :cmdarg, :in_kwarg, :context, :command_start attr_accessor :tokens, :comments def initialize(version) @version = version @static_env = nil @context = 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_pts = nil # @source as a codepoint array @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 @herebody_s = nil # starting position of current heredoc line # Ruby 1.9 ->() lambdas emit a distinct token if do/{ is # encountered after a matching closing parenthesis. @paren_nest = 0 @lambda_stack = [] # After encountering the closing line of <<~SQUIGGLY_HEREDOC, # we store the indentation level and give it out to the parser # on request. It is not possible to infer indentation level just # from the AST because escape sequences such as `\ ` or `\t` are # expanded inside the lexer, but count as non-whitespace for # indentation purposes. @dedent_level = nil # 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_start = true # True at the end of "def foo a:" @in_kwarg = false # State before =begin / =end block comment @cs_before_block_comment = self.class.lex_en_line_begin end def source_buffer=(source_buffer) @source_buffer = source_buffer if @source_buffer source = @source_buffer.source if source.encoding == Encoding::UTF_8 @source_pts = source.unpack('U*') else @source_pts = source.unpack('C*') end if @source_pts[0] == 0xfeff # Skip byte order mark. @p = 1 end else @source_pts = nil end end def encoding @source_buffer.source.encoding 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 def dedent_level # We erase @dedent_level as a precaution to avoid accidentally # using a stale value. dedent_level, @dedent_level = @dedent_level, nil dedent_level 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. klass = self.class _lex_trans_keys = klass.send :_lex_trans_keys _lex_key_spans = klass.send :_lex_key_spans _lex_index_offsets = klass.send :_lex_index_offsets _lex_indicies = klass.send :_lex_indicies _lex_trans_targs = klass.send :_lex_trans_targs _lex_trans_actions = klass.send :_lex_trans_actions _lex_to_state_actions = klass.send :_lex_to_state_actions _lex_from_state_actions = klass.send :_lex_from_state_actions _lex_eof_trans = klass.send :_lex_eof_trans pe = @source_pts.size + 2 p, eof = @p, pe cmd_state = @command_start @command_start = false # line 11016 "lib/parser/ruby-next/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 98 then # line 1 "NONE" begin @ts = p end # line 11044 "lib/parser/ruby-next/lexer.rb" end _keys = @cs << 1 _inds = _lex_index_offsets[ @cs] _slen = _lex_key_spans[ @cs] _wide = ( (@source_pts[p] || 0)) _trans = if ( _slen > 0 && _lex_trans_keys[_keys] <= _wide && _wide <= _lex_trans_keys[_keys + 1] ) then _lex_indicies[ _inds + _wide - _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 28 then # line 493 "lib/parser/ruby-next/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 118 then # line 809 "lib/parser/ruby-next/lexer.rl" begin @escape_s = p @escape = nil end when 29 then # line 849 "lib/parser/ruby-next/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 59 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end when 63 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end when 305 then # line 1253 "lib/parser/ruby-next/lexer.rl" begin tm = p end when 36 then # line 1534 "lib/parser/ruby-next/lexer.rl" begin tm = p end when 38 then # line 1550 "lib/parser/ruby-next/lexer.rl" begin tm = p end when 40 then # line 1578 "lib/parser/ruby-next/lexer.rl" begin tm = p end when 70 then # line 1770 "lib/parser/ruby-next/lexer.rl" begin heredoc_e = p end when 344 then # line 1862 "lib/parser/ruby-next/lexer.rl" begin tm = p - 1; diag_msg = :ivar_name end when 347 then # line 1863 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2; diag_msg = :cvar_name end when 355 then # line 1883 "lib/parser/ruby-next/lexer.rl" begin @escape = nil end when 384 then # line 1972 "lib/parser/ruby-next/lexer.rl" begin tm = p end when 303 then # line 2053 "lib/parser/ruby-next/lexer.rl" begin ident_tok = tok; ident_ts = @ts; ident_te = @te; end when 475 then # line 2239 "lib/parser/ruby-next/lexer.rl" begin @num_base = 16; @num_digits_s = p end when 469 then # line 2240 "lib/parser/ruby-next/lexer.rl" begin @num_base = 10; @num_digits_s = p end when 472 then # line 2241 "lib/parser/ruby-next/lexer.rl" begin @num_base = 8; @num_digits_s = p end when 466 then # line 2242 "lib/parser/ruby-next/lexer.rl" begin @num_base = 2; @num_digits_s = p end when 481 then # line 2243 "lib/parser/ruby-next/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end when 443 then # line 2244 "lib/parser/ruby-next/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end when 458 then # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end when 451 then # line 2302 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end when 448 then # line 2303 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end when 89 then # line 2509 "lib/parser/ruby-next/lexer.rl" begin tm = p end when 7 then # line 1 "NONE" begin @te = p+1 end when 114 then # line 1086 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DBEG, '#{'.freeze) if current_literal.heredoc? current_literal.saved_herebody_s = @herebody_s @herebody_s = nil end current_literal.start_interp_brace @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end end when 5 then # line 1012 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 110 then # line 937 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_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_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 116 then # line 1028 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 literal.extend_string(tok, @ts, @te) else message = tok.start_with?('#@@') ? :cvar_name : :ivar_name diagnostic :error, message, { :name => tok(@ts + 1, @te) }, range(@ts + 1, @te) end end end when 115 then # line 1012 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 112 then # line 999 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin literal.extend_space @ts, @te end end when 113 then # line 858 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 6 then # line 882 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 4 then # line 858 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 143 then # line 1086 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DBEG, '#{'.freeze) if current_literal.heredoc? current_literal.saved_herebody_s = @herebody_s @herebody_s = nil end current_literal.start_interp_brace @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end end when 10 then # line 1012 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 140 then # line 937 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_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_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 145 then # line 1028 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 literal.extend_string(tok, @ts, @te) else message = tok.start_with?('#@@') ? :cvar_name : :ivar_name diagnostic :error, message, { :name => tok(@ts + 1, @te) }, range(@ts + 1, @te) end end end when 144 then # line 1012 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 142 then # line 858 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 11 then # line 882 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 9 then # line 858 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 168 then # line 937 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_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_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 170 then # line 999 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin literal.extend_space @ts, @te end end when 171 then # line 858 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 174 then # line 937 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_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_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 176 then # line 858 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 183 then # line 1086 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DBEG, '#{'.freeze) if current_literal.heredoc? current_literal.saved_herebody_s = @herebody_s @herebody_s = nil end current_literal.start_interp_brace @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end end when 13 then # line 1012 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 180 then # line 937 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_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_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 185 then # line 1028 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 literal.extend_string(tok, @ts, @te) else message = tok.start_with?('#@@') ? :cvar_name : :ivar_name diagnostic :error, message, { :name => tok(@ts + 1, @te) }, range(@ts + 1, @te) end end end when 184 then # line 1012 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 182 then # line 858 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 12 then # line 858 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 187 then # line 937 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_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_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 194 then # line 1086 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DBEG, '#{'.freeze) if current_literal.heredoc? current_literal.saved_herebody_s = @herebody_s @herebody_s = nil end current_literal.start_interp_brace @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end end when 15 then # line 1012 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 190 then # line 937 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_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_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 196 then # line 1028 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 literal.extend_string(tok, @ts, @te) else message = tok.start_with?('#@@') ? :cvar_name : :ivar_name diagnostic :error, message, { :name => tok(@ts + 1, @te) }, range(@ts + 1, @te) end end end when 195 then # line 1012 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 192 then # line 999 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin literal.extend_space @ts, @te end end when 193 then # line 858 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 14 then # line 858 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 198 then # line 937 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_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_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 767; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 200 then # line 999 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin literal.extend_space @ts, @te end end when 201 then # line 1183 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tREGEXP_OPT, tok(@ts, @te - 1), @ts, @te - 1) p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 202 then # line 1170 "lib/parser/ruby-next/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 = 782; begin p += 1 _goto_level = _out next end end end when 16 then # line 1322 "lib/parser/ruby-next/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 203 then # line 1322 "lib/parser/ruby-next/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 205 then # line 1335 "lib/parser/ruby-next/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 204 then # line 1345 "lib/parser/ruby-next/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 226 then # line 1366 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit_table(KEYWORDS_BEGIN); @cs = 447; begin p += 1 _goto_level = _out next end end end when 212 then # line 1374 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tIDENTIFIER) @cs = 447; begin p += 1 _goto_level = _out next end end end when 18 then # line 1378 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = @ts - 1 @cs = 782; begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 209 then # line 1387 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 447; begin p += 1 _goto_level = _out next end end end when 221 then # line 1391 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 20 then # line 1397 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin if version?(23) type, delimiter = tok[0..-2], tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end else p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end end when 208 then # line 1410 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 207 then # line 519 "lib/parser/ruby-next/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 1366 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(KEYWORDS_BEGIN); @cs = 447; begin p += 1 _goto_level = _out next end end end when 222 then # line 1370 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT) @cs = 447; begin p += 1 _goto_level = _out next end end end when 224 then # line 1374 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) @cs = 447; begin p += 1 _goto_level = _out next end end end when 219 then # line 1378 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 @cs = 782; begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 215 then # line 1387 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 447; begin p += 1 _goto_level = _out next end end end when 220 then # line 1394 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 213 then # line 1407 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 218 then # line 1410 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 19 then # line 1387 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin emit_table(PUNCTUATION) @cs = 447; begin p += 1 _goto_level = _out next end end end when 17 then # line 1410 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 211 then # line 1 "NONE" begin case @act when 43 then begin begin p = (( @te))-1; end emit_table(KEYWORDS_BEGIN); @cs = 447; begin p += 1 _goto_level = _out next end end when 44 then begin begin p = (( @te))-1; end emit(:tCONSTANT) @cs = 447; begin p += 1 _goto_level = _out next end end when 45 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) @cs = 447; begin p += 1 _goto_level = _out next end end end end when 22 then # line 1422 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) p = p - 1; @cs = 767; begin p += 1 _goto_level = _out next end end end when 228 then # line 1428 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 227 then # line 519 "lib/parser/ruby-next/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 1425 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 229 then # line 1428 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 21 then # line 1428 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 236 then # line 1454 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 475; begin p += 1 _goto_level = _out next end end end when 235 then # line 1460 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 234 then # line 519 "lib/parser/ruby-next/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 246 then # line 1439 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT) @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 237 then # line 1443 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 242 then # line 1454 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 475; begin p += 1 _goto_level = _out next end end end when 240 then # line 1457 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 245 then # line 1460 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 269 then # line 1520 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin # Unlike expr_beg as invoked in the next rule, do not warn p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 252 then # line 1538 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin if tok(tm, tm + 1) == '/'.freeze # Ambiguous regexp literal. diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1) end p = tm - 1 begin @cs = 544 _goto_level = _again next end end end when 258 then # line 1562 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 24 then # line 1570 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = @ts - 1; begin @cs = 544 _goto_level = _again next end end end when 260 then # line 1579 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = tm - 1; begin @cs = 782 _goto_level = _again next end end end when 39 then # line 1590 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 247 then # line 1604 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 248 then # line 519 "lib/parser/ruby-next/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 259 then # line 1529 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 255 then # line 1551 "lib/parser/ruby-next/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 = 544 _goto_level = _again next end end end when 257 then # line 1567 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 251 then # line 1590 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 250 then # line 1595 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 268 then # line 1604 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 25 then # line 1595 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end end when 41 then # line 1604 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 23 then # line 1 "NONE" begin case @act when 71 then begin begin p = (( @te))-1; end if tok(tm, tm + 1) == '/'.freeze # Ambiguous regexp literal. diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1) end p = tm - 1 begin @cs = 544 _goto_level = _again next end end when 72 then begin begin p = (( @te))-1; end diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) }, range(tm, @te) p = tm - 1 begin @cs = 544 _goto_level = _again next end end when 77 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 782 _goto_level = _again next end end else begin begin p = (( @te))-1; end end end end when 43 then # line 1640 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 475 _goto_level = _again next end end end when 273 then # line 519 "lib/parser/ruby-next/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 1640 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 475 _goto_level = _again next end end end when 44 then # line 1640 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin p = @ts - 1 begin @cs = 475 _goto_level = _again next end end end when 42 then # line 1 "NONE" begin case @act when 84 then begin begin p = (( @te))-1; end if @cond.active? emit(:kDO_COND, 'do'.freeze, @te - 2, @te) else emit(:kDO, 'do'.freeze, @te - 2, @te) end @cs = 774; begin p += 1 _goto_level = _out next end end when 85 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 475 _goto_level = _again next end end end end when 284 then # line 1676 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit_do(true) @cs = 774; begin p += 1 _goto_level = _out next end end end when 277 then # line 1682 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 278 then # line 519 "lib/parser/ruby-next/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 279 then # line 1679 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 282 then # line 1682 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 288 then # line 1706 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 287 then # line 519 "lib/parser/ruby-next/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 296 then # line 1698 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1; begin @cs = 544 _goto_level = _again next end end end when 290 then # line 1700 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 294 then # line 1706 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 289 then # line 1 "NONE" begin case @act when 92 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 544; begin p += 1 _goto_level = _out next end end when 93 then begin begin p = (( @te))-1; end p = @ts - 1; begin @cs = 544 _goto_level = _again next end end end end when 56 then # line 1721 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 782; begin p += 1 _goto_level = _out next end end end when 329 then # line 1738 "lib/parser/ruby-next/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 321 then # line 1745 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin type, delimiter = @source_buffer.slice(@ts).chr, tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 54 then # line 1752 "lib/parser/ruby-next/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 342 then # line 1827 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; p = p - 1; emit(:tSYMBEG, tok(@ts, @ts + 1), @ts, @ts + 1) begin @cs = 334 _goto_level = _again next end end end when 330 then # line 1835 "lib/parser/ruby-next/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 341 then # line 1843 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tSYMBOL, tok(@ts + 1, @ts + 2)) @cs = 782; begin p += 1 _goto_level = _out next end end end when 68 then # line 1857 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tSYMBOL, tok(@ts + 1), @ts) @cs = 782; begin p += 1 _goto_level = _out next end end end when 352 then # line 1898 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin escape = { " " => '\s', "\r" => '\r', "\n" => '\n', "\t" => '\t', "\v" => '\v', "\f" => '\f' }[@source_buffer.slice(@ts + 1)] diagnostic :warning, :invalid_escape_use, { :escape => escape }, range p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 351 then # line 1908 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) end end when 331 then # line 1967 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end end when 51 then # line 1988 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; if version?(18) ident = tok(@ts, @te - 2) emit((@source_buffer.slice(@ts) =~ /[A-Z]/) ? :tCONSTANT : :tIDENTIFIER, ident, @ts, @te - 2) p = p - 1; # continue as a symbol if !@static_env.nil? && @static_env.declared?(ident) @cs = 782; else @cs = (arg_or_cmdarg(cmd_state)); end else emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) @cs = 767; end begin p += 1 _goto_level = _out next end end end when 328 then # line 2026 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin if @version >= 27 emit(:tBDOT3) else emit(:tDOT3) end @cs = 544; begin p += 1 _goto_level = _out next end end end when 48 then # line 2055 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tIDENTIFIER, ident_tok, ident_ts, ident_te) p = ident_te - 1 if !@static_env.nil? && @static_env.declared?(ident_tok) && @version < 25 @cs = 447; else @cs = 506; end begin p += 1 _goto_level = _out next end end end when 315 then # line 2074 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = @ts - 1 @cs_before_block_comment = @cs begin @cs = 186 _goto_level = _again next end end end when 55 then # line 2090 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = @ts - 1; begin @cs = 782 _goto_level = _again next end end end when 299 then # line 519 "lib/parser/ruby-next/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 326 then # line 1721 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 782; begin p += 1 _goto_level = _out next end end end when 325 then # line 1728 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tSTAR, '*'.freeze) begin p += 1 _goto_level = _out next end end end when 322 then # line 1752 "lib/parser/ruby-next/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 320 then # line 1758 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) end end when 349 then # line 1818 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end end when 332 then # line 1857 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1), @ts) @cs = 782; begin p += 1 _goto_level = _out next end end end when 345 then # line 1865 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 diagnostic :error, diag_msg, { name: tok(tm, @te) }, range(tm, @te) else emit(:tCOLON, tok(@ts, @ts + 1), @ts, @ts + 1) p = @ts end @cs = 782; begin p += 1 _goto_level = _out next end end end when 350 then # line 1908 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) end end when 356 then # line 1914 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 323 then # line 1967 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end end when 327 then # line 2015 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 emit(:tBDOT2) else emit(:tDOT2) end @cs = 544; begin p += 1 _goto_level = _out next end end end when 302 then # line 1307 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 447; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end end when 312 then # line 2071 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 314 then # line 2074 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 @cs_before_block_comment = @cs begin @cs = 186 _goto_level = _again next end end end when 317 then # line 2090 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1; begin @cs = 782 _goto_level = _again next end end end when 53 then # line 1758 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) end end when 72 then # line 1818 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end end when 73 then # line 1885 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 47 then # line 1307 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 447; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end end when 52 then # line 2071 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end end when 67 then # line 2090 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin p = @ts - 1; begin @cs = 782 _goto_level = _again next end end end when 50 then # line 1 "NONE" begin case @act when 98 then begin begin p = (( @te))-1; end emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 782; begin p += 1 _goto_level = _out next end end when 105 then begin begin p = (( @te))-1; end diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end when 116 then begin begin p = (( @te))-1; end if @version >= 27 emit(:tPIPE, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 544; begin p += 1 _goto_level = _out next end else p -= 2 begin @cs = 782 _goto_level = _again next end end end when 120 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end when 121 then begin begin p = (( @te))-1; end emit(:kRESCUE, 'rescue'.freeze, @ts, tm) p = tm - 1 @cs = 520; begin p += 1 _goto_level = _out next end end when 122 then begin begin p = (( @te))-1; end emit_table(KEYWORDS_BEGIN) @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end when 126 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 782 _goto_level = _again next end end when 127 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 447; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 131 then begin begin p = (( @te))-1; end p = @ts - 1; begin @cs = 782 _goto_level = _again next end end end end when 387 then # line 2110 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 388 then # line 519 "lib/parser/ruby-next/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 389 then # line 2098 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 393 then # line 2110 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 76 then # line 2120 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 397 then # line 2125 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin begin @cs = (push_literal(tok, tok, @ts)) _goto_level = _again next end end end when 396 then # line 2135 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 395 then # line 519 "lib/parser/ruby-next/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 399 then # line 2129 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 398 then # line 2135 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 75 then # line 2135 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 544 _goto_level = _again next end end end when 432 then # line 2146 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tLAMBDA, '->'.freeze, @ts, @ts + 2) @lambda_stack.push @paren_nest @cs = 447; begin p += 1 _goto_level = _out next end end end when 86 then # line 2187 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) emit(:tLSHFT, '<<'.freeze, @te - 2, @te) @cs = 774; begin p += 1 _goto_level = _out next end end end when 407 then # line 2323 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin type, delimiter = tok, tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts, nil, false, false, true)) _goto_level = _again next end end end when 78 then # line 2341 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = @ts - 1; begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 428 then # line 2366 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 454; begin p += 1 _goto_level = _out next end end end when 485 then # line 2390 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) begin @cs = 774 _goto_level = _again next end end end when 421 then # line 2399 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION); @cs = 774; begin p += 1 _goto_level = _out next end end end when 426 then # line 2434 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tOP_ASGN, tok(@ts, @te - 1)) @cs = 544; begin p += 1 _goto_level = _out next end end end when 412 then # line 2438 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tEH, '?'.freeze) @cs = 774; begin p += 1 _goto_level = _out next end end end when 409 then # line 2457 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 544; begin p += 1 _goto_level = _out next end end end when 411 then # line 2470 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tSEMI, ';'.freeze) @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end end when 490 then # line 2474 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin diagnostic :error, :bare_backslash, nil, range(@ts, @ts + 1) p = p - 1; end end when 406 then # line 2480 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } end end when 405 then # line 519 "lib/parser/ruby-next/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 501 then # line 2183 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(KEYWORDS) @cs = 334; begin p += 1 _goto_level = _out next end end end when 499 then # line 2187 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) emit(:tLSHFT, '<<'.freeze, @te - 2, @te) @cs = 774; begin p += 1 _goto_level = _out next end end end when 498 then # line 2198 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(KEYWORDS) @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end end when 437 then # line 2273 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin diagnostic :error, :no_dot_digit_literal end end when 487 then # line 2333 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT) @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 425 then # line 2341 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1; begin @stack[ @top] = @cs @top+= 1 @cs = 329 _goto_level = _again next end end end when 433 then # line 2366 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 454; begin p += 1 _goto_level = _out next end end end when 493 then # line 1307 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 447; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end end when 431 then # line 2390 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) begin @cs = 774 _goto_level = _again next end end end when 427 then # line 2399 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION); @cs = 774; begin p += 1 _goto_level = _out next end end end when 420 then # line 2405 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 544; begin p += 1 _goto_level = _out next end end end when 435 then # line 2457 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 544; begin p += 1 _goto_level = _out next end end end when 418 then # line 2464 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 424 then # line 2480 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } end end when 84 then # line 2246 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 79 then # line 2273 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :error, :no_dot_digit_literal end end when 83 then # line 2305 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 77 then # line 2480 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } end end when 80 then # line 1 "NONE" begin case @act when 144 then begin begin p = (( @te))-1; end if @lambda_stack.last == @paren_nest @lambda_stack.pop if tok == '{'.freeze emit(:tLAMBEG, '{'.freeze) else # 'do' emit(:kDO_LAMBDA, 'do'.freeze) end else if tok == '{'.freeze emit(:tLCURLY, '{'.freeze) else # 'do' emit_do end end if tok == '{'.freeze @paren_nest += 1 end @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end when 145 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 334; begin p += 1 _goto_level = _out next end end when 146 then begin begin p = (( @te))-1; end emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) emit(:tLSHFT, '<<'.freeze, @te - 2, @te) @cs = 774; begin p += 1 _goto_level = _out next end end when 147 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 544; begin p += 1 _goto_level = _out next end end when 148 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end when 149 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 520; begin p += 1 _goto_level = _out next end end when 150 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) if version?(18) && tok == 'not'.freeze @cs = 544; begin p += 1 _goto_level = _out next end else @cs = 475; begin p += 1 _goto_level = _out next end end end when 151 then begin begin p = (( @te))-1; end if version?(18) emit(:tIDENTIFIER) unless !@static_env.nil? && @static_env.declared?(tok) @cs = (arg_or_cmdarg(cmd_state)); end else emit(:k__ENCODING__, '__ENCODING__'.freeze) end begin p += 1 _goto_level = _out next end end when 152 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) begin p += 1 _goto_level = _out next end end when 153 then begin begin p = (( @te))-1; end digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 155 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, @ts, @te - 1) p = p - 1; begin p += 1 _goto_level = _out next end end end when 156 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, @ts, @te - 1) p = p - 1; begin p += 1 _goto_level = _out next end end end when 157 then begin begin p = (( @te))-1; end digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end when 159 then begin begin p = (( @te))-1; end emit(:tCONSTANT) @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end when 162 then begin begin p = (( @te))-1; end emit(:tDOT, '.', @ts, @ts + 1) emit(:tCOLON, ':', @ts + 1, @ts + 2) p = p - tok.length + 2 @cs = 454; begin p += 1 _goto_level = _out next end end when 163 then begin begin p = (( @te))-1; end if @version >= 27 emit_table(PUNCTUATION) else emit(:tDOT, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; end @cs = 454; begin p += 1 _goto_level = _out next end end when 165 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 447; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 166 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 = 475; begin p += 1 _goto_level = _out next end end when 168 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION); @cs = 774; begin p += 1 _goto_level = _out next end end when 169 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION) @cs = 544; begin p += 1 _goto_level = _out next end end end end when 96 then # line 2510 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = tm - 1; begin @cs = 782 _goto_level = _again next end end end when 506 then # line 2513 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 186; begin p += 1 _goto_level = _out next end end end when 509 then # line 2496 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @version < 27 # Ruby before 2.7 doesn't support comments before leading dot. # If a line after "a" starts with a comment then "a" is a self-contained statement. # So in that case we emit a special tNL token and start reading the # next line as a separate statement. # # Note: block comments before leading dot are not supported on any version of Ruby. emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 186; begin p += 1 _goto_level = _out next end end end end when 508 then # line 2513 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 186; begin p += 1 _goto_level = _out next end end end when 91 then # line 2496 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin if @version < 27 # Ruby before 2.7 doesn't support comments before leading dot. # If a line after "a" starts with a comment then "a" is a self-contained statement. # So in that case we emit a special tNL token and start reading the # next line as a separate statement. # # Note: block comments before leading dot are not supported on any version of Ruby. emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 186; begin p += 1 _goto_level = _out next end end end end when 87 then # line 2513 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 186; begin p += 1 _goto_level = _out next end end end when 92 then # line 1 "NONE" begin case @act when 182 then begin begin p = (( @te))-1; end if @version < 27 # Ruby before 2.7 doesn't support comments before leading dot. # If a line after "a" starts with a comment then "a" is a self-contained statement. # So in that case we emit a special tNL token and start reading the # next line as a separate statement. # # Note: block comments before leading dot are not supported on any version of Ruby. emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 186; begin p += 1 _goto_level = _out next end end end when 184 then begin begin p = (( @te))-1; end emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 186; begin p += 1 _goto_level = _out next end end end end when 512 then # line 2523 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_comment(@eq_begin_s, @te) begin @cs = (@cs_before_block_comment) _goto_level = _again next end end end when 511 then # line 2531 "lib/parser/ruby-next/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 107 then # line 2541 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin @eq_begin_s = @ts begin @cs = 970 _goto_level = _again next end end end when 2 then # line 2545 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = pe - 3 end end when 99 then # line 2548 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin cmd_state = true; p = p - 1; begin @cs = 774 _goto_level = _again next end end end when 100 then # line 519 "lib/parser/ruby-next/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 101 then # line 2538 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 106 then # line 2541 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin @eq_begin_s = @ts begin @cs = 970 _goto_level = _again next end end end when 105 then # line 2548 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin cmd_state = true; p = p - 1; begin @cs = 774 _goto_level = _again next end end end when 1 then # line 2548 "lib/parser/ruby-next/lexer.rl" begin begin p = (( @te))-1; end begin cmd_state = true; p = p - 1; begin @cs = 774 _goto_level = _again next end end end when 66 then # line 493 "lib/parser/ruby-next/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 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end when 111 then # line 493 "lib/parser/ruby-next/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 937 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_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' }[@source_buffer.slice(@ts + 1)] diagnostic :warning, :invalid_escape_use, { :escape => escape }, range p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 316 then # line 493 "lib/parser/ruby-next/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 2074 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = @ts - 1 @cs_before_block_comment = @cs begin @cs = 186 _goto_level = _again next end end end when 436 then # line 493 "lib/parser/ruby-next/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 2446 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin if @paren_nest == 0 diagnostic :warning, :triple_dot_at_eol, nil, range(@ts, @te - 1) end emit(:tDOT3, '...'.freeze, @ts, @te - 1) p = p - 1; @cs = 544; begin p += 1 _goto_level = _out next end end end when 513 then # line 493 "lib/parser/ruby-next/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 2523 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit_comment(@eq_begin_s, @te) begin @cs = (@cs_before_block_comment) _goto_level = _again next end end end when 510 then # line 493 "lib/parser/ruby-next/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 2528 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 end when 108 then # line 493 "lib/parser/ruby-next/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 2541 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin @eq_begin_s = @ts begin @cs = 970 _goto_level = _again next end end end when 3 then # line 493 "lib/parser/ruby-next/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 2545 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = pe - 3 end end when 461 then # line 627 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 459 then # line 628 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, chars)) } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 464 then # line 629 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 462 then # line 630 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 2); p -= 2 } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 460 then # line 631 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 2); p -= 2 } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 463 then # line 632 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 6); p -= 6 } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 452 then # line 636 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Float(chars))) } end # line 2305 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 453 then # line 637 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars), @ts, @te - 2); p -= 2 } end # line 2305 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 454 then # line 641 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } end # line 2305 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 456 then # line 642 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } end # line 2305 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 455 then # line 643 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars), @ts, @te - 6); p -= 6 } end # line 2305 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 135 then # line 658 "lib/parser/ruby-next/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 if @version < 24 if codepoints.start_with?(" ") || codepoints.start_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s + 2, @escape_s + 3) end if spaces_p = codepoints.index(/[ \t]{2}/) diagnostic :fatal, :invalid_unicode_escape, nil, range(codepoint_s + spaces_p + 1, codepoint_s + spaces_p + 2) end if codepoints.end_with?(" ") || codepoints.end_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(p - 1, p) end end codepoints.scan(/([0-9a-fA-F]+)|([ \t]+)/).each do |(codepoint_str, spaces)| if spaces codepoint_s += spaces.length else codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length end end end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 163 then # line 658 "lib/parser/ruby-next/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 if @version < 24 if codepoints.start_with?(" ") || codepoints.start_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s + 2, @escape_s + 3) end if spaces_p = codepoints.index(/[ \t]{2}/) diagnostic :fatal, :invalid_unicode_escape, nil, range(codepoint_s + spaces_p + 1, codepoint_s + spaces_p + 2) end if codepoints.end_with?(" ") || codepoints.end_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(p - 1, p) end end codepoints.scan(/([0-9a-fA-F]+)|([ \t]+)/).each do |(codepoint_str, spaces)| if spaces codepoint_s += spaces.length else codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length end end end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 374 then # line 658 "lib/parser/ruby-next/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 if @version < 24 if codepoints.start_with?(" ") || codepoints.start_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s + 2, @escape_s + 3) end if spaces_p = codepoints.index(/[ \t]{2}/) diagnostic :fatal, :invalid_unicode_escape, nil, range(codepoint_s + spaces_p + 1, codepoint_s + spaces_p + 2) end if codepoints.end_with?(" ") || codepoints.end_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(p - 1, p) end end codepoints.scan(/([0-9a-fA-F]+)|([ \t]+)/).each do |(codepoint_str, spaces)| if spaces codepoint_s += spaces.length else codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length end end end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 119 then # line 698 "lib/parser/ruby-next/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 147 then # line 698 "lib/parser/ruby-next/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 358 then # line 698 "lib/parser/ruby-next/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 122 then # line 705 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_escape end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 150 then # line 705 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_escape end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 361 then # line 705 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_escape end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 124 then # line 732 "lib/parser/ruby-next/lexer.rl" begin @escape = "\x7f" end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 152 then # line 732 "lib/parser/ruby-next/lexer.rl" begin @escape = "\x7f" end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 363 then # line 732 "lib/parser/ruby-next/lexer.rl" begin @escape = "\x7f" end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 121 then # line 739 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 149 then # line 739 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 360 then # line 739 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 138 then # line 743 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 166 then # line 743 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 377 then # line 743 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 137 then # line 747 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 165 then # line 747 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 376 then # line 747 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 132 then # line 753 "lib/parser/ruby-next/lexer.rl" begin @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 160 then # line 753 "lib/parser/ruby-next/lexer.rl" begin @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 371 then # line 753 "lib/parser/ruby-next/lexer.rl" begin @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 131 then # line 757 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 159 then # line 757 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 370 then # line 757 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 136 then # line 763 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 164 then # line 763 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 375 then # line 763 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 133 then # line 777 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 161 then # line 777 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 372 then # line 777 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 120 then # line 803 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 148 then # line 803 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 359 then # line 803 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 172 then # line 809 "lib/parser/ruby-next/lexer.rl" begin @escape_s = p @escape = nil end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 177 then # line 809 "lib/parser/ruby-next/lexer.rl" begin @escape_s = p @escape = nil end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 57 then # line 849 "lib/parser/ruby-next/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 493 "lib/parser/ruby-next/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 30 then # line 849 "lib/parser/ruby-next/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 1534 "lib/parser/ruby-next/lexer.rl" begin tm = p end when 32 then # line 849 "lib/parser/ruby-next/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 1550 "lib/parser/ruby-next/lexer.rl" begin tm = p end when 34 then # line 849 "lib/parser/ruby-next/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 1578 "lib/parser/ruby-next/lexer.rl" begin tm = p end when 214 then # line 849 "lib/parser/ruby-next/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 1407 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 233 then # line 849 "lib/parser/ruby-next/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 1425 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 241 then # line 849 "lib/parser/ruby-next/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 1457 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 33 then # line 849 "lib/parser/ruby-next/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 1590 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 272 then # line 849 "lib/parser/ruby-next/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 1595 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 264 then # line 849 "lib/parser/ruby-next/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 1601 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 283 then # line 849 "lib/parser/ruby-next/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 1679 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 295 then # line 849 "lib/parser/ruby-next/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 1700 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 291 then # line 849 "lib/parser/ruby-next/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 1703 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 782 _goto_level = _again next end end end when 58 then # line 849 "lib/parser/ruby-next/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 1721 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 782; begin p += 1 _goto_level = _out next end end end when 49 then # line 849 "lib/parser/ruby-next/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 2055 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin emit(:tIDENTIFIER, ident_tok, ident_ts, ident_te) p = ident_te - 1 if !@static_env.nil? && @static_env.declared?(ident_tok) && @version < 25 @cs = 447; else @cs = 506; end begin p += 1 _goto_level = _out next end end end when 313 then # line 849 "lib/parser/ruby-next/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 2071 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 394 then # line 849 "lib/parser/ruby-next/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 2098 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 390 then # line 849 "lib/parser/ruby-next/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 2101 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @in_kwarg p = p - 1; begin @cs = 782 _goto_level = _again next end else begin @cs = 186 _goto_level = _again next end end end end when 403 then # line 849 "lib/parser/ruby-next/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 2129 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 400 then # line 849 "lib/parser/ruby-next/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 2132 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 186 _goto_level = _again next end end end when 439 then # line 849 "lib/parser/ruby-next/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 2348 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tDOT, '.', @ts, @ts + 1) emit(:tCOLON, ':', @ts + 1, @ts + 2) p = p - tok.length + 2 @cs = 454; begin p += 1 _goto_level = _out next end end end when 491 then # line 849 "lib/parser/ruby-next/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 2464 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 419 then # line 849 "lib/parser/ruby-next/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 2467 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 964 _goto_level = _again next end end end when 102 then # line 849 "lib/parser/ruby-next/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 2538 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 263 then # line 1051 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) current_literal = literal if current_literal current_literal.start_interp_brace end end # line 1501 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest @lambda_stack.pop emit(:tLAMBEG, '{'.freeze, @te - 1, @te) else emit(:tLCURLY, '{'.freeze, @te - 1, @te) end @command_start = true @paren_nest += 1 @cs = 774; begin p += 1 _goto_level = _out next end end end when 285 then # line 1051 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) current_literal = literal if current_literal current_literal.start_interp_brace end end # line 1663 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest @lambda_stack.pop emit(:tLAMBEG, '{'.freeze) else emit(:tLBRACE_ARG, '{'.freeze) end @paren_nest += 1 @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end end when 385 then # line 1051 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) current_literal = literal if current_literal current_literal.start_interp_brace end end # line 1943 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest @lambda_stack.pop @command_start = true emit(:tLAMBEG, '{'.freeze) else emit(:tLBRACE, '{'.freeze) end @paren_nest += 1 begin p += 1 _goto_level = _out next end end end when 504 then # line 1051 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) current_literal = literal if current_literal current_literal.start_interp_brace end end # line 2154 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest @lambda_stack.pop if tok == '{'.freeze emit(:tLAMBEG, '{'.freeze) else # 'do' emit(:kDO_LAMBDA, 'do'.freeze) end else if tok == '{'.freeze emit(:tLCURLY, '{'.freeze) else # 'do' emit_do end end if tok == '{'.freeze @paren_nest += 1 end @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end end when 505 then # line 1060 "lib/parser/ruby-next/lexer.rl" begin current_literal = literal if current_literal if current_literal.end_interp_brace_and_try_closing if version?(18, 19) emit(:tRCURLY, '}'.freeze, p - 1, p) @cond.lexpop @cmdarg.lexpop else emit(:tSTRING_DEND, '}'.freeze, p - 1, p) end if current_literal.saved_herebody_s @herebody_s = current_literal.saved_herebody_s end p = p - 1; @cs = (next_state_for_literal(current_literal)); begin p += 1 _goto_level = _out next end end end @paren_nest -= 1 end # line 2409 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) if @version < 24 @cond.lexpop @cmdarg.lexpop else @cond.pop @cmdarg.pop end if tok == '}'.freeze || tok == ']'.freeze if @version >= 25 @cs = 782; else @cs = 512; end else # ) # fnext expr_endfn; ? end begin p += 1 _goto_level = _out next end end end when 60 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end when 64 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 493 "lib/parser/ruby-next/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 217 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1407 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 232 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1425 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 244 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1457 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 266 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1598 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 782 _goto_level = _again next end end end when 281 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1679 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 293 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1700 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 319 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2071 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 392 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2098 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 402 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2129 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 423 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2464 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 104 then # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2538 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 238 then # line 1253 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 1447 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tFID, tok(@ts, tm), @ts, tm) @cs = (arg_or_cmdarg(cmd_state)); p = tm - 1; begin p += 1 _goto_level = _out next end end end when 333 then # line 1253 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 1849 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 782; begin p += 1 _goto_level = _out next end end end when 304 then # line 1253 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 2044 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 416 then # line 1253 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 1 "NONE" begin case @act when 144 then begin begin p = (( @te))-1; end if @lambda_stack.last == @paren_nest @lambda_stack.pop if tok == '{'.freeze emit(:tLAMBEG, '{'.freeze) else # 'do' emit(:kDO_LAMBDA, 'do'.freeze) end else if tok == '{'.freeze emit(:tLCURLY, '{'.freeze) else # 'do' emit_do end end if tok == '{'.freeze @paren_nest += 1 end @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end when 145 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 334; begin p += 1 _goto_level = _out next end end when 146 then begin begin p = (( @te))-1; end emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) emit(:tLSHFT, '<<'.freeze, @te - 2, @te) @cs = 774; begin p += 1 _goto_level = _out next end end when 147 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 544; begin p += 1 _goto_level = _out next end end when 148 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end when 149 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 520; begin p += 1 _goto_level = _out next end end when 150 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) if version?(18) && tok == 'not'.freeze @cs = 544; begin p += 1 _goto_level = _out next end else @cs = 475; begin p += 1 _goto_level = _out next end end end when 151 then begin begin p = (( @te))-1; end if version?(18) emit(:tIDENTIFIER) unless !@static_env.nil? && @static_env.declared?(tok) @cs = (arg_or_cmdarg(cmd_state)); end else emit(:k__ENCODING__, '__ENCODING__'.freeze) end begin p += 1 _goto_level = _out next end end when 152 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) begin p += 1 _goto_level = _out next end end when 153 then begin begin p = (( @te))-1; end digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 155 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, @ts, @te - 1) p = p - 1; begin p += 1 _goto_level = _out next end end end when 156 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, @ts, @te - 1) p = p - 1; begin p += 1 _goto_level = _out next end end end when 157 then begin begin p = (( @te))-1; end digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end when 159 then begin begin p = (( @te))-1; end emit(:tCONSTANT) @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end when 162 then begin begin p = (( @te))-1; end emit(:tDOT, '.', @ts, @ts + 1) emit(:tCOLON, ':', @ts + 1, @ts + 2) p = p - tok.length + 2 @cs = 454; begin p += 1 _goto_level = _out next end end when 163 then begin begin p = (( @te))-1; end if @version >= 27 emit_table(PUNCTUATION) else emit(:tDOT, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; end @cs = 454; begin p += 1 _goto_level = _out next end end when 165 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 447; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 166 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 = 475; begin p += 1 _goto_level = _out next end end when 168 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION); @cs = 774; begin p += 1 _goto_level = _out next end end when 169 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION) @cs = 544; begin p += 1 _goto_level = _out next end end end end when 239 then # line 1254 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 1447 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tFID, tok(@ts, tm), @ts, tm) @cs = (arg_or_cmdarg(cmd_state)); p = tm - 1; begin p += 1 _goto_level = _out next end end end when 334 then # line 1254 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 1849 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 782; begin p += 1 _goto_level = _out next end end end when 306 then # line 1254 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 2044 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 417 then # line 1254 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 2373 "lib/parser/ruby-next/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 = 475; begin p += 1 _goto_level = _out next end end end when 335 then # line 1259 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 1849 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 782; begin p += 1 _goto_level = _out next end end end when 307 then # line 1259 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 2044 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 336 then # line 1260 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 1849 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 782; begin p += 1 _goto_level = _out next end end end when 308 then # line 1260 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 2044 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 340 then # line 1261 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 1849 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 782; begin p += 1 _goto_level = _out next end end end when 311 then # line 1261 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 2044 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 339 then # line 1262 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 1849 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 782; begin p += 1 _goto_level = _out next end end end when 310 then # line 1262 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 1 "NONE" begin case @act when 98 then begin begin p = (( @te))-1; end emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 782; begin p += 1 _goto_level = _out next end end when 105 then begin begin p = (( @te))-1; end diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end when 116 then begin begin p = (( @te))-1; end if @version >= 27 emit(:tPIPE, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 544; begin p += 1 _goto_level = _out next end else p -= 2 begin @cs = 782 _goto_level = _again next end end end when 120 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end when 121 then begin begin p = (( @te))-1; end emit(:kRESCUE, 'rescue'.freeze, @ts, tm) p = tm - 1 @cs = 520; begin p += 1 _goto_level = _out next end end when 122 then begin begin p = (( @te))-1; end emit_table(KEYWORDS_BEGIN) @command_start = true @cs = 774; begin p += 1 _goto_level = _out next end end when 126 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 782 _goto_level = _again next end end when 127 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 447; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 131 then begin begin p = (( @te))-1; end p = @ts - 1; begin @cs = 782 _goto_level = _again next end end end end when 337 then # line 1263 "lib/parser/ruby-next/lexer.rl" begin tm = p - 3 end # line 1849 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 782; begin p += 1 _goto_level = _out next end end end when 309 then # line 1263 "lib/parser/ruby-next/lexer.rl" begin tm = p - 3 end # line 2044 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 782 _goto_level = _again next end end end when 338 then # line 1268 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 1849 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 782; begin p += 1 _goto_level = _out next end end end when 486 then # line 1273 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2 end # line 2337 "lib/parser/ruby-next/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 262 then # line 1279 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 1495 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tLBRACK, '['.freeze, @te - 1, @te) @cs = 544; begin p += 1 _goto_level = _out next end end end when 378 then # line 1279 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 1957 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tLBRACK, '['.freeze) begin p += 1 _goto_level = _out next end end end when 489 then # line 1279 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 2442 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tLBRACK2, '['.freeze) @cs = 544; begin p += 1 _goto_level = _out next end end end when 492 then # line 1285 "lib/parser/ruby-next/lexer.rl" begin @paren_nest -= 1 end # line 2409 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) if @version < 24 @cond.lexpop @cmdarg.lexpop else @cond.pop @cmdarg.pop end if tok == '}'.freeze || tok == ']'.freeze if @version >= 25 @cs = 782; else @cs = 512; end else # ) # fnext expr_endfn; ? end begin p += 1 _goto_level = _out next end end end when 254 then # line 1292 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end end # line 1476 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if version?(18) emit(:tLPAREN2, '('.freeze, @te - 1, @te) @cs = 774; begin p += 1 _goto_level = _out next end else emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te) @cs = 544; begin p += 1 _goto_level = _out next end end end end when 267 then # line 1292 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end end # line 1489 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tLPAREN2, '('.freeze) @cs = 544; begin p += 1 _goto_level = _out next end end end when 275 then # line 1292 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end end # line 1617 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te) if version?(18) @cs = 774; begin p += 1 _goto_level = _out next end else @cs = 544; begin p += 1 _goto_level = _out next end end end end when 324 then # line 1292 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end end # line 1962 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:tLPAREN, '('.freeze) begin p += 1 _goto_level = _out next end end end when 429 then # line 1292 "lib/parser/ruby-next/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end end # line 2405 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 544; begin p += 1 _goto_level = _out next end end end when 430 then # line 1302 "lib/parser/ruby-next/lexer.rl" begin @paren_nest -= 1 end # line 2409 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) if @version < 24 @cond.lexpop @cmdarg.lexpop else @cond.pop @cmdarg.pop end if tok == '}'.freeze || tok == ']'.freeze if @version >= 25 @cs = 782; else @cs = 512; end else # ) # fnext expr_endfn; ? end begin p += 1 _goto_level = _out next end end end when 71 then # line 1770 "lib/parser/ruby-next/lexer.rl" begin heredoc_e = p end # line 493 "lib/parser/ruby-next/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 348 then # line 1771 "lib/parser/ruby-next/lexer.rl" begin new_herebody_s = p end # line 1772 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin tok(@ts, heredoc_e) =~ /^<<(-?)(~?)(["'`]?)(.*)\3$/m indent = !$1.empty? || !$2.empty? dedent_body = !$2.empty? type = $3.empty? ? '<<"'.freeze : ('<<'.freeze + $3) delimiter = $4 if @version >= 27 if delimiter.count("\n") > 0 || delimiter.count("\r") > 0 diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end elsif @version >= 24 if delimiter.count("\n") > 0 if delimiter.end_with?("\n") diagnostic :warning, :heredoc_id_ends_with_nl, nil, range(@ts, @ts + 1) delimiter = delimiter.rstrip else diagnostic :fatal, :heredoc_id_has_newline, nil, range(@ts, @ts + 1) end end end if dedent_body && version?(18, 19, 20, 21, 22) emit(:tLSHFT, '<<'.freeze, @ts, @ts + 2) p = @ts + 1 @cs = 544; begin p += 1 _goto_level = _out next end else @cs = (push_literal(type, delimiter, @ts, heredoc_e, indent, dedent_body)); @herebody_s ||= new_herebody_s p = @herebody_s - 1 end end end when 343 then # line 1862 "lib/parser/ruby-next/lexer.rl" begin tm = p - 1; diag_msg = :ivar_name end # line 1865 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 diagnostic :error, diag_msg, { name: tok(tm, @te) }, range(tm, @te) else emit(:tCOLON, tok(@ts, @ts + 1), @ts, @ts + 1) p = @ts end @cs = 782; begin p += 1 _goto_level = _out next end end end when 346 then # line 1863 "lib/parser/ruby-next/lexer.rl" begin tm = p - 2; diag_msg = :cvar_name end # line 1865 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 diagnostic :error, diag_msg, { name: tok(tm, @te) }, range(tm, @te) else emit(:tCOLON, tok(@ts, @ts + 1), @ts, @ts + 1) p = @ts end @cs = 782; begin p += 1 _goto_level = _out next end end end when 354 then # line 1883 "lib/parser/ruby-next/lexer.rl" begin @escape = nil end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 381 then # line 1972 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 1973 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin emit(:kRESCUE, 'rescue'.freeze, @ts, tm) p = tm - 1 @cs = 520; begin p += 1 _goto_level = _out next end end end when 476 then # line 2239 "lib/parser/ruby-next/lexer.rl" begin @num_base = 16; @num_digits_s = p end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end when 470 then # line 2240 "lib/parser/ruby-next/lexer.rl" begin @num_base = 10; @num_digits_s = p end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end when 473 then # line 2241 "lib/parser/ruby-next/lexer.rl" begin @num_base = 8; @num_digits_s = p end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end when 467 then # line 2242 "lib/parser/ruby-next/lexer.rl" begin @num_base = 2; @num_digits_s = p end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end when 482 then # line 2243 "lib/parser/ruby-next/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end when 445 then # line 2244 "lib/parser/ruby-next/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end when 483 then # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end when 90 then # line 2509 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 2510 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin p = tm - 1; begin @cs = 782 _goto_level = _again next end end end when 8 then # line 1 "NONE" begin @te = p+1 end # line 493 "lib/parser/ruby-next/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 449 then # line 1 "NONE" begin @te = p+1 end # line 2303 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end when 223 then # line 1 "NONE" begin @te = p+1 end # line 1366 "lib/parser/ruby-next/lexer.rl" begin @act = 43; end when 210 then # line 1 "NONE" begin @te = p+1 end # line 1370 "lib/parser/ruby-next/lexer.rl" begin @act = 44; end when 206 then # line 1 "NONE" begin @te = p+1 end # line 1374 "lib/parser/ruby-next/lexer.rl" begin @act = 45; end when 26 then # line 1 "NONE" begin @te = p+1 end # line 1538 "lib/parser/ruby-next/lexer.rl" begin @act = 71; end when 256 then # line 1 "NONE" begin @te = p+1 end # line 1551 "lib/parser/ruby-next/lexer.rl" begin @act = 72; end when 27 then # line 1 "NONE" begin @te = p+1 end # line 1590 "lib/parser/ruby-next/lexer.rl" begin @act = 77; end when 249 then # line 1 "NONE" begin @te = p+1 end # line 1595 "lib/parser/ruby-next/lexer.rl" begin @act = 78; end when 276 then # line 1 "NONE" begin @te = p+1 end # line 1627 "lib/parser/ruby-next/lexer.rl" begin @act = 84; end when 45 then # line 1 "NONE" begin @te = p+1 end # line 1640 "lib/parser/ruby-next/lexer.rl" begin @act = 85; end when 297 then # line 1 "NONE" begin @te = p+1 end # line 1694 "lib/parser/ruby-next/lexer.rl" begin @act = 92; end when 286 then # line 1 "NONE" begin @te = p+1 end # line 1698 "lib/parser/ruby-next/lexer.rl" begin @act = 93; end when 69 then # line 1 "NONE" begin @te = p+1 end # line 1818 "lib/parser/ruby-next/lexer.rl" begin @act = 105; end when 386 then # line 1 "NONE" begin @te = p+1 end # line 1926 "lib/parser/ruby-next/lexer.rl" begin @act = 116; end when 300 then # line 1 "NONE" begin @te = p+1 end # line 1967 "lib/parser/ruby-next/lexer.rl" begin @act = 120; end when 380 then # line 1 "NONE" begin @te = p+1 end # line 1973 "lib/parser/ruby-next/lexer.rl" begin @act = 121; end when 379 then # line 1 "NONE" begin @te = p+1 end # line 1979 "lib/parser/ruby-next/lexer.rl" begin @act = 122; end when 74 then # line 1 "NONE" begin @te = p+1 end # line 2044 "lib/parser/ruby-next/lexer.rl" begin @act = 126; end when 298 then # line 1 "NONE" begin @te = p+1 end # line 1307 "lib/parser/ruby-next/lexer.rl" begin @act = 127; end when 301 then # line 1 "NONE" begin @te = p+1 end # line 2090 "lib/parser/ruby-next/lexer.rl" begin @act = 131; end when 500 then # line 1 "NONE" begin @te = p+1 end # line 2154 "lib/parser/ruby-next/lexer.rl" begin @act = 144; end when 495 then # line 1 "NONE" begin @te = p+1 end # line 2183 "lib/parser/ruby-next/lexer.rl" begin @act = 145; end when 503 then # line 1 "NONE" begin @te = p+1 end # line 2193 "lib/parser/ruby-next/lexer.rl" begin @act = 147; end when 496 then # line 1 "NONE" begin @te = p+1 end # line 2198 "lib/parser/ruby-next/lexer.rl" begin @act = 148; end when 497 then # line 1 "NONE" begin @te = p+1 end # line 2203 "lib/parser/ruby-next/lexer.rl" begin @act = 149; end when 502 then # line 1 "NONE" begin @te = p+1 end # line 2207 "lib/parser/ruby-next/lexer.rl" begin @act = 150; end when 494 then # line 1 "NONE" begin @te = p+1 end # line 2218 "lib/parser/ruby-next/lexer.rl" begin @act = 151; end when 488 then # line 1 "NONE" begin @te = p+1 end # line 2232 "lib/parser/ruby-next/lexer.rl" begin @act = 152; end when 410 then # line 1 "NONE" begin @te = p+1 end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @act = 153; end when 447 then # line 1 "NONE" begin @te = p+1 end # line 2290 "lib/parser/ruby-next/lexer.rl" begin @act = 156; end when 82 then # line 1 "NONE" begin @te = p+1 end # line 2305 "lib/parser/ruby-next/lexer.rl" begin @act = 157; end when 413 then # line 1 "NONE" begin @te = p+1 end # line 2333 "lib/parser/ruby-next/lexer.rl" begin @act = 159; end when 438 then # line 1 "NONE" begin @te = p+1 end # line 2348 "lib/parser/ruby-next/lexer.rl" begin @act = 162; end when 434 then # line 1 "NONE" begin @te = p+1 end # line 2354 "lib/parser/ruby-next/lexer.rl" begin @act = 163; end when 404 then # line 1 "NONE" begin @te = p+1 end # line 1307 "lib/parser/ruby-next/lexer.rl" begin @act = 165; end when 415 then # line 1 "NONE" begin @te = p+1 end # line 2373 "lib/parser/ruby-next/lexer.rl" begin @act = 166; end when 408 then # line 1 "NONE" begin @te = p+1 end # line 2399 "lib/parser/ruby-next/lexer.rl" begin @act = 168; end when 414 then # line 1 "NONE" begin @te = p+1 end # line 2405 "lib/parser/ruby-next/lexer.rl" begin @act = 169; end when 88 then # line 1 "NONE" begin @te = p+1 end # line 2496 "lib/parser/ruby-next/lexer.rl" begin @act = 182; end when 507 then # line 1 "NONE" begin @te = p+1 end # line 2513 "lib/parser/ruby-next/lexer.rl" begin @act = 184; end when 178 then # line 493 "lib/parser/ruby-next/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 937 "lib/parser/ruby-next/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_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 (<= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 717 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 151 then # line 709 "lib/parser/ruby-next/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 717 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 362 then # line 709 "lib/parser/ruby-next/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 717 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 129 then # line 709 "lib/parser/ruby-next/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 157 then # line 709 "lib/parser/ruby-next/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 368 then # line 709 "lib/parser/ruby-next/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 127 then # line 732 "lib/parser/ruby-next/lexer.rl" begin @escape = "\x7f" end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 155 then # line 732 "lib/parser/ruby-next/lexer.rl" begin @escape = "\x7f" end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 366 then # line 732 "lib/parser/ruby-next/lexer.rl" begin @escape = "\x7f" end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 134 then # line 763 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 777 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 162 then # line 763 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 777 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 373 then # line 763 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 777 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 117 then # line 809 "lib/parser/ruby-next/lexer.rl" begin @escape_s = p @escape = nil end # line 803 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 146 then # line 809 "lib/parser/ruby-next/lexer.rl" begin @escape_s = p @escape = nil end # line 803 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 357 then # line 809 "lib/parser/ruby-next/lexer.rl" begin @escape_s = p @escape = nil end # line 803 "lib/parser/ruby-next/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 61 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 493 "lib/parser/ruby-next/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 216 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1407 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 231 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1425 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 243 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1457 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 265 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1598 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 782 _goto_level = _again next end end end when 280 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1679 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 292 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1700 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 318 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2071 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 391 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2098 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 401 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2129 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 422 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2464 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 103 then # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2538 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; end when 478 then # line 2243 "lib/parser/ruby-next/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end when 442 then # line 2244 "lib/parser/ruby-next/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end when 457 then # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 450 then # line 2302 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 635 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars)) } end # line 2305 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 446 then # line 2303 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 635 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars)) } end # line 2305 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 271 then # line 1 "NONE" begin @te = p+1 end # line 493 "lib/parser/ruby-next/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 1595 "lib/parser/ruby-next/lexer.rl" begin @act = 78; end when 81 then # line 1 "NONE" begin @te = p+1 end # line 493 "lib/parser/ruby-next/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 2348 "lib/parser/ruby-next/lexer.rl" begin @act = 162; end when 35 then # line 1 "NONE" begin @te = p+1 end # line 849 "lib/parser/ruby-next/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 1590 "lib/parser/ruby-next/lexer.rl" begin @act = 77; end when 46 then # line 1 "NONE" begin @te = p+1 end # line 849 "lib/parser/ruby-next/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 1640 "lib/parser/ruby-next/lexer.rl" begin @act = 85; end when 440 then # line 1 "NONE" begin @te = p+1 end # line 849 "lib/parser/ruby-next/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 2348 "lib/parser/ruby-next/lexer.rl" begin @act = 162; end when 95 then # line 1 "NONE" begin @te = p+1 end # line 849 "lib/parser/ruby-next/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 2496 "lib/parser/ruby-next/lexer.rl" begin @act = 182; end when 65 then # line 1 "NONE" begin @te = p+1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1721 "lib/parser/ruby-next/lexer.rl" begin @act = 98; end when 85 then # line 1 "NONE" begin @te = p+1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2187 "lib/parser/ruby-next/lexer.rl" begin @act = 146; end when 94 then # line 1 "NONE" begin @te = p+1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2496 "lib/parser/ruby-next/lexer.rl" begin @act = 182; end when 37 then # line 1 "NONE" begin @te = p+1 end # line 1550 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 1551 "lib/parser/ruby-next/lexer.rl" begin @act = 72; end when 383 then # line 1 "NONE" begin @te = p+1 end # line 1972 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 2044 "lib/parser/ruby-next/lexer.rl" begin @act = 126; end when 382 then # line 1 "NONE" begin @te = p+1 end # line 1972 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 1307 "lib/parser/ruby-next/lexer.rl" begin @act = 127; end when 479 then # line 1 "NONE" begin @te = p+1 end # line 2243 "lib/parser/ruby-next/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @act = 153; end when 128 then # line 698 "lib/parser/ruby-next/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 717 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 156 then # line 698 "lib/parser/ruby-next/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 717 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 367 then # line 698 "lib/parser/ruby-next/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 717 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 126 then # line 709 "lib/parser/ruby-next/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 717 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 154 then # line 709 "lib/parser/ruby-next/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 717 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 882 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_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 current_literal.regexp? && REGEXP_META_CHARACTERS.match(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. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 365 then # line 709 "lib/parser/ruby-next/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 717 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 721 "lib/parser/ruby-next/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1885 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 782; begin p += 1 _goto_level = _out next end end end when 474 then # line 2239 "lib/parser/ruby-next/lexer.rl" begin @num_base = 16; @num_digits_s = p end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 468 then # line 2240 "lib/parser/ruby-next/lexer.rl" begin @num_base = 10; @num_digits_s = p end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 471 then # line 2241 "lib/parser/ruby-next/lexer.rl" begin @num_base = 8; @num_digits_s = p end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 465 then # line 2242 "lib/parser/ruby-next/lexer.rl" begin @num_base = 2; @num_digits_s = p end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 477 then # line 2243 "lib/parser/ruby-next/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 441 then # line 2244 "lib/parser/ruby-next/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2246 "lib/parser/ruby-next/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze 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), @ts, @num_suffix_s) 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 31 then # line 1 "NONE" begin @te = p+1 end # line 849 "lib/parser/ruby-next/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 1550 "lib/parser/ruby-next/lexer.rl" begin tm = p end # line 1551 "lib/parser/ruby-next/lexer.rl" begin @act = 72; end when 62 then # line 1 "NONE" begin @te = p+1 end # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1721 "lib/parser/ruby-next/lexer.rl" begin @act = 98; end when 93 then # line 1 "NONE" begin @te = p+1 end # line 1209 "lib/parser/ruby-next/lexer.rl" begin @sharp_s = p - 1 end # line 1212 "lib/parser/ruby-next/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2496 "lib/parser/ruby-next/lexer.rl" begin @act = 182; end when 484 then # line 1 "NONE" begin @te = p+1 end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2278 "lib/parser/ruby-next/lexer.rl" begin @act = 155; end when 480 then # line 1 "NONE" begin @te = p+1 end # line 2243 "lib/parser/ruby-next/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2278 "lib/parser/ruby-next/lexer.rl" begin @act = 155; end when 444 then # line 1 "NONE" begin @te = p+1 end # line 2244 "lib/parser/ruby-next/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 2245 "lib/parser/ruby-next/lexer.rl" begin @num_suffix_s = p end # line 626 "lib/parser/ruby-next/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2278 "lib/parser/ruby-next/lexer.rl" begin @act = 155; end # line 23676 "lib/parser/ruby-next/lexer.rb" end end end if _goto_level <= _again case _lex_to_state_actions[ @cs] when 97 then # line 1 "NONE" begin @ts = nil; end # line 23686 "lib/parser/ruby-next/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 285 "lib/parser/ruby-next/lexer.rl" # % @p = p if @token_queue.any? @token_queue.shift elsif @cs == klass.lex_error [ false, [ '$error'.freeze, range(p - 1, p) ] ] else eof = @source_pts.size [ false, [ '$eof'.freeze, range(eof, eof) ] ] 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 def encode_escape(ord) ord.chr.force_encoding(@source_buffer.source.encoding) end def tok(s = @ts, e = @te) @source_buffer.slice(s...e) 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, 'do'.freeze) elsif @cmdarg.active? || do_block emit(:kDO_BLOCK, 'do'.freeze) else emit(:kDO, 'do'.freeze) end end def arg_or_cmdarg(cmd_state) if cmd_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) next_state_for_literal(new_literal) end def next_state_for_literal(literal) if literal.words? && literal.backslash_delimited? if literal.interpolate? self.class.lex_en_interp_backslash_delimited_words else self.class.lex_en_plain_backslash_delimited_words end elsif literal.words? && !literal.backslash_delimited? if literal.interpolate? self.class.lex_en_interp_words else self.class.lex_en_plain_words end elsif !literal.words? && literal.backslash_delimited? if literal.interpolate? self.class.lex_en_interp_backslash_delimited else self.class.lex_en_plain_backslash_delimited end else if 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 @dedent_level = old_literal.dedent_level 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, '&.' => :tANDDOT, '.:' => :tMETHREF } 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, 'BEGIN' => :klBEGIN, 'END' => :klEND, } %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 2553 "lib/parser/ruby-next/lexer.rl" # % end end