From af53c230a1654f84af9760ae1a344a57b784a8dc Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Mon, 25 Feb 2013 21:12:22 +1300 Subject: [PATCH] CoffeeScript 1.5.0 --- documentation/coffee/block_comment.coffee | 2 +- documentation/docs/browser.html | 2 +- documentation/docs/cake.html | 2 +- documentation/docs/coffee-script.html | 51 +-- documentation/docs/command.html | 63 ++-- documentation/docs/grammar.html | 212 ++++++----- documentation/docs/helpers.html | 27 +- documentation/docs/index.html | 2 +- documentation/docs/lexer.html | 343 +++++++++++------ documentation/docs/nodes.html | 348 ++++++++++-------- documentation/docs/optparse.html | 2 +- documentation/docs/repl.html | 189 +++------- documentation/docs/rewriter.html | 60 ++- documentation/index.html.erb | 64 +++- documentation/js/aliases.js | 2 +- documentation/js/array_comprehensions.js | 2 +- documentation/js/block_comment.js | 4 +- documentation/js/cake_tasks.js | 2 +- documentation/js/classes.js | 6 +- documentation/js/comparisons.js | 2 +- documentation/js/conditionals.js | 2 +- documentation/js/default_args.js | 2 +- documentation/js/do.js | 2 +- documentation/js/embedded.js | 2 +- documentation/js/existence.js | 4 +- documentation/js/expressions.js | 2 +- documentation/js/expressions_assignment.js | 2 +- documentation/js/expressions_comprehension.js | 2 +- documentation/js/expressions_try.js | 2 +- documentation/js/fat_arrow.js | 2 +- documentation/js/functions.js | 2 +- documentation/js/heredocs.js | 2 +- documentation/js/heregexes.js | 2 +- documentation/js/interpolation.js | 2 +- documentation/js/multiple_return_values.js | 2 +- documentation/js/object_comprehensions.js | 2 +- documentation/js/object_extraction.js | 2 +- documentation/js/objects_and_arrays.js | 2 +- documentation/js/objects_reserved.js | 2 +- documentation/js/overview.js | 2 +- documentation/js/parallel_assignment.js | 2 +- documentation/js/patterns_and_splats.js | 2 +- documentation/js/prototypes.js | 2 +- documentation/js/range_comprehensions.js | 2 +- documentation/js/scope.js | 2 +- documentation/js/slices.js | 2 +- documentation/js/soaks.js | 2 +- documentation/js/splats.js | 2 +- documentation/js/splices.js | 2 +- documentation/js/strings.js | 2 +- documentation/js/switch.js | 2 +- documentation/js/try.js | 2 +- documentation/js/while.js | 2 +- extras/coffee-script.js | 7 +- index.html | 118 ++++-- lib/coffee-script/browser.js | 2 +- lib/coffee-script/cake.js | 2 +- lib/coffee-script/coffee-script.js | 4 +- lib/coffee-script/command.js | 2 +- lib/coffee-script/grammar.js | 2 +- lib/coffee-script/helpers.js | 2 +- lib/coffee-script/index.js | 2 +- lib/coffee-script/lexer.js | 2 +- lib/coffee-script/nodes.js | 2 +- lib/coffee-script/optparse.js | 2 +- lib/coffee-script/repl.js | 2 +- lib/coffee-script/rewriter.js | 2 +- lib/coffee-script/scope.js | 2 +- package.json | 2 +- src/coffee-script.coffee | 2 +- test/repl.coffee | 2 + 71 files changed, 921 insertions(+), 691 deletions(-) diff --git a/documentation/coffee/block_comment.coffee b/documentation/coffee/block_comment.coffee index dd3ce116..1b5af50c 100644 --- a/documentation/coffee/block_comment.coffee +++ b/documentation/coffee/block_comment.coffee @@ -1,5 +1,5 @@ ### -CoffeeScript Compiler v1.4.0 +CoffeeScript Compiler v1.5.0 Released under the MIT License ### diff --git a/documentation/docs/browser.html b/documentation/docs/browser.html index eab39f05..a108b482 100644 --- a/documentation/docs/browser.html +++ b/documentation/docs/browser.html @@ -1,4 +1,4 @@ - browser.coffee

browser.coffee

Override exported methods for non-Node.js engines.

CoffeeScript = require './coffee-script'
+      browser.coffee           

browser.coffee

Override exported methods for non-Node.js engines.

CoffeeScript = require './coffee-script'
 CoffeeScript.require = require

Use standard JavaScript eval to eval code.

CoffeeScript.eval = (code, options = {}) ->
   options.bare ?= on
   eval CoffeeScript.compile code, options

Running code does not provide access to this scope.

CoffeeScript.run = (code, options = {}) ->
diff --git a/documentation/docs/cake.html b/documentation/docs/cake.html
index 8002979a..b4520062 100644
--- a/documentation/docs/cake.html
+++ b/documentation/docs/cake.html
@@ -1,4 +1,4 @@
-      cake.coffee           

cake.coffee

cake is a simplified version of Make + cake.coffee

cake.coffee

cake is a simplified version of Make (Rake, Jake) for CoffeeScript. You define tasks with names and descriptions in a Cakefile, and can call them from the command line, or invoke them from other tasks.

diff --git a/documentation/docs/coffee-script.html b/documentation/docs/coffee-script.html index be3b74e9..3228e429 100644 --- a/documentation/docs/coffee-script.html +++ b/documentation/docs/coffee-script.html @@ -1,45 +1,44 @@ - coffee-script.coffee

coffee-script.coffee

CoffeeScript can be used both on the server, as a command-line compiler based + coffee-script.coffee

elsesandbox = globalsandbox.__filename = options.filename||'eval' - sandbox.__dirname = path.dirnamesandbox.__filenameifsandboxisglobalvm.runInThisContextjselse - vm.runInContextjs,sandbox

coffee-script.coffee

CoffeeScript can be used both on the server, as a command-line compiler based on Node.js/V8, or to run CoffeeScripts directly in the browser. This module contains the main entry functions for tokenizing, parsing, and compiling source CoffeeScript into JavaScript.

If included on a webpage, it will automatically sniff out, compile, and -execute all scripts present in text/coffeescript tags.

fs               = require 'fs'
-path             = require 'path'
-{Lexer,RESERVED} = require './lexer'
-{parser}         = require './parser'
-vm               = require 'vm'
-
-stripBOM = (content) ->
-  if content.charCodeAt(0) is 0xFEFF then content.substring 1 else content
+execute all scripts present in text/coffeescript tags.

fs        = require 'fs'
+path      = require 'path'
+{Lexer}   = require './lexer'
+{parser}  = require './parser'
+vm        = require 'vm'

The file extensions that are considered to be CoffeeScript.

extensions = ['.coffee', '.litcoffee']

Load and run a CoffeeScript file for Node, stripping any BOMs.

loadFile = (module, filename) ->
+  raw = fs.readFileSync filename, 'utf8'
+  stripped = if raw.charCodeAt(0) is 0xFEFF then raw.substring 1 else raw
+  module._compile compile(stripped, {filename}), filename
 
 if require.extensions
-  require.extensions['.coffee'] = (module, filename) ->
-    content = compile stripBOM(fs.readFileSync filename, 'utf8'), {filename}
-    module._compile content, filename

The current CoffeeScript version number.

exports.VERSION = '1.4.0'

Words that cannot be used as identifiers in CoffeeScript code

exports.RESERVED = RESERVED

Expose helpers for testing.

exports.helpers = require './helpers'

Compile a string of CoffeeScript code to JavaScript, using the Coffee/Jison + for ext in extensions + require.extensions[ext] = loadFile

The current CoffeeScript version number.

exports.VERSION = '1.5.0'

Expose helpers for testing.

exports.helpers = require './helpers'

Compile a string of CoffeeScript code to JavaScript, using the Coffee/Jison compiler.

exports.compile = compile = (code, options = {}) ->
   {merge} = exports.helpers
   try
-    js = (parser.parse lexer.tokenize code).compile options
+    js = (parser.parse lexer.tokenize(code, options)).compile options
     return js unless options.header
   catch err
     err.message = "In #{options.filename}, #{err.message}" if options.filename
     throw err
   header = "Generated by CoffeeScript #{@VERSION}"
-  "// #{header}\n#{js}"

Tokenize a string of CoffeeScript code, and return the array of tokens.

exports.tokens = (code, options) ->
-  lexer.tokenize code, options

Parse a string of CoffeeScript code or an array of lexed tokens, and + "// #{header}\n#{js}"

Tokenize a string of CoffeeScript code, and return the array of tokens.

exports.tokens = (code, options) ->
+  lexer.tokenize code, options

Parse a string of CoffeeScript code or an array of lexed tokens, and return the AST. You can then compile it by calling .compile() on the root, or traverse it by using .traverseChildren() with a callback.

exports.nodes = (source, options) ->
   if typeof source is 'string'
     parser.parse lexer.tokenize source, options
   else
-    parser.parse source

Compile and execute a string of CoffeeScript (on the server), correctly + parser.parse source

Compile and execute a string of CoffeeScript (on the server), correctly setting __filename, __dirname, and relative require().

exports.run = (code, options = {}) ->
-  mainModule = require.main

Set the filename.

  mainModule.filename = process.argv[1] =
-      if options.filename then fs.realpathSync(options.filename) else '.'

Clear the module cache.

  mainModule.moduleCache and= {}

Assign paths for node_modules loading

  mainModule.paths = require('module')._nodeModulePaths path.dirname fs.realpathSync options.filename

Compile.

  if path.extname(mainModule.filename) isnt '.coffee' or require.extensions
+  mainModule = require.main

Set the filename.

  mainModule.filename = process.argv[1] =
+      if options.filename then fs.realpathSync(options.filename) else '.'

Clear the module cache.

  mainModule.moduleCache and= {}

Assign paths for node_modules loading

  mainModule.paths = require('module')._nodeModulePaths path.dirname fs.realpathSync options.filename

Compile.

  if (path.extname(mainModule.filename) not in extensions) or require.extensions
     mainModule._compile compile(code, options), mainModule.filename
   else
-    mainModule._compile code, mainModule.filename

Compile and evaluate a string of CoffeeScript (in a Node.js-like environment). + mainModule._compile code, mainModule.filename

Compile and evaluate a string of CoffeeScript (in a Node.js-like environment). The CoffeeScript REPL uses this to run the input.

exports.eval = (code, options = {}) ->
   return unless code = code.trim()
   Script = vm.Script
@@ -54,12 +53,12 @@ The CoffeeScript REPL uses this to run the input.

define module/require only if they chose not to specify their own

    unless sandbox isnt global or sandbox.module or sandbox.require
+    sandbox.__dirname  = path.dirname sandbox.__filename

define module/require only if they chose not to specify their own

    unless sandbox isnt global or sandbox.module or sandbox.require
       Module = require 'module'
       sandbox.module  = _module  = new Module(options.modulename || 'eval')
       sandbox.require = _require = (path) ->  Module._load path, _module, true
       _module.filename = sandbox.__filename
-      _require[r] = require[r] for r in Object.getOwnPropertyNames require when r isnt 'paths'

use the same hack node currently uses for their own REPL

      _require.paths = _module.paths = Module._nodeModulePaths process.cwd()
+      _require[r] = require[r] for r in Object.getOwnPropertyNames require when r isnt 'paths'

use the same hack node currently uses for their own REPL

      _require.paths = _module.paths = Module._nodeModulePaths process.cwd()
       _require.resolve = (request) -> Module._resolveFilename request, _module
   o = {}
   o[k] = v for own k, v of options
@@ -68,11 +67,17 @@ The CoffeeScript REPL uses this to run the input.

Instantiate a Lexer for our use here.

lexer = new Lexer

The real Lexer produces a generic stream of tokens. This object provides a + vm.runInContext js, sandbox

Instantiate a Lexer for our use here.

lexer = new Lexer

The real Lexer produces a generic stream of tokens. This object provides a thin wrapper around it, compatible with the Jison API. We can then pass it directly as a "Jison lexer".

parser.lexer =
   lex: ->
-    [tag, @yytext, @yylineno] = @tokens[@pos++] or ['']
+    token = @tokens[@pos++]
+    if token
+      [tag, @yytext, @yylloc] = token
+      @yylineno = @yylloc.first_line
+    else
+      tag = ''
+
     tag
   setInput: (@tokens) ->
     @pos = 0
diff --git a/documentation/docs/command.html b/documentation/docs/command.html
index 03c7fb3a..d2686bdd 100644
--- a/documentation/docs/command.html
+++ b/documentation/docs/command.html
@@ -1,4 +1,4 @@
-      command.coffee           

command.coffee

The coffee utility. Handles command-line compilation of CoffeeScript + command.coffee

rewatch = ->watcher?.close() - watcher = fs.watchsource,compiletoRemove = (fileforfileinsourceswhenfile.indexOf(source)>=0)removeSourcefile,base,yesforfileintoRemovereturnunlesssources.some(s, i) ->prevSources[i]isnts - compileJoin()elseifopts.compileandopts.watchtimeLog"compiled #{source}"existsjsDir,(itExists) -> - ifitExiststhencompile()elseexec"mkdir -p #{jsDir}",compilespawnprocess.execPath,nodeArgs.concat(args),cwd: process.cwd()env: process.env - customFds: [0,1,2]

command.coffee

The coffee utility. Handles command-line compilation of CoffeeScript into various forms: saved into .js files or printed to stdout, piped to JavaScript Lint or recompiled every time the source is saved, printed as a token stream or as the syntax tree, or launch an @@ -31,7 +31,6 @@ interactive REPL.

[ '--nodejs [ARGS]', 'pass options directly to the "node" binary'] ['-o', '--output [DIR]', 'set the output directory for compiled JavaScript'] ['-p', '--print', 'print out the compiled JavaScript'] - ['-r', '--require [FILE*]', 'require a library before executing your script'] ['-s', '--stdio', 'listen for and compile scripts over stdio'] ['-t', '--tokens', 'print out the tokens that the lexer/rewriter produce'] ['-v', '--version', 'display the version number'] @@ -41,39 +40,38 @@ interactive REPL.

sourceCode = [] notSources = {} watchers = {} -optionParser = null

Run coffee by parsing passed options and determining what action to take. +optionParser = null +coffee_exts = ['.coffee', '.litcoffee']

Run coffee by parsing passed options and determining what action to take. Many flags cause us to divert before compiling anything. Flags passed after -- will be passed verbatim to your script as arguments in process.argv

exports.run = ->
   parseOptions()
   return forkNode()                      if opts.nodejs
   return usage()                         if opts.help
   return version()                       if opts.version
-  loadRequires()                         if opts.require
-  return require './repl'                if opts.interactive
+  return require('./repl').start()       if opts.interactive
   if opts.watch and !fs.watch
     return printWarn "The --watch feature depends on Node v0.6.0+. You are running #{process.version}."
   return compileStdio()                  if opts.stdio
   return compileScript null, sources[0]  if opts.eval
-  return require './repl'                unless sources.length
+  return require('./repl').start()       unless sources.length
   literals = if opts.run then sources.splice 1 else []
   process.argv = process.argv[0..1].concat literals
   process.argv[0] = 'coffee'
-  process.execPath = require.main.filename
   for source in sources
     compilePath source, yes, path.normalize source

Compile a path, which could be a script or a directory. If a directory -is passed, recursively compile all '.coffee' extension source files in it -and all subdirectories.

compilePath = (source, topLevel, base) ->
+is passed, recursively compile all '.coffee' and '.litcoffee' extension source
+files in it and all subdirectories.

compilePath = (source, topLevel, base) ->
   fs.stat source, (err, stats) ->
     throw err if err and err.code isnt 'ENOENT'
     if err?.code is 'ENOENT'
-      if topLevel and source[-7..] isnt '.coffee'
+      if topLevel and source and path.extname(source) not in coffee_exts
         source = sources[sources.indexOf(source)] = "#{source}.coffee"
         return compilePath source, topLevel, base
       if topLevel
         console.error "File not found: #{source}"
         process.exit 1
       return
-    if stats.isDirectory()
+    if stats.isDirectory() and path.dirname(source) isnt 'node_modules'
       watchDir source, base if opts.watch
       fs.readdir source, (err, files) ->
         throw err if err and err.code isnt 'ENOENT'
@@ -84,7 +82,7 @@ and all subdirectories.

sourceCode[index..index] = files.map -> null files.forEach (file) -> compilePath (path.join source, file), no, base - else if topLevel or path.extname(source) is '.coffee' + else if topLevel or path.extname(source) in coffee_exts watch source, base if opts.watch fs.readFile source, (err, code) -> throw err if err and err.code isnt 'ENOENT' @@ -100,8 +98,8 @@ requested options. If evaluating the script directly sets __filenametry t = task = {file, input, options} CoffeeScript.emit 'compile', task - if o.tokens then printTokens CoffeeScript.tokens t.input - else if o.nodes then printLine CoffeeScript.nodes(t.input).toString().trim() + if o.tokens then printTokens CoffeeScript.tokens t.input, t.options + else if o.nodes then printLine CoffeeScript.nodes(t.input, t.options).toString().trim() else if o.run then CoffeeScript.run t.input, t.options else if o.join and t.file isnt o.join sourceCode[sources.indexOf(t.file)] = t.input @@ -131,11 +129,7 @@ them together.

unless sourceCode.some((code) -> code is null) clearTimeout joinTimeout joinTimeout = wait 100, -> - compileScript opts.join, sourceCode.join('\n'), opts.join

Load files that are to-be-required before compilation occurs.

loadRequires = ->
-  realFilename = module.filename
-  module.filename = '.'
-  require req for req in opts.require
-  module.filename = realFilename

Watch a source CoffeeScript file using fs.watch, recompiling it every + compileScript opts.join, sourceCode.join('\n'), opts.join

Watch a source CoffeeScript file using fs.watch, recompiling it every time the file is updated. May be used in combination with other options, such as --lint or --print.

watch = (source, base) ->
 
@@ -173,7 +167,7 @@ such as --lint or --print.

Watch a directory of files for new additions.

watchDir = (source, base) ->
+    watcher = fs.watch source, compile

Watch a directory of files for new additions.

watchDir = (source, base) ->
   readdirTimeout = null
   try
     watcher = fs.watch source, ->
@@ -198,7 +192,7 @@ such as --lint or --print.

Remove a file from our source list, and source code cache. Optionally remove + compileJoin()

Remove a file from our source list, and source code cache. Optionally remove the compiled JS version as well.

removeSource = (source, base, removeJs) ->
   index = sources.indexOf source
   sources.splice index, 1
@@ -209,12 +203,12 @@ the compiled JS version as well.

if itExists fs.unlink jsPath, (err) -> throw err if err and err.code isnt 'ENOENT' - timeLog "removed #{source}"

Get the corresponding output JavaScript path for a source file.

outputPath = (source, base) ->
+          timeLog "removed #{source}"

Get the corresponding output JavaScript path for a source file.

outputPath = (source, base) ->
   filename  = path.basename(source, path.extname(source)) + '.js'
   srcDir    = path.dirname source
   baseDir   = if base is '.' then srcDir else srcDir.substring base.length
   dir       = if opts.output then path.join opts.output, baseDir else srcDir
-  path.join dir, filename

Write out a JavaScript source file with the compiled code. By default, files + path.join dir, filename

Write out a JavaScript source file with the compiled code. By default, files are written out in cwd as .js files with the same name, but the output directory can be customized with --output.

writeJs = (source, js, base) ->
   jsPath = outputPath source, base
@@ -227,8 +221,8 @@ directory can be customized with --output.

Convenience for cleaner setTimeouts.

wait = (milliseconds, func) -> setTimeout func, milliseconds

When watching scripts, it's useful to log changes with the timestamp.

timeLog = (message) ->
-  console.log "#{(new Date).toLocaleTimeString()} - #{message}"

Pipe compiled JS through JSLint (requires a working jsl command), printing + if itExists then compile() else exec "mkdir -p #{jsDir}", compile

Convenience for cleaner setTimeouts.

wait = (milliseconds, func) -> setTimeout func, milliseconds

When watching scripts, it's useful to log changes with the timestamp.

timeLog = (message) ->
+  console.log "#{(new Date).toLocaleTimeString()} - #{message}"

Pipe compiled JS through JSLint (requires a working jsl command), printing any errors or warnings that arise.

lint = (file, js) ->
   printIt = (buffer) -> printLine file + ':\t' + buffer.toString().trim()
   conf = __dirname + '/../../extras/jsl.conf'
@@ -236,11 +230,13 @@ any errors or warnings that arise.

jsl.stdout.on 'data', printIt jsl.stderr.on 'data', printIt jsl.stdin.write js - jsl.stdin.end()

Pretty-print a stream of tokens.

printTokens = (tokens) ->
+  jsl.stdin.end()

Pretty-print a stream of tokens.

printTokens = (tokens) ->
   strings = for token in tokens
-    [tag, value] = [token[0], token[1].toString().replace(/\n/, '\\n')]
-    "[#{tag} #{value}]"
-  printLine strings.join(' ')

Use the OptionParser module to extract all options from + tag = token[0] + value = token[1].toString().replace(/\n/, '\\n') + locationData = helpers.locationDataToString token[2] + "[#{tag} #{value} #{locationData}]" + printLine strings.join(' ')

Use the OptionParser module to extract all options from process.argv that are specified in SWITCHES.

parseOptions = ->
   optionParser  = new optparse.OptionParser SWITCHES, BANNER
   o = opts      = optionParser.parse process.argv[2..]
@@ -249,8 +245,9 @@ any errors or warnings that arise.

o.print = !! (o.print or (o.eval or o.stdio and o.compile)) sources = o.arguments sourceCode[i] = null for source, i in sources - return

The compile-time options to pass to the CoffeeScript compiler.

compileOptions = (filename) ->
-  {filename, bare: opts.bare, header: opts.compile}

Start up a new Node.js instance with the arguments in --nodejs passed to + return

The compile-time options to pass to the CoffeeScript compiler.

compileOptions = (filename) ->
+  literate = path.extname(filename) is '.litcoffee'
+  {filename, literate, bare: opts.bare, header: opts.compile}

Start up a new Node.js instance with the arguments in --nodejs passed to the node binary, preserving the other options.

forkNode = ->
   nodeArgs = opts.nodejs.split /\s+/
   args     = process.argv[1..]
@@ -258,9 +255,9 @@ the node binary, preserving the other options.

Print the --help usage message and exit. Deprecated switches are not + customFds: [0, 1, 2]

Print the --help usage message and exit. Deprecated switches are not shown.

usage = ->
-  printLine (new optparse.OptionParser SWITCHES, BANNER).help()

Print the --version message and exit.

version = ->
+  printLine (new optparse.OptionParser SWITCHES, BANNER).help()

Print the --version message and exit.

version = ->
   printLine "CoffeeScript version #{CoffeeScript.VERSION}"
 
 
\ No newline at end of file diff --git a/documentation/docs/grammar.html b/documentation/docs/grammar.html index dcefc65b..47fb56d1 100644 --- a/documentation/docs/grammar.html +++ b/documentation/docs/grammar.html @@ -1,4 +1,4 @@ - grammar.coffee

grammar.coffee

The CoffeeScript parser is generated by Jison + grammar.coffee

grammar.coffee

The CoffeeScript parser is generated by Jison from this grammar file. Jison is a bottom-up parser generator, similar in style to Bison, implemented in JavaScript. It can recognize LALR(1), LR(0), SLR(1), and LR(1) @@ -20,11 +20,22 @@ we pass the pattern-defining string, the action to run, and extra options, optionally. If no action is specified, we simply pass the value of the previous nonterminal.

o = (patternString, action, options) ->
   patternString = patternString.replace /\s{2,}/g, ' '
+  patternCount = patternString.split(' ').length
   return [patternString, '$$ = $1;', options] unless action
-  action = if match = unwrap.exec action then match[1] else "(#{action}())"
-  action = action.replace /\bnew /g, '$&yy.'
+  action = if match = unwrap.exec action then match[1] else "(#{action}())"

All runtime functions we need are defined on "yy"

  action = action.replace /\bnew /g, '$&yy.'
   action = action.replace /\b(?:Block\.wrap|extend)\b/g, 'yy.$&'
-  [patternString, "$$ = #{action};", options]

Grammatical Rules

In all of the rules that follow, you'll see the name of the nonterminal as + action = action.replace /\b(Op|Value\.(create|wrap))\b/g, 'yy.$&'

Returns a function which adds location data to the first parameter passed +in, and returns the parameter. If the parameter is not a node, it will +just be passed through unaffected.

  addLocationDataFn = (first, last) ->
+    if not last
+      "yy.addLocationDataFn(@#{first})"
+    else
+      "yy.addLocationDataFn(@#{first}, @#{last})"
+
+  action = action.replace /LOC\(([0-9]*)\)/g, addLocationDataFn('$1')
+  action = action.replace /LOC\(([0-9]*),\s*([0-9]*)\)/g, addLocationDataFn('$1', '$2')
+
+  [patternString, "$$ = #{addLocationDataFn(1, patternCount)}(#{action});", options]

Grammatical Rules

In all of the rules that follow, you'll see the name of the nonterminal as the key to a list of alternative matches. With each match's action, the dollar-sign variables are provided by Jison as references to the value of their numeric position, so in this rule:

@@ -34,23 +45,23 @@ their numeric position, so in this rule:

$1 would be the value of the first Expression, $2 would be the token for the UNLESS terminal, and $3 would be the value of the second -Expression.

grammar =

The Root is the top-level node in the syntax tree. Since we parse bottom-up, +Expression.

grammar =

The Root is the top-level node in the syntax tree. Since we parse bottom-up, all parsing must end here.

  Root: [
     o '',                                       -> new Block
     o 'Body'
     o 'Block TERMINATOR'
-  ]

Any list of statements and expressions, separated by line breaks or semicolons.

  Body: [
+  ]

Any list of statements and expressions, separated by line breaks or semicolons.

  Body: [
     o 'Line',                                   -> Block.wrap [$1]
     o 'Body TERMINATOR Line',                   -> $1.push $3
     o 'Body TERMINATOR'
-  ]

Block and statements, which make up a line in a body.

  Line: [
+  ]

Block and statements, which make up a line in a body.

  Line: [
     o 'Expression'
     o 'Statement'
-  ]

Pure statements which cannot be expressions.

  Statement: [
+  ]

Pure statements which cannot be expressions.

  Statement: [
     o 'Return'
     o 'Comment'
     o 'STATEMENT',                              -> new Literal $1
-  ]

All the different types of expressions in our language. The basic unit of + ]

All the different types of expressions in our language. The basic unit of CoffeeScript is the Expression -- everything that can be an expression is one. Blocks serve as the building blocks of many other rules, making them somewhat circular.

  Expression: [
@@ -66,18 +77,18 @@ them somewhat circular.

o 'Switch' o 'Class' o 'Throw' - ]

An indented block of expressions. Note that the Rewriter + ]

An indented block of expressions. Note that the Rewriter will convert some postfix forms into blocks for us, by adjusting the token stream.

  Block: [
     o 'INDENT OUTDENT',                         -> new Block
     o 'INDENT Body OUTDENT',                    -> $2
-  ]

A literal identifier, a variable name or property.

  Identifier: [
+  ]

A literal identifier, a variable name or property.

  Identifier: [
     o 'IDENTIFIER',                             -> new Literal $1
-  ]

Alphanumerics are separated from the other Literal matchers because + ]

Alphanumerics are separated from the other Literal matchers because they can also serve as keys in object literals.

  AlphaNumeric: [
     o 'NUMBER',                                 -> new Literal $1
     o 'STRING',                                 -> new Literal $1
-  ]

All of our immediate values. Generally these can be passed straight + ]

All of our immediate values. Generally these can be passed straight through and printed to JavaScript.

  Literal: [
     o 'AlphaNumeric'
     o 'JS',                                     -> new Literal $1
@@ -86,16 +97,16 @@ through and printed to JavaScript.

o 'UNDEFINED', -> new Undefined o 'NULL', -> new Null o 'BOOL', -> new Bool $1 - ]

Assignment of a variable, property, or index to a value.

  Assign: [
+  ]

Assignment of a variable, property, or index to a value.

  Assign: [
     o 'Assignable = Expression',                -> new Assign $1, $3
     o 'Assignable = TERMINATOR Expression',     -> new Assign $1, $4
     o 'Assignable = INDENT Expression OUTDENT', -> new Assign $1, $4
-  ]

Assignment when it happens within an object literal. The difference from + ]

Assignment when it happens within an object literal. The difference from the ordinary Assign is that these allow numbers and strings as keys.

  AssignObj: [
-    o 'ObjAssignable',                          -> new Value $1
-    o 'ObjAssignable : Expression',             -> new Assign new Value($1), $3, 'object'
+    o 'ObjAssignable',                          -> Value.wrap $1
+    o 'ObjAssignable : Expression',             -> new Assign LOC(1)(Value.wrap($1)), $3, 'object'
     o 'ObjAssignable :
-       INDENT Expression OUTDENT',              -> new Assign new Value($1), $4, 'object'
+       INDENT Expression OUTDENT',              -> new Assign LOC(1)(Value.wrap($1)), $4, 'object'
     o 'Comment'
   ]
 
@@ -103,65 +114,65 @@ the ordinary Assign is that these allow numbers and strings as
     o 'Identifier'
     o 'AlphaNumeric'
     o 'ThisProperty'
-  ]

A return statement from a function body.

  Return: [
+  ]

A return statement from a function body.

  Return: [
     o 'RETURN Expression',                      -> new Return $2
     o 'RETURN',                                 -> new Return
-  ]

A block comment.

  Comment: [
+  ]

A block comment.

  Comment: [
     o 'HERECOMMENT',                            -> new Comment $1
-  ]

The Code node is the function literal. It's defined by an indented block + ]

The Code node is the function literal. It's defined by an indented block of Block preceded by a function arrow, with an optional parameter list.

  Code: [
     o 'PARAM_START ParamList PARAM_END FuncGlyph Block', -> new Code $2, $5, $4
     o 'FuncGlyph Block',                        -> new Code [], $2, $1
-  ]

CoffeeScript has two different symbols for functions. -> is for ordinary + ]

CoffeeScript has two different symbols for functions. -> is for ordinary functions, and => is for functions bound to the current value of this.

  FuncGlyph: [
     o '->',                                     -> 'func'
     o '=>',                                     -> 'boundfunc'
-  ]

An optional, trailing comma.

  OptComma: [
+  ]

An optional, trailing comma.

  OptComma: [
     o ''
     o ','
-  ]

The list of parameters that a function accepts can be of any length.

  ParamList: [
+  ]

The list of parameters that a function accepts can be of any length.

  ParamList: [
     o '',                                       -> []
     o 'Param',                                  -> [$1]
     o 'ParamList , Param',                      -> $1.concat $3
     o 'ParamList OptComma TERMINATOR Param',    -> $1.concat $4
     o 'ParamList OptComma INDENT ParamList OptComma OUTDENT', -> $1.concat $4
-  ]

A single parameter in a function definition can be ordinary, or a splat + ]

A single parameter in a function definition can be ordinary, or a splat that hoovers up the remaining arguments.

  Param: [
     o 'ParamVar',                               -> new Param $1
     o 'ParamVar ...',                           -> new Param $1, null, on
     o 'ParamVar = Expression',                  -> new Param $1, $3
-  ]

Function Parameters

  ParamVar: [
+  ]

Function Parameters

  ParamVar: [
     o 'Identifier'
     o 'ThisProperty'
     o 'Array'
     o 'Object'
-  ]

A splat that occurs outside of a parameter list.

  Splat: [
+  ]

A splat that occurs outside of a parameter list.

  Splat: [
     o 'Expression ...',                         -> new Splat $1
-  ]

Variables and properties that can be assigned to.

  SimpleAssignable: [
-    o 'Identifier',                             -> new Value $1
+  ]

Variables and properties that can be assigned to.

  SimpleAssignable: [
+    o 'Identifier',                             -> Value.wrap $1
     o 'Value Accessor',                         -> $1.add $2
-    o 'Invocation Accessor',                    -> new Value $1, [].concat $2
+    o 'Invocation Accessor',                    -> Value.wrap $1, [].concat $2
     o 'ThisProperty'
-  ]

Everything that can be assigned to.

  Assignable: [
+  ]

Everything that can be assigned to.

  Assignable: [
     o 'SimpleAssignable'
-    o 'Array',                                  -> new Value $1
-    o 'Object',                                 -> new Value $1
-  ]

The types of things that can be treated as values -- assigned to, invoked + o 'Array', -> Value.wrap $1 + o 'Object', -> Value.wrap $1 + ]

The types of things that can be treated as values -- assigned to, invoked as functions, indexed into, named as a class, etc.

  Value: [
     o 'Assignable'
-    o 'Literal',                                -> new Value $1
-    o 'Parenthetical',                          -> new Value $1
-    o 'Range',                                  -> new Value $1
+    o 'Literal',                                -> Value.wrap $1
+    o 'Parenthetical',                          -> Value.wrap $1
+    o 'Range',                                  -> Value.wrap $1
     o 'This'
-  ]

The general group of accessors into an object, by property, by prototype + ]

The general group of accessors into an object, by property, by prototype or by array index or slice.

  Accessor: [
     o '.  Identifier',                          -> new Access $2
     o '?. Identifier',                          -> new Access $2, 'soak'
-    o ':: Identifier',                          -> [(new Access new Literal 'prototype'), new Access $2]
+    o ':: Identifier',                          -> [LOC(1)(new Access new Literal 'prototype'), LOC(2)(new Access $2)]
     o '::',                                     -> new Access new Literal 'prototype'
     o 'Index'
-  ]

Indexing into an object or array using bracket notation.

  Index: [
+  ]

Indexing into an object or array using bracket notation.

  Index: [
     o 'INDEX_START IndexValue INDEX_END',       -> $2
     o 'INDEX_SOAK  Index',                      -> extend $2, soak : yes
   ]
@@ -169,16 +180,16 @@ or by array index or slice.

IndexValue: [ o 'Expression', -> new Index $1 o 'Slice', -> new Slice $1 - ]

In CoffeeScript, an object literal is simply a list of assignments.

  Object: [
+  ]

In CoffeeScript, an object literal is simply a list of assignments.

  Object: [
     o '{ AssignList OptComma }',                -> new Obj $2, $1.generated
-  ]

Assignment of properties within an object literal can be separated by + ]

Assignment of properties within an object literal can be separated by comma, as in JavaScript, or simply by newline.

  AssignList: [
     o '',                                                       -> []
     o 'AssignObj',                                              -> [$1]
     o 'AssignList , AssignObj',                                 -> $1.concat $3
     o 'AssignList OptComma TERMINATOR AssignObj',               -> $1.concat $4
     o 'AssignList OptComma INDENT AssignList OptComma OUTDENT', -> $1.concat $4
-  ]

Class definitions have optional bodies of prototype property assignments, + ]

Class definitions have optional bodies of prototype property assignments, and optional references to the superclass.

  Class: [
     o 'CLASS',                                           -> new Class
     o 'CLASS Block',                                     -> new Class null, null, $2
@@ -188,36 +199,36 @@ and optional references to the superclass.

o 'CLASS SimpleAssignable Block', -> new Class $2, null, $3 o 'CLASS SimpleAssignable EXTENDS Expression', -> new Class $2, $4 o 'CLASS SimpleAssignable EXTENDS Expression Block', -> new Class $2, $4, $5 - ]

Ordinary function invocation, or a chained series of calls.

  Invocation: [
+  ]

Ordinary function invocation, or a chained series of calls.

  Invocation: [
     o 'Value OptFuncExist Arguments',           -> new Call $1, $3, $2
     o 'Invocation OptFuncExist Arguments',      -> new Call $1, $3, $2
     o 'SUPER',                                  -> new Call 'super', [new Splat new Literal 'arguments']
     o 'SUPER Arguments',                        -> new Call 'super', $2
-  ]

An optional existence check on a function.

  OptFuncExist: [
+  ]

An optional existence check on a function.

  OptFuncExist: [
     o '',                                       -> no
     o 'FUNC_EXIST',                             -> yes
-  ]

The list of arguments to a function call.

  Arguments: [
+  ]

The list of arguments to a function call.

  Arguments: [
     o 'CALL_START CALL_END',                    -> []
     o 'CALL_START ArgList OptComma CALL_END',   -> $2
-  ]

A reference to the this current object.

  This: [
-    o 'THIS',                                   -> new Value new Literal 'this'
-    o '@',                                      -> new Value new Literal 'this'
-  ]

A reference to a property on this.

  ThisProperty: [
-    o '@ Identifier',                           -> new Value new Literal('this'), [new Access($2)], 'this'
-  ]

The array literal.

  Array: [
+  ]

A reference to the this current object.

  This: [
+    o 'THIS',                                   -> Value.wrap new Literal 'this'
+    o '@',                                      -> Value.wrap new Literal 'this'
+  ]

A reference to a property on this.

  ThisProperty: [
+    o '@ Identifier',                           -> Value.wrap LOC(1)(new Literal('this')), [LOC(2)(new Access($2))], 'this'
+  ]

The array literal.

  Array: [
     o '[ ]',                                    -> new Arr []
     o '[ ArgList OptComma ]',                   -> new Arr $2
-  ]

Inclusive and exclusive range dots.

  RangeDots: [
+  ]

Inclusive and exclusive range dots.

  RangeDots: [
     o '..',                                     -> 'inclusive'
     o '...',                                    -> 'exclusive'
-  ]

The CoffeeScript range literal.

  Range: [
+  ]

The CoffeeScript range literal.

  Range: [
     o '[ Expression RangeDots Expression ]',    -> new Range $2, $4, $3
-  ]

Array slice literals.

  Slice: [
+  ]

Array slice literals.

  Slice: [
     o 'Expression RangeDots Expression',        -> new Range $1, $3, $2
     o 'Expression RangeDots',                   -> new Range $1, null, $2
     o 'RangeDots Expression',                   -> new Range null, $2, $1
     o 'RangeDots',                              -> new Range null, null, $1
-  ]

The ArgList is both the list of objects passed into a function call, + ]

The ArgList is both the list of objects passed into a function call, as well as the contents of an array literal (i.e. comma-separated expressions). Newlines work as well.

  ArgList: [
     o 'Arg',                                              -> [$1]
@@ -225,46 +236,47 @@ as well as the contents of an array literal
     o 'ArgList OptComma TERMINATOR Arg',                  -> $1.concat $4
     o 'INDENT ArgList OptComma OUTDENT',                  -> $2
     o 'ArgList OptComma INDENT ArgList OptComma OUTDENT', -> $1.concat $4
-  ]

Valid arguments are Blocks or Splats.

  Arg: [
+  ]

Valid arguments are Blocks or Splats.

  Arg: [
     o 'Expression'
     o 'Splat'
-  ]

Just simple, comma-separated, required arguments (no fancy syntax). We need + ]

Just simple, comma-separated, required arguments (no fancy syntax). We need this to be separate from the ArgList for use in Switch blocks, where having the newlines wouldn't make sense.

  SimpleArgs: [
     o 'Expression'
     o 'SimpleArgs , Expression',                -> [].concat $1, $3
-  ]

The variants of try/catch/finally exception handling blocks.

  Try: [
+  ]

The variants of try/catch/finally exception handling blocks.

  Try: [
     o 'TRY Block',                              -> new Try $2
     o 'TRY Block Catch',                        -> new Try $2, $3[0], $3[1]
     o 'TRY Block FINALLY Block',                -> new Try $2, null, null, $4
     o 'TRY Block Catch FINALLY Block',          -> new Try $2, $3[0], $3[1], $5
-  ]

A catch clause names its error and runs a block of code.

  Catch: [
+  ]

A catch clause names its error and runs a block of code.

  Catch: [
     o 'CATCH Identifier Block',                 -> [$2, $3]
-  ]

Throw an exception object.

  Throw: [
+    o 'CATCH Object Block',                     -> [LOC(2)(Value.wrap($2)), $3]
+  ]

Throw an exception object.

  Throw: [
     o 'THROW Expression',                       -> new Throw $2
-  ]

Parenthetical expressions. Note that the Parenthetical is a Value, + ]

Parenthetical expressions. Note that the Parenthetical is a Value, not an Expression, so if you need to use an expression in a place where only values are accepted, wrapping it in parentheses will always do the trick.

  Parenthetical: [
     o '( Body )',                               -> new Parens $2
     o '( INDENT Body OUTDENT )',                -> new Parens $3
-  ]

The condition portion of a while loop.

  WhileSource: [
+  ]

The condition portion of a while loop.

  WhileSource: [
     o 'WHILE Expression',                       -> new While $2
     o 'WHILE Expression WHEN Expression',       -> new While $2, guard: $4
     o 'UNTIL Expression',                       -> new While $2, invert: true
     o 'UNTIL Expression WHEN Expression',       -> new While $2, invert: true, guard: $4
-  ]

The while loop can either be normal, with a block of expressions to execute, + ]

The while loop can either be normal, with a block of expressions to execute, or postfix, with a single expression. There is no do..while.

  While: [
     o 'WhileSource Block',                      -> $1.addBody $2
-    o 'Statement  WhileSource',                 -> $2.addBody Block.wrap [$1]
-    o 'Expression WhileSource',                 -> $2.addBody Block.wrap [$1]
+    o 'Statement  WhileSource',                 -> $2.addBody LOC(1) Block.wrap([$1])
+    o 'Expression WhileSource',                 -> $2.addBody LOC(1) Block.wrap([$1])
     o 'Loop',                                   -> $1
   ]
 
   Loop: [
-    o 'LOOP Block',                             -> new While(new Literal 'true').addBody $2
-    o 'LOOP Expression',                        -> new While(new Literal 'true').addBody Block.wrap [$2]
-  ]

Array, object, and range comprehensions, at the most generic level. + o 'LOOP Block', -> new While(LOC(1) new Literal 'true').addBody $2 + o 'LOOP Expression', -> new While(LOC(1) new Literal 'true').addBody LOC(2) Block.wrap [$2] + ]

Array, object, and range comprehensions, at the most generic level. Comprehensions can either be normal, with a block of expressions to execute, or postfix, with a single expression.

  For: [
     o 'Statement  ForBody',                     -> new For $1, $2
@@ -273,25 +285,25 @@ or postfix, with a single expression.

] ForBody: [ - o 'FOR Range', -> source: new Value($2) + o 'FOR Range', -> source: LOC(2) Value.wrap($2) o 'ForStart ForSource', -> $2.own = $1.own; $2.name = $1[0]; $2.index = $1[1]; $2 ] ForStart: [ o 'FOR ForVariables', -> $2 o 'FOR OWN ForVariables', -> $3.own = yes; $3 - ]

An array of all accepted values for a variable inside the loop. + ]

An array of all accepted values for a variable inside the loop. This enables support for pattern matching.

  ForValue: [
     o 'Identifier'
     o 'ThisProperty'
-    o 'Array',                                  -> new Value $1
-    o 'Object',                                 -> new Value $1
-  ]

An array or range comprehension has variables for the current element + o 'Array', -> Value.wrap $1 + o 'Object', -> Value.wrap $1 + ]

An array or range comprehension has variables for the current element and (optional) reference to the current index. Or, key, value, in the case of object comprehensions.

  ForVariables: [
     o 'ForValue',                               -> [$1]
     o 'ForValue , ForValue',                    -> [$1, $3]
-  ]

The source of a comprehension is an array or object with an optional guard + ]

The source of a comprehension is an array or object with an optional guard clause. If it's an array comprehension, you can also choose to step through in fixed-size increments.

  ForSource: [
     o 'FORIN Expression',                               -> source: $2
@@ -313,54 +325,56 @@ in fixed-size increments.

Whens: [ o 'When' o 'Whens When', -> $1.concat $2 - ]

An individual When clause, with action.

  When: [
+  ]

An individual When clause, with action.

  When: [
     o 'LEADING_WHEN SimpleArgs Block',            -> [[$2, $3]]
     o 'LEADING_WHEN SimpleArgs Block TERMINATOR', -> [[$2, $3]]
-  ]

The most basic form of if is a condition and an action. The following + ]

The most basic form of if is a condition and an action. The following if-related rules are broken up along these lines in order to avoid ambiguity.

  IfBlock: [
     o 'IF Expression Block',                    -> new If $2, $3, type: $1
     o 'IfBlock ELSE IF Expression Block',       -> $1.addElse new If $4, $5, type: $3
-  ]

The full complement of if expressions, including postfix one-liner + ]

The full complement of if expressions, including postfix one-liner if and unless.

  If: [
     o 'IfBlock'
     o 'IfBlock ELSE Block',                     -> $1.addElse $3
-    o 'Statement  POST_IF Expression',          -> new If $3, Block.wrap([$1]), type: $2, statement: true
-    o 'Expression POST_IF Expression',          -> new If $3, Block.wrap([$1]), type: $2, statement: true
-  ]

Arithmetic and logical operators, working on one or more operands. + o 'Statement POST_IF Expression', -> new If $3, LOC(1)(Block.wrap [$1]), type: $2, statement: true + o 'Expression POST_IF Expression', -> new If $3, LOC(1)(Block.wrap [$1]), type: $2, statement: true + ]

Arithmetic and logical operators, working on one or more operands. Here they are grouped by order of precedence. The actual precedence rules are defined at the bottom of the page. It would be shorter if we could combine most of these rules into a single generic Operand OpSymbol Operand -type rule, but in order to make the precedence binding possible, separate rules are necessary.

  Operation: [
-    o 'UNARY Expression',                       -> new Op $1 , $2
-    o '-     Expression',                      (-> new Op '-', $2), prec: 'UNARY'
-    o '+     Expression',                      (-> new Op '+', $2), prec: 'UNARY'
+    o 'UNARY Expression',                       -> Op.create $1 , $2
+    o '-     Expression',                      (-> Op.create '-', $2), prec: 'UNARY'
+    o '+     Expression',                      (-> Op.create '+', $2), prec: 'UNARY'
 
-    o '-- SimpleAssignable',                    -> new Op '--', $2
-    o '++ SimpleAssignable',                    -> new Op '++', $2
-    o 'SimpleAssignable --',                    -> new Op '--', $1, null, true
-    o 'SimpleAssignable ++',                    -> new Op '++', $1, null, true

The existential operator.

    o 'Expression ?',                           -> new Existence $1
+    o '-- SimpleAssignable',                    -> Op.create '--', $2
+    o '++ SimpleAssignable',                    -> Op.create '++', $2
+    o 'SimpleAssignable --',                    -> Op.create '--', $1, null, true
+    o 'SimpleAssignable ++',                    -> Op.create '++', $1, null, true

The existential operator.

    o 'Expression ?',                           -> new Existence $1
 
-    o 'Expression +  Expression',               -> new Op '+' , $1, $3
-    o 'Expression -  Expression',               -> new Op '-' , $1, $3
+    o 'Expression +  Expression',               -> Op.create '+' , $1, $3
+    o 'Expression -  Expression',               -> Op.create '-' , $1, $3
 
-    o 'Expression MATH     Expression',         -> new Op $2, $1, $3
-    o 'Expression SHIFT    Expression',         -> new Op $2, $1, $3
-    o 'Expression COMPARE  Expression',         -> new Op $2, $1, $3
-    o 'Expression LOGIC    Expression',         -> new Op $2, $1, $3
+    o 'Expression MATH     Expression',         -> Op.create $2, $1, $3
+    o 'Expression SHIFT    Expression',         -> Op.create $2, $1, $3
+    o 'Expression COMPARE  Expression',         -> Op.create $2, $1, $3
+    o 'Expression LOGIC    Expression',         -> Op.create $2, $1, $3
     o 'Expression RELATION Expression',         ->
       if $2.charAt(0) is '!'
-        new Op($2[1..], $1, $3).invert()
+        Op.create($2[1..], $1, $3).invert()
       else
-        new Op $2, $1, $3
+        Op.create $2, $1, $3
 
     o 'SimpleAssignable COMPOUND_ASSIGN
        Expression',                             -> new Assign $1, $3, $2
     o 'SimpleAssignable COMPOUND_ASSIGN
        INDENT Expression OUTDENT',              -> new Assign $1, $4, $2
+    o 'SimpleAssignable COMPOUND_ASSIGN TERMINATOR
+       Expression',                             -> new Assign $1, $4, $2
     o 'SimpleAssignable EXTENDS Expression',    -> new Extends $1, $3
-  ]

Precedence

Operators at the top of this list have higher precedence than the ones lower + ]

Precedence

Operators at the top of this list have higher precedence than the ones lower down. Following these rules is what makes 2 + 3 * 4 parse as:

2 + (3 * 4)
@@ -386,7 +400,7 @@ down. Following these rules is what makes 2 + 3 * 4 parse as:

['right', 'FORIN', 'FOROF', 'BY', 'WHEN'] ['right', 'IF', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS'] ['right', 'POST_IF'] -]

Wrapping Up

Finally, now that we have our grammar and our operators, we can create +]

Wrapping Up

Finally, now that we have our grammar and our operators, we can create our Jison.Parser. We do this by processing all of our rules, recording all terminals (every symbol which does not appear as the name of a rule above) as "tokens".

tokens = []
@@ -395,7 +409,7 @@ as "tokens".

< for token in alt[0].split ' ' tokens.push token unless grammar[token] alt[1] = "return #{alt[1]}" if name is 'Root' - alt

Initialize the Parser with our list of terminal tokens, our grammar + alt

Initialize the Parser with our list of terminal tokens, our grammar rules, and the name of the root. Reverse the operators because Jison orders precedence from low to high, and we have it high to low (as in Yacc).

exports.parser = new Parser
diff --git a/documentation/docs/helpers.html b/documentation/docs/helpers.html
index f2232e0e..b3ac7d03 100644
--- a/documentation/docs/helpers.html
+++ b/documentation/docs/helpers.html
@@ -1,4 +1,4 @@
-      helpers.coffee           

helpers.coffee

This file contains the common helper functions that we'd like to share among + helpers.coffee

deleteobj[key]val

helpers.coffee

This file contains the common helper functions that we'd like to share among the Lexer, Rewriter, and the Nodes. Merge objects, flatten arrays, count characters, that sort of thing.

Peek at the beginning of a given string to see if it matches a sequence.

exports.starts = (string, literal, start) ->
   literal is string.substr start, literal.length

Peek at the end of a given string to see if it matches a sequence.

exports.ends = (string, literal, back) ->
@@ -28,6 +28,29 @@ looking for a particular method in an options hash.

Gets the last item of an array(-like) object.

exports.last = (array, back) -> array[array.length - (back or 0) - 1]

Typical Array::some

exports.some = Array::some ? (fn) ->
   return true for e in this when fn e
-  false
+  false

Merge two jison-style location data objects together. +If last is not provided, this will simply return first.

buildLocationData = (first, last) ->
+  if not last
+    first
+  else
+    first_line: first.first_line
+    first_column: first.first_column
+    last_line: last.last_line
+    last_column: last.last_column

This returns a function which takes an object as a parameter, and if that object is an AST node, +updates that object's locationData. The object is returned either way.

exports.addLocationDataFn = (first, last) ->
+    (obj) ->
+      if ((typeof obj) is 'object') and (!!obj['updateLocationDataIfMissing'])
+        obj.updateLocationDataIfMissing buildLocationData(first, last)
+
+      return obj

Convert jison location data to a string. +obj can be a token, or a locationData.

exports.locationDataToString = (obj) ->
+    if ("2" of obj) and ("first_line" of obj[2]) then locationData = obj[2]
+    else if "first_line" of obj then locationData = obj
+
+    if locationData
+      "#{locationData.first_line + 1}:#{locationData.first_column + 1}-" +
+      "#{locationData.last_line + 1}:#{locationData.last_column + 1}"
+    else
+      "No location data"
 
 
\ No newline at end of file diff --git a/documentation/docs/index.html b/documentation/docs/index.html index 3184d068..3d18f629 100644 --- a/documentation/docs/index.html +++ b/documentation/docs/index.html @@ -1,3 +1,3 @@ - index.coffee

index.coffee

Loader for CoffeeScript as a Node.js library.

exports[key] = val for key, val of require './coffee-script'
+      index.coffee              
\ No newline at end of file
diff --git a/documentation/docs/lexer.html b/documentation/docs/lexer.html
index fc5c7cfb..557e68b1 100644
--- a/documentation/docs/lexer.html
+++ b/documentation/docs/lexer.html
@@ -1,12 +1,14 @@
-      lexer.coffee           

lexer.coffee

The CoffeeScript Lexer. Uses a series of token-matching regexes to attempt + lexer.coffee

elsetag = 'RELATION'if@value()is'!' - @tokens.pop() + poppedToken = @tokens.pop()id = '!'+idifidinJS_FORBIDDEN @@ -102,9 +123,15 @@ though is means === otherwise.

when'break','continue'then'STATEMENT'elsetag - @tokentag,id - @token':',':'ifcolon - input.lengthnumber = '0x'+(parseIntoctalLiteral[1],8).toString16ifbinaryLiteral = /^0b([01]+)/.execnumbernumber = '0x'+(parseIntbinaryLiteral[1],2).toString16 - @token'NUMBER',number - lexedLength < elseifendis'"'andprevis'#'andletteris'{'stack.pushend = '}'prev = letter - @error"missing #{stack.pop()}, starting"'public','static','yield'] -STRICT_PROSCRIBED = ['arguments','eval']

lexer.coffee

The CoffeeScript Lexer. Uses a series of token-matching regexes to attempt matches against the beginning of the source code. When a match is found, a token is produced, we consume the match, and start again. Tokens are in the form:

-
[tag, value, lineNumber]
+
[tag, value, locationData]
 
-

Which is a format that can be fed directly into Jison.

{Rewriter, INVERSES} = require './rewriter'

Import the helpers we need.

{count, starts, compact, last} = require './helpers'

The Lexer Class

The Lexer class reads a stream of CoffeeScript and divvies it up into tagged +

where locationData is {firstline, firstcolumn, lastline, lastcolumn}, which is a +format that can be fed directly into Jison. These +are read by jison in the parser.lexer function defined in coffee-script.coffee.

{Rewriter, INVERSES} = require './rewriter'

Import the helpers we need.

{count, starts, compact, last, locationDataToString} = require './helpers'

The Lexer Class

The Lexer class reads a stream of CoffeeScript and divvies it up into tagged tokens. Some potential ambiguity in the grammar has been avoided by pushing some extra smarts into the Lexer.

exports.Lexer = class Lexer

tokenize is the Lexer's main method. Scan by attempting to match tokens one at a time, using a regular expression anchored at the start of the @@ -19,21 +21,24 @@ it has consumed.

Before returning the token stream, run it through the Rewriter unless explicitly asked not to.

  tokenize: (code, opts = {}) ->
-    code     = "\n#{code}" if WHITESPACE.test code
-    code     = code.replace(/\r/g, '').replace TRAILING_SPACES, ''
+    @literate = opts.literate  # Are we lexing literate CoffeeScript?
+    code      = @clean code    # The stripped, cleaned original source code.
+    @indent   = 0              # The current indentation level.
+    @indebt   = 0              # The over-indentation at the current level.
+    @outdebt  = 0              # The under-outdentation at the current level.
+    @indents  = []             # The stack of all current indentation levels.
+    @ends     = []             # The stack for pairing up tokens.
+    @tokens   = []             # Stream of parsed tokens in the form `['TYPE', value, line]`.
 
-    @code    = code           # The remainder of the source code.
-    @line    = opts.line or 0 # The current line.
-    @indent  = 0              # The current indentation level.
-    @indebt  = 0              # The over-indentation at the current level.
-    @outdebt = 0              # The under-outdentation at the current level.
-    @indents = []             # The stack of all current indentation levels.
-    @ends    = []             # The stack for pairing up tokens.
-    @tokens  = []             # Stream of parsed tokens in the form `['TYPE', value, line]`.

At every position, run through this list of attempted matches, + @chunkLine = + opts.line or 0 # The start line for the current @chunk. + @chunkColumn = + opts.column or 0 # The start column of the current @chunk.

At every position, run through this list of attempted matches, short-circuiting if any of them succeed. Their order determines precedence: @literalToken is the fallback catch-all.

    i = 0
     while @chunk = code[i..]
-      i += @identifierToken() or
+      consumed = \
+           @identifierToken() or
            @commentToken()    or
            @whitespaceToken() or
            @lineToken()       or
@@ -42,19 +47,35 @@ short-circuiting if any of them succeed. Their order determines precedence:
            @numberToken()     or
            @regexToken()      or
            @jsToken()         or
-           @literalToken()
+           @literalToken()

Update position

      [@chunkLine, @chunkColumn] = @getLineAndColumnFromChunk consumed
+
+      i += consumed
 
     @closeIndentation()
     @error "missing #{tag}" if tag = @ends.pop()
     return @tokens if opts.rewrite is off
-    (new Rewriter).rewrite @tokens

Tokenizers

Matches identifying literals: variables, keywords, method names, etc. + (new Rewriter).rewrite @tokens

Preprocess the code to remove leading and trailing whitespace, carriage +returns, etc. If we're lexing literate CoffeeScript, strip external Markdown +by removing all lines that aren't indented by at least four spaces or a tab.

  clean: (code) ->
+    code = code.slice(1) if code.charCodeAt(0) is BOM
+    code = "\n#{code}" if WHITESPACE.test code
+    code = code.replace(/\r/g, '').replace TRAILING_SPACES, ''
+    if @literate
+      lines = for line in code.split('\n')
+        if match = LITERATE.exec line
+          line[match[0].length..]
+        else
+          '# ' + line
+      code = lines.join '\n'
+    code

Tokenizers

Matches identifying literals: variables, keywords, method names, etc. Check to ensure that JavaScript reserved words aren't being used as identifiers. Because CoffeeScript reserves a handful of keywords that are allowed in JavaScript, we're careful not to tag them as keywords when referenced as property names here, so you can still do jQuery.is() even though is means === otherwise.

  identifierToken: ->
     return 0 unless match = IDENTIFIER.exec @chunk
-    [input, id, colon] = match
+    [input, id, colon] = match

Preserve length of id for location data

    idLength = id.length
+    poppedToken = undefined
 
     if id is 'own' and @tag() is 'FOR'
       @token 'OWN', id
@@ -81,7 +102,7 @@ though is means === otherwise.

Matches numbers, including decimals, hex, and exponential notation. + tagToken = @token tag, id, 0, idLength + if poppedToken + [tagToken[2].first_line, tagToken[2].first_column] = + [poppedToken[2].first_line, poppedToken[2].first_column] + if colon + colonOffset = input.lastIndexOf ':' + @token ':', ':', colonOffset, colon.length + + input.length

Matches numbers, including decimals, hex, and exponential notation. Be careful not to interfere with ranges-in-progress.

  numberToken: ->
     return 0 unless match = NUMBER.exec @chunk
     number = match[0]
@@ -121,53 +148,51 @@ Be careful not to interfere with ranges-in-progress.

Matches strings, including multi-line strings. Ensures that quotation marks + @token 'NUMBER', number, 0, lexedLength + lexedLength

Matches strings, including multi-line strings. Ensures that quotation marks are balanced within the string's contents, and within nested interpolations.

  stringToken: ->
     switch @chunk.charAt 0
       when "'"
         return 0 unless match = SIMPLESTR.exec @chunk
-        @token 'STRING', (string = match[0]).replace MULTILINER, '\\\n'
+        string = match[0]
+        @token 'STRING', string.replace(MULTILINER, '\\\n'), 0, string.length
       when '"'
         return 0 unless string = @balancedString @chunk, '"'
         if 0 < string.indexOf '#{', 1
-          @interpolateString string[1...-1]
+          @interpolateString string[1...-1], strOffset: 1, lexedLength: string.length
         else
-          @token 'STRING', @escapeLines string
+          @token 'STRING', @escapeLines string, 0, string.length
       else
         return 0
     if octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test string
       @error "octal escape sequences #{string} are not allowed"
-    @line += count string, '\n'
-    string.length

Matches heredocs, adjusting indentation to the correct level, as heredocs + string.length

Matches heredocs, adjusting indentation to the correct level, as heredocs preserve whitespace, but ignore indentation to the left.

  heredocToken: ->
     return 0 unless match = HEREDOC.exec @chunk
     heredoc = match[0]
     quote = heredoc.charAt 0
     doc = @sanitizeHeredoc match[2], quote: quote, indent: null
     if quote is '"' and 0 <= doc.indexOf '#{'
-      @interpolateString doc, heredoc: yes
+      @interpolateString doc, heredoc: yes, strOffset: 3, lexedLength: heredoc.length
     else
-      @token 'STRING', @makeString doc, quote, yes
-    @line += count heredoc, '\n'
-    heredoc.length

Matches and consumes comments.

  commentToken: ->
+      @token 'STRING', @makeString(doc, quote, yes), 0, heredoc.length
+    heredoc.length

Matches and consumes comments.

  commentToken: ->
     return 0 unless match = @chunk.match COMMENT
     [comment, here] = match
     if here
-      @token 'HERECOMMENT', @sanitizeHeredoc here,
-        herecomment: true, indent: Array(@indent + 1).join(' ')
-    @line += count comment, '\n'
-    comment.length

Matches JavaScript interpolated directly into the source via backticks.

  jsToken: ->
+      @token 'HERECOMMENT',
+        (@sanitizeHeredoc here,
+          herecomment: true, indent: Array(@indent + 1).join(' ')),
+        0, comment.length
+    comment.length

Matches JavaScript interpolated directly into the source via backticks.

  jsToken: ->
     return 0 unless @chunk.charAt(0) is '`' and match = JSTOKEN.exec @chunk
-    @token 'JS', (script = match[0])[1...-1]
-    @line += count script, '\n'
-    script.length

Matches regular expression literals. Lexing regular expressions is difficult + @token 'JS', (script = match[0])[1...-1], 0, script.length + script.length

Matches regular expression literals. Lexing regular expressions is difficult to distinguish from division, so we borrow some basic heuristics from JavaScript and Ruby.

  regexToken: ->
     return 0 if @chunk.charAt(0) isnt '/'
     if match = HEREGEX.exec @chunk
       length = @heregexToken match
-      @line += count match[0], '\n'
       return length
 
     prev = last @tokens
@@ -176,31 +201,45 @@ JavaScript and Ruby.

[match, regex, flags] = match if regex[..1] is '/*' then @error 'regular expressions cannot begin with `*`' if regex is '//' then regex = '/(?:)/' - @token 'REGEX', "#{regex}#{flags}" - match.length

Matches multiline extended regular expressions.

  heregexToken: (match) ->
+    @token 'REGEX', "#{regex}#{flags}", 0, match.length
+    match.length

Matches multiline extended regular expressions.

  heregexToken: (match) ->
     [heregex, body, flags] = match
     if 0 > body.indexOf '#{'
       re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/')
       if re.match /^\*/ then @error 'regular expressions cannot begin with `*`'
-      @token 'REGEX', "/#{ re or '(?:)' }/#{flags}"
+      @token 'REGEX', "/#{ re or '(?:)' }/#{flags}", 0, heregex.length
       return heregex.length
-    @token 'IDENTIFIER', 'RegExp'
-    @tokens.push ['CALL_START', '(']
+    @token 'IDENTIFIER', 'RegExp', 0, 0
+    @token 'CALL_START', '(', 0, 0
     tokens = []
-    for [tag, value] in @interpolateString(body, regex: yes)
+    for token in @interpolateString(body, regex: yes)
+      [tag, value] = token
       if tag is 'TOKENS'
         tokens.push value...
+      else if tag is 'NEOSTRING'
+        continue unless value = value.replace HEREGEX_OMIT, ''

Convert NEOSTRING into STRING

        value = value.replace /\\/g, '\\\\'
+        token[0] = 'STRING'
+        token[1] = @makeString(value, '"', yes)
+        tokens.push token
       else
-        continue unless value = value.replace HEREGEX_OMIT, ''
-        value = value.replace /\\/g, '\\\\'
-        tokens.push ['STRING', @makeString(value, '"', yes)]
-      tokens.push ['+', '+']
-    tokens.pop()
-    @tokens.push ['STRING', '""'], ['+', '+'] unless tokens[0]?[0] is 'STRING'
+        @error "Unexpected #{tag}"
+
+      prev = last @tokens
+      plusToken = ['+', '+']
+      plusToken[2] = prev[2] # Copy location data
+      tokens.push plusToken

Remove the extra "+"

    tokens.pop()
+
+    unless tokens[0]?[0] is 'STRING'
+      @token 'STRING', '""', 0, 0
+      @token '+', '+', 0, 0
     @tokens.push tokens...
-    @tokens.push [',', ','], ['STRING', '"' + flags + '"'] if flags
-    @token ')', ')'
-    heregex.length

Matches newlines, indents, and outdents, and determines which is which. + + if flags

Find the flags in the heregex

      flagsOffset = heregex.lastIndexOf flags
+      @token ',', ',', flagsOffset, 0
+      @token 'STRING', '"' + flags + '"', flagsOffset, flags.length
+
+    @token ')', ')', heregex.length-1, 0
+    heregex.length

Matches newlines, indents, and outdents, and determines which is which. If we can detect that the current line is continued onto the the next line, then the newline is suppressed:

@@ -213,29 +252,29 @@ then the newline is suppressed:

can close multiple indents, so we need to know how far in we happen to be.

  lineToken: ->
     return 0 unless match = MULTI_DENT.exec @chunk
     indent = match[0]
-    @line += count indent, '\n'
     @seenFor = no
     size = indent.length - 1 - indent.lastIndexOf '\n'
     noNewlines = @unfinished()
     if size - @indebt is @indent
-      if noNewlines then @suppressNewlines() else @newlineToken()
+      if noNewlines then @suppressNewlines() else @newlineToken 0
       return indent.length
+
     if size > @indent
       if noNewlines
         @indebt = size - @indent
         @suppressNewlines()
         return indent.length
       diff = size - @indent + @outdebt
-      @token 'INDENT', diff
+      @token 'INDENT', diff, 0, indent.length
       @indents.push diff
       @ends.push 'OUTDENT'
       @outdebt = @indebt = 0
     else
       @indebt = 0
-      @outdentToken @indent - size, noNewlines
+      @outdentToken @indent - size, noNewlines, indent.length
     @indent = size
-    indent.length

Record an outdent token or multiple tokens, if we happen to be moving back -inwards past several recorded indents.

  outdentToken: (moveOut, noNewlines) ->
+    indent.length

Record an outdent token or multiple tokens, if we happen to be moving back +inwards past several recorded indents.

  outdentToken: (moveOut, noNewlines, outdentLength) ->
     while moveOut > 0
       len = @indents.length - 1
       if @indents[len] is undefined
@@ -247,27 +286,28 @@ inwards past several recorded indents.

@outdebt -= @indents[len] moveOut -= @indents[len] else - dent = @indents.pop() - @outdebt + dent = @indents.pop() + @outdebt moveOut -= dent @outdebt = 0 @pair 'OUTDENT' - @token 'OUTDENT', dent + @token 'OUTDENT', dent, 0, outdentLength @outdebt -= moveOut if dent @tokens.pop() while @value() is ';' - @token 'TERMINATOR', '\n' unless @tag() is 'TERMINATOR' or noNewlines - this

Matches and consumes non-meaningful whitespace. Tag the previous token + + @token 'TERMINATOR', '\n', outdentLength, 0 unless @tag() is 'TERMINATOR' or noNewlines + this

Matches and consumes non-meaningful whitespace. Tag the previous token as being "spaced", because there are some cases where it makes a difference.

  whitespaceToken: ->
     return 0 unless (match = WHITESPACE.exec @chunk) or
                     (nline = @chunk.charAt(0) is '\n')
     prev = last @tokens
     prev[if match then 'spaced' else 'newLine'] = true if prev
-    if match then match[0].length else 0

Generate a newline token. Consecutive newlines get merged together.

  newlineToken: ->
+    if match then match[0].length else 0

Generate a newline token. Consecutive newlines get merged together.

  newlineToken: (offset) ->
     @tokens.pop() while @value() is ';'
-    @token 'TERMINATOR', '\n' unless @tag() is 'TERMINATOR'
-    this

Use a \ at a line-ending to suppress the newline. + @token 'TERMINATOR', '\n', offset, 0 unless @tag() is 'TERMINATOR' + this

Use a \ at a line-ending to suppress the newline. The slash is removed here once its job is done.

  suppressNewlines: ->
     @tokens.pop() if @value() is '\\'
-    this

We treat all other single characters as a token. E.g.: ( ) , . ! + this

We treat all other single characters as a token. E.g.: ( ) , . ! Multi-character operators are also literal tokens, so that Jison can assign the proper order of operations. There are some symbols that we tag specially here. ; and newlines are both treated as a TERMINATOR, we distinguish @@ -307,20 +347,20 @@ parentheses that indicate a method call from regular parentheses, and so on.

when '(', '{', '[' then @ends.push INVERSES[value] when ')', '}', ']' then @pair value @token tag, value - value.length

Token Manipulators

Sanitize a heredoc or herecomment by + value.length

Token Manipulators

Sanitize a heredoc or herecomment by erasing all external indentation on the left-hand side.

  sanitizeHeredoc: (doc, options) ->
     {indent, herecomment} = options
     if herecomment
       if HEREDOC_ILLEGAL.test doc
         @error "block comment cannot contain \"*/\", starting"
-      return doc if doc.indexOf('\n') <= 0
+      return doc if doc.indexOf('\n') < 0
     else
       while match = HEREDOC_INDENT.exec doc
         attempt = match[1]
         indent = attempt if indent is null or 0 < attempt.length < indent.length
     doc = doc.replace /// \n #{indent} ///g, '\n' if indent
     doc = doc.replace /^\n/, '' unless herecomment
-    doc

A source of ambiguity in our grammar used to be parameter lists in function + doc

A source of ambiguity in our grammar used to be parameter lists in function definitions versus argument lists in function calls. Walk backwards, tagging parameters specially in order to make things easier for the parser.

  tagParameters: ->
     return this if @tag() isnt ')'
@@ -338,8 +378,8 @@ parameters specially in order to make things easier for the parser.

tok[0] = 'PARAM_START' return this else return this - this

Close up all remaining open blocks at the end of the file.

  closeIndentation: ->
-    @outdentToken @indent

Matches a balanced group such as a single or double-quoted string. Pass in + this

Close up all remaining open blocks at the end of the file.

  closeIndentation: ->
+    @outdentToken @indent

Matches a balanced group such as a single or double-quoted string. Pass in a series of delimiters, all of which must be nested correctly within the contents of the string. This method allows us to have strings within interpolations within strings, ad infinitum.

  balancedString: (str, end) ->
@@ -368,7 +408,7 @@ interpolations within strings, ad infinitum.

Expand variables and expressions inside double-quoted strings using + @error "missing #{ stack.pop() }, starting"

Expand variables and expressions inside double-quoted strings using Ruby-like notation for substitution of arbitrary expressions.

"Hello #{name.capitalize()}."
@@ -376,9 +416,25 @@ Ruby-like notation for substitution of arbitrary expressions.

If it encounters an interpolation, this method will recursively create a new Lexer, tokenize the interpolated contents, and merge them into the -token stream.

  interpolateString: (str, options = {}) ->
-    {heredoc, regex} = options
-    tokens = []
+token stream.

+ +
    +
  • str is the start of the string contents (IE with the " or """ stripped +off.)
  • +
  • options.offsetInChunk is the start of the interpolated string in the +current chunk, including the " or """, etc... If not provided, this is +assumed to be 0. options.lexedLength is the length of the +interpolated string, including both the start and end quotes. Both of these +values are ignored if options.regex is true.
  • +
  • options.strOffset is the offset of str, relative to the start of the +current chunk.
  • +
  interpolateString: (str, options = {}) ->
+    {heredoc, regex, offsetInChunk, strOffset, lexedLength} = options
+    offsetInChunk = offsetInChunk || 0
+    strOffset = strOffset || 0
+    lexedLength = lexedLength || str.length

Clip leading \n from heredoc

    if heredoc and str.length > 0 and str[0] == '\n'
+      str = str[1...]
+      strOffset++

Parse the string.

    tokens = []
     pi = 0
     i  = -1
     while letter = str.charAt i += 1
@@ -387,62 +443,109 @@ token stream.

continue unless letter is '#' and str.charAt(i+1) is '{' and (expr = @balancedString str[i + 1..], '}') - continue - tokens.push ['NEOSTRING', str[pi...i]] if pi < i + continue

NEOSTRING is a fake token. This will be converted to a string below.

      tokens.push @makeToken('NEOSTRING', str[pi...i], strOffset + pi) if pi < i
       inner = expr[1...-1]
       if inner.length
-        nested = new Lexer().tokenize inner, line: @line, rewrite: off
-        nested.pop()
-        nested.shift() if nested[0]?[0] is 'TERMINATOR'
+        [line, column] = @getLineAndColumnFromChunk(strOffset + i + 1)
+        nested = new Lexer().tokenize inner, line: line, column: column, rewrite: off
+        popped = nested.pop()
+        popped = nested.shift() if nested[0]?[0] is 'TERMINATOR'
         if len = nested.length
           if len > 1
-            nested.unshift ['(', '(', @line]
-            nested.push    [')', ')', @line]
-          tokens.push ['TOKENS', nested]
+            nested.unshift @makeToken '(', '(', strOffset + i + 1, 0
+            nested.push    @makeToken ')', ')', strOffset + i + 1 + inner.length, 0

Push a fake 'TOKENS' token, which will get turned into real tokens below.

          tokens.push ['TOKENS', nested]
       i += expr.length
       pi = i + 1
-    tokens.push ['NEOSTRING', str[pi..]] if i > pi < str.length
-    return tokens if regex
-    return @token 'STRING', '""' unless tokens.length
-    tokens.unshift ['', ''] unless tokens[0][0] is 'NEOSTRING'
-    @token '(', '(' if interpolated = tokens.length > 1
-    for [tag, value], i in tokens
-      @token '+', '+' if i
-      if tag is 'TOKENS'
-        @tokens.push value...
+    tokens.push @makeToken('NEOSTRING', str[pi..], strOffset + pi) if i > pi < str.length

If regex, then return now and let the regex code deal with all these fake tokens

    return tokens if regex

If we didn't find any tokens, then just return an empty string.

    return @token 'STRING', '""', offsetInChunk, lexedLength unless tokens.length

If the first token is not a string, add a fake empty string to the beginning.

    tokens.unshift @makeToken('NEOSTRING', '', offsetInChunk) unless tokens[0][0] is 'NEOSTRING'
+
+    @token '(', '(', offsetInChunk, 0 if interpolated = tokens.length > 1

Push all the tokens

    for token, i in tokens
+      [tag, value] = token
+      if i

Create a 0-length "+" token.

        plusToken = @token '+', '+' if i
+        locationToken = if tag == 'TOKENS' then value[0] else token
+        plusToken[2] =
+          first_line: locationToken[2].first_line
+          first_column: locationToken[2].first_column
+          last_line: locationToken[2].first_line
+          last_column: locationToken[2].first_column
+      if tag is 'TOKENS'

Push all the tokens in the fake 'TOKENS' token. These already have +sane location data.

        @tokens.push value...
+      else if tag is 'NEOSTRING'

Convert NEOSTRING into STRING

        token[0] = 'STRING'
+        token[1] = @makeString value, '"', heredoc
+        @tokens.push token
       else
-        @token 'STRING', @makeString value, '"', heredoc
-    @token ')', ')' if interpolated
-    tokens

Pairs up a closing token, ensuring that all listed pairs of tokens are + @error "Unexpected #{tag}" + @token ')', ')', offsetInChunk + lexedLength, 0 if interpolated + tokens

Pairs up a closing token, ensuring that all listed pairs of tokens are correctly balanced throughout the course of the token stream.

  pair: (tag) ->
     unless tag is wanted = last @ends
-      @error "unmatched #{tag}" unless 'OUTDENT' is wanted

Auto-close INDENT to support syntax like this:

+ @error "unmatched #{tag}" unless 'OUTDENT' is wanted

Auto-close INDENT to support syntax like this:

el.click((event) ->
   el.hide())
 
      @indent -= size = last @indents
       @outdentToken size, true
       return @pair tag
-    @ends.pop()

Helpers

Add a token to the results, taking note of the line number.

  token: (tag, value) ->
-    @tokens.push [tag, value, @line]

Peek at a tag in the current token stream.

  tag: (index, tag) ->
-    (tok = last @tokens, index) and if tag then tok[0] = tag else tok[0]

Peek at a value in the current token stream.

  value: (index, val) ->
-    (tok = last @tokens, index) and if val then tok[1] = val else tok[1]

Are we in the midst of an unfinished expression?

  unfinished: ->
+    @ends.pop()

Helpers

Returns the line and column number from an offset into the current chunk.

+ +

offset is a number of characters into @chunk.

  getLineAndColumnFromChunk: (offset) ->
+    if offset is 0
+      return [@chunkLine, @chunkColumn]
+
+    if offset >= @chunk.length
+      string = @chunk
+    else
+      string = @chunk[..offset-1]
+
+    lineCount = count string, '\n'
+
+    column = @chunkColumn
+    if lineCount > 0
+      lines = string.split '\n'
+      column = (last lines).length
+    else
+      column += string.length
+
+    return [@chunkLine + lineCount, column]

Same as "token", exception this just returns the token without adding it +to the results.

  makeToken: (tag, value, offsetInChunk, length) ->
+    offsetInChunk = offsetInChunk || 0
+    if length is undefined then length = value.length
+
+    locationData = {}
+    [locationData.first_line, locationData.first_column] =
+      @getLineAndColumnFromChunk offsetInChunk

Use length - 1 for the final offset - we're supplying the lastline and the lastcolumn, +so if lastcolumn == firstcolumn, then we're looking at a character of length 1.

    lastCharacter = if length > 0 then (length - 1) else 0
+    [locationData.last_line, locationData.last_column] =
+      @getLineAndColumnFromChunk offsetInChunk + (length - 1)
+
+    token = [tag, value, locationData]
+
+    return token

Add a token to the results. +offset is the offset into the current @chunk where the token starts. +length is the length of the token in the @chunk, after the offset. If +not specified, the length of value will be used.

+ +

Returns the new token.

  token: (tag, value, offsetInChunk, length) ->
+    token = @makeToken tag, value, offsetInChunk, length
+    @tokens.push token
+    return token

Peek at a tag in the current token stream.

  tag: (index, tag) ->
+    (tok = last @tokens, index) and if tag then tok[0] = tag else tok[0]

Peek at a value in the current token stream.

  value: (index, val) ->
+    (tok = last @tokens, index) and if val then tok[1] = val else tok[1]

Are we in the midst of an unfinished expression?

  unfinished: ->
     LINE_CONTINUER.test(@chunk) or
     @tag() in ['\\', '.', '?.', 'UNARY', 'MATH', '+', '-', 'SHIFT', 'RELATION'
-               'COMPARE', 'LOGIC', 'THROW', 'EXTENDS']

Converts newlines for string literals.

  escapeLines: (str, heredoc) ->
-    str.replace MULTILINER, if heredoc then '\\n' else ''

Constructs a string token by escaping quotes and newlines.

  makeString: (body, quote, heredoc) ->
+               'COMPARE', 'LOGIC', 'THROW', 'EXTENDS']

Converts newlines for string literals.

  escapeLines: (str, heredoc) ->
+    str.replace MULTILINER, if heredoc then '\\n' else ''

Constructs a string token by escaping quotes and newlines.

  makeString: (body, quote, heredoc) ->
     return quote + quote unless body
     body = body.replace /\\([\s\S])/g, (match, contents) ->
       if contents in ['\n', quote] then contents else match
     body = body.replace /// #{quote} ///g, '\\$&'
-    quote + @escapeLines(body, heredoc) + quote

Throws a syntax error on the current @line.

  error: (message) ->
-    throw SyntaxError "#{message} on line #{ @line + 1}"

Constants

Keywords that CoffeeScript shares in common with JavaScript.

JS_KEYWORDS = [
+    quote + @escapeLines(body, heredoc) + quote

Throws a syntax error on the current @line.

  error: (message) ->

TODO: Are there some cases we could improve the error line number by +passing the offset in the chunk where the error happened?

    throw SyntaxError "#{message} on line #{ @chunkLine + 1 }"

Constants

Keywords that CoffeeScript shares in common with JavaScript.

JS_KEYWORDS = [
   'true', 'false', 'null', 'this'
   'new', 'delete', 'typeof', 'in', 'instanceof'
   'return', 'throw', 'break', 'continue', 'debugger'
   'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally'
   'class', 'extends', 'super'
-]

CoffeeScript-only keywords.

COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when']
+]

CoffeeScript-only keywords.

COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when']
 
 COFFEE_ALIAS_MAP =
   and  : '&&'
@@ -456,7 +559,7 @@ correctly balanced throughout the course of the token stream.

off : 'false' COFFEE_ALIASES = (key for key of COFFEE_ALIAS_MAP) -COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat COFFEE_ALIASES

The list of keywords that are reserved by JavaScript, but not used, or are +COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat COFFEE_ALIASES

The list of keywords that are reserved by JavaScript, but not used, or are used by CoffeeScript internally. We throw an error when these are encountered, to avoid having a JavaScript error at runtime.

RESERVED = [
   'case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum'
@@ -465,11 +568,11 @@ to avoid having a JavaScript error at runtime.

The superset of both JavaScript keywords and reserved words, none of which may +STRICT_PROSCRIBED = ['arguments', 'eval']

The superset of both JavaScript keywords and reserved words, none of which may be used as identifiers or properties.

JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED).concat(STRICT_PROSCRIBED)
 
 exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS).concat(STRICT_PROSCRIBED)
-exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED

Token matching regexes.

IDENTIFIER = /// ^
+exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED

The character code of the nasty Microsoft madness otherwise known as the BOM.

BOM = 65279

Token matching regexes.

IDENTIFIER = /// ^
   ( [$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]* )
   ( [^\n\S]* : (?!:) )?  # Is this a property name?
 ///
@@ -495,7 +598,9 @@ be used as identifiers or properties.

WHITESPACE = /^[^\n\S]+/ -COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/ +COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)$)|^(?:\s*#(?!##[^#]).*)+/ + +LITERATE = /^([ ]{4}|\t)/ CODE = /^[-=]>/ @@ -503,7 +608,7 @@ be used as identifiers or properties.

SIMPLESTR = /^'[^\\']*(?:\\.[^\\']*)*'/ -JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/

Regex-matching-regexes.

REGEX = /// ^
+JSTOKEN    = /^`[^\\`]*(?:\\.[^\\`]*)*`/

Regex-matching-regexes.

REGEX = /// ^
   (/ (?! [\s=] )   # disallow leading whitespace or equals signs
   [^ [ / \n \\ ]*  # every other thing
   (?:
@@ -519,7 +624,7 @@ be used as identifiers or properties.

HEREGEX = /// ^ /{3} ([\s\S]+?) /{3} ([imgy]{0,4}) (?!\w) /// -HEREGEX_OMIT = /\s+(?:#.*)?/g

Token cleaning regexes.

MULTILINER      = /\n/g
+HEREGEX_OMIT = /\s+(?:#.*)?/g

Token cleaning regexes.

MULTILINER      = /\n/g
 
 HEREDOC_INDENT  = /\n+([^\n\S]*)/g
 
@@ -527,18 +632,18 @@ be used as identifiers or properties.

LINE_CONTINUER = /// ^ \s* (?: , | \??\.(?![.\d]) | :: ) /// -TRAILING_SPACES = /\s+$/

Compound assignment tokens.

COMPOUND_ASSIGN = [
+TRAILING_SPACES = /\s+$/

Compound assignment tokens.

COMPOUND_ASSIGN = [
   '-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='
-]

Unary tokens.

UNARY   = ['!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO']

Logical tokens.

LOGIC   = ['&&', '||', '&', '|', '^']

Bit-shifting tokens.

SHIFT   = ['<<', '>>', '>>>']

Comparison tokens.

COMPARE = ['==', '!=', '<', '>', '<=', '>=']

Mathematical tokens.

MATH    = ['*', '/', '%']

Relational tokens that are negatable with not prefix.

RELATION = ['IN', 'OF', 'INSTANCEOF']

Boolean tokens.

BOOL = ['TRUE', 'FALSE']

Tokens which a regular expression will never immediately follow, but which +]

Unary tokens.

UNARY   = ['!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO']

Logical tokens.

LOGIC   = ['&&', '||', '&', '|', '^']

Bit-shifting tokens.

SHIFT   = ['<<', '>>', '>>>']

Comparison tokens.

COMPARE = ['==', '!=', '<', '>', '<=', '>=']

Mathematical tokens.

MATH    = ['*', '/', '%']

Relational tokens that are negatable with not prefix.

RELATION = ['IN', 'OF', 'INSTANCEOF']

Boolean tokens.

BOOL = ['TRUE', 'FALSE']

Tokens which a regular expression will never immediately follow, but which a division operator might.

See: http://www.mozilla.org/js/language/js20-2002-04/rationale/syntax.html#regular-expressions

-

Our list is shorter, due to sans-parentheses method calls.

NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--', ']']

If the previous token is not spaced, there are more preceding tokens that -force a division parse:

NOT_SPACED_REGEX = NOT_REGEX.concat ')', '}', 'THIS', 'IDENTIFIER', 'STRING'

Tokens which could legitimately be invoked or indexed. An opening +

Our list is shorter, due to sans-parentheses method calls.

NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--', ']']

If the previous token is not spaced, there are more preceding tokens that +force a division parse:

NOT_SPACED_REGEX = NOT_REGEX.concat ')', '}', 'THIS', 'IDENTIFIER', 'STRING'

Tokens which could legitimately be invoked or indexed. An opening parentheses or bracket following these tokens will be recorded as the start of a function invocation or indexing operation.

CALLABLE  = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER']
-INDEXABLE = CALLABLE.concat 'NUMBER', 'BOOL', 'NULL', 'UNDEFINED'

Tokens that, when immediately preceding a WHEN, indicate that the WHEN +INDEXABLE = CALLABLE.concat 'NUMBER', 'BOOL', 'NULL', 'UNDEFINED'

Tokens that, when immediately preceding a WHEN, indicate that the WHEN occurs at the start of a line. We disambiguate these from trailing whens to avoid an ambiguity in the grammar.

LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR']
 
diff --git a/documentation/docs/nodes.html b/documentation/docs/nodes.html
index f0106f2a..d00b0f23 100644
--- a/documentation/docs/nodes.html
+++ b/documentation/docs/nodes.html
@@ -1,13 +1,12 @@
-      nodes.coffee           

nodes.coffee

nodes.coffee contains all of the node classes for the syntax tree. Most + nodes.coffee

child.traverseChildrencrossScope,funcinvert: -> - newOp'!',this + Op.create'!',thisunwrapAll: ->node = this @@ -99,20 +95,27 @@ will override these with custom logic, if needed.

isAssignable : NOunwrap : THIS - unfoldSoak : NO@expressions[len]=expr.makeReturnres@expressions.splice(len,1)ifexprinstanceofReturnandnotexpr.expressionbreak - thiscode+=",\n#{@tab+TAB}"ifdeclarscode+=scope.assignedVariables().join",\n#{@tab+TAB}"code+=';\n' - code+postcode = @base.compileo,ifprops.lengththenLEVEL_ACCESSelsenullcode = "#{code}."if(@baseinstanceofParensorprops.length)andSIMPLENUM.testcodecode+=prop.compileoforpropinprops - code #{idt}return Object(result) === result ? result : child; #{@tab}})(#{@variable.compileo,LEVEL_LIST}, #{splatArgs}, function(){}) """ - base = newValue@variable + base = Value.wrap@variableif(name = base.properties.pop())andbase.isComplex()ref = o.scope.freeVariable'ref'fun = "(#{ref} = #{base.compileo,LEVEL_LIST})#{name.compileo}" @@ -472,7 +473,7 @@ After goog.inherits from the constructor: (@child, @parent) ->children: ['child','parent']@[if@contextis'object'then'value'else'variable'].assignsnameunfoldSoak: (o) -> - unfoldSoako,this,'variable'val = @value.compileo,LEVEL_LISTreturn"#{name}: #{val}"if@contextis'object'val = name+" #{@contextor'='} "+val - ifo.level<=LEVEL_LISTthenvalelse"(#{val})"isStatement: ->!!@ctor - jumps: NOreturnnounlessexpressions.lengthfornodeinexpressionsreturnnodeifnode.jumpsloop:yes - nonot@secondisComplex: -> - not(@isUnary()and(@operatorin['+','-']))or@first.isComplex()fst.operatorin['!','in','instanceof']fstelse - newOp'!',this + Op.create'!',thisunfoldSoak: (o) ->@operatorin['++','--','delete']andunfoldSoako,this,'first' - generateDo: (exp) -> + @generateDo: (exp) ->passedParams = []func = ifexpinstanceofAssignand(ref = exp.value.unwrap())instanceofCoderef @@ -1167,7 +1169,7 @@ CoffeeScript operations into their JavaScript equivalents.

callcompileNode: (o) -> - isChain = @isChainable()and@first.isChainable()

nodes.coffee

nodes.coffee contains all of the node classes for the syntax tree. Most nodes are created as the result of actions in the grammar, but some are created by other nodes as a method of code generation. To convert the syntax tree into a string of JavaScript code, call compile() on the root.

{Scope} = require './scope'
-{RESERVED, STRICT_PROSCRIBED} = require './lexer'

Import the helpers we plan to use.

{compact, flatten, extend, merge, del, starts, ends, last, some} = require './helpers'
-
-exports.extend = extend  # for parser

Constant functions for nodes that don't need customization.

YES     = -> yes
+{RESERVED, STRICT_PROSCRIBED} = require './lexer'

Import the helpers we plan to use.

{compact, flatten, extend, merge, del, starts, ends, last, some, addLocationDataFn, locationDataToString} = require './helpers'

Functions required by parser

exports.extend = extend
+exports.addLocationDataFn = addLocationDataFn

Constant functions for nodes that don't need customization.

YES     = -> yes
 NO      = -> no
 THIS    = -> this
-NEGATE  = -> @negated = not @negated; this

Base

The Base is the abstract base class for all nodes in the syntax tree. +NEGATE = -> @negated = not @negated; this

Base

The Base is the abstract base class for all nodes in the syntax tree. Each subclass implements the compileNode method, which performs the code generation for that node. To compile a node to JavaScript, call compile on it, which wraps compileNode in some generic extra smarts, @@ -15,7 +14,7 @@ to know when the generated code needs to be wrapped up in a closure. An options hash is passed and cloned throughout, containing information about the environment from higher in the tree (such as if a returned value is being requested by the surrounding function), information about the current -scope, and indentation level.

exports.Base = class Base

Common logic for determining whether to wrap this node in a closure before +scope, and indentation level.

exports.Base = class Base

Common logic for determining whether to wrap this node in a closure before compiling it, or to compile directly. We need to wrap if this node is a statement, and it's not a pureStatement, and we're not at the top level of a block (which would be unnecessary), and we haven't @@ -28,12 +27,12 @@ return results).

if o.level is LEVEL_TOP or not node.isStatement(o) node.compileNode o else - node.compileClosure o

Statements converted into expressions via closure-wrapping share a scope + node.compileClosure o

Statements converted into expressions via closure-wrapping share a scope object with their parent closure, to preserve the expected lexical scope.

  compileClosure: (o) ->
     if @jumps()
       throw SyntaxError 'cannot use a pure statement in an expression.'
     o.sharedScope = yes
-    Closure.wrap(this).compileNode o

If the code generation wishes to use the result of a complex expression + Closure.wrap(this).compileNode o

If the code generation wishes to use the result of a complex expression in multiple places, ensure that the expression is only ever evaluated once, by assigning it to a temporary variable. Pass a level to precompile.

  cache: (o, level, reused) ->
     unless @isComplex()
@@ -42,11 +41,7 @@ by assigning it to a temporary variable. Pass a level to precompile.

else ref = new Literal reused or o.scope.freeVariable 'ref' sub = new Assign ref, this - if level then [sub.compile(o, level), ref.value] else [sub, ref]

Compile to a source/variable pair suitable for looping.

  compileLoopReference: (o, name) ->
-    src = tmp = @compile o, LEVEL_LIST
-    unless -Infinity < +src < Infinity or IDENTIFIER.test(src) and o.scope.check(src, yes)
-      src = "#{ tmp = o.scope.freeVariable name } = #{src}"
-    [src, tmp]

Construct a node that returns the current node's result. + if level then [sub.compile(o, level), ref.value] else [sub, ref]

Construct a node that returns the current node's result. Note that this is overridden for smarter behavior for many statement nodes (e.g. If, For)...

  makeReturn: (res) ->
     me = @unwrapAll()
@@ -68,7 +63,8 @@ scope boundaries.

return list[i] while i-- when list[i] not instanceof Comment null

toString representation of the node, for inspecting the parse tree. This is what coffee --nodes prints out.

  toString: (idt = '', name = @constructor.name) ->
-    tree = '\n' + idt + name
+    location = if @locationData then locationDataToString @locationData else "??"
+    tree = '\n' + idt + location + ": " + name
     tree += '?' if @soak
     @eachChild (node) -> tree += node.toString idt + TAB
     tree

Passes each child to a function, breaking when the function returns false.

  eachChild: (func) ->
@@ -84,7 +80,7 @@ This is what coffee --nodes prints out.

Is this node used to assign a certain variable?

  assigns: NO

Block

The block is the list of expressions that forms the body of an + unfoldSoak : NO

Is this node used to assign a certain variable?

  assigns: NO

For this node and all descendents, set the location data to locationData if the location +data is not already set.

  updateLocationDataIfMissing: (locationData) ->
+    if not @locationData
+      @locationData = {}
+      extend @locationData, locationData
+
+    @eachChild (child) ->
+      child.updateLocationDataIfMissing locationData

Block

The block is the list of expressions that forms the body of an indented block of code -- the implementation of a function, a clause in an if, switch, or try, and so on...

exports.Block = class Block extends Base
   constructor: (nodes) ->
     @expressions = compact flatten nodes or []
 
-  children: ['expressions']

Tack an expression on to the end of this expression list.

  push: (node) ->
+  children: ['expressions']

Tack an expression on to the end of this expression list.

  push: (node) ->
     @expressions.push node
-    this

Remove and return the last expression of this expression list.

  pop: ->
-    @expressions.pop()

Add an expression at the beginning of this expression list.

  unshift: (node) ->
+    this

Remove and return the last expression of this expression list.

  pop: ->
+    @expressions.pop()

Add an expression at the beginning of this expression list.

  unshift: (node) ->
     @expressions.unshift node
-    this

If this Block consists of just a single node, unwrap it by pulling + this

If this Block consists of just a single node, unwrap it by pulling it back out.

  unwrap: ->
-    if @expressions.length is 1 then @expressions[0] else this

Is this an empty block of code?

  isEmpty: ->
+    if @expressions.length is 1 then @expressions[0] else this

Is this an empty block of code?

  isEmpty: ->
     not @expressions.length
 
   isStatement: (o) ->
@@ -122,7 +125,7 @@ it back out.

< jumps: (o) -> for exp in @expressions - return exp if exp.jumps o

A Block node does not return its entire body, rather it + return exp if exp.jumps o

A Block node does not return its entire body, rather it ensures that the final expression is returned.

  makeReturn: (res) ->
     len = @expressions.length
     while len--
@@ -131,8 +134,8 @@ ensures that the final expression is returned.

A Block is the only node that can serve as the root.

  compile: (o = {}, level) ->
-    if o.scope then super o, level else @compileRoot o

Compile all expressions within the Block body. If we need to + this

A Block is the only node that can serve as the root.

  compile: (o = {}, level) ->
+    if o.scope then super o, level else @compileRoot o

Compile all expressions within the Block body. If we need to return the result, and it's an expression, simply return it. If it's a statement, ask the statement to do so.

  compileNode: (o) ->
     @tab  = o.indent
@@ -141,7 +144,7 @@ statement, ask the statement to do so.

for node in @expressions node = node.unwrapAll() node = (node.unfoldSoak(o) or node) - if node instanceof Block

This is a nested block. We don't do anything special here like enclose + if node instanceof Block

This is a nested block. We don't do anything special here like enclose it in a new scope; we just compile the statements in this block along with our own

        codes.push node.compileNode o
       else if top
@@ -149,7 +152,6 @@ our own

code = node.compile o unless node.isStatement o code = "#{@tab}#{code};" - code = "#{code}\n" if node instanceof Literal codes.push code else codes.push node.compile o, LEVEL_LIST @@ -159,7 +161,7 @@ our own

else return codes.join '\n' code = codes.join(', ') or 'void 0' - if codes.length > 1 and o.level >= LEVEL_LIST then "(#{code})" else code

If we happen to be the top-level Block, wrap everything in + if codes.length > 1 and o.level >= LEVEL_LIST then "(#{code})" else code

If we happen to be the top-level Block, wrap everything in a safety closure, unless requested not to. It would be better not to generate them in the first place, but for now, clean up obvious double-parentheses.

  compileRoot: (o) ->
@@ -178,7 +180,7 @@ clean up obvious double-parentheses.

@expressions = rest code = @compileWithDeclarations o return code if o.bare - "#{prelude}(function() {\n#{code}\n}).call(this);\n"

Compile the expressions body for the contents of a function, with + "#{prelude}(function() {\n#{code}\n}).call(this);\n"

Compile the expressions body for the contents of a function, with declarations of all inner variables pushed up to the top.

  compileWithDeclarations: (o) ->
     code = post = ''
     for exp, i in @expressions
@@ -204,10 +206,10 @@ declarations of all inner variables pushed up to the top.

Wrap up the given nodes as a Block, unless it already happens + code + post

Wrap up the given nodes as a Block, unless it already happens to be one.

  @wrap: (nodes) ->
     return nodes[0] if nodes.length is 1 and nodes[0] instanceof Block
-    new Block nodes

Literal

Literals are static values that can be passed through directly into + new Block nodes

Literal

Literals are static values that can be passed through directly into JavaScript without translation, such as: strings, numbers, true, false, null...

exports.Literal = class Literal extends Base
   constructor: (@value) ->
@@ -257,7 +259,7 @@ JavaScript without translation, such as: strings, numbers,
   isAssignable: NO
   isComplex: NO
   compileNode: -> @val
-  constructor: (@val) ->

Return

A return is a pureStatement -- wrapping it in a closure wouldn't + constructor: (@val) ->

Return

A return is a pureStatement -- wrapping it in a closure wouldn't make sense.

exports.Return = class Return extends Base
   constructor: (expr) ->
     @expression = expr if expr and not expr.unwrap().isUndefined
@@ -273,21 +275,24 @@ make sense.

if expr and expr not instanceof Return then expr.compile o, level else super o, level compileNode: (o) -> - @tab + "return#{[" #{@expression.compile o, LEVEL_PAREN}" if @expression]};"

Value

A value, variable or literal or parenthesized, indexed or dotted into, + @tab + "return#{[" #{@expression.compile o, LEVEL_PAREN}" if @expression]};"

Value

A value, variable or literal or parenthesized, indexed or dotted into, or vanilla.

exports.Value = class Value extends Base
-  constructor: (base, props, tag) ->
-    return base if not props and base instanceof Value
-    @base       = base
-    @properties = props or []
-    @[tag]      = true if tag
-    return this
+  @wrap: (base, props, tag) ->
+    if not props and base instanceof Value
+      base
+    else
+      new Value base, props, tag
 
-  children: ['base', 'properties']

Add a property (or properties ) Access to the list.

  add: (props) ->
+  constructor: (@base, @properties, tag) ->
+    @properties or= []
+    @this = true if tag is 'this'
+
+  children: ['base', 'properties']

Add a property (or properties ) Access to the list.

  add: (props) ->
     @properties = @properties.concat props
     this
 
   hasProperties: ->
-    !!@properties.length

Some boolean checks for the benefit of other nodes.

  isArray        : -> not @properties.length and @base instanceof Arr
+    !!@properties.length

Some boolean checks for the benefit of other nodes.

  isArray        : -> not @properties.length and @base instanceof Arr
   isComplex      : -> @hasProperties() or @base.isComplex()
   isAssignable   : -> @hasProperties() or @base.isAssignable()
   isSimpleNumber : -> @base instanceof Literal and SIMPLENUM.test @base.value
@@ -306,24 +311,24 @@ or vanilla.

(@base instanceof Obj) and (not onlyGenerated or @base.generated) isSplice: -> - last(@properties) instanceof Slice

The value can be unwrapped as its inner node, if there are no attached + last(@properties) instanceof Slice

The value can be unwrapped as its inner node, if there are no attached properties.

  unwrap: ->
-    if @properties.length then this else @base

A reference has base part (this value) and name part. + if @properties.length then this else @base

A reference has base part (this value) and name part. We cache them separately for compiling complex expressions. a()[b()] ?= c -> (_base = a())[_name = b()] ? _base[_name] = c

  cacheReference: (o) ->
     name = last @properties
     if @properties.length < 2 and not @base.isComplex() and not name?.isComplex()
       return [this, this]  # `a` `a.b`
-    base = new Value @base, @properties[...-1]
+    base = Value.wrap @base, @properties[...-1]
     if base.isComplex()  # `a().b`
       bref = new Literal o.scope.freeVariable 'base'
-      base = new Value new Parens new Assign bref, base
+      base = Value.wrap new Parens new Assign bref, base
     return [base, bref] unless name  # `a()`
     if name.isComplex()  # `a[b()]`
       nref = new Literal o.scope.freeVariable 'name'
       name = new Index new Assign nref, name.index
       nref = new Index nref
-    [base.add(name), new Value(bref or base.base, [nref or name])]

We compile a value to JavaScript by compiling and joining each property. + [base.add(name), Value.wrap(bref or base.base, [nref or name])]

We compile a value to JavaScript by compiling and joining each property. Things get much more interesting if the chain of properties has soak operators ?. interspersed. Then we have to take care not to accidentally evaluate anything twice when building the soak chain.

  compileNode: (o) ->
@@ -332,23 +337,21 @@ evaluate anything twice when building the soak chain.

Unfold a soak into an If: a?.b -> a.b if a?

  unfoldSoak: (o) ->
-    return @unfoldedSoak if @unfoldedSoak?
-    result = do =>
+    code

Unfold a soak into an If: a?.b -> a.b if a?

  unfoldSoak: (o) ->
+    @unfoldedSoak ?= do =>
       if ifn = @base.unfoldSoak o
-        Array::push.apply ifn.body.properties, @properties
+        ifn.body.properties.push @properties...
         return ifn
       for prop, i in @properties when prop.soak
         prop.soak = off
-        fst = new Value @base, @properties[...i]
-        snd = new Value @base, @properties[i..]
+        fst = Value.wrap @base, @properties[...i]
+        snd = Value.wrap @base, @properties[i..]
         if fst.isComplex()
           ref = new Literal o.scope.freeVariable 'ref'
           fst = new Parens new Assign ref, fst
           snd.base = ref
         return new If new Existence(fst), snd, soak: on
-      null
-    @unfoldedSoak = result or no

Comment

CoffeeScript passes through block comments as JavaScript block comments + no

Comment

CoffeeScript passes through block comments as JavaScript block comments at the same position.

exports.Comment = class Comment extends Base
   constructor: (@comment) ->
 
@@ -358,20 +361,20 @@ at the same position.

compileNode: (o, level) -> code = '/*' + multident(@comment, @tab) + "\n#{@tab}*/\n" code = o.indent + code if (level or o.level) is LEVEL_TOP - code

Call

Node for a function invocation. Takes care of converting super() calls into + code

Call

Node for a function invocation. Takes care of converting super() calls into calls against the prototype's function of the same name.

exports.Call = class Call extends Base
   constructor: (variable, @args = [], @soak) ->
     @isNew    = false
     @isSuper  = variable is 'super'
     @variable = if @isSuper then null else variable
 
-  children: ['variable', 'args']

Tag this invocation as creating a new instance.

  newInstance: ->
+  children: ['variable', 'args']

Tag this invocation as creating a new instance.

  newInstance: ->
     base = @variable?.base or @variable
     if base instanceof Call and not base.isNew
       base.newInstance()
     else
       @isNew = true
-    this

Grab the reference to the superclass's implementation of the current + this

Grab the reference to the superclass's implementation of the current method.

  superReference: (o) ->
     method = o.scope.namedMethod()
     throw SyntaxError 'cannot call super outside of a function.' unless method
@@ -381,22 +384,22 @@ method.

accesses = [new Access(new Literal '__super__')] accesses.push new Access new Literal 'constructor' if method.static accesses.push new Access new Literal name - (new Value (new Literal method.klass), accesses).compile o + (Value.wrap (new Literal method.klass), accesses).compile o else - "#{name}.__super__.constructor"

The appropriate this value for a super call.

  superThis : (o) ->
+      "#{name}.__super__.constructor"

The appropriate this value for a super call.

  superThis : (o) ->
     method = o.scope.method
-    (method and not method.klass and method.context) or "this"

Soaked chained invocations unfold into if/else ternary structures.

  unfoldSoak: (o) ->
+    (method and not method.klass and method.context) or "this"

Soaked chained invocations unfold into if/else ternary structures.

  unfoldSoak: (o) ->
     if @soak
       if @variable
         return ifn if ifn = unfoldSoak o, this, 'variable'
-        [left, rite] = new Value(@variable).cacheReference o
+        [left, rite] = Value.wrap(@variable).cacheReference o
       else
         left = new Literal @superReference o
-        rite = new Value left
+        rite = Value.wrap left
       rite = new Call rite, @args
       rite.isNew = @isNew
       left = new Literal "typeof #{ left.compile o } === \"function\""
-      return new If left, new Value(rite), soak: yes
+      return new If left, Value.wrap(rite), soak: yes
     call = this
     list = []
     loop
@@ -414,7 +417,7 @@ method.

else call.variable.base = ifn ifn = unfoldSoak o, call, 'variable' - ifn

Walk through the objects in the arguments, moving over simple values. + ifn

Walk through the objects in the arguments, moving over simple values. This allows syntax like call a: b, c into call({a: b}, c);

  filterImplicitObjects: (list) ->
     nodes = []
     for node in list
@@ -429,7 +432,7 @@ This allows syntax like call a: b, c into call({a: b}, c);else
           nodes.push prop
           obj = null
-    nodes

Compile a vanilla function call.

  compileNode: (o) ->
+    nodes

Compile a vanilla function call.

  compileNode: (o) ->
     @variable?.front = @front
     if code = Splat.compileSplattedArray o, @args, true
       return @compileSplat o, code
@@ -438,9 +441,7 @@ This allows syntax like call a: b, c into call({a: b}, c);if @isSuper
       @superReference(o) + ".call(#{@superThis(o)}#{ args and ', ' + args })"
     else
-      (if @isNew then 'new ' else '') + @variable.compile(o, LEVEL_ACCESS) + "(#{args})"

super() is converted into a call against the superclass's implementation -of the current function.

  compileSuper: (args, o) ->
-    "#{@superReference(o)}.call(#{@superThis(o)}#{ if args.length then ', ' else '' }#{args})"

If you call a function with a splat, it's converted into a JavaScript + (if @isNew then 'new ' else '') + @variable.compile(o, LEVEL_ACCESS) + "(#{args})"

If you call a function with a splat, it's converted into a JavaScript .apply() call to allow an array of arguments to be passed. If it's a constructor, then things get real tricky. We have to inject an inner constructor in order to be able to pass the varargs.

  compileSplat: (o, splatArgs) ->
@@ -454,7 +455,7 @@ inner constructor in order to be able to pass the varargs.

Hooks one constructor into another's prototype chain.

  compile: (o) ->
-    new Call(new Value(new Literal utility 'extends'), [@child, @parent]).compile o

Access

A . access into a property of a value, or the :: shorthand for + new Call(Value.wrap(new Literal utility 'extends'), [@child, @parent]).compile o

Access

A . access into a property of a value, or the :: shorthand for an access into the object's prototype.

exports.Access = class Access extends Base
   constructor: (@name, tag) ->
     @name.asKey = yes
@@ -524,7 +525,7 @@ needed to iterate over the values in the range. Used by comprehensions.

[from, to] = [+@fromNum, +@toNum] if from <= to then "#{lt} #{to}" else "#{gt} #{to}" else - cond = "#{@fromVar} <= #{@toVar}" + cond = if @stepVar then "#{@stepVar} > 0" else "#{@fromVar} <= #{@toVar}" "#{cond} ? #{lt} #{@toVar} : #{gt} #{@toVar}"

Generate the step.

    stepPart = if @stepVar
       "#{idx} += #{@stepVar}"
     else if known
@@ -660,10 +661,10 @@ list of prototype property assignments.

node.klass = name node.context = name if node.bound

Ensure that all functions bound to the instance are proxied in the constructor.

  addBoundFunctions: (o) ->
-    if @boundFuncs.length
-      for bvar in @boundFuncs
-        lhs = (new Value (new Literal "this"), [new Access bvar]).compile o
-        @ctor.body.unshift new Literal "#{lhs} = #{utility 'bind'}(#{lhs}, this)"

Merge the properties from a top-level object as prototypal properties + for bvar in @boundFuncs + lhs = (Value.wrap (new Literal "this"), [new Access bvar]).compile o + @ctor.body.unshift new Literal "#{lhs} = #{utility 'bind'}(#{lhs}, this)" + return

Merge the properties from a top-level object as prototypal properties on the class.

  addProperties: (node, name, o) ->
     props = node.base.properties[..]
     exprs = while assign = props.shift()
@@ -687,7 +688,7 @@ on the class.

if func.bound func.context = name else - assign.variable = new Value(new Literal(name), [(new Access new Literal 'prototype'), new Access base ]) + assign.variable = Value.wrap(new Literal(name), [(new Access new Literal 'prototype'), new Access base ]) if func instanceof Code and func.bound @boundFuncs.push base func.bound = no @@ -707,16 +708,19 @@ above the constructor.

++index while (node = expressions[index]) and node instanceof Comment or node instanceof Value and node.isString() @directives = expressions.splice 0, index

Make sure that a constructor is defined for the class, and properly -configured.

  ensureConstructor: (name) ->
+configured.

  ensureConstructor: (name, o) ->
     if not @ctor
       @ctor = new Code
       @ctor.body.push new Literal "#{name}.__super__.constructor.apply(this, arguments)" if @parent
       @ctor.body.push new Literal "#{@externalCtor}.apply(this, arguments)" if @externalCtor
-      @ctor.body.makeReturn()
       @body.expressions.unshift @ctor
     @ctor.ctor     = @ctor.name = name
     @ctor.klass    = null
-    @ctor.noReturn = yes

Instead of generating the JavaScript string directly, we build up the + @ctor.noReturn = yes

Prevent constructor from returning a value.

    returnExpr = null
+    @ctor.body.traverseChildren no, (node) ->
+      return no if node instanceof Return and (returnExpr = node.expression)
+    if returnExpr
+      throw SyntaxError "cannot return a value from a constructor: \"#{returnExpr.compileNode o}\" in class #{name}"

Instead of generating the JavaScript string directly, we build up the equivalent syntax tree and compile that, in pieces. You can see the constructor, property assignments, and inheritance getting built out below.

  compileNode: (o) ->
     decl  = @determineName()
@@ -727,7 +731,7 @@ constructor, property assignments, and inheritance getting built out below.

@hoistDirectivePrologue() @setContext name @walkBody name, o - @ensureConstructor name + @ensureConstructor name, o @body.spaced = yes @body.expressions.unshift @ctor unless @ctor instanceof Code @body.expressions.push lname @@ -745,7 +749,7 @@ constructor, property assignments, and inheritance getting built out below.

klass = new Parens call, yes klass = new Assign @variable, klass if @variable - klass.compile o

Assign

The Assign is used to assign a local variable to value, or to set the + klass.compile o

Assign

The Assign is used to assign a local variable to value, or to set the property of an object -- including within object literals.

exports.Assign = class Assign extends Base
   constructor: (@variable, @value, @context, options) ->
     @param = options and options.param
@@ -763,7 +767,7 @@ property of an object -- including within object literals.

Compile an assignment, delegating to compilePatternMatch or + unfoldSoak o, this, 'variable'

Compile an assignment, delegating to compilePatternMatch or compileSplice if appropriate. Keep track of the name of the base object we've been assigned to, for correct internal references. If the variable has not been seen yet within the current scope, declare it.

  compileNode: (o) ->
@@ -786,7 +790,7 @@ has not been seen yet within the current scope, declare it.

Brief implementation of recursive pattern matching, when assigning array or + if o.level <= LEVEL_LIST then val else "(#{val})"

Brief implementation of recursive pattern matching, when assigning array or object literals to a value. Peeks at their properties to assign inner names. See the ECMAScript Harmony Wiki for details.

  compilePatternMatch: (o) ->
@@ -797,18 +801,15 @@ for details.

< code = value.compile o return if o.level >= LEVEL_OP then "(#{code})" else code isObject = @variable.isObject() - if top and olen is 1 and (obj = objects[0]) not instanceof Splat

Unroll simplest cases: {v} = x -> v = x.v

      if obj instanceof Assign
+    if top and olen is 1 and (obj = objects[0]) not instanceof Splat

Unroll simplest cases: {v} = x -> v = x.v

      if obj instanceof Assign
         {variable: {base: idx}, value: obj} = obj
       else
-        if obj.base instanceof Parens
-          [obj, idx] = new Value(obj.unwrapAll()).cacheReference o
+        idx = if isObject
+          if obj.this then obj.properties[0].name else obj
         else
-          idx = if isObject
-            if obj.this then obj.properties[0].name else obj
-          else
-            new Literal 0
+          new Literal 0
       acc   = IDENTIFIER.test idx.unwrap().value or 0
-      value = new Value value
+      value = Value.wrap value
       value.properties.push new (if acc then Access else Index) idx
       if obj.unwrap().value in RESERVED
         throw new SyntaxError "assignment to a reserved word: #{obj.compile o} = #{value.compile o}"
@@ -819,11 +820,11 @@ for details.

< if not IDENTIFIER.test(vvar) or @variable.assigns(vvar) assigns.push "#{ ref = o.scope.freeVariable 'ref' } = #{vvar}" vvar = ref - for obj, i in objects

A regular array pattern-match.

      idx = i
+    for obj, i in objects

A regular array pattern-match.

      idx = i
       if isObject
-        if obj instanceof Assign

A regular object pattern-match.

          {variable: {base: idx}, value: obj} = obj
-        else

A shorthand {a, b, @c} = val pattern-match.

          if obj.base instanceof Parens
-            [obj, idx] = new Value(obj.unwrapAll()).cacheReference o
+        if obj instanceof Assign

A regular object pattern-match.

          {variable: {base: idx}, value: obj} = obj
+        else

A shorthand {a, b, @c} = val pattern-match.

          if obj.base instanceof Parens
+            [obj, idx] = Value.wrap(obj.unwrapAll()).cacheReference o
           else
             idx = if obj.this then obj.properties[0].name else obj
       if not splat and obj instanceof Splat
@@ -848,20 +849,20 @@ for details.

< acc = no else acc = isObject and IDENTIFIER.test idx.unwrap().value or 0 - val = new Value new Literal(vvar), [new (if acc then Access else Index) idx] + val = Value.wrap new Literal(vvar), [new (if acc then Access else Index) idx] if name? and name in RESERVED throw new SyntaxError "assignment to a reserved word: #{obj.compile o} = #{val.compile o}" assigns.push new Assign(obj, val, null, param: @param, subpattern: yes).compile o, LEVEL_LIST assigns.push vvar unless top or @subpattern code = assigns.join ', ' - if o.level < LEVEL_LIST then code else "(#{code})"

When compiling a conditional assignment, take care to ensure that the + if o.level < LEVEL_LIST then code else "(#{code})"

When compiling a conditional assignment, take care to ensure that the operands are only evaluated once, even though we have to reference them more than once.

  compileConditional: (o) ->
-    [left, right] = @variable.cacheReference o

Disallow conditional assignment of undefined variables.

    if not left.properties.length and left.base instanceof Literal and 
+    [left, right] = @variable.cacheReference o

Disallow conditional assignment of undefined variables.

    if not left.properties.length and left.base instanceof Literal and
            left.base.value != "this" and not o.scope.check left.base.value
       throw new Error "the variable \"#{left.base.value}\" can't be assigned with #{@context} because it has not been defined."
     if "?" in @context then o.isExistentialEquals = true
-    new Op(@context[...-1], left, new Assign(right, @value, '=') ).compile o

Compile the assignment from an array splice literal, using JavaScript's + Op.create(@context[...-1], left, new Assign(right, @value, '=') ).compile o

Compile the assignment from an array splice literal, using JavaScript's Array#splice method.

  compileSplice: (o) ->
     {range: {from, to, exclusive}} = @variable.properties.pop()
     name = @variable.compile o
@@ -877,7 +878,7 @@ more than once.

to = "9e9" [valDef, valRef] = @value.cache o, LEVEL_LIST code = "[].splice.apply(#{name}, [#{fromDecl}, #{to}].concat(#{valDef})), #{valRef}" - if o.level > LEVEL_TOP then "(#{code})" else code

Code

A function definition. This is the only node that creates a new Scope. + if o.level > LEVEL_TOP then "(#{code})" else code

Code

A function definition. This is the only node that creates a new Scope. When for the purposes of walking the contents of a function body, the Code has no children -- they're within the inner scope.

exports.Code = class Code extends Base
   constructor: (params, body, tag) ->
@@ -890,7 +891,7 @@ has no children -- they're within the inner scope.

Compilation creates a new scope unless explicitly asked to share with the + jumps: NO

Compilation creates a new scope unless explicitly asked to share with the outer scope. Handles splat parameters in the parameter list by peeking at the JavaScript arguments object. If the function is bound with the => arrow, generates a wrapper that saves the current value of this through @@ -908,19 +909,19 @@ a closure.

for {name: p} in @params if p.this then p = p.properties[0].name if p.value then o.scope.add p.value, 'var', yes - splats = new Assign new Value(new Arr(p.asReference o for p in @params)), - new Value new Literal 'arguments' + splats = new Assign Value.wrap(new Arr(p.asReference o for p in @params)), + Value.wrap new Literal 'arguments' break for param in @params if param.isComplex() val = ref = param.asReference o - val = new Op '?', ref, param.value if param.value - exprs.push new Assign new Value(param.name), val, '=', param: yes + val = Op.create '?', ref, param.value if param.value + exprs.push new Assign Value.wrap(param.name), val, '=', param: yes else ref = param if param.value lit = new Literal ref.name.value + ' == null' - val = new Assign new Value(param.name), param.value, '=' + val = new Assign Value.wrap(param.name), param.value, '=' exprs.push new If lit, val params.push ref unless splats wasEmpty = @body.isEmpty() @@ -944,12 +945,12 @@ a closure.

code += "\n#{ @body.compileWithDeclarations o }\n#{@tab}" unless @body.isEmpty() code += '}' return @tab + code if @ctor - if @front or (o.level >= LEVEL_ACCESS) then "(#{code})" else code

A list of parameter names, excluding those generated by the compiler.

  paramNames: ->
+    if @front or (o.level >= LEVEL_ACCESS) then "(#{code})" else code

A list of parameter names, excluding those generated by the compiler.

  paramNames: ->
     names = []
     names.push param.names()... for param in @params
-    names

Short-circuit traverseChildren method to prevent it from crossing scope boundaries + names

Short-circuit traverseChildren method to prevent it from crossing scope boundaries unless crossScope is true.

  traverseChildren: (crossScope, func) ->
-    super(crossScope, func) if crossScope

Param

A parameter in a function definition. Beyond a typical Javascript parameter, + super(crossScope, func) if crossScope

Param

A parameter in a function definition. Beyond a typical Javascript parameter, these parameters can also attach themselves to the context of the function, as well as be a splat, gathering up a group of parameters into an array.

exports.Param = class Param extends Base
   constructor: (@name, @value, @splat) ->
@@ -970,12 +971,12 @@ as well as be a splat, gathering up a group of parameters into an array.

node = new Literal o.scope.freeVariable node.value else if node.isComplex() node = new Literal o.scope.freeVariable 'arg' - node = new Value node + node = Value.wrap node node = new Splat node if @splat @reference = node isComplex: -> - @name.isComplex()

Finds the name or names of a Param; useful for detecting duplicates. + @name.isComplex()

Finds the name or names of a Param; useful for detecting duplicates. In a sense, a destructured parameter represents multiple JS parameters, thus this method returns an Array of names. Reserved words used as param names, as well as the Object and Array @@ -984,31 +985,31 @@ during the Code compilation step, so this is necessarily an incompl list of a parameter's names.

  names: (name = @name)->
     atParam = (obj) ->
       {value} = obj.properties[0].name
-      return if value.reserved then [] else [value]
    + return if value.reserved then [] else [value]
  • simple literals foo
  • -
    return [name.value] if name instanceof Literal
    +
    return [name.value] if name instanceof Literal
  • at-params @foo
    return atParam(name) if name instanceof Value
     names = []
-    for obj in name.objects
    + for obj in name.objects
  • assignments within destructured parameters {foo:bar}
      if obj instanceof Assign
-        names.push obj.value.unwrap().value
    + names.push @names(obj.value.unwrap())...
  • splats within destructured parameters [xs...]
      else if obj instanceof Splat
         names.push obj.name.unwrap().value
-      else if obj instanceof Value
    + else if obj instanceof Value
  • destructured parameters within destructured parameters [{a}]
        if obj.isArray() or obj.isObject()
-          names.push @names(obj.base)...
    + names.push @names(obj.base)...
  • at-params within destructured parameters {@foo}
        else if obj.this
-          names.push atParam(obj)...
    + names.push atParam(obj)...
  • simple destructured parameters {foo}
        else names.push obj.base.value
       else
         throw SyntaxError "illegal parameter #{obj.compile()}"
-    names

Splat

A splat, either as a parameter to a function, an argument to a call, + names

Splat

A splat, either as a parameter to a function, an argument to a call, or as part of a destructuring assignment.

exports.Splat = class Splat extends Base
 
   children: ['name']
@@ -1022,9 +1023,9 @@ or as part of a destructuring assignment.

@name.assigns name compile: (o) -> - if @index? then @compileParam o else @name.compile o + @name.compile o - unwrap: -> @name

Utility function that converts an arbitrary number of elements, mixed with + unwrap: -> @name

Utility function that converts an arbitrary number of elements, mixed with splats, to a proper array.

  @compileSplattedArray: (o, list, apply) ->
     index = -1
     continue while (node = list[++index]) and node not instanceof Splat
@@ -1041,7 +1042,7 @@ splats, to a proper array.

else "[#{code}]" return args[0] + ".concat(#{ args[1..].join ', ' })" if index is 0 base = (node.compile o, LEVEL_LIST for node in list[...index]) - "[#{ base.join ', ' }].concat(#{ args.join ', ' })"

While

A while loop, the only sort of low-level loop exposed by CoffeeScript. From + "[#{ base.join ', ' }].concat(#{ args.join ', ' })"

While

A while loop, the only sort of low-level loop exposed by CoffeeScript. From it, all other loops can be manufactured. Useful in cases where you need more flexibility or more speed than a comprehension can provide.

exports.While = class While extends Base
   constructor: (condition, options) ->
@@ -1067,7 +1068,7 @@ flexibility or more speed than a comprehension can provide.

The main difference from a JavaScript while is that the CoffeeScript + no

The main difference from a JavaScript while is that the CoffeeScript while can be used as a part of a larger expression -- while loops may return an array containing the computed result of each iteration.

  compileNode: (o) ->
     o.indent += TAB
@@ -1088,23 +1089,24 @@ return an array containing the computed result of each iteration.

code = set + @tab + "while (#{ @condition.compile o, LEVEL_PAREN }) {#{body}}" if @returns code += "\n#{@tab}return #{rvar};" - code

Op

Simple Arithmetic and logical operations. Performs some conversion from + code

Op

Simple Arithmetic and logical operations. Performs some conversion from CoffeeScript operations into their JavaScript equivalents.

exports.Op = class Op extends Base
-  constructor: (op, first, second, flip ) ->
-    return new In first, second if op is 'in'
+  @create: (op, first, second, flip) ->
+    if op is 'in'
+      return new In first, second
     if op is 'do'
       return @generateDo first
     if op is 'new'
       return first.newInstance() if first instanceof Call and not first.do and not first.isNew
       first = new Parens first   if first instanceof Code and first.bound or first.do
+    return new Op op, first, second, flip
+
+  constructor: (op, @first, @second, flip ) ->
     @operator = CONVERSIONS[op] or op
-    @first    = first
-    @second   = second
-    @flip     = !!flip
-    return this

The map of conversions from CoffeeScript to JavaScript symbols.

  CONVERSIONS =
+    @flip     = !!flip

The map of conversions from CoffeeScript to JavaScript symbols.

  CONVERSIONS =
     '==': '==='
     '!=': '!=='
-    'of': 'in'

The map of invertible operators.

  INVERSIONS =
+    'of': 'in'

The map of invertible operators.

  INVERSIONS =
     '!==': '==='
     '===': '!=='
 
@@ -1116,7 +1118,7 @@ CoffeeScript operations into their JavaScript equivalents.

Am I capable of + not (@isUnary() and (@operator in ['+', '-'])) or @first.isComplex()

Am I capable of Python-style comparison chaining?

  isChainable: ->
     @operator in ['<', '>', '>=', '<=', '===', '!==']
 
@@ -1145,12 +1147,12 @@ CoffeeScript operations into their JavaScript equivalents.

In chains, there's no need to wrap bare obj literals in parens, + isChain = @isChainable() and @first.isChainable()

In chains, there's no need to wrap bare obj literals in parens, as the chained expression is wrapped.

    @first.front = @front unless isChain
     if @operator is 'delete' and o.scope.check(@first.unwrapAll().value)
       throw SyntaxError 'delete operand may not be argument or var'
@@ -1178,7 +1180,7 @@ as the chained expression is wrapped.

return @compileExistence o if @operator is '?' code = @first.compile(o, LEVEL_OP) + ' ' + @operator + ' ' + @second.compile(o, LEVEL_OP) - if o.level <= LEVEL_OP then code else "(#{code})"

Mimic Python's chained comparisons when multiple comparison operators are + if o.level <= LEVEL_OP then code else "(#{code})"

Mimic Python's chained comparisons when multiple comparison operators are used sequentially. For example:

bin/coffee -e 'console.log 50 < 65 > 10'
@@ -1196,10 +1198,13 @@ true
     else
       fst = @first
       ref = fst
-    new If(new Existence(fst), ref, type: 'if').addElse(@second).compile o

Compile a unary Op.

  compileUnary: (o) ->
+    new If(new Existence(fst), ref, type: 'if').addElse(@second).compile o

Compile a unary Op.

  compileUnary: (o) ->
+    parts = [op = @operator]
+    if op is '!' and @first instanceof Existence
+      @first.negated = not @first.negated
+      return @first.compile o
     if o.level >= LEVEL_ACCESS
       return (new Parens this).compile o
-    parts = [op = @operator]
     plusMinus = op in ['+', '-']
     parts.push ' ' if op in ['new', 'typeof', 'delete'] or
                       plusMinus and @first instanceof Op and @first.operator is op
@@ -1210,7 +1215,7 @@ true
     parts.join ''
 
   toString: (idt) ->
-    super idt, @constructor.name + ' ' + @operator

In

exports.In = class In extends Base
+    super idt, @constructor.name + ' ' + @operator

In

exports.In = class In extends Base
   constructor: (@object, @array) ->
 
   children: ['object', 'array']
@@ -1221,7 +1226,7 @@ true
     if @array instanceof Value and @array.isArray()
       for obj in @array.base.objects when obj instanceof Splat
         hasSplat = yes
-        break

compileOrTest only if we have an array literal with no splats

      return @compileOrTest o unless hasSplat
+        break

compileOrTest only if we have an array literal with no splats

      return @compileOrTest o unless hasSplat
     @compileLoopTest o
 
   compileOrTest: (o) ->
@@ -1242,7 +1247,7 @@ true
     if o.level < LEVEL_LIST then code else "(#{code})"
 
   toString: (idt) ->
-    super idt, @constructor.name + if @negated then '!' else ''

Try

A classic try/catch/finally block.

exports.Try = class Try extends Base
+    super idt, @constructor.name + if @negated then '!' else ''

Try

A classic try/catch/finally block.

exports.Try = class Try extends Base
   constructor: (@attempt, @error, @recovery, @ensure) ->
 
   children: ['attempt', 'recovery', 'ensure']
@@ -1254,17 +1259,20 @@ true
   makeReturn: (res) ->
     @attempt  = @attempt .makeReturn res if @attempt
     @recovery = @recovery.makeReturn res if @recovery
-    this

Compilation is more or less as you would expect -- the finally clause + this

Compilation is more or less as you would expect -- the finally clause is optional, the catch is not.

  compileNode: (o) ->
     o.indent  += TAB
-    errorPart = if @error then " (#{ @error.compile o }) " else ' '
     tryPart   = @attempt.compile o, LEVEL_TOP
 
     catchPart = if @recovery
+      if @error.isObject?()
+        placeholder = new Literal '_error'
+        @recovery.unshift new Assign @error, placeholder
+        @error = placeholder
       if @error.value in STRICT_PROSCRIBED
         throw SyntaxError "catch variable may not be \"#{@error.value}\""
       o.scope.add @error.value, 'param' unless o.scope.check @error.value
-      " catch#{errorPart}{\n#{ @recovery.compile o, LEVEL_TOP }\n#{@tab}}"
+      " catch (#{ @error.compile o }) {\n#{ @recovery.compile o, LEVEL_TOP }\n#{@tab}}"
     else unless @ensure or @recovery
       ' catch (_error) {}'
 
@@ -1272,16 +1280,16 @@ is optional, the catch is not.

"""#{@tab}try { #{tryPart} - #{@tab}}#{ catchPart or '' }#{ensurePart}"""

Throw

Simple node to throw an exception.

exports.Throw = class Throw extends Base
+    #{@tab}}#{ catchPart or '' }#{ensurePart}"""

Throw

Simple node to throw an exception.

exports.Throw = class Throw extends Base
   constructor: (@expression) ->
 
   children: ['expression']
 
   isStatement: YES
-  jumps:       NO

A Throw is already a return, of sorts...

  makeReturn: THIS
+  jumps:       NO

A Throw is already a return, of sorts...

  makeReturn: THIS
 
   compileNode: (o) ->
-    @tab + "throw #{ @expression.compile o };"

Existence

Checks a variable for existence -- not null and not undefined. This is + @tab + "throw #{ @expression.compile o };"

Existence

Checks a variable for existence -- not null and not undefined. This is similar to .nil? in Ruby, and avoids having to consult a JavaScript truth table.

exports.Existence = class Existence extends Base
   constructor: (@expression) ->
@@ -1296,8 +1304,8 @@ table.

if IDENTIFIER.test(code) and not o.scope.check code [cmp, cnj] = if @negated then ['===', '||'] else ['!==', '&&'] code = "typeof #{code} #{cmp} \"undefined\" #{cnj} #{code} #{cmp} null" - else

do not use strict equality here; it will break existing code

      code = "#{code} #{if @negated then '==' else '!='} null"
-    if o.level <= LEVEL_COND then code else "(#{code})"

Parens

An extra set of parentheses, specified explicitly in the source. At one time + else

do not use strict equality here; it will break existing code

      code = "#{code} #{if @negated then '==' else '!='} null"
+    if o.level <= LEVEL_COND then code else "(#{code})"

Parens

An extra set of parentheses, specified explicitly in the source. At one time we tried to clean up the results by detecting and removing redundant parentheses, but no longer -- you can put in as many as you please.

@@ -1317,7 +1325,7 @@ parentheses, but no longer -- you can put in as many as you please.

code = expr.compile o, LEVEL_PAREN bare = o.level < LEVEL_OP and (expr instanceof Op or expr instanceof Call or (expr instanceof For and expr.returns)) - if bare then code else "(#{code})"

For

CoffeeScript's replacement for the for loop is our array and object + if bare then code else "(#{code})"

For

CoffeeScript's replacement for the for loop is our array and object comprehensions, that compile into for loops here. They also act as an expression, able to return the result of each filtered iteration.

@@ -1337,7 +1345,7 @@ you can map and filter in a single pass.

throw SyntaxError 'cannot pattern match over range loops' if @range and @pattern @returns = false - children: ['body', 'source', 'guard', 'step']

Welcome to the hairiest method in all of CoffeeScript. Handles the inner + children: ['body', 'source', 'guard', 'step']

Welcome to the hairiest method in all of CoffeeScript. Handles the inner loop, filtering, stepping, and result saving for array, object, and range comprehensions. Some of the generated code can be shared in common, and some cannot.

  compileNode: (o) ->
@@ -1353,7 +1361,10 @@ some cannot.

< rvar = scope.freeVariable 'results' if @returns ivar = (@object and index) or scope.freeVariable 'i' kvar = (@range and name) or index or ivar - kvarAssign = if kvar isnt ivar then "#{kvar} = " else ""

the _by variable is created twice in Ranges if we don't prevent it from being declared here

    stepvar   = scope.freeVariable "step" if @step and not @range
+    kvarAssign = if kvar isnt ivar then "#{kvar} = " else ""
+    if @step and not @range
+      [step, stepVar] = @step.cache o, LEVEL_LIST
+      stepNum = stepVar.match SIMPLENUM
     name      = ivar if @pattern
     varPart   = ''
     guardPart = ''
@@ -1364,16 +1375,29 @@ some cannot.

< else svar = @source.compile o, LEVEL_LIST if (name or @own) and not IDENTIFIER.test svar - defPart = "#{@tab}#{ref = scope.freeVariable 'ref'} = #{svar};\n" + defPart += "#{@tab}#{ref = scope.freeVariable 'ref'} = #{svar};\n" svar = ref if name and not @pattern namePart = "#{name} = #{svar}[#{kvar}]" - unless @object - lvar = scope.freeVariable 'len' - forVarPart = "#{kvarAssign}#{ivar} = 0, #{lvar} = #{svar}.length" - forVarPart += ", #{stepvar} = #{@step.compile o, LEVEL_OP}" if @step - stepPart = "#{kvarAssign}#{if @step then "#{ivar} += #{stepvar}" else (if kvar isnt ivar then "++#{ivar}" else "#{ivar}++")}" - forPart = "#{forVarPart}; #{ivar} < #{lvar}; #{stepPart}" + if not @object + defPart += "#{@tab}#{step};\n" if step isnt stepVar + lvar = scope.freeVariable 'len' unless @step and stepNum and down = (+stepNum < 0) + declare = "#{kvarAssign}#{ivar} = 0, #{lvar} = #{svar}.length" + declareDown = "#{kvarAssign}#{ivar} = #{svar}.length - 1" + compare = "#{ivar} < #{lvar}" + compareDown = "#{ivar} >= 0" + if @step + if stepNum + if down + compare = compareDown + declare = declareDown + else + compare = "#{stepVar} > 0 ? #{compare} : #{compareDown}" + declare = "(#{stepVar} > 0 ? (#{declare}) : #{declareDown})" + increment = "#{ivar} += #{stepVar}" + else + increment = "#{if kvar isnt ivar then "++#{ivar}" else "#{ivar}++"}" + forPart = "#{declare}; #{compare}; #{kvarAssign}#{increment}" if @returns resultPart = "#{@tab}#{rvar} = [];\n" returnResult = "\n#{@tab}return #{rvar};" @@ -1409,7 +1433,7 @@ some cannot.

< val.properties[0].name?.value in ['call', 'apply']) fn = val.base?.unwrapAll() or val ref = new Literal o.scope.freeVariable 'fn' - base = new Value ref + base = Value.wrap ref if val.base [val.base, base] = [base, val] body.expressions[idx] = new Call base, expr.args @@ -1520,10 +1544,12 @@ then make sure that the closure wrapper preserves the original values.

func = new Code [], Block.wrap [expressions] args = [] if (mentionsArgs = expressions.contains @literalArgs) or expressions.contains @literalThis + if mentionsArgs and expressions.classBody + throw SyntaxError "Class bodies shouldn't reference arguments" meth = new Literal if mentionsArgs then 'apply' else 'call' args = [new Literal 'this'] args.push new Literal 'arguments' if mentionsArgs - func = new Value func, [new Access meth] + func = Value.wrap func, [new Access meth] func.noReturn = noReturn call = new Call func, args if statement then Block.wrap [call] else call @@ -1537,7 +1563,7 @@ then make sure that the closure wrapper preserves the original values.

(node instanceof Call and node.isSuper)

Unfold a node's child if soak, then tuck the node under created If

unfoldSoak = (o, parent, name) ->
   return unless ifn = parent[name].unfoldSoak o
   parent[name] = ifn.body
-  ifn.body = new Value parent
+  ifn.body = Value.wrap parent
   ifn

Constants

UTILITIES =

Correctly set up a prototype chain for inheritance, including a reference to the superclass for super() calls, and copies of any static properties.

  extends: -> """
     function(child, parent) { for (var key in parent) { if (#{utility 'hasProp'}.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }
diff --git a/documentation/docs/optparse.html b/documentation/docs/optparse.html
index 0d13ce96..8fa84b43 100644
--- a/documentation/docs/optparse.html
+++ b/documentation/docs/optparse.html
@@ -1,4 +1,4 @@
-      optparse.coffee           

optparse.coffee

A simple OptionParser class to parse option flags from the command-line. + optparse.coffee

optparse.coffee

A simple OptionParser class to parse option flags from the command-line. Use it like so:

parser  = new OptionParser switches, helpBanner
diff --git a/documentation/docs/repl.html b/documentation/docs/repl.html
index 6ce407e1..9e545a9d 100644
--- a/documentation/docs/repl.html
+++ b/documentation/docs/repl.html
@@ -1,142 +1,57 @@
-      repl.coffee           

repl.coffee

A very simple Read-Eval-Print-Loop. Compiles one line at a time to JavaScript -and evaluates it. Good for simple tests, or poking around the Node.js API. -Using it looks like this:

+ repl.coffee

repl.coffee

vm = require 'vm'
+nodeREPL = require 'repl'
+CoffeeScript = require './coffee-script'
+{merge} = require './helpers'
 
-
coffee> console.log "#{num} bottles of beer" for num in [99..1]
-

Start by opening up stdin and stdout.

stdin = process.openStdin()
-stdout = process.stdout

Require the coffee-script module to get access to the compiler.

CoffeeScript = require './coffee-script'
-readline     = require 'readline'
-{inspect}    = require 'util'
-{Script}     = require 'vm'
-Module       = require 'module'

REPL Setup

Config

REPL_PROMPT = 'coffee> '
-REPL_PROMPT_MULTILINE = '------> '
-REPL_PROMPT_CONTINUATION = '......> '
-enableColours = no
-unless process.platform is 'win32'
-  enableColours = not process.env.NODE_DISABLE_COLORS

Log an error.

error = (err) ->
-  stdout.write (err.stack or err.toString()) + '\n'

Autocompletion

Regexes to match complete-able bits of text.

ACCESSOR  = /\s*([\w\.]+)(?:\.(\w*))$/
-SIMPLEVAR = /(\w+)$/i

Returns a list of completions, and the completed text.

autocomplete = (text) ->
-  completeAttribute(text) or completeVariable(text) or [[], text]

Attempt to autocomplete a chained dotted attribute: one.two.three.

completeAttribute = (text) ->
-  if match = text.match ACCESSOR
-    [all, obj, prefix] = match
-    try obj = Script.runInThisContext obj
-    catch e
-      return
-    return unless obj?
-    obj = Object obj
-    candidates = Object.getOwnPropertyNames obj
-    while obj = Object.getPrototypeOf obj
-      for key in Object.getOwnPropertyNames obj when key not in candidates
-        candidates.push key
-    completions = getCompletions prefix, candidates
-    [completions, prefix]

Attempt to autocomplete an in-scope free variable: one.

completeVariable = (text) ->
-  free = text.match(SIMPLEVAR)?[1]
-  free = "" if text is ""
-  if free?
-    vars = Script.runInThisContext 'Object.getOwnPropertyNames(Object(this))'
-    keywords = (r for r in CoffeeScript.RESERVED when r[..1] isnt '__')
-    candidates = vars
-    for key in keywords when key not in candidates
-      candidates.push key
-    completions = getCompletions free, candidates
-    [completions, free]

Return elements of candidates for which prefix is a prefix.

getCompletions = (prefix, candidates) ->
-  el for el in candidates when 0 is el.indexOf prefix

Make sure that uncaught exceptions don't kill the REPL.

process.on 'uncaughtException', error

The current backlog of multi-line code.

backlog = ''

The main REPL function. run is called every time a line of code is entered. -Attempt to evaluate the command. If there's an exception, print it out instead -of exiting.

run = (buffer) ->

remove single-line comments

  buffer = buffer.replace /(^|[\r\n]+)(\s*)##?(?:[^#\r\n][^\r\n]*|)($|[\r\n])/, "$1$2$3"

remove trailing newlines

  buffer = buffer.replace /[\r\n]+$/, ""
-  if multilineMode
-    backlog += "#{buffer}\n"
-    repl.setPrompt REPL_PROMPT_CONTINUATION
-    repl.prompt()
+replDefaults =
+  prompt: 'coffee> ',
+  eval: (input, context, filename, cb) ->

XXX: multiline hack

    input = input.replace /\uFF00/g, '\n'

strip single-line comments

    input = input.replace /(^|[\r\n]+)(\s*)##?(?:[^#\r\n][^\r\n]*|)($|[\r\n])/, '$1$2$3'

empty command

    return cb null if /^\s*$/.test input

TODO: fix #1829: pass in-scope vars and avoid accidentally shadowing them by omitting those declarations

    try
+      js = CoffeeScript.compile "_=(#{input}\n)", {filename, bare: yes}
+    catch err
+      cb err
+    cb null, vm.runInContext(js, context, filename)
+
+addMultilineHandler = (repl) ->
+  {rli, inputStream, outputStream} = repl
+
+  multiline =
+    enabled: off
+    initialPrompt: repl.prompt.replace(/^[^> ]*/, (x) -> x.replace /./g, '-')
+    prompt: repl.prompt.replace(/^[^> ]*>?/, (x) -> x.replace /./g, '.')
+    buffer: ''

Proxy node's line listener

  nodeLineListener = rli.listeners('line')[0]
+  rli.removeListener 'line', nodeLineListener
+  rli.on 'line', (cmd) ->
+    if multiline.enabled
+      multiline.buffer += "#{cmd}\n"
+      rli.setPrompt multiline.prompt
+      rli.prompt true
+    else
+      nodeLineListener cmd
+    return

Handle Ctrl-v

  inputStream.on 'keypress', (char, key) ->
+    return unless key and key.ctrl and not key.meta and not key.shift and key.name is 'v'
+    if multiline.enabled

allow arbitrarily switching between modes any time before multiple lines are entered

      unless multiline.buffer.match /\n/
+        multiline.enabled = not multiline.enabled
+        rli.setPrompt repl.prompt
+        rli.prompt true
+        return

no-op unless the current line is empty

      return if rli.line? and not rli.line.match /^\s*$/

eval, print, loop

      multiline.enabled = not multiline.enabled
+      rli.line = ''
+      rli.cursor = 0
+      rli.output.cursorTo 0
+      rli.output.clearLine 1

XXX: multiline hack

      multiline.buffer = multiline.buffer.replace /\n/g, '\uFF00'
+      rli.emit 'line', multiline.buffer
+      multiline.buffer = ''
+    else
+      multiline.enabled = not multiline.enabled
+      rli.setPrompt multiline.initialPrompt
+      rli.prompt true
     return
-  if !buffer.toString().trim() and !backlog
-    repl.prompt()
-    return
-  code = backlog += buffer
-  if code[code.length - 1] is '\\'
-    backlog = "#{backlog[...-1]}\n"
-    repl.setPrompt REPL_PROMPT_CONTINUATION
-    repl.prompt()
-    return
-  repl.setPrompt REPL_PROMPT
-  backlog = ''
-  try
-    _ = global._
-    returnValue = CoffeeScript.eval "_=(#{code}\n)", {
-      filename: 'repl'
-      modulename: 'repl'
-    }
-    if returnValue is undefined
-      global._ = _
-    repl.output.write "#{inspect returnValue, no, 2, enableColours}\n"
-  catch err
-    error err
-  repl.prompt()
 
-if stdin.readable and stdin.isRaw

handle piped input

  pipedInput = ''
-  repl =
-    prompt: -> stdout.write @_prompt
-    setPrompt: (p) -> @_prompt = p
-    input: stdin
-    output: stdout
-    on: ->
-  stdin.on 'data', (chunk) ->
-    pipedInput += chunk
-    return unless /\n/.test pipedInput
-    lines = pipedInput.split "\n"
-    pipedInput = lines[lines.length - 1]
-    for line in lines[...-1] when line
-      stdout.write "#{line}\n"
-      run line
-    return
-  stdin.on 'end', ->
-    for line in pipedInput.trim().split "\n" when line
-      stdout.write "#{line}\n"
-      run line
-    stdout.write '\n'
-    process.exit 0
-else

Create the REPL by listening to stdin.

  if readline.createInterface.length < 3
-    repl = readline.createInterface stdin, autocomplete
-    stdin.on 'data', (buffer) -> repl.write buffer
-  else
-    repl = readline.createInterface stdin, stdout, autocomplete
-
-multilineMode = off

Handle multi-line mode switch

repl.input.on 'keypress', (char, key) ->

test for Ctrl-v

  return unless key and key.ctrl and not key.meta and not key.shift and key.name is 'v'
-  cursorPos = repl.cursor
-  repl.output.cursorTo 0
-  repl.output.clearLine 1
-  multilineMode = not multilineMode
-  repl._line() if not multilineMode and backlog
-  backlog = ''
-  repl.setPrompt (newPrompt = if multilineMode then REPL_PROMPT_MULTILINE else REPL_PROMPT)
-  repl.prompt()
-  repl.output.cursorTo newPrompt.length + (repl.cursor = cursorPos)

Handle Ctrl-d press at end of last line in multiline mode

repl.input.on 'keypress', (char, key) ->
-  return unless multilineMode and repl.line

test for Ctrl-d

  return unless key and key.ctrl and not key.meta and not key.shift and key.name is 'd'
-  multilineMode = off
-  repl._line()
-
-repl.on 'attemptClose', ->
-  if multilineMode
-    multilineMode = off
-    repl.output.cursorTo 0
-    repl.output.clearLine 1
-    repl._onLine repl.line
-    return
-  if backlog or repl.line
-    backlog = ''
-    repl.historyIndex = -1
-    repl.setPrompt REPL_PROMPT
-    repl.output.write '\n(^C again to quit)'
-    repl._line (repl.line = '')
-  else
-    repl.close()
-
-repl.on 'close', ->
-  repl.output.write '\n'
-  repl.input.destroy()
-
-repl.on 'line', run
-
-repl.setPrompt REPL_PROMPT
-repl.prompt()
+module.exports =
+  start: (opts = {}) ->
+    opts = merge replDefaults, opts
+    repl = nodeREPL.start opts
+    repl.on 'exit', -> repl.outputStream.write '\n'
+    addMultilineHandler repl
+    repl
 
 
\ No newline at end of file diff --git a/documentation/docs/rewriter.html b/documentation/docs/rewriter.html index 55a24bbe..8dc8fdd2 100644 --- a/documentation/docs/rewriter.html +++ b/documentation/docs/rewriter.html @@ -1,4 +1,4 @@ - rewriter.coffee

rewriter.coffee

The CoffeeScript language has a good deal of optional syntax, implicit syntax, + rewriter.coffee

rewriter.coffee

The CoffeeScript language has a good deal of optional syntax, implicit syntax, and shorthand syntax. This can greatly complicate a grammar and bloat the resulting parse table. Instead of making the parser handle it all, we take a series of passes over the token stream, using this Rewriter to convert @@ -18,6 +18,7 @@ corrected before implicit parentheses can be wrapped around blocks of code.

@tagPostfixConditionals() @addImplicitBraces() @addImplicitParentheses() + @addLocationDataToGeneratedTokens() @tokens

Rewrite the token stream, looking one token ahead and behind. Allow the return value of the block to tell us how many tokens to move forwards (or backwards) in the stream, to make sure we don't miss anything @@ -87,7 +88,7 @@ Insert the missing braces here, so that the parser doesn't have to.

[tag] = token sameLine = no if tag in LINEBREAKS return ( - (tag in ['TERMINATOR', 'OUTDENT'] or + (tag in ['TERMINATOR', 'OUTDENT'] or (tag in IMPLICIT_END and sameLine and not (i - startIndex is 1))) and ((!startsLine and @tag(i - 1) isnt ',') or not (two?[0] is ':' or one?[0] is '@' and three?[0] is ':'))) or @@ -96,7 +97,7 @@ Insert the missing braces here, so that the parser doesn't have to.

) action = (token, i) -> - tok = @generate '}', '}', token[2] + tok = @generate '}', '}' @tokens.splice i, 0, tok @scanTokens (token, i, tokens) -> @@ -117,7 +118,7 @@ Insert the missing braces here, so that the parser doesn't have to.

startsLine = not prevTag or (prevTag in LINEBREAKS) value = new String('{') value.generated = yes - tok = @generate '{', value, token[2] + tok = @generate '{', value tokens.splice idx, 0, tok @detectEnd i + 2, condition, action 2

Methods may be optionally called without parentheses, for simple cases. @@ -125,6 +126,7 @@ Insert the implicit parentheses here, so that the parser doesn't have to deal with them.

  addImplicitParentheses: ->
 
     noCall = seenSingle = seenControl = no
+    callIndex = null
 
     condition = (token, i) ->
       [tag] = token
@@ -136,10 +138,10 @@ deal with them.

(tag is 'INDENT' and not seenControl)) and (tag isnt 'INDENT' or (@tag(i - 2) not in ['CLASS', 'EXTENDS'] and @tag(i - 1) not in IMPLICIT_BLOCK and - not ((post = @tokens[i + 1]) and post.generated and post[0] is '{'))) + not (callIndex is i - 1 and (post = @tokens[i + 1]) and post.generated and post[0] is '{'))) action = (token, i) -> - @tokens.splice i, 0, @generate 'CALL_END', ')', token[2] + @tokens.splice i, 0, @generate 'CALL_END', ')' @scanTokens (token, i, tokens) -> tag = token[0] @@ -156,14 +158,31 @@ deal with them.

return 1 unless callObject or prev?.spaced and (prev.call or prev[0] in IMPLICIT_FUNC) and (tag in IMPLICIT_CALL or not (token.spaced or token.newLine) and tag in IMPLICIT_UNSPACED_CALL) + callIndex = i tokens.splice i, 0, @generate 'CALL_START', '(', token[2] @detectEnd i + 1, condition, action prev[0] = 'FUNC_EXIST' if prev[0] is '?' - 2

Because our grammar is LALR(1), it can't handle some single-line + 2

Add location data to all tokens generated by the rewriter.

  addLocationDataToGeneratedTokens: ->
+    @scanTokens (token, i, tokens) ->
+      tag = token[0]
+      if (token.generated or token.explicit) and (not token[2])
+        if i > 0
+          prevToken = tokens[i-1]
+          token[2] =
+            first_line: prevToken[2].last_line
+            first_column: prevToken[2].last_column
+            last_line: prevToken[2].last_line
+            last_column: prevToken[2].last_column
+        else
+          token[2] =
+            first_line: 0
+            first_column: 0
+            last_line: 0
+            last_column: 0
+      return 1

Because our grammar is LALR(1), it can't handle some single-line expressions that lack ending delimiters. The Rewriter adds the implicit blocks, so it doesn't need to. ')' can close a single-line block, but we need to make sure it's balanced.

  addImplicitIndentation: ->
-
     starter = indent = outdent = null
 
     condition = (token, i) ->
@@ -193,7 +212,7 @@ but we need to make sure it's balanced.

@detectEnd i + 2, condition, action tokens.splice i, 1 if tag is 'THEN' return 1 - return 1

Tag postfix conditionals as such, so that we can parse them with a + return 1

Tag postfix conditionals as such, so that we can parse them with a different precedence.

  tagPostfixConditionals: ->
 
     original = null
@@ -209,14 +228,15 @@ different precedence.

return 1 unless token[0] is 'IF' original = token @detectEnd i + 1, condition, action - 1

Generate the indentation tokens, based on another token on the same line.

  indentation: (token, implicit = no) ->
-    indent  = ['INDENT', 2, token[2]]
-    outdent = ['OUTDENT', 2, token[2]]
+      1

Generate the indentation tokens, based on another token on the same line.

  indentation: (token, implicit = no) ->
+    indent  = ['INDENT', 2]
+    outdent = ['OUTDENT', 2]
     indent.generated = outdent.generated = yes if implicit
-    [indent, outdent]

Create a generated token: one that exists due to a use of implicit syntax.

  generate: (tag, value, line) ->
-    tok = [tag, value, line]
+    indent.explicit = outdent.explicit = yes if not implicit
+    [indent, outdent]

Create a generated token: one that exists due to a use of implicit syntax.

  generate: (tag, value) ->
+    tok = [tag, value]
     tok.generated = yes
-    tok

Look up a tag by token index.

  tag: (i) -> @tokens[i]?[0]

Constants

List of the token pairs that must be balanced.

BALANCED_PAIRS = [
+    tok

Look up a tag by token index.

  tag: (i) -> @tokens[i]?[0]

Constants

List of the token pairs that must be balanced.

BALANCED_PAIRS = [
   ['(', ')']
   ['[', ']']
   ['{', '}']
@@ -224,20 +244,20 @@ different precedence.

['CALL_START', 'CALL_END'] ['PARAM_START', 'PARAM_END'] ['INDEX_START', 'INDEX_END'] -]

The inverse mappings of BALANCED_PAIRS we're trying to fix up, so we can -look things up from either end.

exports.INVERSES = INVERSES = {}

The tokens that signal the start/end of a balanced pair.

EXPRESSION_START = []
+]

The inverse mappings of BALANCED_PAIRS we're trying to fix up, so we can +look things up from either end.

exports.INVERSES = INVERSES = {}

The tokens that signal the start/end of a balanced pair.

EXPRESSION_START = []
 EXPRESSION_END   = []
 
 for [left, rite] in BALANCED_PAIRS
   EXPRESSION_START.push INVERSES[rite] = left
-  EXPRESSION_END  .push INVERSES[left] = rite

Tokens that indicate the close of a clause of an expression.

EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat EXPRESSION_END

Tokens that, if followed by an IMPLICIT_CALL, indicate a function invocation.

IMPLICIT_FUNC    = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS']

If preceded by an IMPLICIT_FUNC, indicates a function invocation.

IMPLICIT_CALL    = [
+  EXPRESSION_END  .push INVERSES[left] = rite

Tokens that indicate the close of a clause of an expression.

EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat EXPRESSION_END

Tokens that, if followed by an IMPLICIT_CALL, indicate a function invocation.

IMPLICIT_FUNC    = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS']

If preceded by an IMPLICIT_FUNC, indicates a function invocation.

IMPLICIT_CALL    = [
   'IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS'
   'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'NULL', 'UNDEFINED', 'UNARY', 'SUPER'
   '@', '->', '=>', '[', '(', '{', '--', '++'
 ]
 
-IMPLICIT_UNSPACED_CALL = ['+', '-']

Tokens indicating that the implicit call must enclose a block of expressions.

IMPLICIT_BLOCK   = ['->', '=>', '{', '[', ',']

Tokens that always mark the end of an implicit call for single-liners.

IMPLICIT_END     = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR']

Single-line flavors of block expressions that have unclosed endings. +IMPLICIT_UNSPACED_CALL = ['+', '-']

Tokens indicating that the implicit call must enclose a block of expressions.

IMPLICIT_BLOCK   = ['->', '=>', '{', '[', ',']

Tokens that always mark the end of an implicit call for single-liners.

IMPLICIT_END     = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR']

Single-line flavors of block expressions that have unclosed endings. The grammar can't disambiguate them, so we insert the implicit indentation.

SINGLE_LINERS    = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN']
-SINGLE_CLOSERS   = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN']

Tokens that end a line.

LINEBREAKS       = ['TERMINATOR', 'INDENT', 'OUTDENT']
+SINGLE_CLOSERS   = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN']

Tokens that end a line.

LINEBREAKS       = ['TERMINATOR', 'INDENT', 'OUTDENT']
 
 
\ No newline at end of file diff --git a/documentation/index.html.erb b/documentation/index.html.erb index aff8367f..7c878f8b 100644 --- a/documentation/index.html.erb +++ b/documentation/index.html.erb @@ -48,6 +48,7 @@ Overview Installation Usage + Literate CoffeeScript Language Reference Literals: Functions, Objects and Arrays Lexical Scoping and Variable Safety @@ -117,9 +118,9 @@

- CoffeeScript is a little language that compiles into JavaScript. Underneath - all those awkward braces and semicolons, JavaScript has always had - a gorgeous object model at its heart. CoffeeScript is an attempt to expose + CoffeeScript is a little language that compiles into JavaScript. + Underneath that awkward Java-esque patina, JavaScript has always had + a gorgeous heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.

@@ -136,7 +137,7 @@

Latest Version: - 1.4.0 + 1.5.0

@@ -357,6 +358,33 @@ Expressions +

+ + Literate CoffeeScript +

+ +

+ Besides being used as an ordinary programming language, CoffeeScript may + also be written in "literate" mode. If you name your file with a + .litcoffee extension, you can write it as a Markdown document — + a document that also happens to be executable CoffeeScript code. +

+ +

+ Just for kicks, a little bit of the compiler is currently implemented in this fashion: + See it + as a document, + raw, + and properly highlighted in a text editor. +

+ +

+ I'm fairly excited about this direction for the language, and am looking + forward to writing (and more importantly, reading) more programs in this style. + As 1.5.0 is the first version of CoffeeScript that supports it, let us know + if you have any ideas for improving the feature. +

+

Language Reference @@ -1123,6 +1151,34 @@ Expressions Change Log

+

+ + 1.5.0 + Feb 25, 2013 + +

    +
  • + First release of Literate CoffeeScript. +
  • +
  • + The CoffeeScript REPL is now based on the Node.js REPL, and should work + better and more familiarly. +
  • +
  • + Returning explicit values from constructors is now forbidden. If you want + to return an arbitrary value, use a function, not a constructor. +
  • +
  • + You can now loop over an array backwards, without having to manually + deal with the indexes. +
  • +
  • + Source locations are now preserved in the CoffeeScript AST, although + source maps are not yet being emitted. +
  • +
+

+

1.4.0 diff --git a/documentation/js/aliases.js b/documentation/js/aliases.js index 440dc4f7..05ac2e2a 100644 --- a/documentation/js/aliases.js +++ b/documentation/js/aliases.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var volume, winner; if (ignition === true) { diff --git a/documentation/js/array_comprehensions.js b/documentation/js/array_comprehensions.js index 7c2317a8..584d1569 100644 --- a/documentation/js/array_comprehensions.js +++ b/documentation/js/array_comprehensions.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var courses, dish, food, foods, i, _i, _j, _k, _len, _len1, _len2, _ref; _ref = ['toast', 'cheese', 'wine']; diff --git a/documentation/js/block_comment.js b/documentation/js/block_comment.js index be3e7a29..305d882e 100644 --- a/documentation/js/block_comment.js +++ b/documentation/js/block_comment.js @@ -1,6 +1,6 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 /* -CoffeeScript Compiler v1.4.0 +CoffeeScript Compiler v1.5.0 Released under the MIT License */ diff --git a/documentation/js/cake_tasks.js b/documentation/js/cake_tasks.js index a65c8102..d35908e1 100644 --- a/documentation/js/cake_tasks.js +++ b/documentation/js/cake_tasks.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var fs; fs = require('fs'); diff --git a/documentation/js/classes.js b/documentation/js/classes.js index c9c20a87..0052f189 100644 --- a/documentation/js/classes.js +++ b/documentation/js/classes.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var Animal, Horse, Snake, sam, tom, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; @@ -22,7 +22,7 @@ Snake = (function(_super) { __extends(Snake, _super); function Snake() { - return Snake.__super__.constructor.apply(this, arguments); + Snake.__super__.constructor.apply(this, arguments); } Snake.prototype.move = function() { @@ -39,7 +39,7 @@ Horse = (function(_super) { __extends(Horse, _super); function Horse() { - return Horse.__super__.constructor.apply(this, arguments); + Horse.__super__.constructor.apply(this, arguments); } Horse.prototype.move = function() { diff --git a/documentation/js/comparisons.js b/documentation/js/comparisons.js index 4bad6421..d36f062b 100644 --- a/documentation/js/comparisons.js +++ b/documentation/js/comparisons.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var cholesterol, healthy; cholesterol = 127; diff --git a/documentation/js/conditionals.js b/documentation/js/conditionals.js index 7ea62ce1..a1e923c1 100644 --- a/documentation/js/conditionals.js +++ b/documentation/js/conditionals.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var date, mood; if (singing) { diff --git a/documentation/js/default_args.js b/documentation/js/default_args.js index f4a1007a..da637040 100644 --- a/documentation/js/default_args.js +++ b/documentation/js/default_args.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var fill; fill = function(container, liquid) { diff --git a/documentation/js/do.js b/documentation/js/do.js index 843b8a54..af8facea 100644 --- a/documentation/js/do.js +++ b/documentation/js/do.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var filename, _fn, _i, _len; _fn = function(filename) { diff --git a/documentation/js/embedded.js b/documentation/js/embedded.js index 2db8c26c..da4e54d4 100644 --- a/documentation/js/embedded.js +++ b/documentation/js/embedded.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var hi; hi = function() { diff --git a/documentation/js/existence.js b/documentation/js/existence.js index 1fc67cb2..dc9a20fa 100644 --- a/documentation/js/existence.js +++ b/documentation/js/existence.js @@ -1,7 +1,7 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var footprints, solipsism, speed; -if ((typeof mind !== "undefined" && mind !== null) && !(typeof world !== "undefined" && world !== null)) { +if ((typeof mind !== "undefined" && mind !== null) && (typeof world === "undefined" || world === null)) { solipsism = true; } diff --git a/documentation/js/expressions.js b/documentation/js/expressions.js index 3ac6d81d..c307a390 100644 --- a/documentation/js/expressions.js +++ b/documentation/js/expressions.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var eldest, grade; grade = function(student) { diff --git a/documentation/js/expressions_assignment.js b/documentation/js/expressions_assignment.js index bade6b6b..679a9374 100644 --- a/documentation/js/expressions_assignment.js +++ b/documentation/js/expressions_assignment.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var one, six, three, two; six = (one = 1) + (two = 2) + (three = 3); diff --git a/documentation/js/expressions_comprehension.js b/documentation/js/expressions_comprehension.js index 24e42c7b..5ea472c0 100644 --- a/documentation/js/expressions_comprehension.js +++ b/documentation/js/expressions_comprehension.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var globals, name; globals = ((function() { diff --git a/documentation/js/expressions_try.js b/documentation/js/expressions_try.js index c07dae9c..5a2288f5 100644 --- a/documentation/js/expressions_try.js +++ b/documentation/js/expressions_try.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 alert((function() { try { diff --git a/documentation/js/fat_arrow.js b/documentation/js/fat_arrow.js index 5e8ae8ec..deec4d34 100644 --- a/documentation/js/fat_arrow.js +++ b/documentation/js/fat_arrow.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var Account; Account = function(customer, cart) { diff --git a/documentation/js/functions.js b/documentation/js/functions.js index e76d2eec..0a7e2761 100644 --- a/documentation/js/functions.js +++ b/documentation/js/functions.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var cube, square; square = function(x) { diff --git a/documentation/js/heredocs.js b/documentation/js/heredocs.js index 584c736b..36bed819 100644 --- a/documentation/js/heredocs.js +++ b/documentation/js/heredocs.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var html; html = "\n cup of coffeescript\n"; diff --git a/documentation/js/heregexes.js b/documentation/js/heregexes.js index 8fe93ab6..f4cb22cb 100644 --- a/documentation/js/heregexes.js +++ b/documentation/js/heregexes.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var OPERATOR; OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/; diff --git a/documentation/js/interpolation.js b/documentation/js/interpolation.js index f141ee3c..4464c3a2 100644 --- a/documentation/js/interpolation.js +++ b/documentation/js/interpolation.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var author, quote, sentence; author = "Wittgenstein"; diff --git a/documentation/js/multiple_return_values.js b/documentation/js/multiple_return_values.js index 3c8a6a8c..74cb61f0 100644 --- a/documentation/js/multiple_return_values.js +++ b/documentation/js/multiple_return_values.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var city, forecast, temp, weatherReport, _ref; weatherReport = function(location) { diff --git a/documentation/js/object_comprehensions.js b/documentation/js/object_comprehensions.js index b07a0a71..47f9d108 100644 --- a/documentation/js/object_comprehensions.js +++ b/documentation/js/object_comprehensions.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var age, ages, child, yearsOld; yearsOld = { diff --git a/documentation/js/object_extraction.js b/documentation/js/object_extraction.js index 1944be46..627c469f 100644 --- a/documentation/js/object_extraction.js +++ b/documentation/js/object_extraction.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var city, futurists, name, street, _ref, _ref1; futurists = { diff --git a/documentation/js/objects_and_arrays.js b/documentation/js/objects_and_arrays.js index 5806cfe1..4aff9bf2 100644 --- a/documentation/js/objects_and_arrays.js +++ b/documentation/js/objects_and_arrays.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var bitlist, kids, singers, song; song = ["do", "re", "mi", "fa", "so"]; diff --git a/documentation/js/objects_reserved.js b/documentation/js/objects_reserved.js index 73a90e76..9f285fac 100644 --- a/documentation/js/objects_reserved.js +++ b/documentation/js/objects_reserved.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 $('.account').attr({ "class": 'active' diff --git a/documentation/js/overview.js b/documentation/js/overview.js index 0b58560a..95e59623 100644 --- a/documentation/js/overview.js +++ b/documentation/js/overview.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var cubes, list, math, num, number, opposite, race, square, __slice = [].slice; diff --git a/documentation/js/parallel_assignment.js b/documentation/js/parallel_assignment.js index 730d6e9a..24cc1a1d 100644 --- a/documentation/js/parallel_assignment.js +++ b/documentation/js/parallel_assignment.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var theBait, theSwitch, _ref; theBait = 1000; diff --git a/documentation/js/patterns_and_splats.js b/documentation/js/patterns_and_splats.js index 3f9a0688..85c90fa6 100644 --- a/documentation/js/patterns_and_splats.js +++ b/documentation/js/patterns_and_splats.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var close, contents, open, tag, _i, _ref, __slice = [].slice; diff --git a/documentation/js/prototypes.js b/documentation/js/prototypes.js index f7425bff..d77b9bde 100644 --- a/documentation/js/prototypes.js +++ b/documentation/js/prototypes.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 String.prototype.dasherize = function() { return this.replace(/_/g, "-"); diff --git a/documentation/js/range_comprehensions.js b/documentation/js/range_comprehensions.js index 2f6a7617..c23b1748 100644 --- a/documentation/js/range_comprehensions.js +++ b/documentation/js/range_comprehensions.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var countdown, num; countdown = (function() { diff --git a/documentation/js/scope.js b/documentation/js/scope.js index 59c24a8b..62b634fa 100644 --- a/documentation/js/scope.js +++ b/documentation/js/scope.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var changeNumbers, inner, outer; outer = 1; diff --git a/documentation/js/slices.js b/documentation/js/slices.js index b374c5a4..7b79b347 100644 --- a/documentation/js/slices.js +++ b/documentation/js/slices.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var copy, end, middle, numbers, start; numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]; diff --git a/documentation/js/soaks.js b/documentation/js/soaks.js index 6918915c..c363b600 100644 --- a/documentation/js/soaks.js +++ b/documentation/js/soaks.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var zip, _ref; zip = typeof lottery.drawWinner === "function" ? (_ref = lottery.drawWinner().address) != null ? _ref.zipcode : void 0 : void 0; diff --git a/documentation/js/splats.js b/documentation/js/splats.js index 87b21334..f5cb2c70 100644 --- a/documentation/js/splats.js +++ b/documentation/js/splats.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var awardMedals, contenders, gold, rest, silver, __slice = [].slice; diff --git a/documentation/js/splices.js b/documentation/js/splices.js index 938c8171..f38e6858 100644 --- a/documentation/js/splices.js +++ b/documentation/js/splices.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var numbers, _ref; numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; diff --git a/documentation/js/strings.js b/documentation/js/strings.js index 566c2f01..3b33ead2 100644 --- a/documentation/js/strings.js +++ b/documentation/js/strings.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var mobyDick; mobyDick = "Call me Ishmael. Some years ago -- never mind how long precisely -- having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world..."; diff --git a/documentation/js/switch.js b/documentation/js/switch.js index 5620a2b6..99c7a39c 100644 --- a/documentation/js/switch.js +++ b/documentation/js/switch.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 switch (day) { case "Mon": diff --git a/documentation/js/try.js b/documentation/js/try.js index a921b7bc..1a1878e2 100644 --- a/documentation/js/try.js +++ b/documentation/js/try.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 try { allHellBreaksLoose(); diff --git a/documentation/js/while.js b/documentation/js/while.js index 255ebbbd..a94f730f 100644 --- a/documentation/js/while.js +++ b/documentation/js/while.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.4.0 +// Generated by CoffeeScript 1.5.0 var lyrics, num; if (this.studyingEconomics) { diff --git a/extras/coffee-script.js b/extras/coffee-script.js index 66c387f8..d8ab2627 100644 --- a/extras/coffee-script.js +++ b/extras/coffee-script.js @@ -1,8 +1,11 @@ /** - * CoffeeScript Compiler v1.4.0 + * CoffeeScript Compiler v1.5.0 * http://coffeescript.org * * Copyright 2011, Jeremy Ashkenas * Released under the MIT License */ -(function(root){var CoffeeScript=function(){function require(a){return require[a]}return require["./helpers"]=new function(){var a=this;((function(){var b,c,d;a.starts=function(a,b,c){return b===a.substr(c,b.length)},a.ends=function(a,b,c){var d;return d=b.length,b===a.substr(a.length-d-(c||0),d)},a.compact=function(a){var b,c,d,e;e=[];for(c=0,d=a.length;c=0)f+=1;else if(j=g[0],t.call(d,j)>=0)f-=1;a+=1}return a-1},a.prototype.removeLeadingNewlines=function(){var a,b,c,d,e;e=this.tokens;for(a=c=0,d=e.length;c=0)?(d.splice(b,1),0):1})},a.prototype.closeOpenCalls=function(){var a,b;return b=function(a,b){var c;return(c=a[0])===")"||c==="CALL_END"||a[0]==="OUTDENT"&&this.tag(b-1)===")"},a=function(a,b){return this.tokens[a[0]==="OUTDENT"?b-1:b][0]="CALL_END"},this.scanTokens(function(c,d){return c[0]==="CALL_START"&&this.detectEnd(d+1,b,a),1})},a.prototype.closeOpenIndexes=function(){var a,b;return b=function(a,b){var c;return(c=a[0])==="]"||c==="INDEX_END"},a=function(a,b){return a[0]="INDEX_END"},this.scanTokens(function(c,d){return c[0]==="INDEX_START"&&this.detectEnd(d+1,b,a),1})},a.prototype.addImplicitBraces=function(){var a,b,c,f,g,i,j,k;return f=[],g=null,k=null,c=!0,i=0,j=0,b=function(a,b){var d,e,f,g,i,m;return i=this.tokens.slice(b+1,+(b+3)+1||9e9),d=i[0],g=i[1],f=i[2],"HERECOMMENT"===(d!=null?d[0]:void 0)?!1:(e=a[0],t.call(l,e)>=0&&(c=!1),(e==="TERMINATOR"||e==="OUTDENT"||t.call(h,e)>=0&&c&&b-j!==1)&&(!k&&this.tag(b-1)!==","||(g!=null?g[0]:void 0)!==":"&&((d!=null?d[0]:void 0)!=="@"||(f!=null?f[0]:void 0)!==":"))||e===","&&d&&(m=d[0])!=="IDENTIFIER"&&m!=="NUMBER"&&m!=="STRING"&&m!=="@"&&m!=="TERMINATOR"&&m!=="OUTDENT")},a=function(a,b){var c;return c=this.generate("}","}",a[2]),this.tokens.splice(b,0,c)},this.scanTokens(function(h,i,m){var n,o,p,q,r,s,u,v;if(u=q=h[0],t.call(e,u)>=0)return f.push([q==="INDENT"&&this.tag(i-1)==="{"?"{":q,i]),1;if(t.call(d,q)>=0)return g=f.pop(),1;if(q!==":"||(n=this.tag(i-2))!==":"&&((v=f[f.length-1])!=null?v[0]:void 0)==="{")return 1;c=!0,j=i+1,f.push(["{"]),o=n==="@"?i-2:i-1;while(this.tag(o-2)==="HERECOMMENT")o-=2;return p=this.tag(o-1),k=!p||t.call(l,p)>=0,s=new String("{"),s.generated=!0,r=this.generate("{",s,h[2]),m.splice(o,0,r),this.detectEnd(i+2,b,a),2})},a.prototype.addImplicitParentheses=function(){var a,b,c,d,e;return c=e=d=!1,b=function(a,b){var c,g,i,j;g=a[0];if(!e&&a.fromThen)return!0;if(g==="IF"||g==="ELSE"||g==="CATCH"||g==="->"||g==="=>"||g==="CLASS")e=!0;if(g==="IF"||g==="ELSE"||g==="SWITCH"||g==="TRY"||g==="=")d=!0;return g!=="."&&g!=="?."&&g!=="::"||this.tag(b-1)!=="OUTDENT"?!a.generated&&this.tag(b-1)!==","&&(t.call(h,g)>=0||g==="INDENT"&&!d)&&(g!=="INDENT"||(i=this.tag(b-2))!=="CLASS"&&i!=="EXTENDS"&&(j=this.tag(b-1),t.call(f,j)<0)&&(!(c=this.tokens[b+1])||!c.generated||c[0]!=="{")):!0},a=function(a,b){return this.tokens.splice(b,0,this.generate("CALL_END",")",a[2]))},this.scanTokens(function(f,h,k){var m,n,o,p,q,r,s,u;q=f[0];if(q==="CLASS"||q==="IF"||q==="FOR"||q==="WHILE")c=!0;return r=k.slice(h-1,+(h+1)+1||9e9),p=r[0],n=r[1],o=r[2],m=!c&&q==="INDENT"&&o&&o.generated&&o[0]==="{"&&p&&(s=p[0],t.call(i,s)>=0),e=!1,d=!1,t.call(l,q)>=0&&(c=!1),p&&!p.spaced&&q==="?"&&(f.call=!0),f.fromThen?1:m||(p!=null?p.spaced:void 0)&&(p.call||(u=p[0],t.call(i,u)>=0))&&(t.call(g,q)>=0||!f.spaced&&!f.newLine&&t.call(j,q)>=0)?(k.splice(h,0,this.generate("CALL_START","(",f[2])),this.detectEnd(h+1,b,a),p[0]==="?"&&(p[0]="FUNC_EXIST"),2):1})},a.prototype.addImplicitIndentation=function(){var a,b,c,d,e;return e=c=d=null,b=function(a,b){var c;return a[1]!==";"&&(c=a[0],t.call(m,c)>=0)&&(a[0]!=="ELSE"||e==="IF"||e==="THEN")},a=function(a,b){return this.tokens.splice(this.tag(b-1)===","?b-1:b,0,d)},this.scanTokens(function(f,g,h){var i,j,k;return i=f[0],i==="TERMINATOR"&&this.tag(g+1)==="THEN"?(h.splice(g,1),0):i==="ELSE"&&this.tag(g-1)!=="OUTDENT"?(h.splice.apply(h,[g,0].concat(u.call(this.indentation(f)))),2):i!=="CATCH"||(j=this.tag(g+2))!=="OUTDENT"&&j!=="TERMINATOR"&&j!=="FINALLY"?t.call(n,i)>=0&&this.tag(g+1)!=="INDENT"&&(i!=="ELSE"||this.tag(g+1)!=="IF")?(e=i,k=this.indentation(f,!0),c=k[0],d=k[1],e==="THEN"&&(c.fromThen=!0),h.splice(g+1,0,c),this.detectEnd(g+2,b,a),i==="THEN"&&h.splice(g,1),1):1:(h.splice.apply(h,[g+2,0].concat(u.call(this.indentation(f)))),4)})},a.prototype.tagPostfixConditionals=function(){var a,b,c;return c=null,b=function(a,b){var c;return(c=a[0])==="TERMINATOR"||c==="INDENT"},a=function(a,b){if(a[0]!=="INDENT"||a.generated&&!a.fromThen)return c[0]="POST_"+c[0]},this.scanTokens(function(d,e){return d[0]!=="IF"?1:(c=d,this.detectEnd(e+1,b,a),1)})},a.prototype.indentation=function(a,b){var c,d;return b==null&&(b=!1),c=["INDENT",2,a[2]],d=["OUTDENT",2,a[2]],b&&(c.generated=d.generated=!0),[c,d]},a.prototype.generate=function(a,b,c){var d;return d=[a,b,c],d.generated=!0,d},a.prototype.tag=function(a){var b;return(b=this.tokens[a])!=null?b[0]:void 0},a}(),b=[["(",")"],["[","]"],["{","}"],["INDENT","OUTDENT"],["CALL_START","CALL_END"],["PARAM_START","PARAM_END"],["INDEX_START","INDEX_END"]],a.INVERSES=k={},e=[],d=[];for(q=0,r=b.length;q","=>","[","(","{","--","++"],j=["+","-"],f=["->","=>","{","[",","],h=["POST_IF","FOR","WHILE","UNTIL","WHEN","BY","LOOP","TERMINATOR"],n=["ELSE","->","=>","TRY","FINALLY","THEN"],m=["TERMINATOR","CATCH","FINALLY","ELSE","OUTDENT","LEADING_WHEN"],l=["TERMINATOR","INDENT","OUTDENT"]})).call(this)},require["./lexer"]=new function(){var a=this;((function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X=[].indexOf||function(a){for(var b=0,c=this.length;b=0||X.call(g,c)>=0)&&(j=c.toUpperCase(),j==="WHEN"&&(l=this.tag(),X.call(v,l)>=0)?j="LEADING_WHEN":j==="FOR"?this.seenFor=!0:j==="UNLESS"?j="IF":X.call(O,j)>=0?j="UNARY":X.call(H,j)>=0&&(j!=="INSTANCEOF"&&this.seenFor?(j="FOR"+j,this.seenFor=!1):(j="RELATION",this.value()==="!"&&(this.tokens.pop(),c="!"+c)))),X.call(t,c)>=0&&(b?(j="IDENTIFIER",c=new String(c),c.reserved=!0):X.call(I,c)>=0&&this.error('reserved word "'+c+'"')),b||(X.call(e,c)>=0&&(c=f[c]),j=function(){switch(c){case"!":return"UNARY";case"==":case"!=":return"COMPARE";case"&&":case"||":return"LOGIC";case"true":case"false":return"BOOL";case"break":case"continue":return"STATEMENT";default:return j}}()),this.token(j,c),a&&this.token(":",":"),d.length)):0},a.prototype.numberToken=function(){var a,b,c,d,e;if(!(c=E.exec(this.chunk)))return 0;d=c[0],/^0[BOX]/.test(d)?this.error("radix prefix '"+d+"' must be lowercase"):/E/.test(d)&&!/^0x/.test(d)?this.error("exponential notation '"+d+"' must be indicated with a lowercase 'e'"):/^0\d*[89]/.test(d)?this.error("decimal literal '"+d+"' must not be prefixed with '0'"):/^0\d+/.test(d)&&this.error("octal literal '"+d+"' must be prefixed with '0o'"),b=d.length;if(e=/^0o([0-7]+)/.exec(d))d="0x"+parseInt(e[1],8).toString(16);if(a=/^0b([01]+)/.exec(d))d="0x"+parseInt(a[1],2).toString(16);return this.token("NUMBER",d),b},a.prototype.stringToken=function(){var a,b,c;switch(this.chunk.charAt(0)){case"'":if(!(a=L.exec(this.chunk)))return 0;this.token("STRING",(c=a[0]).replace(A,"\\\n"));break;case'"':if(!(c=this.balancedString(this.chunk,'"')))return 0;0=0)?0:(c=G.exec(this.chunk))?(g=c,c=g[0],e=g[1],a=g[2],e.slice(0,2)==="/*"&&this.error("regular expressions cannot begin with `*`"),e==="//"&&(e="/(?:)/"),this.token("REGEX",""+e+a),c.length):0)},a.prototype.heregexToken=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d=a[0],b=a[1],c=a[2];if(0>b.indexOf("#{"))return e=b.replace(o,"").replace(/\//g,"\\/"),e.match(/^\*/)&&this.error("regular expressions cannot begin with `*`"),this.token("REGEX","/"+(e||"(?:)")+"/"+c),d.length;this.token("IDENTIFIER","RegExp"),this.tokens.push(["CALL_START","("]),g=[],k=this.interpolateString(b,{regex:!0});for(i=0,j=k.length;ithis.indent){if(d)return this.indebt=e-this.indent,this.suppressNewlines(),b.length;a=e-this.indent+this.outdebt,this.token("INDENT",a),this.indents.push(a),this.ends.push("OUTDENT"),this.outdebt=this.indebt=0}else this.indebt=0,this.outdentToken(this.indent-e,d);return this.indent=e,b.length},a.prototype.outdentToken=function(a,b){var c,d;while(a>0)d=this.indents.length-1,this.indents[d]===void 0?a=0:this.indents[d]===this.outdebt?(a-=this.outdebt,this.outdebt=0):this.indents[d]=0)&&this.error('reserved word "'+this.value()+"\" can't be assigned");if((h=b[1])==="||"||h==="&&")return b[0]="COMPOUND_ASSIGN",b[1]+="=",f.length}if(f===";")this.seenFor=!1,e="TERMINATOR";else if(X.call(z,f)>=0)e="MATH";else if(X.call(i,f)>=0)e="COMPARE";else if(X.call(j,f)>=0)e="COMPOUND_ASSIGN";else if(X.call(O,f)>=0)e="UNARY";else if(X.call(K,f)>=0)e="SHIFT";else if(X.call(x,f)>=0||f==="?"&&(b!=null?b.spaced:void 0))e="LOGIC";else if(b&&!b.spaced)if(f==="("&&(k=b[0],X.call(c,k)>=0))b[0]==="?"&&(b[0]="FUNC_EXIST"),e="CALL_START";else if(f==="["&&(l=b[0],X.call(q,l)>=0)){e="INDEX_START";switch(b[0]){case"?":b[0]="INDEX_SOAK"}}switch(f){case"(":case"{":case"[":this.ends.push(r[f]);break;case")":case"}":case"]":this.pair(f)}return this.token(e,f),f.length},a.prototype.sanitizeHeredoc=function(a,b){var c,d,e,f,g;e=b.indent,d=b.herecomment;if(d){l.test(a)&&this.error('block comment cannot contain "*/", starting');if(a.indexOf("\n")<=0)return a}else while(f=m.exec(a)){c=f[1];if(e===null||0<(g=c.length)&&gj;d=1<=j?++i:--i){if(c){--c;continue}switch(e=a.charAt(d)){case"\\":++c;continue;case b:h.pop();if(!h.length)return a.slice(0,+d+1||9e9);b=h[h.length-1];continue}b!=="}"||e!=='"'&&e!=="'"?b==="}"&&e==="/"&&(f=n.exec(a.slice(d))||G.exec(a.slice(d)))?c+=f[0].length-1:b==="}"&&e==="{"?h.push(b="}"):b==='"'&&g==="#"&&e==="{"&&h.push(b="}"):h.push(b=e),g=e}return this.error("missing "+h.pop()+", starting")},a.prototype.interpolateString=function(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;c==null&&(c={}),e=c.heredoc,m=c.regex,o=[],l=0,f=-1;while(j=b.charAt(f+=1)){if(j==="\\"){f+=1;continue}if(j!=="#"||b.charAt(f+1)!=="{"||!(d=this.balancedString(b.slice(f+1),"}")))continue;l1&&(k.unshift(["(","(",this.line]),k.push([")",")",this.line])),o.push(["TOKENS",k])}f+=d.length,l=f+1}f>l&&l1)&&this.token("(","(");for(f=q=0,r=o.length;q|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/,P=/^[^\n\S]+/,h=/^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/,d=/^[-=]>/,B=/^(?:\n[^\n\S]*)+/,L=/^'[^\\']*(?:\\.[^\\']*)*'/,s=/^`[^\\`]*(?:\\.[^\\`]*)*`/,G=/^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/,n=/^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/,o=/\s+(?:#.*)?/g,A=/\n/g,m=/\n+([^\n\S]*)/g,l=/\*\//,w=/^\s*(?:,|\??\.(?![.\d])|::)/,N=/\s+$/,j=["-=","+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|="],O=["!","~","NEW","TYPEOF","DELETE","DO"],x=["&&","||","&","|","^"],K=["<<",">>",">>>"],i=["==","!=","<",">","<=",">="],z=["*","/","%"],H=["IN","OF","INSTANCEOF"],b=["TRUE","FALSE"],C=["NUMBER","REGEX","BOOL","NULL","UNDEFINED","++","--","]"],D=C.concat(")","}","THIS","IDENTIFIER","STRING"),c=["IDENTIFIER","STRING","REGEX",")","]","}","?","::","@","THIS","SUPER"],q=c.concat("NUMBER","BOOL","NULL","UNDEFINED"),v=["INDENT","OUTDENT","TERMINATOR"]})).call(this)},require["./parser"]=new function(){var a=this,b=function(){var a={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Block:5,TERMINATOR:6,Line:7,Expression:8,Statement:9,Return:10,Comment:11,STATEMENT:12,Value:13,Invocation:14,Code:15,Operation:16,Assign:17,If:18,Try:19,While:20,For:21,Switch:22,Class:23,Throw:24,INDENT:25,OUTDENT:26,Identifier:27,IDENTIFIER:28,AlphaNumeric:29,NUMBER:30,STRING:31,Literal:32,JS:33,REGEX:34,DEBUGGER:35,UNDEFINED:36,NULL:37,BOOL:38,Assignable:39,"=":40,AssignObj:41,ObjAssignable:42,":":43,ThisProperty:44,RETURN:45,HERECOMMENT:46,PARAM_START:47,ParamList:48,PARAM_END:49,FuncGlyph:50,"->":51,"=>":52,OptComma:53,",":54,Param:55,ParamVar:56,"...":57,Array:58,Object:59,Splat:60,SimpleAssignable:61,Accessor:62,Parenthetical:63,Range:64,This:65,".":66,"?.":67,"::":68,Index:69,INDEX_START:70,IndexValue:71,INDEX_END:72,INDEX_SOAK:73,Slice:74,"{":75,AssignList:76,"}":77,CLASS:78,EXTENDS:79,OptFuncExist:80,Arguments:81,SUPER:82,FUNC_EXIST:83,CALL_START:84,CALL_END:85,ArgList:86,THIS:87,"@":88,"[":89,"]":90,RangeDots:91,"..":92,Arg:93,SimpleArgs:94,TRY:95,Catch:96,FINALLY:97,CATCH:98,THROW:99,"(":100,")":101,WhileSource:102,WHILE:103,WHEN:104,UNTIL:105,Loop:106,LOOP:107,ForBody:108,FOR:109,ForStart:110,ForSource:111,ForVariables:112,OWN:113,ForValue:114,FORIN:115,FOROF:116,BY:117,SWITCH:118,Whens:119,ELSE:120,When:121,LEADING_WHEN:122,IfBlock:123,IF:124,POST_IF:125,UNARY:126,"-":127,"+":128,"--":129,"++":130,"?":131,MATH:132,SHIFT:133,COMPARE:134,LOGIC:135,RELATION:136,COMPOUND_ASSIGN:137,$accept:0,$end:1},terminals_:{2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",70:"INDEX_START",72:"INDEX_END",73:"INDEX_SOAK",75:"{",77:"}",78:"CLASS",79:"EXTENDS",82:"SUPER",83:"FUNC_EXIST",84:"CALL_START",85:"CALL_END",87:"THIS",88:"@",89:"[",90:"]",92:"..",95:"TRY",97:"FINALLY",98:"CATCH",99:"THROW",100:"(",101:")",103:"WHILE",104:"WHEN",105:"UNTIL",107:"LOOP",109:"FOR",113:"OWN",115:"FORIN",116:"FOROF",117:"BY",118:"SWITCH",120:"ELSE",122:"LEADING_WHEN",124:"IF",125:"POST_IF",126:"UNARY",127:"-",128:"+",129:"--",130:"++",131:"?",132:"MATH",133:"SHIFT",134:"COMPARE",135:"LOGIC",136:"RELATION",137:"COMPOUND_ASSIGN"},productions_:[0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,1],[62,1],[69,3],[69,2],[71,1],[71,1],[59,4],[76,0],[76,1],[76,3],[76,4],[76,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[80,0],[80,1],[81,2],[81,4],[65,1],[65,1],[44,2],[58,2],[58,4],[91,1],[91,1],[64,5],[74,3],[74,2],[74,2],[74,1],[86,1],[86,3],[86,4],[86,4],[86,6],[93,1],[93,1],[94,1],[94,3],[19,2],[19,3],[19,4],[19,5],[96,3],[24,2],[63,3],[63,5],[102,2],[102,4],[102,2],[102,4],[20,2],[20,2],[20,2],[20,1],[106,2],[106,2],[21,2],[21,2],[21,2],[108,2],[108,2],[110,2],[110,3],[114,1],[114,1],[114,1],[114,1],[112,1],[112,3],[111,2],[111,2],[111,4],[111,4],[111,4],[111,6],[111,6],[22,5],[22,7],[22,4],[22,6],[119,1],[119,2],[121,3],[121,4],[123,3],[123,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,3]],performAction:function(b,c,d,e,f,g,h){var i=g.length-1;switch(f){case 1:return this.$=new e.Block;case 2:return this.$=g[i];case 3:return this.$=g[i-1];case 4:this.$=e.Block.wrap([g[i]]);break;case 5:this.$=g[i-2].push(g[i]);break;case 6:this.$=g[i-1];break;case 7:this.$=g[i];break;case 8:this.$=g[i];break;case 9:this.$=g[i];break;case 10:this.$=g[i];break;case 11:this.$=new e.Literal(g[i]);break;case 12:this.$=g[i];break;case 13:this.$=g[i];break;case 14:this.$=g[i];break;case 15:this.$=g[i];break;case 16:this.$=g[i];break;case 17:this.$=g[i];break;case 18:this.$=g[i];break;case 19:this.$=g[i];break;case 20:this.$=g[i];break;case 21:this.$=g[i];break;case 22:this.$=g[i];break;case 23:this.$=g[i];break;case 24:this.$=new e.Block;break;case 25:this.$=g[i-1];break;case 26:this.$=new e.Literal(g[i]);break;case 27:this.$=new e.Literal(g[i]);break;case 28:this.$=new e.Literal(g[i]);break;case 29:this.$=g[i];break;case 30:this.$=new e.Literal(g[i]);break;case 31:this.$=new e.Literal(g[i]);break;case 32:this.$=new e.Literal(g[i]);break;case 33:this.$=new e.Undefined;break;case 34:this.$=new e.Null;break;case 35:this.$=new e.Bool(g[i]);break;case 36:this.$=new e.Assign(g[i-2],g[i]);break;case 37:this.$=new e.Assign(g[i-3],g[i]);break;case 38:this.$=new e.Assign(g[i-4],g[i-1]);break;case 39:this.$=new e.Value(g[i]);break;case 40:this.$=new e.Assign(new e.Value(g[i-2]),g[i],"object");break;case 41:this.$=new e.Assign(new e.Value(g[i-4]),g[i-1],"object");break;case 42:this.$=g[i];break;case 43:this.$=g[i];break;case 44:this.$=g[i];break;case 45:this.$=g[i];break;case 46:this.$=new e.Return(g[i]);break;case 47:this.$=new e.Return;break;case 48:this.$=new e.Comment(g[i]);break;case 49:this.$=new e.Code(g[i-3],g[i],g[i-1]);break;case 50:this.$=new e.Code([],g[i],g[i-1]);break;case 51:this.$="func";break;case 52:this.$="boundfunc";break;case 53:this.$=g[i];break;case 54:this.$=g[i];break;case 55:this.$=[];break;case 56:this.$=[g[i]];break;case 57:this.$=g[i-2].concat(g[i]);break;case 58:this.$=g[i-3].concat(g[i]);break;case 59:this.$=g[i-5].concat(g[i-2]);break;case 60:this.$=new e.Param(g[i]);break;case 61:this.$=new e.Param(g[i-1],null,!0);break;case 62:this.$=new e.Param(g[i-2],g[i]);break;case 63:this.$=g[i];break;case 64:this.$=g[i];break;case 65:this.$=g[i];break;case 66:this.$=g[i];break;case 67:this.$=new e.Splat(g[i-1]);break;case 68:this.$=new e.Value(g[i]);break;case 69:this.$=g[i-1].add(g[i]);break;case 70:this.$=new e.Value(g[i-1],[].concat(g[i]));break;case 71:this.$=g[i];break;case 72:this.$=g[i];break;case 73:this.$=new e.Value(g[i]);break;case 74:this.$=new e.Value(g[i]);break;case 75:this.$=g[i];break;case 76:this.$=new e.Value(g[i]);break;case 77:this.$=new e.Value(g[i]);break;case 78:this.$=new e.Value(g[i]);break;case 79:this.$=g[i];break;case 80:this.$=new e.Access(g[i]);break;case 81:this.$=new e.Access(g[i],"soak");break;case 82:this.$=[new e.Access(new e.Literal("prototype")),new e.Access(g[i])];break;case 83:this.$=new e.Access(new e.Literal("prototype"));break;case 84:this.$=g[i];break;case 85:this.$=g[i-1];break;case 86:this.$=e.extend(g[i],{soak:!0});break;case 87:this.$=new e.Index(g[i]);break;case 88:this.$=new e.Slice(g[i]);break;case 89:this.$=new e.Obj(g[i-2],g[i-3].generated);break;case 90:this.$=[];break;case 91:this.$=[g[i]];break;case 92:this.$=g[i-2].concat(g[i]);break;case 93:this.$=g[i-3].concat(g[i]);break;case 94:this.$=g[i-5].concat(g[i-2]);break;case 95:this.$=new e.Class;break;case 96:this.$=new e.Class(null,null,g[i]);break;case 97:this.$=new e.Class(null,g[i]);break;case 98:this.$=new e.Class(null,g[i-1],g[i]);break;case 99:this.$=new e.Class(g[i]);break;case 100:this.$=new e.Class(g[i-1],null,g[i]);break;case 101:this.$=new e.Class(g[i-2],g[i]);break;case 102:this.$=new e.Class(g[i-3],g[i-1],g[i]);break;case 103:this.$=new e.Call(g[i-2],g[i],g[i-1]);break;case 104:this.$=new e.Call(g[i-2],g[i],g[i-1]);break;case 105:this.$=new e.Call("super",[new e.Splat(new e.Literal("arguments"))]);break;case 106:this.$=new e.Call("super",g[i]);break;case 107:this.$=!1;break;case 108:this.$=!0;break;case 109:this.$=[];break;case 110:this.$=g[i-2];break;case 111:this.$=new e.Value(new e.Literal("this"));break;case 112:this.$=new e.Value(new e.Literal("this"));break;case 113:this.$=new e.Value(new e.Literal("this"),[new e.Access(g[i])],"this");break;case 114:this.$=new e.Arr([]);break;case 115:this.$=new e.Arr(g[i-2]);break;case 116:this.$="inclusive";break;case 117:this.$="exclusive";break;case 118:this.$=new e.Range(g[i-3],g[i-1],g[i-2]);break;case 119:this.$=new e.Range(g[i-2],g[i],g[i-1]);break;case 120:this.$=new e.Range(g[i-1],null,g[i]);break;case 121:this.$=new e.Range(null,g[i],g[i-1]);break;case 122:this.$=new e.Range(null,null,g[i]);break;case 123:this.$=[g[i]];break;case 124:this.$=g[i-2].concat(g[i]);break;case 125:this.$=g[i-3].concat(g[i]);break;case 126:this.$=g[i-2];break;case 127:this.$=g[i-5].concat(g[i-2]);break;case 128:this.$=g[i];break;case 129:this.$=g[i];break;case 130:this.$=g[i];break;case 131:this.$=[].concat(g[i-2],g[i]);break;case 132:this.$=new e.Try(g[i]);break;case 133:this.$=new e.Try(g[i-1],g[i][0],g[i][1]);break;case 134:this.$=new e.Try(g[i-2],null,null,g[i]);break;case 135:this.$=new e.Try(g[i-3],g[i-2][0],g[i-2][1],g[i]);break;case 136:this.$=[g[i-1],g[i]];break;case 137:this.$=new e.Throw(g[i]);break;case 138:this.$=new e.Parens(g[i-1]);break;case 139:this.$=new e.Parens(g[i-2]);break;case 140:this.$=new e.While(g[i]);break;case 141:this.$=new e.While(g[i-2],{guard:g[i]});break;case 142:this.$=new e.While(g[i],{invert:!0});break;case 143:this.$=new e.While(g[i-2],{invert:!0,guard:g[i]});break;case 144:this.$=g[i-1].addBody(g[i]);break;case 145:this.$=g[i].addBody(e.Block.wrap([g[i-1]]));break;case 146:this.$=g[i].addBody(e.Block.wrap([g[i-1]]));break;case 147:this.$=g[i];break;case 148:this.$=(new e.While(new e.Literal("true"))).addBody(g[i]);break;case 149:this.$=(new e.While(new e.Literal("true"))).addBody(e.Block.wrap([g[i]]));break;case 150:this.$=new e.For(g[i-1],g[i]);break;case 151:this.$=new e.For(g[i-1],g[i]);break;case 152:this.$=new e.For(g[i],g[i-1]);break;case 153:this.$={source:new e.Value(g[i])};break;case 154:this.$=function(){return g[i].own=g[i-1].own,g[i].name=g[i-1][0],g[i].index=g[i-1][1],g[i]}();break;case 155:this.$=g[i];break;case 156:this.$=function(){return g[i].own=!0,g[i]}();break;case 157:this.$=g[i];break;case 158:this.$=g[i];break;case 159:this.$=new e.Value(g[i]);break;case 160:this.$=new e.Value(g[i]);break;case 161:this.$=[g[i]];break;case 162:this.$=[g[i-2],g[i]];break;case 163:this.$={source:g[i]};break;case 164:this.$={source:g[i],object:!0};break;case 165:this.$={source:g[i-2],guard:g[i]};break;case 166:this.$={source:g[i-2],guard:g[i],object:!0};break;case 167:this.$={source:g[i-2],step:g[i]};break;case 168:this.$={source:g[i-4],guard:g[i-2],step:g[i]};break;case 169:this.$={source:g[i-4],step:g[i-2],guard:g[i]};break;case 170:this.$=new e.Switch(g[i-3],g[i-1]);break;case 171:this.$=new e.Switch(g[i-5],g[i-3],g[i-1]);break;case 172:this.$=new e.Switch(null,g[i-1]);break;case 173:this.$=new e.Switch(null,g[i-3],g[i-1]);break;case 174:this.$=g[i];break;case 175:this.$=g[i-1].concat(g[i]);break;case 176:this.$=[[g[i-1],g[i]]];break;case 177:this.$=[[g[i-2],g[i-1]]];break;case 178:this.$=new e.If(g[i-1],g[i],{type:g[i-2]});break;case 179:this.$=g[i-4].addElse(new e.If(g[i-1],g[i],{type:g[i-2]}));break;case 180:this.$=g[i];break;case 181:this.$=g[i-2].addElse(g[i]);break;case 182:this.$=new e.If(g[i],e.Block.wrap([g[i-2]]),{type:g[i-1],statement:!0});break;case 183:this.$=new e.If(g[i],e.Block.wrap([g[i-2]]),{type:g[i-1],statement:!0});break;case 184:this.$=new e.Op(g[i-1],g[i]);break;case 185:this.$=new e.Op("-",g[i]);break;case 186:this.$=new e.Op("+",g[i]);break;case 187:this.$=new e.Op("--",g[i]);break;case 188:this.$=new e.Op("++",g[i]);break;case 189:this.$=new e.Op("--",g[i-1],null,!0);break;case 190:this.$=new e.Op("++",g[i-1],null,!0);break;case 191:this.$=new e.Existence(g[i-1]);break;case 192:this.$=new e.Op("+",g[i-2],g[i]);break;case 193:this.$=new e.Op("-",g[i-2],g[i]);break;case 194:this.$=new e.Op(g[i-1],g[i-2],g[i]);break;case 195:this.$=new e.Op(g[i-1],g[i-2],g[i]);break;case 196:this.$=new e.Op(g[i-1],g[i-2],g[i]);break;case 197:this.$=new e.Op(g[i-1],g[i-2],g[i]);break;case 198:this.$=function(){return g[i-1].charAt(0)==="!"?(new e.Op(g[i-1].slice(1),g[i-2],g[i])).invert():new e.Op(g[i-1],g[i-2],g[i])}();break;case 199:this.$=new e.Assign(g[i-2],g[i],g[i-1]);break;case 200:this.$=new e.Assign(g[i-4],g[i-1],g[i-3]);break;case 201:this.$=new e.Extends(g[i-2],g[i])}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],101:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,7],6:[2,7],26:[2,7],101:[2,7],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,8],6:[2,8],26:[2,8],101:[2,8],102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,12],73:[1,100],77:[2,12],80:92,83:[1,94],84:[2,107],85:[2,12],90:[2,12],92:[2,12],101:[2,12],103:[2,12],104:[2,12],105:[2,12],109:[2,12],117:[2,12],125:[2,12],127:[2,12],128:[2,12],131:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,13],73:[1,100],77:[2,13],80:101,83:[1,94],84:[2,107],85:[2,13],90:[2,13],92:[2,13],101:[2,13],103:[2,13],104:[2,13],105:[2,13],109:[2,13],117:[2,13],125:[2,13],127:[2,13],128:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],72:[2,14],77:[2,14],85:[2,14],90:[2,14],92:[2,14],101:[2,14],103:[2,14],104:[2,14],105:[2,14],109:[2,14],117:[2,14],125:[2,14],127:[2,14],128:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],72:[2,15],77:[2,15],85:[2,15],90:[2,15],92:[2,15],101:[2,15],103:[2,15],104:[2,15],105:[2,15],109:[2,15],117:[2,15],125:[2,15],127:[2,15],128:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],72:[2,16],77:[2,16],85:[2,16],90:[2,16],92:[2,16],101:[2,16],103:[2,16],104:[2,16],105:[2,16],109:[2,16],117:[2,16],125:[2,16],127:[2,16],128:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],72:[2,17],77:[2,17],85:[2,17],90:[2,17],92:[2,17],101:[2,17],103:[2,17],104:[2,17],105:[2,17],109:[2,17],117:[2,17],125:[2,17],127:[2,17],128:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],72:[2,18],77:[2,18],85:[2,18],90:[2,18],92:[2,18],101:[2,18],103:[2,18],104:[2,18],105:[2,18],109:[2,18],117:[2,18],125:[2,18],127:[2,18],128:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],72:[2,19],77:[2,19],85:[2,19],90:[2,19],92:[2,19],101:[2,19],103:[2,19],104:[2,19],105:[2,19],109:[2,19],117:[2,19],125:[2,19],127:[2,19],128:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],72:[2,20],77:[2,20],85:[2,20],90:[2,20],92:[2,20],101:[2,20],103:[2,20],104:[2,20],105:[2,20],109:[2,20],117:[2,20],125:[2,20],127:[2,20],128:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],72:[2,21],77:[2,21],85:[2,21],90:[2,21],92:[2,21],101:[2,21],103:[2,21],104:[2,21],105:[2,21],109:[2,21],117:[2,21],125:[2,21],127:[2,21],128:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],72:[2,22],77:[2,22],85:[2,22],90:[2,22],92:[2,22],101:[2,22],103:[2,22],104:[2,22],105:[2,22],109:[2,22],117:[2,22],125:[2,22],127:[2,22],128:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],72:[2,23],77:[2,23],85:[2,23],90:[2,23],92:[2,23],101:[2,23],103:[2,23],104:[2,23],105:[2,23],109:[2,23],117:[2,23],125:[2,23],127:[2,23],128:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23]},{1:[2,9],6:[2,9],26:[2,9],101:[2,9],103:[2,9],105:[2,9],109:[2,9],125:[2,9]},{1:[2,10],6:[2,10],26:[2,10],101:[2,10],103:[2,10],105:[2,10],109:[2,10],125:[2,10]},{1:[2,11],6:[2,11],26:[2,11],101:[2,11],103:[2,11],105:[2,11],109:[2,11],125:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,103],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],70:[2,75],72:[2,75],73:[2,75],77:[2,75],83:[2,75],84:[2,75],85:[2,75],90:[2,75],92:[2,75],101:[2,75],103:[2,75],104:[2,75],105:[2,75],109:[2,75],117:[2,75],125:[2,75],127:[2,75],128:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],70:[2,76],72:[2,76],73:[2,76],77:[2,76],83:[2,76],84:[2,76],85:[2,76],90:[2,76],92:[2,76],101:[2,76],103:[2,76],104:[2,76],105:[2,76],109:[2,76],117:[2,76],125:[2,76],127:[2,76],128:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],70:[2,77],72:[2,77],73:[2,77],77:[2,77],83:[2,77],84:[2,77],85:[2,77],90:[2,77],92:[2,77],101:[2,77],103:[2,77],104:[2,77],105:[2,77],109:[2,77],117:[2,77],125:[2,77],127:[2,77],128:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],70:[2,78],72:[2,78],73:[2,78],77:[2,78],83:[2,78],84:[2,78],85:[2,78],90:[2,78],92:[2,78],101:[2,78],103:[2,78],104:[2,78],105:[2,78],109:[2,78],117:[2,78],125:[2,78],127:[2,78],128:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],70:[2,79],72:[2,79],73:[2,79],77:[2,79],83:[2,79],84:[2,79],85:[2,79],90:[2,79],92:[2,79],101:[2,79],103:[2,79],104:[2,79],105:[2,79],109:[2,79],117:[2,79],125:[2,79],127:[2,79],128:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],70:[2,105],72:[2,105],73:[2,105],77:[2,105],81:104,83:[2,105],84:[1,105],85:[2,105],90:[2,105],92:[2,105],101:[2,105],103:[2,105],104:[2,105],105:[2,105],109:[2,105],117:[2,105],125:[2,105],127:[2,105],128:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105]},{6:[2,55],25:[2,55],27:109,28:[1,73],44:110,48:106,49:[2,55],54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{5:115,25:[1,5]},{8:116,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:118,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:119,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:120,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:124,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,72],73:[2,72],77:[2,72],79:[1,128],83:[2,72],84:[2,72],85:[2,72],90:[2,72],92:[2,72],101:[2,72],103:[2,72],104:[2,72],105:[2,72],109:[2,72],117:[2,72],125:[2,72],127:[2,72],128:[2,72],129:[1,125],130:[1,126],131:[2,72],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[1,127]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],72:[2,180],77:[2,180],85:[2,180],90:[2,180],92:[2,180],101:[2,180],103:[2,180],104:[2,180],105:[2,180],109:[2,180],117:[2,180],120:[1,129],125:[2,180],127:[2,180],128:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180]},{5:130,25:[1,5]},{5:131,25:[1,5]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],72:[2,147],77:[2,147],85:[2,147],90:[2,147],92:[2,147],101:[2,147],103:[2,147],104:[2,147],105:[2,147],109:[2,147],117:[2,147],125:[2,147],127:[2,147],128:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147]},{5:132,25:[1,5]},{8:133,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,134],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,95],5:135,6:[2,95],13:121,14:122,25:[1,5],26:[2,95],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,49:[2,95],54:[2,95],57:[2,95],58:47,59:48,61:137,63:25,64:26,65:27,72:[2,95],75:[1,70],77:[2,95],79:[1,136],82:[1,28],85:[2,95],87:[1,58],88:[1,59],89:[1,57],90:[2,95],92:[2,95],100:[1,56],101:[2,95],103:[2,95],104:[2,95],105:[2,95],109:[2,95],117:[2,95],125:[2,95],127:[2,95],128:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95],135:[2,95],136:[2,95]},{8:138,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,47],6:[2,47],8:139,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,47],102:39,103:[2,47],105:[2,47],106:40,107:[1,67],108:41,109:[2,47],110:69,118:[1,42],123:37,124:[1,64],125:[2,47],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],77:[2,48],101:[2,48],103:[2,48],105:[2,48],109:[2,48],125:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],70:[2,73],72:[2,73],73:[2,73],77:[2,73],83:[2,73],84:[2,73],85:[2,73],90:[2,73],92:[2,73],101:[2,73],103:[2,73],104:[2,73],105:[2,73],109:[2,73],117:[2,73],125:[2,73],127:[2,73],128:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],70:[2,74],72:[2,74],73:[2,74],77:[2,74],83:[2,74],84:[2,74],85:[2,74],90:[2,74],92:[2,74],101:[2,74],103:[2,74],104:[2,74],105:[2,74],109:[2,74],117:[2,74],125:[2,74],127:[2,74],128:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],70:[2,29],72:[2,29],73:[2,29],77:[2,29],83:[2,29],84:[2,29],85:[2,29],90:[2,29],92:[2,29],101:[2,29],103:[2,29],104:[2,29],105:[2,29],109:[2,29],117:[2,29],125:[2,29],127:[2,29],128:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],70:[2,30],72:[2,30],73:[2,30],77:[2,30],83:[2,30],84:[2,30],85:[2,30],90:[2,30],92:[2,30],101:[2,30],103:[2,30],104:[2,30],105:[2,30],109:[2,30],117:[2,30],125:[2,30],127:[2,30],128:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],70:[2,31],72:[2,31],73:[2,31],77:[2,31],83:[2,31],84:[2,31],85:[2,31],90:[2,31],92:[2,31],101:[2,31],103:[2,31],104:[2,31],105:[2,31],109:[2,31],117:[2,31],125:[2,31],127:[2,31],128:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],70:[2,32],72:[2,32],73:[2,32],77:[2,32],83:[2,32],84:[2,32],85:[2,32],90:[2,32],92:[2,32],101:[2,32],103:[2,32],104:[2,32],105:[2,32],109:[2,32],117:[2,32],125:[2,32],127:[2,32],128:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],70:[2,33],72:[2,33],73:[2,33],77:[2,33],83:[2,33],84:[2,33],85:[2,33],90:[2,33],92:[2,33],101:[2,33],103:[2,33],104:[2,33],105:[2,33],109:[2,33],117:[2,33],125:[2,33],127:[2,33],128:[2,33],131:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],70:[2,34],72:[2,34],73:[2,34],77:[2,34],83:[2,34],84:[2,34],85:[2,34],90:[2,34],92:[2,34],101:[2,34],103:[2,34],104:[2,34],105:[2,34],109:[2,34],117:[2,34],125:[2,34],127:[2,34],128:[2,34],131:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],70:[2,35],72:[2,35],73:[2,35],77:[2,35],83:[2,35],84:[2,35],85:[2,35],90:[2,35],92:[2,35],101:[2,35],103:[2,35],104:[2,35],105:[2,35],109:[2,35],117:[2,35],125:[2,35],127:[2,35],128:[2,35],131:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35]},{4:140,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,141],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:142,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],70:[2,111],72:[2,111],73:[2,111],77:[2,111],83:[2,111],84:[2,111],85:[2,111],90:[2,111],92:[2,111],101:[2,111],103:[2,111],104:[2,111],105:[2,111],109:[2,111],117:[2,111],125:[2,111],127:[2,111],128:[2,111],131:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],27:148,28:[1,73],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],70:[2,112],72:[2,112],73:[2,112],77:[2,112],83:[2,112],84:[2,112],85:[2,112],90:[2,112],92:[2,112],101:[2,112],103:[2,112],104:[2,112],105:[2,112],109:[2,112],117:[2,112],125:[2,112],127:[2,112],128:[2,112],131:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],70:[2,68],72:[2,68],73:[2,68],77:[2,68],79:[2,68],83:[2,68],84:[2,68],85:[2,68],90:[2,68],92:[2,68],101:[2,68],103:[2,68],104:[2,68],105:[2,68],109:[2,68],117:[2,68],125:[2,68],127:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],70:[2,71],72:[2,71],73:[2,71],77:[2,71],79:[2,71],83:[2,71],84:[2,71],85:[2,71],90:[2,71],92:[2,71],101:[2,71],103:[2,71],104:[2,71],105:[2,71],109:[2,71],117:[2,71],125:[2,71],127:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71]},{8:149,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:150,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:151,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:152,8:153,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{27:158,28:[1,73],44:159,58:160,59:161,64:154,75:[1,70],88:[1,113],89:[1,57],112:155,113:[1,156],114:157},{111:162,115:[1,163],116:[1,164]},{6:[2,90],11:168,25:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:165,77:[2,90],88:[1,113]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],70:[2,27],72:[2,27],73:[2,27],77:[2,27],83:[2,27],84:[2,27],85:[2,27],90:[2,27],92:[2,27],101:[2,27],103:[2,27],104:[2,27],105:[2,27],109:[2,27],117:[2,27],125:[2,27],127:[2,27],128:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],70:[2,28],72:[2,28],73:[2,28],77:[2,28],83:[2,28],84:[2,28],85:[2,28],90:[2,28],92:[2,28],101:[2,28],103:[2,28],104:[2,28],105:[2,28],109:[2,28],117:[2,28],125:[2,28],127:[2,28],128:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],70:[2,26],72:[2,26],73:[2,26],77:[2,26],79:[2,26],83:[2,26],84:[2,26],85:[2,26],90:[2,26],92:[2,26],101:[2,26],103:[2,26],104:[2,26],105:[2,26],109:[2,26],115:[2,26],116:[2,26],117:[2,26],125:[2,26],127:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26]},{1:[2,6],6:[2,6],7:172,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,6],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],72:[2,24],77:[2,24],85:[2,24],90:[2,24],92:[2,24],97:[2,24],98:[2,24],101:[2,24],103:[2,24],104:[2,24],105:[2,24],109:[2,24],117:[2,24],120:[2,24],122:[2,24],125:[2,24],127:[2,24],128:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24]},{6:[1,74],26:[1,173]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],72:[2,191],77:[2,191],85:[2,191],90:[2,191],92:[2,191],101:[2,191],103:[2,191],104:[2,191],105:[2,191],109:[2,191],117:[2,191],125:[2,191],127:[2,191],128:[2,191],131:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191]},{8:174,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:175,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:176,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:177,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:178,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:179,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:180,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:181,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],72:[2,146],77:[2,146],85:[2,146],90:[2,146],92:[2,146],101:[2,146],103:[2,146],104:[2,146],105:[2,146],109:[2,146],117:[2,146],125:[2,146],127:[2,146],128:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],72:[2,151],77:[2,151],85:[2,151],90:[2,151],92:[2,151],101:[2,151],103:[2,151],104:[2,151],105:[2,151],109:[2,151],117:[2,151],125:[2,151],127:[2,151],128:[2,151],131:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151]},{8:182,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],72:[2,145],77:[2,145],85:[2,145],90:[2,145],92:[2,145],101:[2,145],103:[2,145],104:[2,145],105:[2,145],109:[2,145],117:[2,145],125:[2,145],127:[2,145],128:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145],135:[2,145],136:[2,145]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],72:[2,150],77:[2,150],85:[2,150],90:[2,150],92:[2,150],101:[2,150],103:[2,150],104:[2,150],105:[2,150],109:[2,150],117:[2,150],125:[2,150],127:[2,150],128:[2,150],131:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150]},{81:183,84:[1,105]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],70:[2,69],72:[2,69],73:[2,69],77:[2,69],79:[2,69],83:[2,69],84:[2,69],85:[2,69],90:[2,69],92:[2,69],101:[2,69],103:[2,69],104:[2,69],105:[2,69],109:[2,69],117:[2,69],125:[2,69],127:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69]},{84:[2,108]},{27:184,28:[1,73]},{27:185,28:[1,73]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],27:186,28:[1,73],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],70:[2,83],72:[2,83],73:[2,83],77:[2,83],79:[2,83],83:[2,83],84:[2,83],85:[2,83],90:[2,83],92:[2,83],101:[2,83],103:[2,83],104:[2,83],105:[2,83],109:[2,83],117:[2,83],125:[2,83],127:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],70:[2,84],72:[2,84],73:[2,84],77:[2,84],79:[2,84],83:[2,84],84:[2,84],85:[2,84],90:[2,84],92:[2,84],101:[2,84],103:[2,84],104:[2,84],105:[2,84],109:[2,84],117:[2,84],125:[2,84],127:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84]},{8:188,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,192],58:47,59:48,61:36,63:25,64:26,65:27,71:187,74:189,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],91:190,92:[1,191],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{69:193,70:[1,99],73:[1,100]},{81:194,84:[1,105]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],70:[2,70],72:[2,70],73:[2,70],77:[2,70],79:[2,70],83:[2,70],84:[2,70],85:[2,70],90:[2,70],92:[2,70],101:[2,70],103:[2,70],104:[2,70],105:[2,70],109:[2,70],117:[2,70],125:[2,70],127:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70]},{6:[1,196],8:195,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,197],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],70:[2,106],72:[2,106],73:[2,106],77:[2,106],83:[2,106],84:[2,106],85:[2,106],90:[2,106],92:[2,106],101:[2,106],103:[2,106],104:[2,106],105:[2,106],109:[2,106],117:[2,106],125:[2,106],127:[2,106],128:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[1,198],86:199,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],49:[1,201],53:203,54:[1,202]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,205],49:[2,60],54:[2,60],57:[1,204]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:148,28:[1,73]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],72:[2,50],77:[2,50],85:[2,50],90:[2,50],92:[2,50],101:[2,50],103:[2,50],104:[2,50],105:[2,50],109:[2,50],117:[2,50],125:[2,50],127:[2,50],128:[2,50],131:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],72:[2,184],77:[2,184],85:[2,184],90:[2,184],92:[2,184],101:[2,184],102:87,103:[2,184],104:[2,184],105:[2,184],108:88,109:[2,184],110:69,117:[2,184],125:[2,184],127:[2,184],128:[2,184],131:[1,78],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184]},{102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],72:[2,185],77:[2,185],85:[2,185],90:[2,185],92:[2,185],101:[2,185],102:87,103:[2,185],104:[2,185],105:[2,185],108:88,109:[2,185],110:69,117:[2,185],125:[2,185],127:[2,185],128:[2,185],131:[1,78],132:[2,185],133:[2,185],134:[2,185],135:[2,185],136:[2,185]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],72:[2,186],77:[2,186],85:[2,186],90:[2,186],92:[2,186],101:[2,186],102:87,103:[2,186],104:[2,186],105:[2,186],108:88,109:[2,186],110:69,117:[2,186],125:[2,186],127:[2,186],128:[2,186],131:[1,78],132:[2,186],133:[2,186],134:[2,186],135:[2,186],136:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,187],73:[2,72],77:[2,187],83:[2,72],84:[2,72],85:[2,187],90:[2,187],92:[2,187],101:[2,187],103:[2,187],104:[2,187],105:[2,187],109:[2,187],117:[2,187],125:[2,187],127:[2,187],128:[2,187],131:[2,187],132:[2,187],133:[2,187],134:[2,187],135:[2,187],136:[2,187]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:92,83:[1,94],84:[2,107]},{62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:101,83:[1,94],84:[2,107]},{66:[2,75],67:[2,75],68:[2,75],70:[2,75],73:[2,75],83:[2,75],84:[2,75]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,188],73:[2,72],77:[2,188],83:[2,72],84:[2,72],85:[2,188],90:[2,188],92:[2,188],101:[2,188],103:[2,188],104:[2,188],105:[2,188],109:[2,188],117:[2,188],125:[2,188],127:[2,188],128:[2,188],131:[2,188],132:[2,188],133:[2,188],134:[2,188],135:[2,188],136:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],72:[2,189],77:[2,189],85:[2,189],90:[2,189],92:[2,189],101:[2,189],103:[2,189],104:[2,189],105:[2,189],109:[2,189],117:[2,189],125:[2,189],127:[2,189],128:[2,189],131:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],72:[2,190],77:[2,190],85:[2,190],90:[2,190],92:[2,190],101:[2,190],103:[2,190],104:[2,190],105:[2,190],109:[2,190],117:[2,190],125:[2,190],127:[2,190],128:[2,190],131:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190]},{8:206,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,207],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:208,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:209,25:[1,5],124:[1,210]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],49:[2,132],54:[2,132],57:[2,132],72:[2,132],77:[2,132],85:[2,132],90:[2,132],92:[2,132],96:211,97:[1,212],98:[1,213],101:[2,132],103:[2,132],104:[2,132],105:[2,132],109:[2,132],117:[2,132],125:[2,132],127:[2,132],128:[2,132],131:[2,132],132:[2,132],133:[2,132],134:[2,132],135:[2,132],136:[2,132]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],72:[2,144],77:[2,144],85:[2,144],90:[2,144],92:[2,144],101:[2,144],103:[2,144],104:[2,144],105:[2,144],109:[2,144],117:[2,144],125:[2,144],127:[2,144],128:[2,144],131:[2,144],132:[2,144],133:[2,144],134:[2,144],135:[2,144],136:[2,144]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],72:[2,152],77:[2,152],85:[2,152],90:[2,152],92:[2,152],101:[2,152],103:[2,152],104:[2,152],105:[2,152],109:[2,152],117:[2,152],125:[2,152],127:[2,152],128:[2,152],131:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152]},{25:[1,214],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{119:215,121:216,122:[1,217]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],49:[2,96],54:[2,96],57:[2,96],72:[2,96],77:[2,96],85:[2,96],90:[2,96],92:[2,96],101:[2,96],103:[2,96],104:[2,96],105:[2,96],109:[2,96],117:[2,96],125:[2,96],127:[2,96],128:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96]},{8:218,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,99],5:219,6:[2,99],25:[1,5],26:[2,99],49:[2,99],54:[2,99],57:[2,99],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,99],73:[2,72],77:[2,99],79:[1,220],83:[2,72],84:[2,72],85:[2,99],90:[2,99],92:[2,99],101:[2,99],103:[2,99],104:[2,99],105:[2,99],109:[2,99],117:[2,99],125:[2,99],127:[2,99],128:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],72:[2,137],77:[2,137],85:[2,137],90:[2,137],92:[2,137],101:[2,137],102:87,103:[2,137],104:[2,137],105:[2,137],108:88,109:[2,137],110:69,117:[2,137],125:[2,137],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,46],6:[2,46],26:[2,46],101:[2,46],102:87,103:[2,46],105:[2,46],108:88,109:[2,46],110:69,125:[2,46],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,74],101:[1,221]},{4:222,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,128],25:[2,128],54:[2,128],57:[1,224],90:[2,128],91:223,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],70:[2,114],72:[2,114],73:[2,114],77:[2,114],83:[2,114],84:[2,114],85:[2,114],90:[2,114],92:[2,114],101:[2,114],103:[2,114],104:[2,114],105:[2,114],109:[2,114],115:[2,114],116:[2,114],117:[2,114],125:[2,114],127:[2,114],128:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114]},{6:[2,53],25:[2,53],53:225,54:[1,226],90:[2,53]},{6:[2,123],25:[2,123],26:[2,123],54:[2,123],85:[2,123],90:[2,123]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:227,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],85:[2,129],90:[2,129]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],40:[2,113],43:[2,113],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],70:[2,113],72:[2,113],73:[2,113],77:[2,113],79:[2,113],83:[2,113],84:[2,113],85:[2,113],90:[2,113],92:[2,113],101:[2,113],103:[2,113],104:[2,113],105:[2,113],109:[2,113],115:[2,113],116:[2,113],117:[2,113],125:[2,113],127:[2,113],128:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{5:228,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],72:[2,140],77:[2,140],85:[2,140],90:[2,140],92:[2,140],101:[2,140],102:87,103:[1,65],104:[1,229],105:[1,66],108:88,109:[1,68],110:69,117:[2,140],125:[2,140],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],72:[2,142],77:[2,142],85:[2,142],90:[2,142],92:[2,142],101:[2,142],102:87,103:[1,65],104:[1,230],105:[1,66],108:88,109:[1,68],110:69,117:[2,142],125:[2,142],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],72:[2,148],77:[2,148],85:[2,148],90:[2,148],92:[2,148],101:[2,148],103:[2,148],104:[2,148],105:[2,148],109:[2,148],117:[2,148],125:[2,148],127:[2,148],128:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],72:[2,149],77:[2,149],85:[2,149],90:[2,149],92:[2,149],101:[2,149],102:87,103:[1,65],104:[2,149],105:[1,66],108:88,109:[1,68],110:69,117:[2,149],125:[2,149],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],72:[2,153],77:[2,153],85:[2,153],90:[2,153],92:[2,153],101:[2,153],103:[2,153],104:[2,153],105:[2,153],109:[2,153],117:[2,153],125:[2,153],127:[2,153],128:[2,153],131:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153]},{115:[2,155],116:[2,155]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],112:231,114:157},{54:[1,232],115:[2,161],116:[2,161]},{54:[2,157],115:[2,157],116:[2,157]},{54:[2,158],115:[2,158],116:[2,158]},{54:[2,159],115:[2,159],116:[2,159]},{54:[2,160],115:[2,160],116:[2,160]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],72:[2,154],77:[2,154],85:[2,154],90:[2,154],92:[2,154],101:[2,154],103:[2,154],104:[2,154],105:[2,154],109:[2,154],117:[2,154],125:[2,154],127:[2,154],128:[2,154],131:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154]},{8:233,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:234,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],53:235,54:[1,236],77:[2,53]},{6:[2,91],25:[2,91],26:[2,91],54:[2,91],77:[2,91]},{6:[2,39],25:[2,39],26:[2,39],43:[1,237],54:[2,39],77:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],77:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],77:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],77:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],77:[2,45]},{1:[2,5],6:[2,5],26:[2,5],101:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],72:[2,25],77:[2,25],85:[2,25],90:[2,25],92:[2,25],97:[2,25],98:[2,25],101:[2,25],103:[2,25],104:[2,25],105:[2,25],109:[2,25],117:[2,25],120:[2,25],122:[2,25],125:[2,25],127:[2,25],128:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],72:[2,192],77:[2,192],85:[2,192],90:[2,192],92:[2,192],101:[2,192],102:87,103:[2,192],104:[2,192],105:[2,192],108:88,109:[2,192],110:69,117:[2,192],125:[2,192],127:[2,192],128:[2,192],131:[1,78],132:[1,81],133:[2,192],134:[2,192],135:[2,192],136:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],72:[2,193],77:[2,193],85:[2,193],90:[2,193],92:[2,193],101:[2,193],102:87,103:[2,193],104:[2,193],105:[2,193],108:88,109:[2,193],110:69,117:[2,193],125:[2,193],127:[2,193],128:[2,193],131:[1,78],132:[1,81],133:[2,193],134:[2,193],135:[2,193],136:[2,193]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],72:[2,194],77:[2,194],85:[2,194],90:[2,194],92:[2,194],101:[2,194],102:87,103:[2,194],104:[2,194],105:[2,194],108:88,109:[2,194],110:69,117:[2,194],125:[2,194],127:[2,194],128:[2,194],131:[1,78],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],72:[2,195],77:[2,195],85:[2,195],90:[2,195],92:[2,195],101:[2,195],102:87,103:[2,195],104:[2,195],105:[2,195],108:88,109:[2,195],110:69,117:[2,195],125:[2,195],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[2,195],134:[2,195],135:[2,195],136:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],72:[2,196],77:[2,196],85:[2,196],90:[2,196],92:[2,196],101:[2,196],102:87,103:[2,196],104:[2,196],105:[2,196],108:88,109:[2,196],110:69,117:[2,196],125:[2,196],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,196],135:[2,196],136:[1,85]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],72:[2,197],77:[2,197],85:[2,197],90:[2,197],92:[2,197],101:[2,197],102:87,103:[2,197],104:[2,197],105:[2,197],108:88,109:[2,197],110:69,117:[2,197],125:[2,197],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[2,197],136:[1,85]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],72:[2,198],77:[2,198],85:[2,198],90:[2,198],92:[2,198],101:[2,198],102:87,103:[2,198],104:[2,198],105:[2,198],108:88,109:[2,198],110:69,117:[2,198],125:[2,198],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,198],135:[2,198],136:[2,198]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],72:[2,183],77:[2,183],85:[2,183],90:[2,183],92:[2,183],101:[2,183],102:87,103:[1,65],104:[2,183],105:[1,66],108:88,109:[1,68],110:69,117:[2,183],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],72:[2,182],77:[2,182],85:[2,182],90:[2,182],92:[2,182],101:[2,182],102:87,103:[1,65],104:[2,182],105:[1,66],108:88,109:[1,68],110:69,117:[2,182],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],66:[2,103],67:[2,103],68:[2,103],70:[2,103],72:[2,103],73:[2,103],77:[2,103],83:[2,103],84:[2,103],85:[2,103],90:[2,103],92:[2,103],101:[2,103],103:[2,103],104:[2,103],105:[2,103],109:[2,103],117:[2,103],125:[2,103],127:[2,103],128:[2,103],131:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],70:[2,80],72:[2,80],73:[2,80],77:[2,80],79:[2,80],83:[2,80],84:[2,80],85:[2,80],90:[2,80],92:[2,80],101:[2,80],103:[2,80],104:[2,80],105:[2,80],109:[2,80],117:[2,80],125:[2,80],127:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],70:[2,81],72:[2,81],73:[2,81],77:[2,81],79:[2,81],83:[2,81],84:[2,81],85:[2,81],90:[2,81],92:[2,81],101:[2,81],103:[2,81],104:[2,81],105:[2,81],109:[2,81],117:[2,81],125:[2,81],127:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],70:[2,82],72:[2,82],73:[2,82],77:[2,82],79:[2,82],83:[2,82],84:[2,82],85:[2,82],90:[2,82],92:[2,82],101:[2,82],103:[2,82],104:[2,82],105:[2,82],109:[2,82],117:[2,82],125:[2,82],127:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82]},{72:[1,238]},{57:[1,192],72:[2,87],91:239,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{72:[2,88]},{8:240,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,122],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{12:[2,116],28:[2,116],30:[2,116],31:[2,116],33:[2,116],34:[2,116],35:[2,116],36:[2,116],37:[2,116],38:[2,116],45:[2,116],46:[2,116],47:[2,116],51:[2,116],52:[2,116],72:[2,116],75:[2,116],78:[2,116],82:[2,116],87:[2,116],88:[2,116],89:[2,116],95:[2,116],99:[2,116],100:[2,116],103:[2,116],105:[2,116],107:[2,116],109:[2,116],118:[2,116],124:[2,116],126:[2,116],127:[2,116],128:[2,116],129:[2,116],130:[2,116]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],72:[2,117],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],70:[2,86],72:[2,86],73:[2,86],77:[2,86],79:[2,86],83:[2,86],84:[2,86],85:[2,86],90:[2,86],92:[2,86],101:[2,86],103:[2,86],104:[2,86],105:[2,86],109:[2,86],117:[2,86],125:[2,86],127:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],70:[2,104],72:[2,104],73:[2,104],77:[2,104],83:[2,104],84:[2,104],85:[2,104],90:[2,104],92:[2,104],101:[2,104],103:[2,104],104:[2,104],105:[2,104],109:[2,104],117:[2,104],125:[2,104],127:[2,104],128:[2,104],131:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],72:[2,36],77:[2,36],85:[2,36],90:[2,36],92:[2,36],101:[2,36],102:87,103:[2,36],104:[2,36],105:[2,36],108:88,109:[2,36],110:69,117:[2,36],125:[2,36],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:241,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:242,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],49:[2,109],54:[2,109],57:[2,109],66:[2,109],67:[2,109],68:[2,109],70:[2,109],72:[2,109],73:[2,109],77:[2,109],83:[2,109],84:[2,109],85:[2,109],90:[2,109],92:[2,109],101:[2,109],103:[2,109],104:[2,109],105:[2,109],109:[2,109],117:[2,109],125:[2,109],127:[2,109],128:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109],136:[2,109]},{6:[2,53],25:[2,53],53:243,54:[1,226],85:[2,53]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],57:[1,244],85:[2,128],90:[2,128],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{50:245,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:109,28:[1,73],44:110,55:246,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[1,247],25:[1,248]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:249,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],72:[2,199],77:[2,199],85:[2,199],90:[2,199],92:[2,199],101:[2,199],102:87,103:[2,199],104:[2,199],105:[2,199],108:88,109:[2,199],110:69,117:[2,199],125:[2,199],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:250,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],72:[2,201],77:[2,201],85:[2,201],90:[2,201],92:[2,201],101:[2,201],102:87,103:[2,201],104:[2,201],105:[2,201],108:88,109:[2,201],110:69,117:[2,201],125:[2,201],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],72:[2,181],77:[2,181],85:[2,181],90:[2,181],92:[2,181],101:[2,181],103:[2,181],104:[2,181],105:[2,181],109:[2,181],117:[2,181],125:[2,181],127:[2,181],128:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181]},{8:251,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],72:[2,133],77:[2,133],85:[2,133],90:[2,133],92:[2,133],97:[1,252],101:[2,133],103:[2,133],104:[2,133],105:[2,133],109:[2,133],117:[2,133],125:[2,133],127:[2,133],128:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133]},{5:253,25:[1,5]},{27:254,28:[1,73]},{119:255,121:216,122:[1,217]},{26:[1,256],120:[1,257],121:258,122:[1,217]},{26:[2,174],120:[2,174],122:[2,174]},{8:260,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],94:259,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,97],5:261,6:[2,97],25:[1,5],26:[2,97],49:[2,97],54:[2,97],57:[2,97],72:[2,97],77:[2,97],85:[2,97],90:[2,97],92:[2,97],101:[2,97],102:87,103:[1,65],104:[2,97],105:[1,66],108:88,109:[1,68],110:69,117:[2,97],125:[2,97],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],49:[2,100],54:[2,100],57:[2,100],72:[2,100],77:[2,100],85:[2,100],90:[2,100],92:[2,100],101:[2,100],103:[2,100],104:[2,100],105:[2,100],109:[2,100],117:[2,100],125:[2,100],127:[2,100],128:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100]},{8:262,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],66:[2,138],67:[2,138],68:[2,138],70:[2,138],72:[2,138],73:[2,138],77:[2,138],83:[2,138],84:[2,138],85:[2,138],90:[2,138],92:[2,138],101:[2,138],103:[2,138],104:[2,138],105:[2,138],109:[2,138],117:[2,138],125:[2,138],127:[2,138],128:[2,138],131:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138]},{6:[1,74],26:[1,263]},{8:264,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,67],12:[2,117],25:[2,67],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],54:[2,67],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],90:[2,67],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{6:[1,266],25:[1,267],90:[1,265]},{6:[2,54],8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[2,54],87:[1,58],88:[1,59],89:[1,57],90:[2,54],93:268,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:269,54:[1,226]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],49:[2,178],54:[2,178],57:[2,178],72:[2,178],77:[2,178],85:[2,178],90:[2,178],92:[2,178],101:[2,178],103:[2,178],104:[2,178],105:[2,178],109:[2,178],117:[2,178],120:[2,178],125:[2,178],127:[2,178],128:[2,178],131:[2,178],132:[2,178],133:[2,178],134:[2,178],135:[2,178],136:[2,178]},{8:270,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:271,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{115:[2,156],116:[2,156]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],114:272},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],49:[2,163],54:[2,163],57:[2,163],72:[2,163],77:[2,163],85:[2,163],90:[2,163],92:[2,163],101:[2,163],102:87,103:[2,163],104:[1,273],105:[2,163],108:88,109:[2,163],110:69,117:[1,274],125:[2,163],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],49:[2,164],54:[2,164],57:[2,164],72:[2,164],77:[2,164],85:[2,164],90:[2,164],92:[2,164],101:[2,164],102:87,103:[2,164],104:[1,275],105:[2,164],108:88,109:[2,164],110:69,117:[2,164],125:[2,164],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,277],25:[1,278],77:[1,276]},{6:[2,54],11:168,25:[2,54],26:[2,54],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:279,42:167,44:171,46:[1,46],77:[2,54],88:[1,113]},{8:280,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,281],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],70:[2,85],72:[2,85],73:[2,85],77:[2,85],79:[2,85],83:[2,85],84:[2,85],85:[2,85],90:[2,85],92:[2,85],101:[2,85],103:[2,85],104:[2,85],105:[2,85],109:[2,85],117:[2,85],125:[2,85],127:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85]},{8:282,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,120],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,121],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],72:[2,37],77:[2,37],85:[2,37],90:[2,37],92:[2,37],101:[2,37],102:87,103:[2,37],104:[2,37],105:[2,37],108:88,109:[2,37],110:69,117:[2,37],125:[2,37],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,283],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],85:[1,284]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],85:[2,67],90:[2,67]},{5:285,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:109,28:[1,73],44:110,55:286,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,55],25:[2,55],26:[2,55],27:109,28:[1,73],44:110,48:287,54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,288],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:289,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:290,25:[1,5]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],72:[2,134],77:[2,134],85:[2,134],90:[2,134],92:[2,134],101:[2,134],103:[2,134],104:[2,134],105:[2,134],109:[2,134],117:[2,134],125:[2,134],127:[2,134],128:[2,134],131:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134]},{5:291,25:[1,5]},{26:[1,292],120:[1,293],121:258,122:[1,217]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],72:[2,172],77:[2,172],85:[2,172],90:[2,172],92:[2,172],101:[2,172],103:[2,172],104:[2,172],105:[2,172],109:[2,172],117:[2,172],125:[2,172],127:[2,172],128:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172]},{5:294,25:[1,5]},{26:[2,175],120:[2,175],122:[2,175]},{5:295,25:[1,5],54:[1,296]},{25:[2,130],54:[2,130],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],49:[2,98],54:[2,98],57:[2,98],72:[2,98],77:[2,98],85:[2,98],90:[2,98],92:[2,98],101:[2,98],103:[2,98],104:[2,98],105:[2,98],109:[2,98],117:[2,98],125:[2,98],127:[2,98],128:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98],135:[2,98],136:[2,98]},{1:[2,101],5:297,6:[2,101],25:[1,5],26:[2,101],49:[2,101],54:[2,101],57:[2,101],72:[2,101],77:[2,101],85:[2,101],90:[2,101],92:[2,101],101:[2,101],102:87,103:[1,65],104:[2,101],105:[1,66],108:88,109:[1,68],110:69,117:[2,101],125:[2,101],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{101:[1,298]},{90:[1,299],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],70:[2,115],72:[2,115],73:[2,115],77:[2,115],83:[2,115],84:[2,115],85:[2,115],90:[2,115],92:[2,115],101:[2,115],103:[2,115],104:[2,115],105:[2,115],109:[2,115],115:[2,115],116:[2,115],117:[2,115],125:[2,115],127:[2,115],128:[2,115],131:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],93:300,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:301,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],85:[2,124],90:[2,124]},{6:[1,266],25:[1,267],26:[1,302]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],72:[2,141],77:[2,141],85:[2,141],90:[2,141],92:[2,141],101:[2,141],102:87,103:[1,65],104:[2,141],105:[1,66],108:88,109:[1,68],110:69,117:[2,141],125:[2,141],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],72:[2,143],77:[2,143],85:[2,143],90:[2,143],92:[2,143],101:[2,143],102:87,103:[1,65],104:[2,143],105:[1,66],108:88,109:[1,68],110:69,117:[2,143],125:[2,143],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{115:[2,162],116:[2,162]},{8:303,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:304,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:305,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,89],6:[2,89],25:[2,89],26:[2,89],40:[2,89],49:[2,89],54:[2,89],57:[2,89],66:[2,89],67:[2,89],68:[2,89],70:[2,89],72:[2,89],73:[2,89],77:[2,89],83:[2,89],84:[2,89],85:[2,89],90:[2,89],92:[2,89],101:[2,89],103:[2,89],104:[2,89],105:[2,89],109:[2,89],115:[2,89],116:[2,89],117:[2,89],125:[2,89],127:[2,89],128:[2,89],131:[2,89],132:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89]},{11:168,27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:306,42:167,44:171,46:[1,46],88:[1,113]},{6:[2,90],11:168,25:[2,90],26:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:307,88:[1,113]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],77:[2,92]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],77:[2,40],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:308,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,119],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],72:[2,38],77:[2,38],85:[2,38],90:[2,38],92:[2,38],101:[2,38],103:[2,38],104:[2,38],105:[2,38],109:[2,38],117:[2,38],125:[2,38],127:[2,38],128:[2,38],131:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],70:[2,110],72:[2,110],73:[2,110],77:[2,110],83:[2,110],84:[2,110],85:[2,110],90:[2,110],92:[2,110],101:[2,110],103:[2,110],104:[2,110],105:[2,110],109:[2,110],117:[2,110],125:[2,110],127:[2,110],128:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],72:[2,49],77:[2,49],85:[2,49],90:[2,49],92:[2,49],101:[2,49],103:[2,49],104:[2,49],105:[2,49],109:[2,49],117:[2,49],125:[2,49],127:[2,49],128:[2,49],131:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:309,54:[1,202]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],72:[2,200],77:[2,200],85:[2,200],90:[2,200],92:[2,200],101:[2,200],103:[2,200],104:[2,200],105:[2,200],109:[2,200],117:[2,200],125:[2,200],127:[2,200],128:[2,200],131:[2,200],132:[2,200],133:[2,200],134:[2,200],135:[2,200],136:[2,200]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],49:[2,179],54:[2,179],57:[2,179],72:[2,179],77:[2,179],85:[2,179],90:[2,179],92:[2,179],101:[2,179],103:[2,179],104:[2,179],105:[2,179],109:[2,179],117:[2,179],120:[2,179],125:[2,179],127:[2,179],128:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179],135:[2,179],136:[2,179]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],72:[2,135],77:[2,135],85:[2,135],90:[2,135],92:[2,135],101:[2,135],103:[2,135],104:[2,135],105:[2,135],109:[2,135],117:[2,135],125:[2,135],127:[2,135],128:[2,135],131:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],72:[2,136],77:[2,136],85:[2,136],90:[2,136],92:[2,136],97:[2,136],101:[2,136],103:[2,136],104:[2,136],105:[2,136],109:[2,136],117:[2,136],125:[2,136],127:[2,136],128:[2,136],131:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],72:[2,170],77:[2,170],85:[2,170],90:[2,170],92:[2,170],101:[2,170],103:[2,170],104:[2,170],105:[2,170],109:[2,170],117:[2,170],125:[2,170],127:[2,170],128:[2,170],131:[2,170],132:[2,170],133:[2,170],134:[2,170],135:[2,170],136:[2,170]},{5:310,25:[1,5]},{26:[1,311]},{6:[1,312],26:[2,176],120:[2,176],122:[2,176]},{8:313,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],49:[2,102],54:[2,102],57:[2,102],72:[2,102],77:[2,102],85:[2,102],90:[2,102],92:[2,102],101:[2,102],103:[2,102],104:[2,102],105:[2,102],109:[2,102],117:[2,102],125:[2,102],127:[2,102],128:[2,102],131:[2,102],132:[2,102],133:[2,102],134:[2,102],135:[2,102],136:[2,102]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],66:[2,139],67:[2,139],68:[2,139],70:[2,139],72:[2,139],73:[2,139],77:[2,139],83:[2,139],84:[2,139],85:[2,139],90:[2,139],92:[2,139],101:[2,139],103:[2,139],104:[2,139],105:[2,139],109:[2,139],117:[2,139],125:[2,139],127:[2,139],128:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139]},{1:[2,118],6:[2,118],25:[2,118],26:[2,118],49:[2,118],54:[2,118],57:[2,118],66:[2,118],67:[2,118],68:[2,118],70:[2,118],72:[2,118],73:[2,118],77:[2,118],83:[2,118],84:[2,118],85:[2,118],90:[2,118],92:[2,118],101:[2,118],103:[2,118],104:[2,118],105:[2,118],109:[2,118],117:[2,118],125:[2,118],127:[2,118],128:[2,118],131:[2,118],132:[2,118],133:[2,118],134:[2,118],135:[2,118],136:[2,118]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],85:[2,125],90:[2,125]},{6:[2,53],25:[2,53],26:[2,53],53:314,54:[1,226]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],85:[2,126],90:[2,126]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],72:[2,165],77:[2,165],85:[2,165],90:[2,165],92:[2,165],101:[2,165],102:87,103:[2,165],104:[2,165],105:[2,165],108:88,109:[2,165],110:69,117:[1,315],125:[2,165],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],72:[2,167],77:[2,167],85:[2,167],90:[2,167],92:[2,167],101:[2,167],102:87,103:[2,167],104:[1,316],105:[2,167],108:88,109:[2,167],110:69,117:[2,167],125:[2,167],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],72:[2,166],77:[2,166],85:[2,166],90:[2,166],92:[2,166],101:[2,166],102:87,103:[2,166],104:[2,166],105:[2,166],108:88,109:[2,166],110:69,117:[2,166],125:[2,166],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],77:[2,93]},{6:[2,53],25:[2,53],26:[2,53],53:317,54:[1,236]},{26:[1,318],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,247],25:[1,248],26:[1,319]},{26:[1,320]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],72:[2,173],77:[2,173],85:[2,173],90:[2,173],92:[2,173],101:[2,173],103:[2,173],104:[2,173],105:[2,173],109:[2,173],117:[2,173],125:[2,173],127:[2,173],128:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173]},{26:[2,177],120:[2,177],122:[2,177]},{25:[2,131],54:[2,131],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],26:[1,321]},{8:322,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:323,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[1,277],25:[1,278],26:[1,324]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],77:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],72:[2,171],77:[2,171],85:[2,171],90:[2,171],92:[2,171],101:[2,171],103:[2,171],104:[2,171],105:[2,171],109:[2,171],117:[2,171],125:[2,171],127:[2,171],128:[2,171],131:[2,171],132:[2,171],133:[2,171],134:[2,171],135:[2,171],136:[2,171]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],85:[2,127],90:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],72:[2,168],77:[2,168],85:[2,168],90:[2,168],92:[2,168],101:[2,168],102:87,103:[2,168],104:[2,168],105:[2,168],108:88,109:[2,168],110:69,117:[2,168],125:[2,168],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],72:[2,169],77:[2,169],85:[2,169],90:[2,169],92:[2,169],101:[2,169],102:87,103:[2,169],104:[2,169],105:[2,169],108:88,109:[2,169],110:69,117:[2,169],125:[2,169],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],77:[2,94]}],defaultActions:{60:[2,51],61:[2,52],75:[2,3],94:[2,108],189:[2,88]},parseError:function(b,c){throw new Error(b)},parse:function(b){function o(a){d.length=d.length-2*a,e.length=e.length-a,f.length=f.length-a}function p(){var a;return a=c.lexer.lex()||1,typeof a!="number"&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0,l=2,m=1;this.lexer.setInput(b),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,typeof this.lexer.yylloc=="undefined"&&(this.lexer.yylloc={});var n=this.lexer.yylloc;f.push(n),typeof this.yy.parseError=="function"&&(this.parseError=this.yy.parseError);var q,r,s,t,u,v,w={},x,y,z,A;for(;;){s=d[d.length-1],this.defaultActions[s]?t=this.defaultActions[s]:(q==null&&(q=p()),t=g[s]&&g[s][q]);if(typeof t=="undefined"||!t.length||!t[0]){if(!k){A=[];for(x in g[s])this.terminals_[x]&&x>2&&A.push("'"+this.terminals_[x]+"'");var B="";this.lexer.showPosition?B="Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+A.join(", ")+", got '"+this.terminals_[q]+"'":B="Parse error on line "+(i+1)+": Unexpected "+(q==1?"end of input":"'"+(this.terminals_[q]||q)+"'"),this.parseError(B,{text:this.lexer.match,token:this.terminals_[q]||q,line:this.lexer.yylineno,loc:n,expected:A})}if(k==3){if(q==m)throw new Error(B||"Parsing halted.");j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,n=this.lexer.yylloc,q=p()}for(;;){if(l.toString()in g[s])break;if(s==0)throw new Error(B||"Parsing halted.");o(1),s=d[d.length-1]}r=q,q=l,s=d[d.length-1],t=g[s]&&g[s][l],k=3}if(t[0]instanceof Array&&t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+s+", token: "+q);switch(t[0]){case 1:d.push(q),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(t[1]),q=null,r?(q=r,r=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,n=this.lexer.yylloc,k>0&&k--);break;case 2:y=this.productions_[t[1]][1],w.$=e[e.length-y],w._$={first_line:f[f.length-(y||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(y||1)].first_column,last_column:f[f.length-1].last_column},v=this.performAction.call(w,h,j,i,this.yy,t[1],e,f);if(typeof v!="undefined")return v;y&&(d=d.slice(0,-1*y*2),e=e.slice(0,-1*y),f=f.slice(0,-1*y)),d.push(this.productions_[t[1]][0]),e.push(w.$),f.push(w._$),z=g[d[d.length-2]][d[d.length-1]],d.push(z);break;case 3:return!0}}return!0}};return undefined,a}();typeof require!="undefined"&&typeof a!="undefined"&&(a.parser=b,a.parse=function(){return b.parse.apply(b,arguments)},a.main=function(c){if(!c[1])throw new Error("Usage: "+c[0]+" FILE");if(typeof process!="undefined")var d=require("fs").readFileSync(require("path").join(process.cwd(),c[1]),"utf8");else var e=require("file").path(require("file").cwd()),d=e.join(c[1]).read({charset:"utf-8"});return a.parser.parse(d)},typeof module!="undefined"&&require.main===module&&a.main(typeof process!="undefined"?process.argv.slice(1):require("system").args))},require["./scope"]=new function(){var a=this;((function(){var b,c,d,e;e=require("./helpers"),c=e.extend,d=e.last,a.Scope=b=function(){function a(b,c,d){this.parent=b,this.expressions=c,this.method=d,this.variables=[{name:"arguments",type:"arguments"}],this.positions={},this.parent||(a.root=this)}return a.root=null,a.prototype.add=function(a,b,c){return this.shared&&!c?this.parent.add(a,b,c):Object.prototype.hasOwnProperty.call(this.positions,a)?this.variables[this.positions[a]].type=b:this.positions[a]=this.variables.push({name:a,type:b})-1},a.prototype.namedMethod=function(){return this.method.name||!this.parent?this.method:this.parent.namedMethod()},a.prototype.find=function(a){return this.check(a)?!0:(this.add(a,"var"),!1)},a.prototype.parameter=function(a){if(this.shared&&this.parent.check(a,!0))return;return this.add(a,"param")},a.prototype.check=function(a){var b;return!!(this.type(a)||((b=this.parent)!=null?b.check(a):void 0))},a.prototype.temporary=function(a,b){return a.length>1?"_"+a+(b>1?b-1:""):"_"+(b+parseInt(a,36)).toString(36).replace(/\d/g,"a")},a.prototype.type=function(a){var b,c,d,e;e=this.variables;for(c=0,d=e.length;c1&&a.level>=w?"("+c+")":c)},b.prototype.compileRoot=function(a){var b,c,d,e,f,g;return a.indent=a.bare?"":R,a.scope=new N(null,this,null),a.level=z,this.spaced=!0,e="",a.bare||(f=function(){var a,b,e,f;e=this.expressions,f=[];for(d=a=0,b=e.length;a=u?"(void 0)":"void 0"},b}(e),a.Null=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return bm(b,a),b.prototype.isAssignable=D,b.prototype.isComplex=D,b.prototype.compileNode=function(){return"null"},b}(e),a.Bool=function(a){function b(a){this.val=a}return bm(b,a),b.prototype.isAssignable=D,b.prototype.isComplex=D,b.prototype.compileNode=function(){return this.val},b}(e),a.Return=K=function(a){function b(a){a&&!a.unwrap().isUndefined&&(this.expression=a)}return bm(b,a),b.prototype.children=["expression"],b.prototype.isStatement=Y,b.prototype.makeReturn=S,b.prototype.jumps=S,b.prototype.compile=function(a,c){var d,e;return d=(e=this.expression)!=null?e.makeReturn():void 0,!d||d instanceof b?b.__super__.compile.call(this,a,c):d.compile(a,c)},b.prototype.compileNode=function(a){return this.tab+("return"+[this.expression?" "+this.expression.compile(a,y):void 0]+";")},b}(e),a.Value=W=function(a){function b(a,c,d){return!c&&a instanceof b?a:(this.base=a,this.properties=c||[],d&&(this[d]=!0),this)}return bm(b,a),b.prototype.children=["base","properties"],b.prototype.add=function(a){return this.properties=this.properties.concat(a),this},b.prototype.hasProperties=function(){return!!this.properties.length},b.prototype.isArray=function(){return!this.properties.length&&this.base instanceof c},b.prototype.isComplex=function(){return this.hasProperties()||this.base.isComplex()},b.prototype.isAssignable=function(){return this.hasProperties()||this.base.isAssignable()},b.prototype.isSimpleNumber=function(){return this.base instanceof A&&L.test(this.base.value)},b.prototype.isString=function(){return this.base instanceof A&&q.test(this.base.value)},b.prototype.isAtomic=function(){var a,b,c,d;d=this.properties.concat(this.base);for(b=0,c=d.length;b"+this.equals],i=n[0],e=n[1],c=this.stepNum?+this.stepNum>0?""+i+" "+this.toVar:""+e+" "+this.toVar:h?(o=[+this.fromNum,+this.toNum],d=o[0],l=o[1],o,d<=l?""+i+" "+l:""+e+" "+l):(b=""+this.fromVar+" <= "+this.toVar,""+b+" ? "+i+" "+this.toVar+" : "+e+" "+this.toVar),k=this.stepVar?""+f+" += "+this.stepVar:h?j?d<=l?"++"+f:"--"+f:d<=l?""+f+"++":""+f+"--":j?""+b+" ? ++"+f+" : --"+f:""+b+" ? "+f+"++ : "+f+"--",j&&(m=""+g+" = "+m),j&&(k=""+g+" = "+k),""+m+"; "+c+"; "+k):this.compileArray(a)},b.prototype.compileArray=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;if(this.fromNum&&this.toNum&&Math.abs(this.fromNum-this.toNum)<=20)return j=function(){p=[];for(var a=n=+this.fromNum,b=+this.toNum;n<=b?a<=b:a>=b;n<=b?a++:a--)p.push(a);return p}.apply(this),this.exclusive&&j.pop(),"["+j.join(", ")+"]";g=this.tab+R,f=a.scope.freeVariable("i"),k=a.scope.freeVariable("results"),i="\n"+g+k+" = [];",this.fromNum&&this.toNum?(a.index=f,c=this.compileNode(a)):(l=""+f+" = "+this.fromC+(this.toC!==this.toVar?", "+this.toC:""),d=""+this.fromVar+" <= "+this.toVar,c="var "+l+"; "+d+" ? "+f+" <"+this.equals+" "+this.toVar+" : "+f+" >"+this.equals+" "+this.toVar+"; "+d+" ? "+f+"++ : "+f+"--"),h="{ "+k+".push("+f+"); }\n"+g+"return "+k+";\n"+a.indent,e=function(a){return a!=null?a.contains(function(a){return a instanceof A&&a.value==="arguments"&&!a.asKey}):void 0};if(e(this.from)||e(this.to))b=", arguments";return"(function() {"+i+"\n"+g+"for ("+c+")"+h+"}).apply(this"+(b!=null?b:"")+")"},b}(e),a.Slice=O=function(a){function b(a){this.range=a,b.__super__.constructor.call(this)}return bm(b,a),b.prototype.children=["range"],b.prototype.compileNode=function(a){var b,c,d,e,f,g;return g=this.range,e=g.to,c=g.from,d=c&&c.compile(a,y)||"0",b=e&&e.compile(a,y),e&&(!!this.range.exclusive||+b!==-1)&&(f=", "+(this.range.exclusive?b:L.test(b)?""+(+b+1):(b=e.compile(a,u),"+"+b+" + 1 || 9e9"))),".slice("+d+(f||"")+")"},b}(e),a.Obj=E=function(a){function b(a,b){this.generated=b!=null?b:!1,this.objects=this.properties=a||[]}return bm(b,a),b.prototype.children=["properties"],b.prototype.compileNode=function(a){var b,c,e,f,g,h,i,j,l,m,n;l=this.properties;if(!l.length)return this.front?"({})":"{}";if(this.generated)for(m=0,n=l.length;m=0?"[\n"+a.indent+b+"\n"+this.tab+"]":"["+b+"]")):"[]"},b.prototype.assigns=function(a){var b,c,d,e;e=this.objects;for(c=0,d=e.length;c=0)throw SyntaxError("variable name may not be "+a);return a&&(a=o.test(a)&&a)},c.prototype.setContext=function(a){return this.body.traverseChildren(!1,function(b){if(b.classBody)return!1;if(b instanceof A&&b.value==="this")return b.value=a;if(b instanceof j){b.klass=a;if(b.bound)return b.context=a}})},c.prototype.addBoundFunctions=function(a){var c,d,e,f,g,h;if(this.boundFuncs.length){g=this.boundFuncs,h=[];for(e=0,f=g.length;e=0);if(e&&this.context!=="object")throw SyntaxError('variable name may not be "'+f+'"')}return bm(c,a),c.prototype.children=["variable","value"],c.prototype.isStatement=function(a){return(a!=null?a.level:void 0)===z&&this.context!=null&&bn.call(this.context,"?")>=0},c.prototype.assigns=function(a){return this[this.context==="object"?"value":"variable"].assigns(a)},c.prototype.unfoldSoak=function(a){return bh(a,this,"variable")},c.prototype.compileNode=function(a){var b,c,d,e,f,g,h,i,k;if(b=this.variable instanceof W){if(this.variable.isArray()||this.variable.isObject())return this.compilePatternMatch(a);if(this.variable.isSplice())return this.compileSplice(a);if((g=this.context)==="||="||g==="&&="||g==="?=")return this.compileConditional(a)}d=this.variable.compile(a,w);if(!this.context){if(!(f=this.variable.unwrapAll()).isAssignable())throw SyntaxError('"'+this.variable.compile(a)+'" cannot be assigned.');if(typeof f.hasProperties=="function"?!f.hasProperties():!void 0)this.param?a.scope.add(d,"var"):a.scope.find(d)}return this.value instanceof j&&(c=B.exec(d))&&(c[1]&&(this.value.klass=c[1]),this.value.name=(h=(i=(k=c[2])!=null?k:c[3])!=null?i:c[4])!=null?h:c[5]),e=this.value.compile(a,w),this.context==="object"?""+d+": "+e:(e=d+(" "+(this.context||"=")+" ")+e,a.level<=w?e:"("+e+")")},c.prototype.compilePatternMatch=function(a){var d,e,f,g,h,i,j,k,l,m,n,p,q,r,s,u,v,y,B,C,D,E,F,G,J,K,L;s=a.level===z,v=this.value,m=this.variable.base.objects;if(!(n=m.length))return f=v.compile(a),a.level>=x?"("+f+")":f;i=this.variable.isObject();if(s&&n===1&&!((l=m[0])instanceof P)){l instanceof c?(D=l,E=D.variable,h=E.base,l=D.value):l.base instanceof H?(F=(new W(l.unwrapAll())).cacheReference(a),l=F[0],h=F[1]):h=i?l["this"]?l.properties[0].name:l:new A(0),d=o.test(h.unwrap().value||0),v=new W(v),v.properties.push(new(d?b:t)(h));if(G=l.unwrap().value,bn.call(I,G)>=0)throw new SyntaxError("assignment to a reserved word: "+l.compile(a)+" = "+v.compile(a));return(new c(l,v,null,{param:this.param})).compile(a,z)}y=v.compile(a,w),e=[],r=!1;if(!o.test(y)||this.variable.assigns(y))e.push(""+(p=a.scope.freeVariable("ref"))+" = "+y),y=p;for(g=B=0,C=m.length;B=0)throw new SyntaxError("assignment to a reserved word: "+l.compile(a)+" = "+u.compile(a));e.push((new c(l,u,null,{param:this.param,subpattern:!0})).compile(a,w))}return!s&&!this.subpattern&&e.push(y),f=e.join(", "),a.level=0&&(a.isExistentialEquals=!0),(new F(this.context.slice(0,-1),b,new c(d,this.value,"="))).compile(a)},c.prototype.compileSplice=function(a){var b,c,d,e,f,g,h,i,j,k,l,m;return k=this.variable.properties.pop().range,d=k.from,h=k.to,c=k.exclusive,g=this.variable.compile(a),l=(d!=null?d.cache(a,x):void 0)||["0","0"],e=l[0],f=l[1],h?(d!=null?d.isSimpleNumber():void 0)&&h.isSimpleNumber()?(h=+h.compile(a)- +f,c||(h+=1)):(h=h.compile(a,u)+" - "+f,c||(h+=" + 1")):h="9e9",m=this.value.cache(a,w),i=m[0],j=m[1],b="[].splice.apply("+g+", ["+e+", "+h+"].concat("+i+")), "+j,a.level>z?"("+b+")":b},c}(e),a.Code=j=function(a){function b(a,b,c){this.params=a||[],this.body=b||new f,this.bound=c==="boundfunc",this.bound&&(this.context="_this")}return bm(b,a),b.prototype.children=["params","body"],b.prototype.isStatement=function(){return!!this.ctor},b.prototype.jumps=D,b.prototype.compileNode=function(a){var b,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t,v,w,x,y,z,B,C,D,E,G,H,I,J,K,L,M,O;a.scope=new N(a.scope,this.body,this),a.scope.shared=$(a,"sharedScope"),a.indent+=R,delete a.bare,delete a.isExistentialEquals,l=[],e=[],H=this.paramNames();for(s=0,x=H.length;s=u?"("+b+")":b},b.prototype.paramNames=function(){var a,b,c,d,e;a=[],e=this.params;for(c=0,d=e.length;c=0)throw SyntaxError('parameter name "'+a+'" is not allowed')}return bm(b,a),b.prototype.children=["name","value"],b.prototype.compile=function(a){return this.name.compile(a,w)},b.prototype.asReference=function(a){var b;return this.reference?this.reference:(b=this.name,b["this"]?(b=b.properties[0].name,b.value.reserved&&(b=new A(a.scope.freeVariable(b.value)))):b.isComplex()&&(b=new A(a.scope.freeVariable("arg"))),b=new W(b),this.splat&&(b=new P(b)),this.reference=b)},b.prototype.isComplex=function(){return this.name.isComplex()},b.prototype.names=function(a){var b,c,e,f,g,h;a==null&&(a=this.name),b=function(a){var b;return b=a.properties[0].name.value,b.reserved?[]:[b]};if(a instanceof A)return[a.value];if(a instanceof W)return b(a);c=[],h=a.objects;for(f=0,g=h.length;f=c.length)return"";if(c.length===1)return g=c[0].compile(a,w),d?g:""+bi("slice")+".call("+g+")";e=c.slice(i);for(h=k=0,l=e.length;k1?b.expressions.unshift(new r((new H(this.guard)).invert(),new A("continue"))):this.guard&&(b=f.wrap([new r(this.guard,b)]))),b="\n"+b.compile(a,z)+"\n"+this.tab),c=e+this.tab+("while ("+this.condition.compile(a,y)+") {"+b+"}"),this.returns&&(c+="\n"+this.tab+"return "+d+";"),c},b}(e),a.Op=F=function(a){function e(a,c,d,e){if(a==="in")return new s(c,d);if(a==="do")return this.generateDo(c);if(a==="new"){if(c instanceof g&&!c["do"]&&!c.isNew)return c.newInstance();if(c instanceof j&&c.bound||c["do"])c=new H(c)}return this.operator=b[a]||a,this.first=c,this.second=d,this.flip=!!e,this}var b,c;return bm(e,a),b={"==":"===","!=":"!==",of:"in"},c={"!==":"===","===":"!=="},e.prototype.children=["first","second"],e.prototype.isSimpleNumber=D,e.prototype.isUnary=function(){return!this.second},e.prototype.isComplex=function(){var a;return!this.isUnary()||(a=this.operator)!=="+"&&a!=="-"||this.first.isComplex()},e.prototype.isChainable=function(){var a;return(a=this.operator)==="<"||a===">"||a===">="||a==="<="||a==="==="||a==="!=="},e.prototype.invert=function(){var a,b,d,f,g;if(this.isChainable()&&this.first.isChainable()){a=!0,b=this;while(b&&b.operator)a&&(a=b.operator in c),b=b.first;if(!a)return(new H(this)).invert();b=this;while(b&&b.operator)b.invert=!b.invert,b.operator=c[b.operator],b=b.first;return this}return(f=c[this.operator])?(this.operator=f,this.first.unwrap()instanceof e&&this.first.invert(),this):this.second?(new H(this)).invert():this.operator==="!"&&(d=this.first.unwrap())instanceof e&&((g=d.operator)==="!"||g==="in"||g==="instanceof")?d:new e("!",this)},e.prototype.unfoldSoak=function(a){var b;return((b=this.operator)==="++"||b==="--"||b==="delete")&&bh(a,this,"first")},e.prototype.generateDo=function(a){var b,c,e,f,h,i,k,l;f=[],c=a instanceof d&&(h=a.value.unwrap())instanceof j?h:a,l=c.params||[];for(i=0,k=l.length;i=0))throw SyntaxError("prefix increment/decrement may not have eval or arguments operand");return this.isUnary()?this.compileUnary(a):c?this.compileChain(a):this.operator==="?"?this.compileExistence(a):(b=this.first.compile(a,x)+" "+this.operator+" "+this.second.compile(a,x),a.level<=x?b:"("+b+")")},e.prototype.compileChain=function(a){var b,c,d,e;return e=this.first.second.cache(a),this.first.second=e[0],d=e[1],c=this.first.compile(a,x),b=""+c+" "+(this.invert?"&&":"||")+" "+d.compile(a)+" "+this.operator+" "+this.second.compile(a,x),"("+b+")"},e.prototype.compileExistence=function(a){var b,c;return this.first.isComplex()?(c=new A(a.scope.freeVariable("ref")),b=new H(new d(c,this.first))):(b=this.first,c=b),(new r(new l(b),c,{type:"if"})).addElse(this.second).compile(a)},e.prototype.compileUnary=function(a){var b,c,d;if(a.level>=u)return(new H(this)).compile(a);c=[b=this.operator],d=b==="+"||b==="-",(b==="new"||b==="typeof"||b==="delete"||d&&this.first instanceof e&&this.first.operator===b)&&c.push(" ");if(d&&this.first instanceof e||b==="new"&&this.first.isStatement(a))this.first=new H(this.first);return c.push(this.first.compile(a,x)),this.flip&&c.reverse(),c.join("")},e.prototype.toString=function(a){return e.__super__.toString.call(this,a,this.constructor.name+" "+this.operator)},e}(e),a.In=s=function(a){function b(a,b){this.object=a,this.array=b}return bm(b,a),b.prototype.children=["object","array"],b.prototype.invert=C,b.prototype.compileNode=function(a){var b,c,d,e,f;if(this.array instanceof W&&this.array.isArray()){f=this.array.base.objects;for(d=0,e=f.length;d= 0"),d===c?b:(b=d+", "+b,a.level=0)throw SyntaxError('catch variable may not be "'+this.error.value+'"');return a.scope.check(this.error.value)||a.scope.add(this.error.value,"param")," catch"+d+"{\n"+this.recovery.compile(a,z)+"\n"+this.tab+"}"}if(!this.ensure&&!this.recovery)return" catch (_error) {}"}.call(this),c=this.ensure?" finally {\n"+this.ensure.compile(a,z)+"\n"+this.tab+"}":"",""+this.tab+"try {\n"+e+"\n"+this.tab+"}"+(b||"")+c},b}(e),a.Throw=T=function(a){function b(a){this.expression=a}return bm(b,a),b.prototype.children=["expression"],b.prototype.isStatement=Y,b.prototype.jumps=D,b.prototype.makeReturn=S,b.prototype.compileNode=function(a){return this.tab+("throw "+this.expression.compile(a)+";")},b}(e),a.Existence=l=function(a){function b(a){this.expression=a}return bm(b,a),b.prototype.children=["expression"],b.prototype.invert=C,b.prototype.compileNode=function(a){var b,c,d,e;return this.expression.front=this.front,d=this.expression.compile(a,x),o.test(d)&&!a.scope.check(d)?(e=this.negated?["===","||"]:["!==","&&"],b=e[0],c=e[1],d="typeof "+d+" "+b+' "undefined" '+c+" "+d+" "+b+" null"):d=""+d+" "+(this.negated?"==":"!=")+" null",a.level<=v?d:"("+d+")"},b}(e),a.Parens=H=function(a){function b(a){this.body=a}return bm(b,a),b.prototype.children=["body"],b.prototype.unwrap=function(){return this.body},b.prototype.isComplex=function(){return this.body.isComplex()},b.prototype.compileNode=function(a){var b,c,d;return d=this.body.unwrap(),d instanceof W&&d.isAtomic()?(d.front=this.front,d.compile(a)):(c=d.compile(a,y),b=a.level1?b.expressions.unshift(new r((new H(this.guard)).invert(),new A("continue"))):this.guard&&(b=f.wrap([new r(this.guard,b)]))),this.pattern&&b.expressions.unshift(new d(this.name,new A(""+F+"["+l+"]"))),c+=this.pluckDirectCall(a,b),s&&(G="\n"+i+s+";"),this.object&&(e=""+l+" in "+F,this.own&&(h="\n"+i+"if (!"+bi("hasProp")+".call("+F+", "+l+")) continue;")),b=b.compile(bd(a,{indent:i}),z),b&&(b="\n"+b+"\n"),""+c+(u||"")+this.tab+"for ("+e+") {"+h+G+b+this.tab+"}"+(v||"")},b.prototype.pluckDirectCall=function(a,b){var c,e,f,h,i,k,l,m,n,o,p,q,r,s,t;e="",o=b.expressions;for(i=m=0,n=o.length;m=v?"("+d+")":d},b.prototype.unfoldSoak=function(){return this.soak&&this},b}(e),i={wrap:function(a,c,d){var e,h,i,k,l;if(a.jumps())return a;i=new j([],f.wrap([a])),e=[];if((k=a.contains(this.literalArgs))||a.contains(this.literalThis))l=new A(k?"apply":"call"),e=[new A("this")],k&&e.push(new A("arguments")),i=new W(i,[new b(l)]);return i.noReturn=d,h=new g(i,e),c?f.wrap([h]):h},literalArgs:function(a){return a instanceof A&&a.value==="arguments"&&!a.asKey},literalThis:function(a){return a instanceof A&&a.value==="this"&&!a.asKey||a instanceof j&&a.bound||a instanceof g&&a.isSuper}},bh=function(a,b,c){var d;if(!(d=b[c].unfoldSoak(a)))return;return b[c]=d.body,d.body=new W(b),d},V={"extends":function(){return"function(child, parent) { for (var key in parent) { if ("+bi("hasProp")+".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }"},bind:function(){return"function(fn, me){ return function(){ return fn.apply(me, arguments); }; }"},indexOf:function(){return"[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }"},hasProp:function(){return"{}.hasOwnProperty"},slice:function(){return"[].slice"}},z=1,y=2,w=3,v=4,x=5,u=6,R=" ",p="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",o=RegExp("^"+p+"$"),L=/^[+-]?\d+$/,B=RegExp("^(?:("+p+")\\.prototype(?:\\.("+p+")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|("+p+")$"),q=/^['"]/,bi=function(a){var b;return b="__"+a,N.root.assign(b,V[a]()),b},be=function(a,b){return a=a.replace(/\n/g,"$&"+b),a.replace(/\s+$/,"")}})).call(this)},require["./coffee-script"]=new function(){var a=this;((function(){var b,c,d,e,f,g,h,i,j,k,l={}.hasOwnProperty;e=require("fs"),h=require("path"),k=require("./lexer"),b=k.Lexer,c=k.RESERVED,g=require("./parser").parser,j=require("vm"),i=function(a){return a.charCodeAt(0)===65279?a.substring(1):a},require.extensions&&(require.extensions[".coffee"]=function(a,b){var c;return c=d(i(e.readFileSync(b,"utf8")),{filename:b}),a._compile(c,b)}),a.VERSION="1.4.0",a.RESERVED=c,a.helpers=require("./helpers"),a.compile=d=function(b,c){var d,e,h;c==null&&(c={}),h=a.helpers.merge;try{e=g.parse(f.tokenize(b)).compile(c);if(!c.header)return e}catch(i){throw c.filename&&(i.message="In "+c.filename+", "+i.message),i}return d="Generated by CoffeeScript "+this.VERSION,"// "+d+"\n"+e},a.tokens=function(a,b){return f.tokenize(a,b)},a.nodes=function(a,b){return typeof a=="string"?g.parse(f.tokenize(a,b)):g.parse(a)},a.run=function(a,b){var c;return b==null&&(b={}),c=require.main,c.filename=process.argv[1]=b.filename?e.realpathSync(b.filename):".",c.moduleCache&&(c.moduleCache={}),c.paths=require("module")._nodeModulePaths(h.dirname(e.realpathSync(b.filename))),h.extname(c.filename)!==".coffee"||require.extensions?c._compile(d(a,b),c.filename):c._compile(a,c.filename)},a.eval=function(a,b){var c,e,f,g,i,k,m,n,o,p,q,r,s,t;b==null&&(b={});if(!(a=a.trim()))return;e=j.Script;if(e){if(b.sandbox!=null){if(b.sandbox instanceof e.createContext().constructor)m=b.sandbox;else{m=e.createContext(),r=b.sandbox;for(g in r){if(!l.call(r,g))continue;n=r[g],m[g]=n}}m.global=m.root=m.GLOBAL=m}else m=global;m.__filename=b.filename||"eval",m.__dirname=h.dirname(m.__filename);if(m===global&&!m.module&&!m.require){c=require("module"),m.module=q=new c(b.modulename||"eval"),m.require=t=function(a){return c._load(a,q,!0)},q.filename=m.__filename,s=Object.getOwnPropertyNames(require);for(o=0,p=s.length;on;n++)e=t[n],e&&r.push(e);return r},t.count=function(t,e){var n,i;if(n=i=0,!e.length)return 1/0;for(;i=1+t.indexOf(e,i);)n++;return n},t.merge=function(t,e){return n(n({},t),e)},n=t.extend=function(t,e){var n,i;for(n in e)i=e[n],t[n]=i;return t},t.flatten=i=function(t){var e,n,r,s;for(n=[],r=0,s=t.length;s>r;r++)e=t[r],e instanceof Array?n=n.concat(i(e)):n.push(e);return n},t.del=function(t,e){var n;return n=t[e],delete t[e],n},t.last=function(t,e){return t[t.length-(e||0)-1]},t.some=null!=(r=Array.prototype.some)?r:function(t){var e,n,i;for(n=0,i=this.length;i>n;n++)if(e=this[n],t(e))return!0;return!1},e=function(t,e){return e?{first_line:t.first_line,first_column:t.first_column,last_line:e.last_line,last_column:e.last_column}:t},t.addLocationDataFn=function(t,n){return function(i){return"object"==typeof i&&i.updateLocationDataIfMissing&&i.updateLocationDataIfMissing(e(t,n)),i}},t.locationDataToString=function(t){var e;return"2"in t&&"first_line"in t[2]?e=t[2]:"first_line"in t&&(e=t),e?""+(e.first_line+1)+":"+(e.first_column+1)+"-"+(""+(e.last_line+1)+":"+(e.last_column+1)):"No location data"}}).call(this)},require["./rewriter"]=new function(){var t=this;(function(){var e,n,i,r,s,a,o,c,h,l,p,u,d,f,m,b,y,v,g=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},w=[].slice;for(t.Rewriter=function(){function t(){}return t.prototype.rewrite=function(t){return this.tokens=t,this.removeLeadingNewlines(),this.removeMidExpressionNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.addImplicitIndentation(),this.tagPostfixConditionals(),this.addImplicitBraces(),this.addImplicitParentheses(),this.addLocationDataToGeneratedTokens(),this.tokens},t.prototype.scanTokens=function(t){var e,n,i;for(i=this.tokens,e=0;n=i[e];)e+=t.call(this,n,e,i);return!0},t.prototype.detectEnd=function(t,e,n){var s,a,o,c,h;for(o=this.tokens,s=0;a=o[t];){if(0===s&&e.call(this,a,t))return n.call(this,a,t);if(!a||0>s)return n.call(this,a,t-1);c=a[0],g.call(r,c)>=0?s+=1:(h=a[0],g.call(i,h)>=0&&(s-=1)),t+=1}return t-1},t.prototype.removeLeadingNewlines=function(){var t,e,n,i,r;for(r=this.tokens,t=n=0,i=r.length;i>n&&(e=r[t][0],"TERMINATOR"===e);t=++n);return t?this.tokens.splice(0,t):void 0},t.prototype.removeMidExpressionNewlines=function(){return this.scanTokens(function(t,e,i){var r;return"TERMINATOR"===t[0]&&(r=this.tag(e+1),g.call(n,r)>=0)?(i.splice(e,1),0):1})},t.prototype.closeOpenCalls=function(){var t,e;return e=function(t,e){var n;return")"===(n=t[0])||"CALL_END"===n||"OUTDENT"===t[0]&&")"===this.tag(e-1)},t=function(t,e){return this.tokens["OUTDENT"===t[0]?e-1:e][0]="CALL_END"},this.scanTokens(function(n,i){return"CALL_START"===n[0]&&this.detectEnd(i+1,e,t),1})},t.prototype.closeOpenIndexes=function(){var t,e;return e=function(t){var e;return"]"===(e=t[0])||"INDEX_END"===e},t=function(t){return t[0]="INDEX_END"},this.scanTokens(function(n,i){return"INDEX_START"===n[0]&&this.detectEnd(i+1,e,t),1})},t.prototype.addImplicitBraces=function(){var t,e,n,s,a,c,h,l;return s=[],a=null,l=null,n=!0,c=0,h=0,e=function(t,e){var i,r,s,a,c,u;return c=this.tokens.slice(e+1,+(e+3)+1||9e9),i=c[0],a=c[1],s=c[2],"HERECOMMENT"===(null!=i?i[0]:void 0)?!1:(r=t[0],g.call(p,r)>=0&&(n=!1),("TERMINATOR"===r||"OUTDENT"===r||g.call(o,r)>=0&&n&&!(1===e-h))&&(!l&&","!==this.tag(e-1)||!(":"===(null!=a?a[0]:void 0)||"@"===(null!=i?i[0]:void 0)&&":"===(null!=s?s[0]:void 0)))||","===r&&i&&"IDENTIFIER"!==(u=i[0])&&"NUMBER"!==u&&"STRING"!==u&&"@"!==u&&"TERMINATOR"!==u&&"OUTDENT"!==u)},t=function(t,e){var n;return n=this.generate("}","}"),this.tokens.splice(e,0,n)},this.scanTokens(function(o,c,u){var d,f,m,b,y,v,w,k;if(w=b=o[0],g.call(r,w)>=0)return s.push(["INDENT"===b&&"{"===this.tag(c-1)?"{":b,c]),1;if(g.call(i,b)>=0)return a=s.pop(),1;if(":"!==b||":"!==(d=this.tag(c-2))&&"{"===(null!=(k=s[s.length-1])?k[0]:void 0))return 1;for(n=!0,h=c+1,s.push(["{"]),f="@"===d?c-2:c-1;"HERECOMMENT"===this.tag(f-2);)f-=2;return m=this.tag(f-1),l=!m||g.call(p,m)>=0,v=new String("{"),v.generated=!0,y=this.generate("{",v),u.splice(f,0,y),this.detectEnd(c+2,e,t),2})},t.prototype.addImplicitParentheses=function(){var t,e,n,i,r,l;return i=l=r=!1,e=null,n=function(t,n){var i,a,c,h;return a=t[0],!l&&t.fromThen?!0:(("IF"===a||"ELSE"===a||"CATCH"===a||"->"===a||"=>"===a||"CLASS"===a)&&(l=!0),("IF"===a||"ELSE"===a||"SWITCH"===a||"TRY"===a||"="===a)&&(r=!0),"."!==a&&"?."!==a&&"::"!==a||"OUTDENT"!==this.tag(n-1)?!t.generated&&","!==this.tag(n-1)&&(g.call(o,a)>=0||"INDENT"===a&&!r)&&("INDENT"!==a||"CLASS"!==(c=this.tag(n-2))&&"EXTENDS"!==c&&(h=this.tag(n-1),0>g.call(s,h))&&!(e===n-1&&(i=this.tokens[n+1])&&i.generated&&"{"===i[0])):!0)},t=function(t,e){return this.tokens.splice(e,0,this.generate("CALL_END",")"))},this.scanTokens(function(s,o,u){var d,f,m,b,y,v,w,k;return y=s[0],("CLASS"===y||"IF"===y||"FOR"===y||"WHILE"===y)&&(i=!0),v=u.slice(o-1,+(o+1)+1||9e9),b=v[0],f=v[1],m=v[2],d=!i&&"INDENT"===y&&m&&m.generated&&"{"===m[0]&&b&&(w=b[0],g.call(c,w)>=0),l=!1,r=!1,g.call(p,y)>=0&&(i=!1),b&&!b.spaced&&"?"===y&&(s.call=!0),s.fromThen?1:d||(null!=b?b.spaced:void 0)&&(b.call||(k=b[0],g.call(c,k)>=0))&&(g.call(a,y)>=0||!s.spaced&&!s.newLine&&g.call(h,y)>=0)?(e=o,u.splice(o,0,this.generate("CALL_START","(",s[2])),this.detectEnd(o+1,n,t),"?"===b[0]&&(b[0]="FUNC_EXIST"),2):1})},t.prototype.addLocationDataToGeneratedTokens=function(){return this.scanTokens(function(t,e,n){var i,r;return r=t[0],!t.generated&&!t.explicit||t[2]||(e>0?(i=n[e-1],t[2]={first_line:i[2].last_line,first_column:i[2].last_column,last_line:i[2].last_line,last_column:i[2].last_column}):t[2]={first_line:0,first_column:0,last_line:0,last_column:0}),1})},t.prototype.addImplicitIndentation=function(){var t,e,n,i,r;return r=n=i=null,e=function(t){var e;return";"!==t[1]&&(e=t[0],g.call(u,e)>=0)&&!("ELSE"===t[0]&&"IF"!==r&&"THEN"!==r)},t=function(t,e){return this.tokens.splice(","===this.tag(e-1)?e-1:e,0,i)},this.scanTokens(function(s,a,o){var c,h,l;return c=s[0],"TERMINATOR"===c&&"THEN"===this.tag(a+1)?(o.splice(a,1),0):"ELSE"===c&&"OUTDENT"!==this.tag(a-1)?(o.splice.apply(o,[a,0].concat(w.call(this.indentation(s)))),2):"CATCH"!==c||"OUTDENT"!==(h=this.tag(a+2))&&"TERMINATOR"!==h&&"FINALLY"!==h?g.call(d,c)>=0&&"INDENT"!==this.tag(a+1)&&("ELSE"!==c||"IF"!==this.tag(a+1))?(r=c,l=this.indentation(s,!0),n=l[0],i=l[1],"THEN"===r&&(n.fromThen=!0),o.splice(a+1,0,n),this.detectEnd(a+2,e,t),"THEN"===c&&o.splice(a,1),1):1:(o.splice.apply(o,[a+2,0].concat(w.call(this.indentation(s)))),4)})},t.prototype.tagPostfixConditionals=function(){var t,e,n;return n=null,e=function(t){var e;return"TERMINATOR"===(e=t[0])||"INDENT"===e},t=function(t){return"INDENT"!==t[0]||t.generated&&!t.fromThen?n[0]="POST_"+n[0]:void 0},this.scanTokens(function(i,r){return"IF"!==i[0]?1:(n=i,this.detectEnd(r+1,e,t),1)})},t.prototype.indentation=function(t,e){var n,i;return null==e&&(e=!1),n=["INDENT",2],i=["OUTDENT",2],e&&(n.generated=i.generated=!0),e||(n.explicit=i.explicit=!0),[n,i]},t.prototype.generate=function(t,e){var n;return n=[t,e],n.generated=!0,n},t.prototype.tag=function(t){var e;return null!=(e=this.tokens[t])?e[0]:void 0},t}(),e=[["(",")"],["[","]"],["{","}"],["INDENT","OUTDENT"],["CALL_START","CALL_END"],["PARAM_START","PARAM_END"],["INDEX_START","INDEX_END"]],t.INVERSES=l={},r=[],i=[],b=0,y=e.length;y>b;b++)v=e[b],f=v[0],m=v[1],r.push(l[m]=f),i.push(l[f]=m);n=["CATCH","WHEN","ELSE","FINALLY"].concat(i),c=["IDENTIFIER","SUPER",")","CALL_END","]","INDEX_END","@","THIS"],a=["IDENTIFIER","NUMBER","STRING","JS","REGEX","NEW","PARAM_START","CLASS","IF","TRY","SWITCH","THIS","BOOL","NULL","UNDEFINED","UNARY","SUPER","@","->","=>","[","(","{","--","++"],h=["+","-"],s=["->","=>","{","[",","],o=["POST_IF","FOR","WHILE","UNTIL","WHEN","BY","LOOP","TERMINATOR"],d=["ELSE","->","=>","TRY","FINALLY","THEN"],u=["TERMINATOR","CATCH","FINALLY","ELSE","OUTDENT","LEADING_WHEN"],p=["TERMINATOR","INDENT","OUTDENT"]}).call(this)},require["./lexer"]=new function(){var t=this;(function(){var e,n,i,r,s,a,o,c,h,l,p,u,d,f,m,b,y,v,g,w,k,E,L,N,T,x,D,S,F,R,I,A,$,_,C,O,j,M,P,V,U,B,H,q,G,W,X,Y,K,z,J,Z=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};z=require("./rewriter"),j=z.Rewriter,v=z.INVERSES,J=require("./helpers"),G=J.count,K=J.starts,q=J.compact,X=J.last,Y=J.locationDataToString,t.Lexer=x=function(){function t(){}return t.prototype.tokenize=function(t,e){var n,i,r,s;for(null==e&&(e={}),this.literate=e.literate,t=this.clean(t),this.indent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.ends=[],this.tokens=[],this.chunkLine=e.line||0,this.chunkColumn=e.column||0,i=0;this.chunk=t.slice(i);)n=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.heredocToken()||this.stringToken()||this.numberToken()||this.regexToken()||this.jsToken()||this.literalToken(),s=this.getLineAndColumnFromChunk(n),this.chunkLine=s[0],this.chunkColumn=s[1],i+=n;return this.closeIndentation(),(r=this.ends.pop())&&this.error("missing "+r),e.rewrite===!1?this.tokens:(new j).rewrite(this.tokens)},t.prototype.clean=function(t){var n,i,r;return t.charCodeAt(0)===e&&(t=t.slice(1)),H.test(t)&&(t="\n"+t),t=t.replace(/\r/g,"").replace(U,""),this.literate&&(i=function(){var e,i,s,a;for(s=t.split("\n"),a=[],e=0,i=s.length;i>e;e++)n=s[e],(r=N.exec(n))?a.push(n.slice(r[0].length)):a.push("# "+n);return a}(),t=i.join("\n")),t},t.prototype.identifierToken=function(){var t,e,n,i,r,c,h,l,p,u,d,f,m,y;return(h=b.exec(this.chunk))?(c=h[0],i=h[1],t=h[2],r=i.length,l=void 0,"own"===i&&"FOR"===this.tag()?(this.token("OWN",i),i.length):(n=t||(p=X(this.tokens))&&("."===(f=p[0])||"?."===f||"::"===f||!p.spaced&&"@"===p[0]),u="IDENTIFIER",!n&&(Z.call(k,i)>=0||Z.call(o,i)>=0)&&(u=i.toUpperCase(),"WHEN"===u&&(m=this.tag(),Z.call(E,m)>=0)?u="LEADING_WHEN":"FOR"===u?this.seenFor=!0:"UNLESS"===u?u="IF":Z.call(B,u)>=0?u="UNARY":Z.call(C,u)>=0&&("INSTANCEOF"!==u&&this.seenFor?(u="FOR"+u,this.seenFor=!1):(u="RELATION","!"===this.value()&&(l=this.tokens.pop(),i="!"+i)))),Z.call(w,i)>=0&&(n?(u="IDENTIFIER",i=new String(i),i.reserved=!0):Z.call(O,i)>=0&&this.error('reserved word "'+i+'"')),n||(Z.call(s,i)>=0&&(i=a[i]),u=function(){switch(i){case"!":return"UNARY";case"==":case"!=":return"COMPARE";case"&&":case"||":return"LOGIC";case"true":case"false":return"BOOL";case"break":case"continue":return"STATEMENT";default:return u}}()),d=this.token(u,i,0,r),l&&(y=[l[2].first_line,l[2].first_column],d[2].first_line=y[0],d[2].first_column=y[1]),t&&(e=c.lastIndexOf(":"),this.token(":",":",e,t.length)),c.length)):0},t.prototype.numberToken=function(){var t,e,n,i,r;return(n=A.exec(this.chunk))?(i=n[0],/^0[BOX]/.test(i)?this.error("radix prefix '"+i+"' must be lowercase"):/E/.test(i)&&!/^0x/.test(i)?this.error("exponential notation '"+i+"' must be indicated with a lowercase 'e'"):/^0\d*[89]/.test(i)?this.error("decimal literal '"+i+"' must not be prefixed with '0'"):/^0\d+/.test(i)&&this.error("octal literal '"+i+"' must be prefixed with '0o'"),e=i.length,(r=/^0o([0-7]+)/.exec(i))&&(i="0x"+parseInt(r[1],8).toString(16)),(t=/^0b([01]+)/.exec(i))&&(i="0x"+parseInt(t[1],2).toString(16)),this.token("NUMBER",i,0,e),e):0},t.prototype.stringToken=function(){var t,e,n;switch(this.chunk.charAt(0)){case"'":if(!(t=P.exec(this.chunk)))return 0;n=t[0],this.token("STRING",n.replace(S,"\\\n"),0,n.length);break;case'"':if(!(n=this.balancedString(this.chunk,'"')))return 0;n.indexOf("#{",1)>0?this.interpolateString(n.slice(1,-1),{strOffset:1,lexedLength:n.length}):this.token("STRING",this.escapeLines(n,0,n.length));break;default:return 0}return(e=/^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(n))&&this.error("octal escape sequences "+n+" are not allowed"),n.length},t.prototype.heredocToken=function(){var t,e,n,i;return(n=p.exec(this.chunk))?(e=n[0],i=e.charAt(0),t=this.sanitizeHeredoc(n[2],{quote:i,indent:null}),'"'===i&&t.indexOf("#{")>=0?this.interpolateString(t,{heredoc:!0,strOffset:3,lexedLength:e.length}):this.token("STRING",this.makeString(t,i,!0),0,e.length),e.length):0},t.prototype.commentToken=function(){var t,e,n;return(n=this.chunk.match(c))?(t=n[0],e=n[1],e&&this.token("HERECOMMENT",this.sanitizeHeredoc(e,{herecomment:!0,indent:Array(this.indent+1).join(" ")}),0,t.length),t.length):0},t.prototype.jsToken=function(){var t,e;return"`"===this.chunk.charAt(0)&&(t=g.exec(this.chunk))?(this.token("JS",(e=t[0]).slice(1,-1),0,e.length),e.length):0},t.prototype.regexToken=function(){var t,e,n,i,r,s,a;return"/"!==this.chunk.charAt(0)?0:(n=f.exec(this.chunk))?e=this.heregexToken(n):(i=X(this.tokens),i&&(s=i[0],Z.call(i.spaced?R:I,s)>=0)?0:(n=_.exec(this.chunk))?(a=n,n=a[0],r=a[1],t=a[2],"/*"===r.slice(0,2)&&this.error("regular expressions cannot begin with `*`"),"//"===r&&(r="/(?:)/"),this.token("REGEX",""+r+t,0,n.length),n.length):0)},t.prototype.heregexToken=function(t){var e,n,i,r,s,a,o,c,h,l,p,u,d,f,b,y;if(r=t[0],e=t[1],n=t[2],0>e.indexOf("#{"))return o=e.replace(m,"").replace(/\//g,"\\/"),o.match(/^\*/)&&this.error("regular expressions cannot begin with `*`"),this.token("REGEX","/"+(o||"(?:)")+"/"+n,0,r.length),r.length;for(this.token("IDENTIFIER","RegExp",0,0),this.token("CALL_START","(",0,0),l=[],f=this.interpolateString(e,{regex:!0}),u=0,d=f.length;d>u;u++){if(h=f[u],c=h[0],p=h[1],"TOKENS"===c)l.push.apply(l,p);else if("NEOSTRING"===c){if(!(p=p.replace(m,"")))continue;p=p.replace(/\\/g,"\\\\"),h[0]="STRING",h[1]=this.makeString(p,'"',!0),l.push(h)}else this.error("Unexpected "+c);a=X(this.tokens),s=["+","+"],s[2]=a[2],l.push(s)}return l.pop(),"STRING"!==(null!=(b=l[0])?b[0]:void 0)&&(this.token("STRING",'""',0,0),this.token("+","+",0,0)),(y=this.tokens).push.apply(y,l),n&&(i=r.lastIndexOf(n),this.token(",",",",i,0),this.token("STRING",'"'+n+'"',i,n.length)),this.token(")",")",r.length-1,0),r.length},t.prototype.lineToken=function(){var t,e,n,i,r;if(!(n=F.exec(this.chunk)))return 0;if(e=n[0],this.seenFor=!1,r=e.length-1-e.lastIndexOf("\n"),i=this.unfinished(),r-this.indebt===this.indent)return i?this.suppressNewlines():this.newlineToken(0),e.length;if(r>this.indent){if(i)return this.indebt=r-this.indent,this.suppressNewlines(),e.length;t=r-this.indent+this.outdebt,this.token("INDENT",t,0,e.length),this.indents.push(t),this.ends.push("OUTDENT"),this.outdebt=this.indebt=0}else this.indebt=0,this.outdentToken(this.indent-r,i,e.length);return this.indent=r,e.length},t.prototype.outdentToken=function(t,e,n){for(var i,r;t>0;)r=this.indents.length-1,void 0===this.indents[r]?t=0:this.indents[r]===this.outdebt?(t-=this.outdebt,this.outdebt=0):this.indents[r]=0)&&this.error('reserved word "'+this.value()+"\" can't be assigned"),"||"===(o=e[1])||"&&"===o))return e[0]="COMPOUND_ASSIGN",e[1]+="=",s.length;if(";"===s)this.seenFor=!1,n="TERMINATOR";else if(Z.call(D,s)>=0)n="MATH";else if(Z.call(h,s)>=0)n="COMPARE";else if(Z.call(l,s)>=0)n="COMPOUND_ASSIGN";else if(Z.call(B,s)>=0)n="UNARY";else if(Z.call(M,s)>=0)n="SHIFT";else if(Z.call(T,s)>=0||"?"===s&&(null!=e?e.spaced:void 0))n="LOGIC";else if(e&&!e.spaced)if("("===s&&(c=e[0],Z.call(i,c)>=0))"?"===e[0]&&(e[0]="FUNC_EXIST"),n="CALL_START";else if("["===s&&(p=e[0],Z.call(y,p)>=0))switch(n="INDEX_START",e[0]){case"?":e[0]="INDEX_SOAK"}switch(s){case"(":case"{":case"[":this.ends.push(v[s]);break;case")":case"}":case"]":this.pair(s)}return this.token(n,s),s.length},t.prototype.sanitizeHeredoc=function(t,e){var n,i,r,s,a;if(r=e.indent,i=e.herecomment){if(u.test(t)&&this.error('block comment cannot contain "*/", starting'),0>t.indexOf("\n"))return t}else for(;s=d.exec(t);)n=s[1],(null===r||(a=n.length)>0&&r.length>a)&&(r=n);return r&&(t=t.replace(RegExp("\\n"+r,"g"),"\n")),i||(t=t.replace(/^\n/,"")),t},t.prototype.tagParameters=function(){var t,e,n,i;if(")"!==this.tag())return this;for(e=[],i=this.tokens,t=i.length,i[--t][0]="PARAM_END";n=i[--t];)switch(n[0]){case")":e.push(n);break;case"(":case"CALL_START":if(!e.length)return"("===n[0]?(n[0]="PARAM_START",this):this;e.pop()}return this},t.prototype.closeIndentation=function(){return this.outdentToken(this.indent)},t.prototype.balancedString=function(t,e){var n,i,r,s,a,o,c,h;for(n=0,o=[e],i=c=1,h=t.length;h>=1?h>c:c>h;i=h>=1?++c:--c)if(n)--n;else{switch(r=t.charAt(i)){case"\\":++n;continue;case e:if(o.pop(),!o.length)return t.slice(0,+i+1||9e9);e=o[o.length-1];continue}"}"!==e||'"'!==r&&"'"!==r?"}"===e&&"/"===r&&(s=f.exec(t.slice(i))||_.exec(t.slice(i)))?n+=s[0].length-1:"}"===e&&"{"===r?o.push(e="}"):'"'===e&&"#"===a&&"{"===r&&o.push(e="}"):o.push(e=r),a=r}return this.error("missing "+o.pop()+", starting")},t.prototype.interpolateString=function(e,n){var i,r,s,a,o,c,h,l,p,u,d,f,m,b,y,v,g,w,k,E,L,N,T,x,D,S,F;for(null==n&&(n={}),s=n.heredoc,g=n.regex,m=n.offsetInChunk,w=n.strOffset,p=n.lexedLength,m=m||0,w=w||0,p=p||e.length,s&&e.length>0&&"\n"===e[0]&&(e=e.slice(1),w++),L=[],b=0,a=-1;l=e.charAt(a+=1);)"\\"!==l?"#"===l&&"{"===e.charAt(a+1)&&(r=this.balancedString(e.slice(a+1),"}"))&&(a>b&&L.push(this.makeToken("NEOSTRING",e.slice(b,a),w+b)),o=r.slice(1,-1),o.length&&(D=this.getLineAndColumnFromChunk(w+a+1),u=D[0],i=D[1],f=(new t).tokenize(o,{line:u,column:i,rewrite:!1}),v=f.pop(),"TERMINATOR"===(null!=(S=f[0])?S[0]:void 0)&&(v=f.shift()),(h=f.length)&&(h>1&&(f.unshift(this.makeToken("(","(",w+a+1,0)),f.push(this.makeToken(")",")",w+a+1+o.length,0))),L.push(["TOKENS",f]))),a+=r.length,b=a+1):a+=1;if(a>b&&e.length>b&&L.push(this.makeToken("NEOSTRING",e.slice(b),w+b)),g)return L;if(!L.length)return this.token("STRING",'""',m,p);for("NEOSTRING"!==L[0][0]&&L.unshift(this.makeToken("NEOSTRING","",m)),(c=L.length>1)&&this.token("(","(",m,0),a=T=0,x=L.length;x>T;a=++T)E=L[a],k=E[0],N=E[1],a&&(a&&(y=this.token("+","+")),d="TOKENS"===k?N[0]:E,y[2]={first_line:d[2].first_line,first_column:d[2].first_column,last_line:d[2].first_line,last_column:d[2].first_column}),"TOKENS"===k?(F=this.tokens).push.apply(F,N):"NEOSTRING"===k?(E[0]="STRING",E[1]=this.makeString(N,'"',s),this.tokens.push(E)):this.error("Unexpected "+k);return c&&this.token(")",")",m+p,0),L},t.prototype.pair=function(t){var e,n;return t!==(n=X(this.ends))?("OUTDENT"!==n&&this.error("unmatched "+t),this.indent-=e=X(this.indents),this.outdentToken(e,!0),this.pair(t)):this.ends.pop()},t.prototype.getLineAndColumnFromChunk=function(t){var e,n,i,r;return 0===t?[this.chunkLine,this.chunkColumn]:(r=t>=this.chunk.length?this.chunk:this.chunk.slice(0,+(t-1)+1||9e9),n=G(r,"\n"),e=this.chunkColumn,n>0?(i=r.split("\n"),e=X(i).length):e+=r.length,[this.chunkLine+n,e])},t.prototype.makeToken=function(t,e,n,i){var r,s,a,o,c;return n=n||0,void 0===i&&(i=e.length),s={},o=this.getLineAndColumnFromChunk(n),s.first_line=o[0],s.first_column=o[1],r=i>0?i-1:0,c=this.getLineAndColumnFromChunk(n+(i-1)),s.last_line=c[0],s.last_column=c[1],a=[t,e,s]},t.prototype.token=function(t,e,n,i){var r;return r=this.makeToken(t,e,n,i),this.tokens.push(r),r},t.prototype.tag=function(t,e){var n;return(n=X(this.tokens,t))&&(e?n[0]=e:n[0])},t.prototype.value=function(t,e){var n;return(n=X(this.tokens,t))&&(e?n[1]=e:n[1])},t.prototype.unfinished=function(){var t;return L.test(this.chunk)||"\\"===(t=this.tag())||"."===t||"?."===t||"UNARY"===t||"MATH"===t||"+"===t||"-"===t||"SHIFT"===t||"RELATION"===t||"COMPARE"===t||"LOGIC"===t||"THROW"===t||"EXTENDS"===t},t.prototype.escapeLines=function(t,e){return t.replace(S,e?"\\n":"")},t.prototype.makeString=function(t,e,n){return t?(t=t.replace(/\\([\s\S])/g,function(t,n){return"\n"===n||n===e?n:t}),t=t.replace(RegExp(""+e,"g"),"\\$&"),e+this.escapeLines(t,n)+e):e+e},t.prototype.error=function(t){throw SyntaxError(""+t+" on line "+(this.chunkLine+1))},t}(),k=["true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","if","else","switch","for","while","do","try","catch","finally","class","extends","super"],o=["undefined","then","unless","until","loop","of","by","when"],a={and:"&&",or:"||",is:"==",isnt:"!=",not:"!",yes:"true",no:"false",on:"true",off:"false"},s=function(){var t;t=[];for(W in a)t.push(W);return t}(),o=o.concat(s),O=["case","default","function","var","void","with","const","let","enum","export","import","native","__hasProp","__extends","__slice","__bind","__indexOf","implements","interface","package","private","protected","public","static","yield"],V=["arguments","eval"],w=k.concat(O).concat(V),t.RESERVED=O.concat(k).concat(o).concat(V),t.STRICT_PROSCRIBED=V,e=65279,b=/^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/,A=/^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i,p=/^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/,$=/^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/,H=/^[^\n\S]+/,c=/^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)$)|^(?:\s*#(?!##[^#]).*)+/,N=/^([ ]{4}|\t)/,r=/^[-=]>/,F=/^(?:\n[^\n\S]*)+/,P=/^'[^\\']*(?:\\.[^\\']*)*'/,g=/^`[^\\`]*(?:\\.[^\\`]*)*`/,_=/^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/,f=/^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/,m=/\s+(?:#.*)?/g,S=/\n/g,d=/\n+([^\n\S]*)/g,u=/\*\//,L=/^\s*(?:,|\??\.(?![.\d])|::)/,U=/\s+$/,l=["-=","+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|="],B=["!","~","NEW","TYPEOF","DELETE","DO"],T=["&&","||","&","|","^"],M=["<<",">>",">>>"],h=["==","!=","<",">","<=",">="],D=["*","/","%"],C=["IN","OF","INSTANCEOF"],n=["TRUE","FALSE"],R=["NUMBER","REGEX","BOOL","NULL","UNDEFINED","++","--","]"],I=R.concat(")","}","THIS","IDENTIFIER","STRING"),i=["IDENTIFIER","STRING","REGEX",")","]","}","?","::","@","THIS","SUPER"],y=i.concat("NUMBER","BOOL","NULL","UNDEFINED"),E=["INDENT","OUTDENT","TERMINATOR"]}).call(this)},require["./parser"]=new function(){var t=this,e=function(){function t(){this.yy={}}var e={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Block:5,TERMINATOR:6,Line:7,Expression:8,Statement:9,Return:10,Comment:11,STATEMENT:12,Value:13,Invocation:14,Code:15,Operation:16,Assign:17,If:18,Try:19,While:20,For:21,Switch:22,Class:23,Throw:24,INDENT:25,OUTDENT:26,Identifier:27,IDENTIFIER:28,AlphaNumeric:29,NUMBER:30,STRING:31,Literal:32,JS:33,REGEX:34,DEBUGGER:35,UNDEFINED:36,NULL:37,BOOL:38,Assignable:39,"=":40,AssignObj:41,ObjAssignable:42,":":43,ThisProperty:44,RETURN:45,HERECOMMENT:46,PARAM_START:47,ParamList:48,PARAM_END:49,FuncGlyph:50,"->":51,"=>":52,OptComma:53,",":54,Param:55,ParamVar:56,"...":57,Array:58,Object:59,Splat:60,SimpleAssignable:61,Accessor:62,Parenthetical:63,Range:64,This:65,".":66,"?.":67,"::":68,Index:69,INDEX_START:70,IndexValue:71,INDEX_END:72,INDEX_SOAK:73,Slice:74,"{":75,AssignList:76,"}":77,CLASS:78,EXTENDS:79,OptFuncExist:80,Arguments:81,SUPER:82,FUNC_EXIST:83,CALL_START:84,CALL_END:85,ArgList:86,THIS:87,"@":88,"[":89,"]":90,RangeDots:91,"..":92,Arg:93,SimpleArgs:94,TRY:95,Catch:96,FINALLY:97,CATCH:98,THROW:99,"(":100,")":101,WhileSource:102,WHILE:103,WHEN:104,UNTIL:105,Loop:106,LOOP:107,ForBody:108,FOR:109,ForStart:110,ForSource:111,ForVariables:112,OWN:113,ForValue:114,FORIN:115,FOROF:116,BY:117,SWITCH:118,Whens:119,ELSE:120,When:121,LEADING_WHEN:122,IfBlock:123,IF:124,POST_IF:125,UNARY:126,"-":127,"+":128,"--":129,"++":130,"?":131,MATH:132,SHIFT:133,COMPARE:134,LOGIC:135,RELATION:136,COMPOUND_ASSIGN:137,$accept:0,$end:1},terminals_:{2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",70:"INDEX_START",72:"INDEX_END",73:"INDEX_SOAK",75:"{",77:"}",78:"CLASS",79:"EXTENDS",82:"SUPER",83:"FUNC_EXIST",84:"CALL_START",85:"CALL_END",87:"THIS",88:"@",89:"[",90:"]",92:"..",95:"TRY",97:"FINALLY",98:"CATCH",99:"THROW",100:"(",101:")",103:"WHILE",104:"WHEN",105:"UNTIL",107:"LOOP",109:"FOR",113:"OWN",115:"FORIN",116:"FOROF",117:"BY",118:"SWITCH",120:"ELSE",122:"LEADING_WHEN",124:"IF",125:"POST_IF",126:"UNARY",127:"-",128:"+",129:"--",130:"++",131:"?",132:"MATH",133:"SHIFT",134:"COMPARE",135:"LOGIC",136:"RELATION",137:"COMPOUND_ASSIGN"},productions_:[0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,1],[62,1],[69,3],[69,2],[71,1],[71,1],[59,4],[76,0],[76,1],[76,3],[76,4],[76,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[80,0],[80,1],[81,2],[81,4],[65,1],[65,1],[44,2],[58,2],[58,4],[91,1],[91,1],[64,5],[74,3],[74,2],[74,2],[74,1],[86,1],[86,3],[86,4],[86,4],[86,6],[93,1],[93,1],[94,1],[94,3],[19,2],[19,3],[19,4],[19,5],[96,3],[96,3],[24,2],[63,3],[63,5],[102,2],[102,4],[102,2],[102,4],[20,2],[20,2],[20,2],[20,1],[106,2],[106,2],[21,2],[21,2],[21,2],[108,2],[108,2],[110,2],[110,3],[114,1],[114,1],[114,1],[114,1],[112,1],[112,3],[111,2],[111,2],[111,4],[111,4],[111,4],[111,6],[111,6],[22,5],[22,7],[22,4],[22,6],[119,1],[119,2],[121,3],[121,4],[123,3],[123,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,4],[16,3]],performAction:function(t,e,n,i,r,s,a){var o=s.length-1;switch(r){case 1:return this.$=i.addLocationDataFn(a[o],a[o])(new i.Block);case 2:return this.$=s[o];case 3:return this.$=s[o-1];case 4:this.$=i.addLocationDataFn(a[o],a[o])(i.Block.wrap([s[o]]));break;case 5:this.$=i.addLocationDataFn(a[o-2],a[o])(s[o-2].push(s[o]));break;case 6:this.$=s[o-1];break;case 7:this.$=s[o];break;case 8:this.$=s[o];break;case 9:this.$=s[o];break;case 10:this.$=s[o];break;case 11:this.$=i.addLocationDataFn(a[o],a[o])(new i.Literal(s[o]));break;case 12:this.$=s[o];break;case 13:this.$=s[o];break;case 14:this.$=s[o];break;case 15:this.$=s[o];break;case 16:this.$=s[o];break;case 17:this.$=s[o];break;case 18:this.$=s[o];break;case 19:this.$=s[o];break;case 20:this.$=s[o];break;case 21:this.$=s[o];break;case 22:this.$=s[o];break;case 23:this.$=s[o];break;case 24:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Block);break;case 25:this.$=i.addLocationDataFn(a[o-2],a[o])(s[o-1]);break;case 26:this.$=i.addLocationDataFn(a[o],a[o])(new i.Literal(s[o]));break;case 27:this.$=i.addLocationDataFn(a[o],a[o])(new i.Literal(s[o]));break;case 28:this.$=i.addLocationDataFn(a[o],a[o])(new i.Literal(s[o]));break;case 29:this.$=s[o];break;case 30:this.$=i.addLocationDataFn(a[o],a[o])(new i.Literal(s[o]));break;case 31:this.$=i.addLocationDataFn(a[o],a[o])(new i.Literal(s[o]));break;case 32:this.$=i.addLocationDataFn(a[o],a[o])(new i.Literal(s[o]));break;case 33:this.$=i.addLocationDataFn(a[o],a[o])(new i.Undefined);break;case 34:this.$=i.addLocationDataFn(a[o],a[o])(new i.Null);break;case 35:this.$=i.addLocationDataFn(a[o],a[o])(new i.Bool(s[o]));break;case 36:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Assign(s[o-2],s[o]));break;case 37:this.$=i.addLocationDataFn(a[o-3],a[o])(new i.Assign(s[o-3],s[o]));break;case 38:this.$=i.addLocationDataFn(a[o-4],a[o])(new i.Assign(s[o-4],s[o-1]));break;case 39:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(s[o]));break;case 40:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Assign(i.addLocationDataFn(a[o-2])(i.Value.wrap(s[o-2])),s[o],"object"));break;case 41:this.$=i.addLocationDataFn(a[o-4],a[o])(new i.Assign(i.addLocationDataFn(a[o-4])(i.Value.wrap(s[o-4])),s[o-1],"object"));break;case 42:this.$=s[o];break;case 43:this.$=s[o];break;case 44:this.$=s[o];break;case 45:this.$=s[o];break;case 46:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Return(s[o]));break;case 47:this.$=i.addLocationDataFn(a[o],a[o])(new i.Return);break;case 48:this.$=i.addLocationDataFn(a[o],a[o])(new i.Comment(s[o]));break;case 49:this.$=i.addLocationDataFn(a[o-4],a[o])(new i.Code(s[o-3],s[o],s[o-1]));break;case 50:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Code([],s[o],s[o-1]));break;case 51:this.$=i.addLocationDataFn(a[o],a[o])("func");break;case 52:this.$=i.addLocationDataFn(a[o],a[o])("boundfunc");break;case 53:this.$=s[o];break;case 54:this.$=s[o];break;case 55:this.$=i.addLocationDataFn(a[o],a[o])([]);break;case 56:this.$=i.addLocationDataFn(a[o],a[o])([s[o]]);break;case 57:this.$=i.addLocationDataFn(a[o-2],a[o])(s[o-2].concat(s[o]));break;case 58:this.$=i.addLocationDataFn(a[o-3],a[o])(s[o-3].concat(s[o]));break;case 59:this.$=i.addLocationDataFn(a[o-5],a[o])(s[o-5].concat(s[o-2]));break;case 60:this.$=i.addLocationDataFn(a[o],a[o])(new i.Param(s[o]));break;case 61:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Param(s[o-1],null,!0));break;case 62:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Param(s[o-2],s[o]));break;case 63:this.$=s[o];break;case 64:this.$=s[o];break;case 65:this.$=s[o];break;case 66:this.$=s[o];break;case 67:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Splat(s[o-1]));break;case 68:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(s[o]));break;case 69:this.$=i.addLocationDataFn(a[o-1],a[o])(s[o-1].add(s[o]));break;case 70:this.$=i.addLocationDataFn(a[o-1],a[o])(i.Value.wrap(s[o-1],[].concat(s[o])));break;case 71:this.$=s[o];break;case 72:this.$=s[o];break;case 73:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(s[o]));break;case 74:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(s[o]));break;case 75:this.$=s[o];break;case 76:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(s[o]));break;case 77:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(s[o]));break;case 78:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(s[o]));break;case 79:this.$=s[o];break;case 80:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Access(s[o]));break;case 81:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Access(s[o],"soak"));break;case 82:this.$=i.addLocationDataFn(a[o-1],a[o])([i.addLocationDataFn(a[o-1])(new i.Access(new i.Literal("prototype"))),i.addLocationDataFn(a[o])(new i.Access(s[o]))]);break;case 83:this.$=i.addLocationDataFn(a[o],a[o])(new i.Access(new i.Literal("prototype")));break;case 84:this.$=s[o];break;case 85:this.$=i.addLocationDataFn(a[o-2],a[o])(s[o-1]);break;case 86:this.$=i.addLocationDataFn(a[o-1],a[o])(i.extend(s[o],{soak:!0}));break;case 87:this.$=i.addLocationDataFn(a[o],a[o])(new i.Index(s[o]));break;case 88:this.$=i.addLocationDataFn(a[o],a[o])(new i.Slice(s[o]));break;case 89:this.$=i.addLocationDataFn(a[o-3],a[o])(new i.Obj(s[o-2],s[o-3].generated)); +break;case 90:this.$=i.addLocationDataFn(a[o],a[o])([]);break;case 91:this.$=i.addLocationDataFn(a[o],a[o])([s[o]]);break;case 92:this.$=i.addLocationDataFn(a[o-2],a[o])(s[o-2].concat(s[o]));break;case 93:this.$=i.addLocationDataFn(a[o-3],a[o])(s[o-3].concat(s[o]));break;case 94:this.$=i.addLocationDataFn(a[o-5],a[o])(s[o-5].concat(s[o-2]));break;case 95:this.$=i.addLocationDataFn(a[o],a[o])(new i.Class);break;case 96:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Class(null,null,s[o]));break;case 97:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Class(null,s[o]));break;case 98:this.$=i.addLocationDataFn(a[o-3],a[o])(new i.Class(null,s[o-1],s[o]));break;case 99:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Class(s[o]));break;case 100:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Class(s[o-1],null,s[o]));break;case 101:this.$=i.addLocationDataFn(a[o-3],a[o])(new i.Class(s[o-2],s[o]));break;case 102:this.$=i.addLocationDataFn(a[o-4],a[o])(new i.Class(s[o-3],s[o-1],s[o]));break;case 103:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Call(s[o-2],s[o],s[o-1]));break;case 104:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Call(s[o-2],s[o],s[o-1]));break;case 105:this.$=i.addLocationDataFn(a[o],a[o])(new i.Call("super",[new i.Splat(new i.Literal("arguments"))]));break;case 106:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Call("super",s[o]));break;case 107:this.$=i.addLocationDataFn(a[o],a[o])(!1);break;case 108:this.$=i.addLocationDataFn(a[o],a[o])(!0);break;case 109:this.$=i.addLocationDataFn(a[o-1],a[o])([]);break;case 110:this.$=i.addLocationDataFn(a[o-3],a[o])(s[o-2]);break;case 111:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(new i.Literal("this")));break;case 112:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(new i.Literal("this")));break;case 113:this.$=i.addLocationDataFn(a[o-1],a[o])(i.Value.wrap(i.addLocationDataFn(a[o-1])(new i.Literal("this")),[i.addLocationDataFn(a[o])(new i.Access(s[o]))],"this"));break;case 114:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Arr([]));break;case 115:this.$=i.addLocationDataFn(a[o-3],a[o])(new i.Arr(s[o-2]));break;case 116:this.$=i.addLocationDataFn(a[o],a[o])("inclusive");break;case 117:this.$=i.addLocationDataFn(a[o],a[o])("exclusive");break;case 118:this.$=i.addLocationDataFn(a[o-4],a[o])(new i.Range(s[o-3],s[o-1],s[o-2]));break;case 119:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Range(s[o-2],s[o],s[o-1]));break;case 120:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Range(s[o-1],null,s[o]));break;case 121:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Range(null,s[o],s[o-1]));break;case 122:this.$=i.addLocationDataFn(a[o],a[o])(new i.Range(null,null,s[o]));break;case 123:this.$=i.addLocationDataFn(a[o],a[o])([s[o]]);break;case 124:this.$=i.addLocationDataFn(a[o-2],a[o])(s[o-2].concat(s[o]));break;case 125:this.$=i.addLocationDataFn(a[o-3],a[o])(s[o-3].concat(s[o]));break;case 126:this.$=i.addLocationDataFn(a[o-3],a[o])(s[o-2]);break;case 127:this.$=i.addLocationDataFn(a[o-5],a[o])(s[o-5].concat(s[o-2]));break;case 128:this.$=s[o];break;case 129:this.$=s[o];break;case 130:this.$=s[o];break;case 131:this.$=i.addLocationDataFn(a[o-2],a[o])([].concat(s[o-2],s[o]));break;case 132:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Try(s[o]));break;case 133:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Try(s[o-1],s[o][0],s[o][1]));break;case 134:this.$=i.addLocationDataFn(a[o-3],a[o])(new i.Try(s[o-2],null,null,s[o]));break;case 135:this.$=i.addLocationDataFn(a[o-4],a[o])(new i.Try(s[o-3],s[o-2][0],s[o-2][1],s[o]));break;case 136:this.$=i.addLocationDataFn(a[o-2],a[o])([s[o-1],s[o]]);break;case 137:this.$=i.addLocationDataFn(a[o-2],a[o])([i.addLocationDataFn(a[o-1])(i.Value.wrap(s[o-1])),s[o]]);break;case 138:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Throw(s[o]));break;case 139:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Parens(s[o-1]));break;case 140:this.$=i.addLocationDataFn(a[o-4],a[o])(new i.Parens(s[o-2]));break;case 141:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.While(s[o]));break;case 142:this.$=i.addLocationDataFn(a[o-3],a[o])(new i.While(s[o-2],{guard:s[o]}));break;case 143:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.While(s[o],{invert:!0}));break;case 144:this.$=i.addLocationDataFn(a[o-3],a[o])(new i.While(s[o-2],{invert:!0,guard:s[o]}));break;case 145:this.$=i.addLocationDataFn(a[o-1],a[o])(s[o-1].addBody(s[o]));break;case 146:this.$=i.addLocationDataFn(a[o-1],a[o])(s[o].addBody(i.addLocationDataFn(a[o-1])(i.Block.wrap([s[o-1]]))));break;case 147:this.$=i.addLocationDataFn(a[o-1],a[o])(s[o].addBody(i.addLocationDataFn(a[o-1])(i.Block.wrap([s[o-1]]))));break;case 148:this.$=i.addLocationDataFn(a[o],a[o])(s[o]);break;case 149:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.While(i.addLocationDataFn(a[o-1])(new i.Literal("true"))).addBody(s[o]));break;case 150:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.While(i.addLocationDataFn(a[o-1])(new i.Literal("true"))).addBody(i.addLocationDataFn(a[o])(i.Block.wrap([s[o]]))));break;case 151:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.For(s[o-1],s[o]));break;case 152:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.For(s[o-1],s[o]));break;case 153:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.For(s[o],s[o-1]));break;case 154:this.$=i.addLocationDataFn(a[o-1],a[o])({source:i.addLocationDataFn(a[o])(i.Value.wrap(s[o]))});break;case 155:this.$=i.addLocationDataFn(a[o-1],a[o])(function(){return s[o].own=s[o-1].own,s[o].name=s[o-1][0],s[o].index=s[o-1][1],s[o]}());break;case 156:this.$=i.addLocationDataFn(a[o-1],a[o])(s[o]);break;case 157:this.$=i.addLocationDataFn(a[o-2],a[o])(function(){return s[o].own=!0,s[o]}());break;case 158:this.$=s[o];break;case 159:this.$=s[o];break;case 160:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(s[o]));break;case 161:this.$=i.addLocationDataFn(a[o],a[o])(i.Value.wrap(s[o]));break;case 162:this.$=i.addLocationDataFn(a[o],a[o])([s[o]]);break;case 163:this.$=i.addLocationDataFn(a[o-2],a[o])([s[o-2],s[o]]);break;case 164:this.$=i.addLocationDataFn(a[o-1],a[o])({source:s[o]});break;case 165:this.$=i.addLocationDataFn(a[o-1],a[o])({source:s[o],object:!0});break;case 166:this.$=i.addLocationDataFn(a[o-3],a[o])({source:s[o-2],guard:s[o]});break;case 167:this.$=i.addLocationDataFn(a[o-3],a[o])({source:s[o-2],guard:s[o],object:!0});break;case 168:this.$=i.addLocationDataFn(a[o-3],a[o])({source:s[o-2],step:s[o]});break;case 169:this.$=i.addLocationDataFn(a[o-5],a[o])({source:s[o-4],guard:s[o-2],step:s[o]});break;case 170:this.$=i.addLocationDataFn(a[o-5],a[o])({source:s[o-4],step:s[o-2],guard:s[o]});break;case 171:this.$=i.addLocationDataFn(a[o-4],a[o])(new i.Switch(s[o-3],s[o-1]));break;case 172:this.$=i.addLocationDataFn(a[o-6],a[o])(new i.Switch(s[o-5],s[o-3],s[o-1]));break;case 173:this.$=i.addLocationDataFn(a[o-3],a[o])(new i.Switch(null,s[o-1]));break;case 174:this.$=i.addLocationDataFn(a[o-5],a[o])(new i.Switch(null,s[o-3],s[o-1]));break;case 175:this.$=s[o];break;case 176:this.$=i.addLocationDataFn(a[o-1],a[o])(s[o-1].concat(s[o]));break;case 177:this.$=i.addLocationDataFn(a[o-2],a[o])([[s[o-1],s[o]]]);break;case 178:this.$=i.addLocationDataFn(a[o-3],a[o])([[s[o-2],s[o-1]]]);break;case 179:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.If(s[o-1],s[o],{type:s[o-2]}));break;case 180:this.$=i.addLocationDataFn(a[o-4],a[o])(s[o-4].addElse(new i.If(s[o-1],s[o],{type:s[o-2]})));break;case 181:this.$=s[o];break;case 182:this.$=i.addLocationDataFn(a[o-2],a[o])(s[o-2].addElse(s[o]));break;case 183:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.If(s[o],i.addLocationDataFn(a[o-2])(i.Block.wrap([s[o-2]])),{type:s[o-1],statement:!0}));break;case 184:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.If(s[o],i.addLocationDataFn(a[o-2])(i.Block.wrap([s[o-2]])),{type:s[o-1],statement:!0}));break;case 185:this.$=i.addLocationDataFn(a[o-1],a[o])(i.Op.create(s[o-1],s[o]));break;case 186:this.$=i.addLocationDataFn(a[o-1],a[o])(i.Op.create("-",s[o]));break;case 187:this.$=i.addLocationDataFn(a[o-1],a[o])(i.Op.create("+",s[o]));break;case 188:this.$=i.addLocationDataFn(a[o-1],a[o])(i.Op.create("--",s[o]));break;case 189:this.$=i.addLocationDataFn(a[o-1],a[o])(i.Op.create("++",s[o]));break;case 190:this.$=i.addLocationDataFn(a[o-1],a[o])(i.Op.create("--",s[o-1],null,!0));break;case 191:this.$=i.addLocationDataFn(a[o-1],a[o])(i.Op.create("++",s[o-1],null,!0));break;case 192:this.$=i.addLocationDataFn(a[o-1],a[o])(new i.Existence(s[o-1]));break;case 193:this.$=i.addLocationDataFn(a[o-2],a[o])(i.Op.create("+",s[o-2],s[o]));break;case 194:this.$=i.addLocationDataFn(a[o-2],a[o])(i.Op.create("-",s[o-2],s[o]));break;case 195:this.$=i.addLocationDataFn(a[o-2],a[o])(i.Op.create(s[o-1],s[o-2],s[o]));break;case 196:this.$=i.addLocationDataFn(a[o-2],a[o])(i.Op.create(s[o-1],s[o-2],s[o]));break;case 197:this.$=i.addLocationDataFn(a[o-2],a[o])(i.Op.create(s[o-1],s[o-2],s[o]));break;case 198:this.$=i.addLocationDataFn(a[o-2],a[o])(i.Op.create(s[o-1],s[o-2],s[o]));break;case 199:this.$=i.addLocationDataFn(a[o-2],a[o])(function(){return"!"===s[o-1].charAt(0)?i.Op.create(s[o-1].slice(1),s[o-2],s[o]).invert():i.Op.create(s[o-1],s[o-2],s[o])}());break;case 200:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Assign(s[o-2],s[o],s[o-1]));break;case 201:this.$=i.addLocationDataFn(a[o-4],a[o])(new i.Assign(s[o-4],s[o-1],s[o-3]));break;case 202:this.$=i.addLocationDataFn(a[o-3],a[o])(new i.Assign(s[o-3],s[o],s[o-2]));break;case 203:this.$=i.addLocationDataFn(a[o-2],a[o])(new i.Extends(s[o-2],s[o]))}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],101:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,7],6:[2,7],26:[2,7],101:[2,7],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,8],6:[2,8],26:[2,8],101:[2,8],102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,12],73:[1,100],77:[2,12],80:92,83:[1,94],84:[2,107],85:[2,12],90:[2,12],92:[2,12],101:[2,12],103:[2,12],104:[2,12],105:[2,12],109:[2,12],117:[2,12],125:[2,12],127:[2,12],128:[2,12],131:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,13],73:[1,100],77:[2,13],80:101,83:[1,94],84:[2,107],85:[2,13],90:[2,13],92:[2,13],101:[2,13],103:[2,13],104:[2,13],105:[2,13],109:[2,13],117:[2,13],125:[2,13],127:[2,13],128:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],72:[2,14],77:[2,14],85:[2,14],90:[2,14],92:[2,14],101:[2,14],103:[2,14],104:[2,14],105:[2,14],109:[2,14],117:[2,14],125:[2,14],127:[2,14],128:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],72:[2,15],77:[2,15],85:[2,15],90:[2,15],92:[2,15],101:[2,15],103:[2,15],104:[2,15],105:[2,15],109:[2,15],117:[2,15],125:[2,15],127:[2,15],128:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],72:[2,16],77:[2,16],85:[2,16],90:[2,16],92:[2,16],101:[2,16],103:[2,16],104:[2,16],105:[2,16],109:[2,16],117:[2,16],125:[2,16],127:[2,16],128:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],72:[2,17],77:[2,17],85:[2,17],90:[2,17],92:[2,17],101:[2,17],103:[2,17],104:[2,17],105:[2,17],109:[2,17],117:[2,17],125:[2,17],127:[2,17],128:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],72:[2,18],77:[2,18],85:[2,18],90:[2,18],92:[2,18],101:[2,18],103:[2,18],104:[2,18],105:[2,18],109:[2,18],117:[2,18],125:[2,18],127:[2,18],128:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],72:[2,19],77:[2,19],85:[2,19],90:[2,19],92:[2,19],101:[2,19],103:[2,19],104:[2,19],105:[2,19],109:[2,19],117:[2,19],125:[2,19],127:[2,19],128:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],72:[2,20],77:[2,20],85:[2,20],90:[2,20],92:[2,20],101:[2,20],103:[2,20],104:[2,20],105:[2,20],109:[2,20],117:[2,20],125:[2,20],127:[2,20],128:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],72:[2,21],77:[2,21],85:[2,21],90:[2,21],92:[2,21],101:[2,21],103:[2,21],104:[2,21],105:[2,21],109:[2,21],117:[2,21],125:[2,21],127:[2,21],128:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],72:[2,22],77:[2,22],85:[2,22],90:[2,22],92:[2,22],101:[2,22],103:[2,22],104:[2,22],105:[2,22],109:[2,22],117:[2,22],125:[2,22],127:[2,22],128:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],72:[2,23],77:[2,23],85:[2,23],90:[2,23],92:[2,23],101:[2,23],103:[2,23],104:[2,23],105:[2,23],109:[2,23],117:[2,23],125:[2,23],127:[2,23],128:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23]},{1:[2,9],6:[2,9],26:[2,9],101:[2,9],103:[2,9],105:[2,9],109:[2,9],125:[2,9]},{1:[2,10],6:[2,10],26:[2,10],101:[2,10],103:[2,10],105:[2,10],109:[2,10],125:[2,10]},{1:[2,11],6:[2,11],26:[2,11],101:[2,11],103:[2,11],105:[2,11],109:[2,11],125:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,103],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],70:[2,75],72:[2,75],73:[2,75],77:[2,75],83:[2,75],84:[2,75],85:[2,75],90:[2,75],92:[2,75],101:[2,75],103:[2,75],104:[2,75],105:[2,75],109:[2,75],117:[2,75],125:[2,75],127:[2,75],128:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],70:[2,76],72:[2,76],73:[2,76],77:[2,76],83:[2,76],84:[2,76],85:[2,76],90:[2,76],92:[2,76],101:[2,76],103:[2,76],104:[2,76],105:[2,76],109:[2,76],117:[2,76],125:[2,76],127:[2,76],128:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],70:[2,77],72:[2,77],73:[2,77],77:[2,77],83:[2,77],84:[2,77],85:[2,77],90:[2,77],92:[2,77],101:[2,77],103:[2,77],104:[2,77],105:[2,77],109:[2,77],117:[2,77],125:[2,77],127:[2,77],128:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],70:[2,78],72:[2,78],73:[2,78],77:[2,78],83:[2,78],84:[2,78],85:[2,78],90:[2,78],92:[2,78],101:[2,78],103:[2,78],104:[2,78],105:[2,78],109:[2,78],117:[2,78],125:[2,78],127:[2,78],128:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],70:[2,79],72:[2,79],73:[2,79],77:[2,79],83:[2,79],84:[2,79],85:[2,79],90:[2,79],92:[2,79],101:[2,79],103:[2,79],104:[2,79],105:[2,79],109:[2,79],117:[2,79],125:[2,79],127:[2,79],128:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],70:[2,105],72:[2,105],73:[2,105],77:[2,105],81:104,83:[2,105],84:[1,105],85:[2,105],90:[2,105],92:[2,105],101:[2,105],103:[2,105],104:[2,105],105:[2,105],109:[2,105],117:[2,105],125:[2,105],127:[2,105],128:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105]},{6:[2,55],25:[2,55],27:109,28:[1,73],44:110,48:106,49:[2,55],54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{5:115,25:[1,5]},{8:116,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:118,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:119,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:120,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:124,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,72],73:[2,72],77:[2,72],79:[1,128],83:[2,72],84:[2,72],85:[2,72],90:[2,72],92:[2,72],101:[2,72],103:[2,72],104:[2,72],105:[2,72],109:[2,72],117:[2,72],125:[2,72],127:[2,72],128:[2,72],129:[1,125],130:[1,126],131:[2,72],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[1,127]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],72:[2,181],77:[2,181],85:[2,181],90:[2,181],92:[2,181],101:[2,181],103:[2,181],104:[2,181],105:[2,181],109:[2,181],117:[2,181],120:[1,129],125:[2,181],127:[2,181],128:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181]},{5:130,25:[1,5]},{5:131,25:[1,5]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],72:[2,148],77:[2,148],85:[2,148],90:[2,148],92:[2,148],101:[2,148],103:[2,148],104:[2,148],105:[2,148],109:[2,148],117:[2,148],125:[2,148],127:[2,148],128:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148]},{5:132,25:[1,5]},{8:133,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,134],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,95],5:135,6:[2,95],13:121,14:122,25:[1,5],26:[2,95],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,49:[2,95],54:[2,95],57:[2,95],58:47,59:48,61:137,63:25,64:26,65:27,72:[2,95],75:[1,70],77:[2,95],79:[1,136],82:[1,28],85:[2,95],87:[1,58],88:[1,59],89:[1,57],90:[2,95],92:[2,95],100:[1,56],101:[2,95],103:[2,95],104:[2,95],105:[2,95],109:[2,95],117:[2,95],125:[2,95],127:[2,95],128:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95],135:[2,95],136:[2,95]},{8:138,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,47],6:[2,47],8:139,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,47],102:39,103:[2,47],105:[2,47],106:40,107:[1,67],108:41,109:[2,47],110:69,118:[1,42],123:37,124:[1,64],125:[2,47],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],77:[2,48],101:[2,48],103:[2,48],105:[2,48],109:[2,48],125:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],70:[2,73],72:[2,73],73:[2,73],77:[2,73],83:[2,73],84:[2,73],85:[2,73],90:[2,73],92:[2,73],101:[2,73],103:[2,73],104:[2,73],105:[2,73],109:[2,73],117:[2,73],125:[2,73],127:[2,73],128:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],70:[2,74],72:[2,74],73:[2,74],77:[2,74],83:[2,74],84:[2,74],85:[2,74],90:[2,74],92:[2,74],101:[2,74],103:[2,74],104:[2,74],105:[2,74],109:[2,74],117:[2,74],125:[2,74],127:[2,74],128:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],70:[2,29],72:[2,29],73:[2,29],77:[2,29],83:[2,29],84:[2,29],85:[2,29],90:[2,29],92:[2,29],101:[2,29],103:[2,29],104:[2,29],105:[2,29],109:[2,29],117:[2,29],125:[2,29],127:[2,29],128:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],70:[2,30],72:[2,30],73:[2,30],77:[2,30],83:[2,30],84:[2,30],85:[2,30],90:[2,30],92:[2,30],101:[2,30],103:[2,30],104:[2,30],105:[2,30],109:[2,30],117:[2,30],125:[2,30],127:[2,30],128:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],70:[2,31],72:[2,31],73:[2,31],77:[2,31],83:[2,31],84:[2,31],85:[2,31],90:[2,31],92:[2,31],101:[2,31],103:[2,31],104:[2,31],105:[2,31],109:[2,31],117:[2,31],125:[2,31],127:[2,31],128:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],70:[2,32],72:[2,32],73:[2,32],77:[2,32],83:[2,32],84:[2,32],85:[2,32],90:[2,32],92:[2,32],101:[2,32],103:[2,32],104:[2,32],105:[2,32],109:[2,32],117:[2,32],125:[2,32],127:[2,32],128:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],70:[2,33],72:[2,33],73:[2,33],77:[2,33],83:[2,33],84:[2,33],85:[2,33],90:[2,33],92:[2,33],101:[2,33],103:[2,33],104:[2,33],105:[2,33],109:[2,33],117:[2,33],125:[2,33],127:[2,33],128:[2,33],131:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],70:[2,34],72:[2,34],73:[2,34],77:[2,34],83:[2,34],84:[2,34],85:[2,34],90:[2,34],92:[2,34],101:[2,34],103:[2,34],104:[2,34],105:[2,34],109:[2,34],117:[2,34],125:[2,34],127:[2,34],128:[2,34],131:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],70:[2,35],72:[2,35],73:[2,35],77:[2,35],83:[2,35],84:[2,35],85:[2,35],90:[2,35],92:[2,35],101:[2,35],103:[2,35],104:[2,35],105:[2,35],109:[2,35],117:[2,35],125:[2,35],127:[2,35],128:[2,35],131:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35]},{4:140,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,141],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:142,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],70:[2,111],72:[2,111],73:[2,111],77:[2,111],83:[2,111],84:[2,111],85:[2,111],90:[2,111],92:[2,111],101:[2,111],103:[2,111],104:[2,111],105:[2,111],109:[2,111],117:[2,111],125:[2,111],127:[2,111],128:[2,111],131:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],27:148,28:[1,73],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],70:[2,112],72:[2,112],73:[2,112],77:[2,112],83:[2,112],84:[2,112],85:[2,112],90:[2,112],92:[2,112],101:[2,112],103:[2,112],104:[2,112],105:[2,112],109:[2,112],117:[2,112],125:[2,112],127:[2,112],128:[2,112],131:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],70:[2,68],72:[2,68],73:[2,68],77:[2,68],79:[2,68],83:[2,68],84:[2,68],85:[2,68],90:[2,68],92:[2,68],101:[2,68],103:[2,68],104:[2,68],105:[2,68],109:[2,68],117:[2,68],125:[2,68],127:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],70:[2,71],72:[2,71],73:[2,71],77:[2,71],79:[2,71],83:[2,71],84:[2,71],85:[2,71],90:[2,71],92:[2,71],101:[2,71],103:[2,71],104:[2,71],105:[2,71],109:[2,71],117:[2,71],125:[2,71],127:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71]},{8:149,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:150,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:151,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:152,8:153,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{27:158,28:[1,73],44:159,58:160,59:161,64:154,75:[1,70],88:[1,113],89:[1,57],112:155,113:[1,156],114:157},{111:162,115:[1,163],116:[1,164]},{6:[2,90],11:168,25:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:165,77:[2,90],88:[1,113]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],70:[2,27],72:[2,27],73:[2,27],77:[2,27],83:[2,27],84:[2,27],85:[2,27],90:[2,27],92:[2,27],101:[2,27],103:[2,27],104:[2,27],105:[2,27],109:[2,27],117:[2,27],125:[2,27],127:[2,27],128:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],70:[2,28],72:[2,28],73:[2,28],77:[2,28],83:[2,28],84:[2,28],85:[2,28],90:[2,28],92:[2,28],101:[2,28],103:[2,28],104:[2,28],105:[2,28],109:[2,28],117:[2,28],125:[2,28],127:[2,28],128:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],70:[2,26],72:[2,26],73:[2,26],77:[2,26],79:[2,26],83:[2,26],84:[2,26],85:[2,26],90:[2,26],92:[2,26],101:[2,26],103:[2,26],104:[2,26],105:[2,26],109:[2,26],115:[2,26],116:[2,26],117:[2,26],125:[2,26],127:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26]},{1:[2,6],6:[2,6],7:172,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,6],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],72:[2,24],77:[2,24],85:[2,24],90:[2,24],92:[2,24],97:[2,24],98:[2,24],101:[2,24],103:[2,24],104:[2,24],105:[2,24],109:[2,24],117:[2,24],120:[2,24],122:[2,24],125:[2,24],127:[2,24],128:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24]},{6:[1,74],26:[1,173]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],72:[2,192],77:[2,192],85:[2,192],90:[2,192],92:[2,192],101:[2,192],103:[2,192],104:[2,192],105:[2,192],109:[2,192],117:[2,192],125:[2,192],127:[2,192],128:[2,192],131:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192]},{8:174,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:175,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:176,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:177,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:178,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:179,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:180,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:181,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],72:[2,147],77:[2,147],85:[2,147],90:[2,147],92:[2,147],101:[2,147],103:[2,147],104:[2,147],105:[2,147],109:[2,147],117:[2,147],125:[2,147],127:[2,147],128:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],72:[2,152],77:[2,152],85:[2,152],90:[2,152],92:[2,152],101:[2,152],103:[2,152],104:[2,152],105:[2,152],109:[2,152],117:[2,152],125:[2,152],127:[2,152],128:[2,152],131:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152]},{8:182,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],72:[2,146],77:[2,146],85:[2,146],90:[2,146],92:[2,146],101:[2,146],103:[2,146],104:[2,146],105:[2,146],109:[2,146],117:[2,146],125:[2,146],127:[2,146],128:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],72:[2,151],77:[2,151],85:[2,151],90:[2,151],92:[2,151],101:[2,151],103:[2,151],104:[2,151],105:[2,151],109:[2,151],117:[2,151],125:[2,151],127:[2,151],128:[2,151],131:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151]},{81:183,84:[1,105]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],70:[2,69],72:[2,69],73:[2,69],77:[2,69],79:[2,69],83:[2,69],84:[2,69],85:[2,69],90:[2,69],92:[2,69],101:[2,69],103:[2,69],104:[2,69],105:[2,69],109:[2,69],117:[2,69],125:[2,69],127:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69]},{84:[2,108]},{27:184,28:[1,73]},{27:185,28:[1,73]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],27:186,28:[1,73],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],70:[2,83],72:[2,83],73:[2,83],77:[2,83],79:[2,83],83:[2,83],84:[2,83],85:[2,83],90:[2,83],92:[2,83],101:[2,83],103:[2,83],104:[2,83],105:[2,83],109:[2,83],117:[2,83],125:[2,83],127:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],70:[2,84],72:[2,84],73:[2,84],77:[2,84],79:[2,84],83:[2,84],84:[2,84],85:[2,84],90:[2,84],92:[2,84],101:[2,84],103:[2,84],104:[2,84],105:[2,84],109:[2,84],117:[2,84],125:[2,84],127:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84]},{8:188,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,192],58:47,59:48,61:36,63:25,64:26,65:27,71:187,74:189,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],91:190,92:[1,191],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{69:193,70:[1,99],73:[1,100]},{81:194,84:[1,105]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],70:[2,70],72:[2,70],73:[2,70],77:[2,70],79:[2,70],83:[2,70],84:[2,70],85:[2,70],90:[2,70],92:[2,70],101:[2,70],103:[2,70],104:[2,70],105:[2,70],109:[2,70],117:[2,70],125:[2,70],127:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70]},{6:[1,196],8:195,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,197],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],70:[2,106],72:[2,106],73:[2,106],77:[2,106],83:[2,106],84:[2,106],85:[2,106],90:[2,106],92:[2,106],101:[2,106],103:[2,106],104:[2,106],105:[2,106],109:[2,106],117:[2,106],125:[2,106],127:[2,106],128:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[1,198],86:199,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],49:[1,201],53:203,54:[1,202]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,205],49:[2,60],54:[2,60],57:[1,204]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:148,28:[1,73]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],72:[2,50],77:[2,50],85:[2,50],90:[2,50],92:[2,50],101:[2,50],103:[2,50],104:[2,50],105:[2,50],109:[2,50],117:[2,50],125:[2,50],127:[2,50],128:[2,50],131:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],72:[2,185],77:[2,185],85:[2,185],90:[2,185],92:[2,185],101:[2,185],102:87,103:[2,185],104:[2,185],105:[2,185],108:88,109:[2,185],110:69,117:[2,185],125:[2,185],127:[2,185],128:[2,185],131:[1,78],132:[2,185],133:[2,185],134:[2,185],135:[2,185],136:[2,185]},{102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],72:[2,186],77:[2,186],85:[2,186],90:[2,186],92:[2,186],101:[2,186],102:87,103:[2,186],104:[2,186],105:[2,186],108:88,109:[2,186],110:69,117:[2,186],125:[2,186],127:[2,186],128:[2,186],131:[1,78],132:[2,186],133:[2,186],134:[2,186],135:[2,186],136:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],72:[2,187],77:[2,187],85:[2,187],90:[2,187],92:[2,187],101:[2,187],102:87,103:[2,187],104:[2,187],105:[2,187],108:88,109:[2,187],110:69,117:[2,187],125:[2,187],127:[2,187],128:[2,187],131:[1,78],132:[2,187],133:[2,187],134:[2,187],135:[2,187],136:[2,187]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,188],73:[2,72],77:[2,188],83:[2,72],84:[2,72],85:[2,188],90:[2,188],92:[2,188],101:[2,188],103:[2,188],104:[2,188],105:[2,188],109:[2,188],117:[2,188],125:[2,188],127:[2,188],128:[2,188],131:[2,188],132:[2,188],133:[2,188],134:[2,188],135:[2,188],136:[2,188]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:92,83:[1,94],84:[2,107]},{62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:101,83:[1,94],84:[2,107]},{66:[2,75],67:[2,75],68:[2,75],70:[2,75],73:[2,75],83:[2,75],84:[2,75]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,189],73:[2,72],77:[2,189],83:[2,72],84:[2,72],85:[2,189],90:[2,189],92:[2,189],101:[2,189],103:[2,189],104:[2,189],105:[2,189],109:[2,189],117:[2,189],125:[2,189],127:[2,189],128:[2,189],131:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],72:[2,190],77:[2,190],85:[2,190],90:[2,190],92:[2,190],101:[2,190],103:[2,190],104:[2,190],105:[2,190],109:[2,190],117:[2,190],125:[2,190],127:[2,190],128:[2,190],131:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],72:[2,191],77:[2,191],85:[2,191],90:[2,191],92:[2,191],101:[2,191],103:[2,191],104:[2,191],105:[2,191],109:[2,191],117:[2,191],125:[2,191],127:[2,191],128:[2,191],131:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191]},{6:[1,208],8:206,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,207],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:209,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:210,25:[1,5],124:[1,211]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],49:[2,132],54:[2,132],57:[2,132],72:[2,132],77:[2,132],85:[2,132],90:[2,132],92:[2,132],96:212,97:[1,213],98:[1,214],101:[2,132],103:[2,132],104:[2,132],105:[2,132],109:[2,132],117:[2,132],125:[2,132],127:[2,132],128:[2,132],131:[2,132],132:[2,132],133:[2,132],134:[2,132],135:[2,132],136:[2,132]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],72:[2,145],77:[2,145],85:[2,145],90:[2,145],92:[2,145],101:[2,145],103:[2,145],104:[2,145],105:[2,145],109:[2,145],117:[2,145],125:[2,145],127:[2,145],128:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145],135:[2,145],136:[2,145]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],72:[2,153],77:[2,153],85:[2,153],90:[2,153],92:[2,153],101:[2,153],103:[2,153],104:[2,153],105:[2,153],109:[2,153],117:[2,153],125:[2,153],127:[2,153],128:[2,153],131:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153]},{25:[1,215],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{119:216,121:217,122:[1,218]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],49:[2,96],54:[2,96],57:[2,96],72:[2,96],77:[2,96],85:[2,96],90:[2,96],92:[2,96],101:[2,96],103:[2,96],104:[2,96],105:[2,96],109:[2,96],117:[2,96],125:[2,96],127:[2,96],128:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96]},{8:219,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,99],5:220,6:[2,99],25:[1,5],26:[2,99],49:[2,99],54:[2,99],57:[2,99],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,99],73:[2,72],77:[2,99],79:[1,221],83:[2,72],84:[2,72],85:[2,99],90:[2,99],92:[2,99],101:[2,99],103:[2,99],104:[2,99],105:[2,99],109:[2,99],117:[2,99],125:[2,99],127:[2,99],128:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],72:[2,138],77:[2,138],85:[2,138],90:[2,138],92:[2,138],101:[2,138],102:87,103:[2,138],104:[2,138],105:[2,138],108:88,109:[2,138],110:69,117:[2,138],125:[2,138],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,46],6:[2,46],26:[2,46],101:[2,46],102:87,103:[2,46],105:[2,46],108:88,109:[2,46],110:69,125:[2,46],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,74],101:[1,222]},{4:223,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,128],25:[2,128],54:[2,128],57:[1,225],90:[2,128],91:224,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],70:[2,114],72:[2,114],73:[2,114],77:[2,114],83:[2,114],84:[2,114],85:[2,114],90:[2,114],92:[2,114],101:[2,114],103:[2,114],104:[2,114],105:[2,114],109:[2,114],115:[2,114],116:[2,114],117:[2,114],125:[2,114],127:[2,114],128:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114]},{6:[2,53],25:[2,53],53:226,54:[1,227],90:[2,53]},{6:[2,123],25:[2,123],26:[2,123],54:[2,123],85:[2,123],90:[2,123]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:228,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],85:[2,129],90:[2,129]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],40:[2,113],43:[2,113],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],70:[2,113],72:[2,113],73:[2,113],77:[2,113],79:[2,113],83:[2,113],84:[2,113],85:[2,113],90:[2,113],92:[2,113],101:[2,113],103:[2,113],104:[2,113],105:[2,113],109:[2,113],115:[2,113],116:[2,113],117:[2,113],125:[2,113],127:[2,113],128:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{5:229,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],72:[2,141],77:[2,141],85:[2,141],90:[2,141],92:[2,141],101:[2,141],102:87,103:[1,65],104:[1,230],105:[1,66],108:88,109:[1,68],110:69,117:[2,141],125:[2,141],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],72:[2,143],77:[2,143],85:[2,143],90:[2,143],92:[2,143],101:[2,143],102:87,103:[1,65],104:[1,231],105:[1,66],108:88,109:[1,68],110:69,117:[2,143],125:[2,143],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],72:[2,149],77:[2,149],85:[2,149],90:[2,149],92:[2,149],101:[2,149],103:[2,149],104:[2,149],105:[2,149],109:[2,149],117:[2,149],125:[2,149],127:[2,149],128:[2,149],131:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],72:[2,150],77:[2,150],85:[2,150],90:[2,150],92:[2,150],101:[2,150],102:87,103:[1,65],104:[2,150],105:[1,66],108:88,109:[1,68],110:69,117:[2,150],125:[2,150],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],72:[2,154],77:[2,154],85:[2,154],90:[2,154],92:[2,154],101:[2,154],103:[2,154],104:[2,154],105:[2,154],109:[2,154],117:[2,154],125:[2,154],127:[2,154],128:[2,154],131:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154]},{115:[2,156],116:[2,156]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],112:232,114:157},{54:[1,233],115:[2,162],116:[2,162]},{54:[2,158],115:[2,158],116:[2,158]},{54:[2,159],115:[2,159],116:[2,159]},{54:[2,160],115:[2,160],116:[2,160]},{54:[2,161],115:[2,161],116:[2,161]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],72:[2,155],77:[2,155],85:[2,155],90:[2,155],92:[2,155],101:[2,155],103:[2,155],104:[2,155],105:[2,155],109:[2,155],117:[2,155],125:[2,155],127:[2,155],128:[2,155],131:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155]},{8:234,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:235,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],53:236,54:[1,237],77:[2,53]},{6:[2,91],25:[2,91],26:[2,91],54:[2,91],77:[2,91]},{6:[2,39],25:[2,39],26:[2,39],43:[1,238],54:[2,39],77:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],77:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],77:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],77:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],77:[2,45]},{1:[2,5],6:[2,5],26:[2,5],101:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],72:[2,25],77:[2,25],85:[2,25],90:[2,25],92:[2,25],97:[2,25],98:[2,25],101:[2,25],103:[2,25],104:[2,25],105:[2,25],109:[2,25],117:[2,25],120:[2,25],122:[2,25],125:[2,25],127:[2,25],128:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],72:[2,193],77:[2,193],85:[2,193],90:[2,193],92:[2,193],101:[2,193],102:87,103:[2,193],104:[2,193],105:[2,193],108:88,109:[2,193],110:69,117:[2,193],125:[2,193],127:[2,193],128:[2,193],131:[1,78],132:[1,81],133:[2,193],134:[2,193],135:[2,193],136:[2,193]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],72:[2,194],77:[2,194],85:[2,194],90:[2,194],92:[2,194],101:[2,194],102:87,103:[2,194],104:[2,194],105:[2,194],108:88,109:[2,194],110:69,117:[2,194],125:[2,194],127:[2,194],128:[2,194],131:[1,78],132:[1,81],133:[2,194],134:[2,194],135:[2,194],136:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],72:[2,195],77:[2,195],85:[2,195],90:[2,195],92:[2,195],101:[2,195],102:87,103:[2,195],104:[2,195],105:[2,195],108:88,109:[2,195],110:69,117:[2,195],125:[2,195],127:[2,195],128:[2,195],131:[1,78],132:[2,195],133:[2,195],134:[2,195],135:[2,195],136:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],72:[2,196],77:[2,196],85:[2,196],90:[2,196],92:[2,196],101:[2,196],102:87,103:[2,196],104:[2,196],105:[2,196],108:88,109:[2,196],110:69,117:[2,196],125:[2,196],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[2,196],134:[2,196],135:[2,196],136:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],72:[2,197],77:[2,197],85:[2,197],90:[2,197],92:[2,197],101:[2,197],102:87,103:[2,197],104:[2,197],105:[2,197],108:88,109:[2,197],110:69,117:[2,197],125:[2,197],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,197],135:[2,197],136:[1,85]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],72:[2,198],77:[2,198],85:[2,198],90:[2,198],92:[2,198],101:[2,198],102:87,103:[2,198],104:[2,198],105:[2,198],108:88,109:[2,198],110:69,117:[2,198],125:[2,198],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[2,198],136:[1,85]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],72:[2,199],77:[2,199],85:[2,199],90:[2,199],92:[2,199],101:[2,199],102:87,103:[2,199],104:[2,199],105:[2,199],108:88,109:[2,199],110:69,117:[2,199],125:[2,199],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,199],135:[2,199],136:[2,199]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],72:[2,184],77:[2,184],85:[2,184],90:[2,184],92:[2,184],101:[2,184],102:87,103:[1,65],104:[2,184],105:[1,66],108:88,109:[1,68],110:69,117:[2,184],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],72:[2,183],77:[2,183],85:[2,183],90:[2,183],92:[2,183],101:[2,183],102:87,103:[1,65],104:[2,183],105:[1,66],108:88,109:[1,68],110:69,117:[2,183],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],66:[2,103],67:[2,103],68:[2,103],70:[2,103],72:[2,103],73:[2,103],77:[2,103],83:[2,103],84:[2,103],85:[2,103],90:[2,103],92:[2,103],101:[2,103],103:[2,103],104:[2,103],105:[2,103],109:[2,103],117:[2,103],125:[2,103],127:[2,103],128:[2,103],131:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],70:[2,80],72:[2,80],73:[2,80],77:[2,80],79:[2,80],83:[2,80],84:[2,80],85:[2,80],90:[2,80],92:[2,80],101:[2,80],103:[2,80],104:[2,80],105:[2,80],109:[2,80],117:[2,80],125:[2,80],127:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],70:[2,81],72:[2,81],73:[2,81],77:[2,81],79:[2,81],83:[2,81],84:[2,81],85:[2,81],90:[2,81],92:[2,81],101:[2,81],103:[2,81],104:[2,81],105:[2,81],109:[2,81],117:[2,81],125:[2,81],127:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],70:[2,82],72:[2,82],73:[2,82],77:[2,82],79:[2,82],83:[2,82],84:[2,82],85:[2,82],90:[2,82],92:[2,82],101:[2,82],103:[2,82],104:[2,82],105:[2,82],109:[2,82],117:[2,82],125:[2,82],127:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82]},{72:[1,239]},{57:[1,192],72:[2,87],91:240,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{72:[2,88]},{8:241,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,122],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{12:[2,116],28:[2,116],30:[2,116],31:[2,116],33:[2,116],34:[2,116],35:[2,116],36:[2,116],37:[2,116],38:[2,116],45:[2,116],46:[2,116],47:[2,116],51:[2,116],52:[2,116],72:[2,116],75:[2,116],78:[2,116],82:[2,116],87:[2,116],88:[2,116],89:[2,116],95:[2,116],99:[2,116],100:[2,116],103:[2,116],105:[2,116],107:[2,116],109:[2,116],118:[2,116],124:[2,116],126:[2,116],127:[2,116],128:[2,116],129:[2,116],130:[2,116]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],72:[2,117],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],70:[2,86],72:[2,86],73:[2,86],77:[2,86],79:[2,86],83:[2,86],84:[2,86],85:[2,86],90:[2,86],92:[2,86],101:[2,86],103:[2,86],104:[2,86],105:[2,86],109:[2,86],117:[2,86],125:[2,86],127:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],70:[2,104],72:[2,104],73:[2,104],77:[2,104],83:[2,104],84:[2,104],85:[2,104],90:[2,104],92:[2,104],101:[2,104],103:[2,104],104:[2,104],105:[2,104],109:[2,104],117:[2,104],125:[2,104],127:[2,104],128:[2,104],131:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],72:[2,36],77:[2,36],85:[2,36],90:[2,36],92:[2,36],101:[2,36],102:87,103:[2,36],104:[2,36],105:[2,36],108:88,109:[2,36],110:69,117:[2,36],125:[2,36],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:242,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:243,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],49:[2,109],54:[2,109],57:[2,109],66:[2,109],67:[2,109],68:[2,109],70:[2,109],72:[2,109],73:[2,109],77:[2,109],83:[2,109],84:[2,109],85:[2,109],90:[2,109],92:[2,109],101:[2,109],103:[2,109],104:[2,109],105:[2,109],109:[2,109],117:[2,109],125:[2,109],127:[2,109],128:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109],136:[2,109]},{6:[2,53],25:[2,53],53:244,54:[1,227],85:[2,53]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],57:[1,245],85:[2,128],90:[2,128],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{50:246,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:109,28:[1,73],44:110,55:247,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[1,248],25:[1,249]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:250,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],72:[2,200],77:[2,200],85:[2,200],90:[2,200],92:[2,200],101:[2,200],102:87,103:[2,200],104:[2,200],105:[2,200],108:88,109:[2,200],110:69,117:[2,200],125:[2,200],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:251,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:252,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],72:[2,203],77:[2,203],85:[2,203],90:[2,203],92:[2,203],101:[2,203],102:87,103:[2,203],104:[2,203],105:[2,203],108:88,109:[2,203],110:69,117:[2,203],125:[2,203],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],72:[2,182],77:[2,182],85:[2,182],90:[2,182],92:[2,182],101:[2,182],103:[2,182],104:[2,182],105:[2,182],109:[2,182],117:[2,182],125:[2,182],127:[2,182],128:[2,182],131:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182]},{8:253,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],72:[2,133],77:[2,133],85:[2,133],90:[2,133],92:[2,133],97:[1,254],101:[2,133],103:[2,133],104:[2,133],105:[2,133],109:[2,133],117:[2,133],125:[2,133],127:[2,133],128:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133]},{5:255,25:[1,5]},{27:256,28:[1,73],59:257,75:[1,70]},{119:258,121:217,122:[1,218]},{26:[1,259],120:[1,260],121:261,122:[1,218]},{26:[2,175],120:[2,175],122:[2,175]},{8:263,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],94:262,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,97],5:264,6:[2,97],25:[1,5],26:[2,97],49:[2,97],54:[2,97],57:[2,97],72:[2,97],77:[2,97],85:[2,97],90:[2,97],92:[2,97],101:[2,97],102:87,103:[1,65],104:[2,97],105:[1,66],108:88,109:[1,68],110:69,117:[2,97],125:[2,97],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],49:[2,100],54:[2,100],57:[2,100],72:[2,100],77:[2,100],85:[2,100],90:[2,100],92:[2,100],101:[2,100],103:[2,100],104:[2,100],105:[2,100],109:[2,100],117:[2,100],125:[2,100],127:[2,100],128:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100]},{8:265,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],66:[2,139],67:[2,139],68:[2,139],70:[2,139],72:[2,139],73:[2,139],77:[2,139],83:[2,139],84:[2,139],85:[2,139],90:[2,139],92:[2,139],101:[2,139],103:[2,139],104:[2,139],105:[2,139],109:[2,139],117:[2,139],125:[2,139],127:[2,139],128:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139]},{6:[1,74],26:[1,266]},{8:267,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,67],12:[2,117],25:[2,67],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],54:[2,67],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],90:[2,67],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{6:[1,269],25:[1,270],90:[1,268]},{6:[2,54],8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[2,54],87:[1,58],88:[1,59],89:[1,57],90:[2,54],93:271,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:272,54:[1,227]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],49:[2,179],54:[2,179],57:[2,179],72:[2,179],77:[2,179],85:[2,179],90:[2,179],92:[2,179],101:[2,179],103:[2,179],104:[2,179],105:[2,179],109:[2,179],117:[2,179],120:[2,179],125:[2,179],127:[2,179],128:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179],135:[2,179],136:[2,179]},{8:273,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:274,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{115:[2,157],116:[2,157]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],114:275},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],49:[2,164],54:[2,164],57:[2,164],72:[2,164],77:[2,164],85:[2,164],90:[2,164],92:[2,164],101:[2,164],102:87,103:[2,164],104:[1,276],105:[2,164],108:88,109:[2,164],110:69,117:[1,277],125:[2,164],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],72:[2,165],77:[2,165],85:[2,165],90:[2,165],92:[2,165],101:[2,165],102:87,103:[2,165],104:[1,278],105:[2,165],108:88,109:[2,165],110:69,117:[2,165],125:[2,165],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,280],25:[1,281],77:[1,279]},{6:[2,54],11:168,25:[2,54],26:[2,54],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:282,42:167,44:171,46:[1,46],77:[2,54],88:[1,113]},{8:283,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,284],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],70:[2,85],72:[2,85],73:[2,85],77:[2,85],79:[2,85],83:[2,85],84:[2,85],85:[2,85],90:[2,85],92:[2,85],101:[2,85],103:[2,85],104:[2,85],105:[2,85],109:[2,85],117:[2,85],125:[2,85],127:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85]},{8:285,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,120],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,121],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],72:[2,37],77:[2,37],85:[2,37],90:[2,37],92:[2,37],101:[2,37],102:87,103:[2,37],104:[2,37],105:[2,37],108:88,109:[2,37],110:69,117:[2,37],125:[2,37],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,286],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,269],25:[1,270],85:[1,287]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],85:[2,67],90:[2,67]},{5:288,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:109,28:[1,73],44:110,55:289,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,55],25:[2,55],26:[2,55],27:109,28:[1,73],44:110,48:290,54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,291],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],72:[2,202],77:[2,202],85:[2,202],90:[2,202],92:[2,202],101:[2,202],102:87,103:[2,202],104:[2,202],105:[2,202],108:88,109:[2,202],110:69,117:[2,202],125:[2,202],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:292,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:293,25:[1,5]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],72:[2,134],77:[2,134],85:[2,134],90:[2,134],92:[2,134],101:[2,134],103:[2,134],104:[2,134],105:[2,134],109:[2,134],117:[2,134],125:[2,134],127:[2,134],128:[2,134],131:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134]},{5:294,25:[1,5]},{5:295,25:[1,5]},{26:[1,296],120:[1,297],121:261,122:[1,218]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],72:[2,173],77:[2,173],85:[2,173],90:[2,173],92:[2,173],101:[2,173],103:[2,173],104:[2,173],105:[2,173],109:[2,173],117:[2,173],125:[2,173],127:[2,173],128:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173]},{5:298,25:[1,5]},{26:[2,176],120:[2,176],122:[2,176]},{5:299,25:[1,5],54:[1,300]},{25:[2,130],54:[2,130],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],49:[2,98],54:[2,98],57:[2,98],72:[2,98],77:[2,98],85:[2,98],90:[2,98],92:[2,98],101:[2,98],103:[2,98],104:[2,98],105:[2,98],109:[2,98],117:[2,98],125:[2,98],127:[2,98],128:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98],135:[2,98],136:[2,98]},{1:[2,101],5:301,6:[2,101],25:[1,5],26:[2,101],49:[2,101],54:[2,101],57:[2,101],72:[2,101],77:[2,101],85:[2,101],90:[2,101],92:[2,101],101:[2,101],102:87,103:[1,65],104:[2,101],105:[1,66],108:88,109:[1,68],110:69,117:[2,101],125:[2,101],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{101:[1,302]},{90:[1,303],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],70:[2,115],72:[2,115],73:[2,115],77:[2,115],83:[2,115],84:[2,115],85:[2,115],90:[2,115],92:[2,115],101:[2,115],103:[2,115],104:[2,115],105:[2,115],109:[2,115],115:[2,115],116:[2,115],117:[2,115],125:[2,115],127:[2,115],128:[2,115],131:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],93:304,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:305,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],85:[2,124],90:[2,124]},{6:[1,269],25:[1,270],26:[1,306]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],72:[2,142],77:[2,142],85:[2,142],90:[2,142],92:[2,142],101:[2,142],102:87,103:[1,65],104:[2,142],105:[1,66],108:88,109:[1,68],110:69,117:[2,142],125:[2,142],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],72:[2,144],77:[2,144],85:[2,144],90:[2,144],92:[2,144],101:[2,144],102:87,103:[1,65],104:[2,144],105:[1,66],108:88,109:[1,68],110:69,117:[2,144],125:[2,144],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{115:[2,163],116:[2,163]},{8:307,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:308,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:309,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,89],6:[2,89],25:[2,89],26:[2,89],40:[2,89],49:[2,89],54:[2,89],57:[2,89],66:[2,89],67:[2,89],68:[2,89],70:[2,89],72:[2,89],73:[2,89],77:[2,89],83:[2,89],84:[2,89],85:[2,89],90:[2,89],92:[2,89],101:[2,89],103:[2,89],104:[2,89],105:[2,89],109:[2,89],115:[2,89],116:[2,89],117:[2,89],125:[2,89],127:[2,89],128:[2,89],131:[2,89],132:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89]},{11:168,27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:310,42:167,44:171,46:[1,46],88:[1,113]},{6:[2,90],11:168,25:[2,90],26:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:311,88:[1,113]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],77:[2,92]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],77:[2,40],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:312,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,119],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],72:[2,38],77:[2,38],85:[2,38],90:[2,38],92:[2,38],101:[2,38],103:[2,38],104:[2,38],105:[2,38],109:[2,38],117:[2,38],125:[2,38],127:[2,38],128:[2,38],131:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],70:[2,110],72:[2,110],73:[2,110],77:[2,110],83:[2,110],84:[2,110],85:[2,110],90:[2,110],92:[2,110],101:[2,110],103:[2,110],104:[2,110],105:[2,110],109:[2,110],117:[2,110],125:[2,110],127:[2,110],128:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],72:[2,49],77:[2,49],85:[2,49],90:[2,49],92:[2,49],101:[2,49],103:[2,49],104:[2,49],105:[2,49],109:[2,49],117:[2,49],125:[2,49],127:[2,49],128:[2,49],131:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:313,54:[1,202]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],72:[2,201],77:[2,201],85:[2,201],90:[2,201],92:[2,201],101:[2,201],103:[2,201],104:[2,201],105:[2,201],109:[2,201],117:[2,201],125:[2,201],127:[2,201],128:[2,201],131:[2,201],132:[2,201],133:[2,201],134:[2,201],135:[2,201],136:[2,201]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],72:[2,180],77:[2,180],85:[2,180],90:[2,180],92:[2,180],101:[2,180],103:[2,180],104:[2,180],105:[2,180],109:[2,180],117:[2,180],120:[2,180],125:[2,180],127:[2,180],128:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],72:[2,135],77:[2,135],85:[2,135],90:[2,135],92:[2,135],101:[2,135],103:[2,135],104:[2,135],105:[2,135],109:[2,135],117:[2,135],125:[2,135],127:[2,135],128:[2,135],131:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],72:[2,136],77:[2,136],85:[2,136],90:[2,136],92:[2,136],97:[2,136],101:[2,136],103:[2,136],104:[2,136],105:[2,136],109:[2,136],117:[2,136],125:[2,136],127:[2,136],128:[2,136],131:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],72:[2,137],77:[2,137],85:[2,137],90:[2,137],92:[2,137],97:[2,137],101:[2,137],103:[2,137],104:[2,137],105:[2,137],109:[2,137],117:[2,137],125:[2,137],127:[2,137],128:[2,137],131:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],72:[2,171],77:[2,171],85:[2,171],90:[2,171],92:[2,171],101:[2,171],103:[2,171],104:[2,171],105:[2,171],109:[2,171],117:[2,171],125:[2,171],127:[2,171],128:[2,171],131:[2,171],132:[2,171],133:[2,171],134:[2,171],135:[2,171],136:[2,171]},{5:314,25:[1,5]},{26:[1,315]},{6:[1,316],26:[2,177],120:[2,177],122:[2,177]},{8:317,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],49:[2,102],54:[2,102],57:[2,102],72:[2,102],77:[2,102],85:[2,102],90:[2,102],92:[2,102],101:[2,102],103:[2,102],104:[2,102],105:[2,102],109:[2,102],117:[2,102],125:[2,102],127:[2,102],128:[2,102],131:[2,102],132:[2,102],133:[2,102],134:[2,102],135:[2,102],136:[2,102]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],66:[2,140],67:[2,140],68:[2,140],70:[2,140],72:[2,140],73:[2,140],77:[2,140],83:[2,140],84:[2,140],85:[2,140],90:[2,140],92:[2,140],101:[2,140],103:[2,140],104:[2,140],105:[2,140],109:[2,140],117:[2,140],125:[2,140],127:[2,140],128:[2,140],131:[2,140],132:[2,140],133:[2,140],134:[2,140],135:[2,140],136:[2,140]},{1:[2,118],6:[2,118],25:[2,118],26:[2,118],49:[2,118],54:[2,118],57:[2,118],66:[2,118],67:[2,118],68:[2,118],70:[2,118],72:[2,118],73:[2,118],77:[2,118],83:[2,118],84:[2,118],85:[2,118],90:[2,118],92:[2,118],101:[2,118],103:[2,118],104:[2,118],105:[2,118],109:[2,118],117:[2,118],125:[2,118],127:[2,118],128:[2,118],131:[2,118],132:[2,118],133:[2,118],134:[2,118],135:[2,118],136:[2,118]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],85:[2,125],90:[2,125]},{6:[2,53],25:[2,53],26:[2,53],53:318,54:[1,227]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],85:[2,126],90:[2,126]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],72:[2,166],77:[2,166],85:[2,166],90:[2,166],92:[2,166],101:[2,166],102:87,103:[2,166],104:[2,166],105:[2,166],108:88,109:[2,166],110:69,117:[1,319],125:[2,166],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],72:[2,168],77:[2,168],85:[2,168],90:[2,168],92:[2,168],101:[2,168],102:87,103:[2,168],104:[1,320],105:[2,168],108:88,109:[2,168],110:69,117:[2,168],125:[2,168],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],72:[2,167],77:[2,167],85:[2,167],90:[2,167],92:[2,167],101:[2,167],102:87,103:[2,167],104:[2,167],105:[2,167],108:88,109:[2,167],110:69,117:[2,167],125:[2,167],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],77:[2,93]},{6:[2,53],25:[2,53],26:[2,53],53:321,54:[1,237]},{26:[1,322],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,248],25:[1,249],26:[1,323]},{26:[1,324]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],72:[2,174],77:[2,174],85:[2,174],90:[2,174],92:[2,174],101:[2,174],103:[2,174],104:[2,174],105:[2,174],109:[2,174],117:[2,174],125:[2,174],127:[2,174],128:[2,174],131:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174]},{26:[2,178],120:[2,178],122:[2,178]},{25:[2,131],54:[2,131],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,269],25:[1,270],26:[1,325]},{8:326,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:327,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[1,280],25:[1,281],26:[1,328]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],77:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],72:[2,172],77:[2,172],85:[2,172],90:[2,172],92:[2,172],101:[2,172],103:[2,172],104:[2,172],105:[2,172],109:[2,172],117:[2,172],125:[2,172],127:[2,172],128:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],85:[2,127],90:[2,127]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],72:[2,169],77:[2,169],85:[2,169],90:[2,169],92:[2,169],101:[2,169],102:87,103:[2,169],104:[2,169],105:[2,169],108:88,109:[2,169],110:69,117:[2,169],125:[2,169],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],72:[2,170],77:[2,170],85:[2,170],90:[2,170],92:[2,170],101:[2,170],102:87,103:[2,170],104:[2,170],105:[2,170],108:88,109:[2,170],110:69,117:[2,170],125:[2,170],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],77:[2,94]}],defaultActions:{60:[2,51],61:[2,52],75:[2,3],94:[2,108],189:[2,88]},parseError:function(t){throw Error(t) +},parse:function(t){function e(){var t;return t=n.lexer.lex()||1,"number"!=typeof t&&(t=n.symbols_[t]||t),t}var n=this,i=[0],r=[null],s=[],a=this.table,o="",c=0,h=0,l=0;this.lexer.setInput(t),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,this.lexer.yylloc===void 0&&(this.lexer.yylloc={});var p=this.lexer.yylloc;s.push(p);var u=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var d,f,m,b,y,v,g,w,k,E={};;){if(m=i[i.length-1],this.defaultActions[m]?b=this.defaultActions[m]:((null===d||d===void 0)&&(d=e()),b=a[m]&&a[m][d]),b===void 0||!b.length||!b[0]){var L="";if(!l){k=[];for(v in a[m])this.terminals_[v]&&v>2&&k.push("'"+this.terminals_[v]+"'");L=this.lexer.showPosition?"Parse error on line "+(c+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[d]||d)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==d?"end of input":"'"+(this.terminals_[d]||d)+"'"),this.parseError(L,{text:this.lexer.match,token:this.terminals_[d]||d,line:this.lexer.yylineno,loc:p,expected:k})}}if(b[0]instanceof Array&&b.length>1)throw Error("Parse Error: multiple actions possible at state: "+m+", token: "+d);switch(b[0]){case 1:i.push(d),r.push(this.lexer.yytext),s.push(this.lexer.yylloc),i.push(b[1]),d=null,f?(d=f,f=null):(h=this.lexer.yyleng,o=this.lexer.yytext,c=this.lexer.yylineno,p=this.lexer.yylloc,l>0&&l--);break;case 2:if(g=this.productions_[b[1]][1],E.$=r[r.length-g],E._$={first_line:s[s.length-(g||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(g||1)].first_column,last_column:s[s.length-1].last_column},u&&(E._$.range=[s[s.length-(g||1)].range[0],s[s.length-1].range[1]]),y=this.performAction.call(E,o,h,c,this.yy,b[1],r,s),y!==void 0)return y;g&&(i=i.slice(0,2*-1*g),r=r.slice(0,-1*g),s=s.slice(0,-1*g)),i.push(this.productions_[b[1]][0]),r.push(E.$),s.push(E._$),w=a[i[i.length-2]][i[i.length-1]],i.push(w);break;case 3:return!0}}return!0}};return t.prototype=e,e.Parser=t,new t}();require!==void 0&&t!==void 0&&(t.parser=e,t.Parser=e.Parser,t.parse=function(){return e.parse.apply(e,arguments)},t.main=function(e){if(!e[1])throw Error("Usage: "+e[0]+" FILE");var n;return n="undefined"!=typeof process?require("fs").readFileSync(require("path").resolve(e[1]),"utf8"):require("file").path(require("file").cwd()).join(e[1]).read({charset:"utf-8"}),t.parser.parse(n)},"undefined"!=typeof module&&require.main===module&&t.main("undefined"!=typeof process?process.argv.slice(1):require("system").args))},require["./scope"]=new function(){var t=this;(function(){var e,n,i,r;r=require("./helpers"),n=r.extend,i=r.last,t.Scope=e=function(){function t(e,n,i){this.parent=e,this.expressions=n,this.method=i,this.variables=[{name:"arguments",type:"arguments"}],this.positions={},this.parent||(t.root=this)}return t.root=null,t.prototype.add=function(t,e,n){return this.shared&&!n?this.parent.add(t,e,n):Object.prototype.hasOwnProperty.call(this.positions,t)?this.variables[this.positions[t]].type=e:this.positions[t]=this.variables.push({name:t,type:e})-1},t.prototype.namedMethod=function(){return this.method.name||!this.parent?this.method:this.parent.namedMethod()},t.prototype.find=function(t){return this.check(t)?!0:(this.add(t,"var"),!1)},t.prototype.parameter=function(t){return this.shared&&this.parent.check(t,!0)?void 0:this.add(t,"param")},t.prototype.check=function(t){var e;return!!(this.type(t)||(null!=(e=this.parent)?e.check(t):void 0))},t.prototype.temporary=function(t,e){return t.length>1?"_"+t+(e>1?e-1:""):"_"+(e+parseInt(t,36)).toString(36).replace(/\d/g,"a")},t.prototype.type=function(t){var e,n,i,r;for(r=this.variables,n=0,i=r.length;i>n;n++)if(e=r[n],e.name===t)return e.type;return null},t.prototype.freeVariable=function(t,e){var n,i;for(null==e&&(e=!0),n=0;this.check(i=this.temporary(t,n));)n++;return e&&this.add(i,"var",!0),i},t.prototype.assign=function(t,e){return this.add(t,{value:e,assigned:!0},!0),this.hasAssignments=!0},t.prototype.hasDeclarations=function(){return!!this.declaredVariables().length},t.prototype.declaredVariables=function(){var t,e,n,i,r,s;for(t=[],e=[],s=this.variables,i=0,r=s.length;r>i;i++)n=s[i],"var"===n.type&&("_"===n.name.charAt(0)?e:t).push(n.name);return t.sort().concat(e.sort())},t.prototype.assignedVariables=function(){var t,e,n,i,r;for(i=this.variables,r=[],e=0,n=i.length;n>e;e++)t=i[e],t.type.assigned&&r.push(""+t.name+" = "+t.type.value);return r},t}()}).call(this)},require["./nodes"]=new function(){var t=this;(function(){var e,n,i,r,s,a,o,c,h,l,p,u,d,f,m,b,y,v,g,w,k,E,L,N,T,x,D,S,F,R,I,A,$,_,C,O,j,M,P,V,U,B,H,q,G,W,X,Y,K,z,J,Z,Q,te,ee,ne,ie,re,se,ae,oe,ce,he,le,pe,ue,de={}.hasOwnProperty,fe=function(t,e){function n(){this.constructor=t}for(var i in e)de.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},me=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};P=require("./scope").Scope,pe=require("./lexer"),_=pe.RESERVED,M=pe.STRICT_PROSCRIBED,ue=require("./helpers"),Z=ue.compact,ne=ue.flatten,ee=ue.extend,se=ue.merge,Q=ue.del,ce=ue.starts,te=ue.ends,ie=ue.last,oe=ue.some,J=ue.addLocationDataFn,re=ue.locationDataToString,t.extend=ee,t.addLocationDataFn=J,z=function(){return!0},F=function(){return!1},q=function(){return this},S=function(){return this.negated=!this.negated,this},t.Base=r=function(){function t(){}return t.prototype.compile=function(t,e){var n;return t=ee({},t),e&&(t.level=e),n=this.unfoldSoak(t)||this,n.tab=t.indent,t.level!==T&&n.isStatement(t)?n.compileClosure(t):n.compileNode(t)},t.prototype.compileClosure=function(t){if(this.jumps())throw SyntaxError("cannot use a pure statement in an expression.");return t.sharedScope=!0,c.wrap(this).compileNode(t)},t.prototype.cache=function(t,e,n){var r,s;return this.isComplex()?(r=new x(n||t.scope.freeVariable("ref")),s=new i(r,this),e?[s.compile(t,e),r.value]:[s,r]):(r=e?this.compile(t,e):this,[r,r])},t.prototype.makeReturn=function(t){var e;return e=this.unwrapAll(),t?new a(new x(""+t+".push"),[e]):new O(e)},t.prototype.contains=function(t){var e;return e=!1,this.traverseChildren(!1,function(n){return t(n)?(e=!0,!1):void 0}),e},t.prototype.containsType=function(t){return this instanceof t||this.contains(function(e){return e instanceof t})},t.prototype.lastNonComment=function(t){var e;for(e=t.length;e--;)if(!(t[e]instanceof l))return t[e];return null},t.prototype.toString=function(t,e){var n,i;return null==t&&(t=""),null==e&&(e=this.constructor.name),n=this.locationData?re(this.locationData):"??",i="\n"+t+n+": "+e,this.soak&&(i+="?"),this.eachChild(function(e){return i+=e.toString(t+H)}),i},t.prototype.eachChild=function(t){var e,n,i,r,s,a,o,c;if(!this.children)return this;for(o=this.children,i=0,s=o.length;s>i;i++)if(e=o[i],this[e])for(c=ne([this[e]]),r=0,a=c.length;a>r;r++)if(n=c[r],t(n)===!1)return this;return this},t.prototype.traverseChildren=function(t,e){return this.eachChild(function(n){return e(n)===!1?!1:n.traverseChildren(t,e)})},t.prototype.invert=function(){return I.create("!",this)},t.prototype.unwrapAll=function(){var t;for(t=this;t!==(t=t.unwrap()););return t},t.prototype.children=[],t.prototype.isStatement=F,t.prototype.jumps=F,t.prototype.isComplex=z,t.prototype.isChainable=F,t.prototype.isAssignable=F,t.prototype.unwrap=q,t.prototype.unfoldSoak=F,t.prototype.assigns=F,t.prototype.updateLocationDataIfMissing=function(t){return this.locationData||(this.locationData={},ee(this.locationData,t)),this.eachChild(function(e){return e.updateLocationDataIfMissing(t)})},t}(),t.Block=s=function(t){function e(t){this.expressions=Z(ne(t||[]))}return fe(e,t),e.prototype.children=["expressions"],e.prototype.push=function(t){return this.expressions.push(t),this},e.prototype.pop=function(){return this.expressions.pop()},e.prototype.unshift=function(t){return this.expressions.unshift(t),this},e.prototype.unwrap=function(){return 1===this.expressions.length?this.expressions[0]:this},e.prototype.isEmpty=function(){return!this.expressions.length},e.prototype.isStatement=function(t){var e,n,i,r;for(r=this.expressions,n=0,i=r.length;i>n;n++)if(e=r[n],e.isStatement(t))return!0;return!1},e.prototype.jumps=function(t){var e,n,i,r;for(r=this.expressions,n=0,i=r.length;i>n;n++)if(e=r[n],e.jumps(t))return e},e.prototype.makeReturn=function(t){var e,n;for(n=this.expressions.length;n--;)if(e=this.expressions[n],!(e instanceof l)){this.expressions[n]=e.makeReturn(t),e instanceof O&&!e.expression&&this.expressions.splice(n,1);break}return this},e.prototype.compile=function(t,n){return null==t&&(t={}),t.scope?e.__super__.compile.call(this,t,n):this.compileRoot(t)},e.prototype.compileNode=function(t){var n,i,r,s,a,o,c;for(this.tab=t.indent,s=t.level===T,i=[],c=this.expressions,a=0,o=c.length;o>a;a++)r=c[a],r=r.unwrapAll(),r=r.unfoldSoak(t)||r,r instanceof e?i.push(r.compileNode(t)):s?(r.front=!0,n=r.compile(t),r.isStatement(t)||(n=""+this.tab+n+";"),i.push(n)):i.push(r.compile(t,E));return s?this.spaced?"\n"+i.join("\n\n")+"\n":i.join("\n"):(n=i.join(", ")||"void 0",i.length>1&&t.level>=E?"("+n+")":n)},e.prototype.compileRoot=function(t){var e,n,i,r,s,a;return t.indent=t.bare?"":H,t.scope=new P(null,this,null),t.level=T,this.spaced=!0,r="",t.bare||(s=function(){var t,e,r,s;for(r=this.expressions,s=[],i=t=0,e=r.length;e>t&&(n=r[i],n.unwrap()instanceof l);i=++t)s.push(n);return s}.call(this),a=this.expressions.slice(s.length),this.expressions=s,s.length&&(r=""+this.compileNode(se(t,{indent:""}))+"\n"),this.expressions=a),e=this.compileWithDeclarations(t),t.bare?e:""+r+"(function() {\n"+e+"\n}).call(this);\n"},e.prototype.compileWithDeclarations=function(t){var e,n,i,r,s,a,o,c,h,p,u,d,f,m;for(n=a="",d=this.expressions,s=p=0,u=d.length;u>p&&(r=d[s],r=r.unwrap(),r instanceof l||r instanceof x);s=++p);return t=se(t,{level:T}),s&&(o=this.expressions.splice(s,9e9),f=[this.spaced,!1],h=f[0],this.spaced=f[1],m=[this.compileNode(t),h],n=m[0],this.spaced=m[1],this.expressions=o),a=this.compileNode(t),c=t.scope,c.expressions===this&&(i=t.scope.hasDeclarations(),e=c.hasAssignments,(i||e)&&(s&&(n+="\n"),n+=""+this.tab+"var ",i&&(n+=c.declaredVariables().join(", ")),e&&(i&&(n+=",\n"+(this.tab+H)),n+=c.assignedVariables().join(",\n"+(this.tab+H))),n+=";\n")),n+a},e.wrap=function(t){return 1===t.length&&t[0]instanceof e?t[0]:new e(t)},e}(r),t.Literal=x=function(t){function e(t){this.value=t}return fe(e,t),e.prototype.makeReturn=function(){return this.isStatement()?this:e.__super__.makeReturn.apply(this,arguments)},e.prototype.isAssignable=function(){return f.test(this.value)},e.prototype.isStatement=function(){var t;return"break"===(t=this.value)||"continue"===t||"debugger"===t},e.prototype.isComplex=F,e.prototype.assigns=function(t){return t===this.value},e.prototype.jumps=function(t){return"break"!==this.value||(null!=t?t.loop:void 0)||(null!=t?t.block:void 0)?"continue"!==this.value||(null!=t?t.loop:void 0)?void 0:this:this},e.prototype.compileNode=function(t){var e,n;return e="this"===this.value?(null!=(n=t.scope.method)?n.bound:void 0)?t.scope.method.context:this.value:this.value.reserved?'"'+this.value+'"':this.value,this.isStatement()?""+this.tab+e+";":e},e.prototype.toString=function(){return' "'+this.value+'"'},e}(r),t.Undefined=function(t){function e(){e.__super__.constructor.apply(this,arguments)}return fe(e,t),e.prototype.isAssignable=F,e.prototype.isComplex=F,e.prototype.compileNode=function(t){return t.level>=w?"(void 0)":"void 0"},e}(r),t.Null=function(t){function e(){e.__super__.constructor.apply(this,arguments)}return fe(e,t),e.prototype.isAssignable=F,e.prototype.isComplex=F,e.prototype.compileNode=function(){return"null"},e}(r),t.Bool=function(t){function e(t){this.val=t}return fe(e,t),e.prototype.isAssignable=F,e.prototype.isComplex=F,e.prototype.compileNode=function(){return this.val},e}(r),t.Return=O=function(t){function e(t){t&&!t.unwrap().isUndefined&&(this.expression=t)}return fe(e,t),e.prototype.children=["expression"],e.prototype.isStatement=z,e.prototype.makeReturn=q,e.prototype.jumps=q,e.prototype.compile=function(t,n){var i,r;return i=null!=(r=this.expression)?r.makeReturn():void 0,!i||i instanceof e?e.__super__.compile.call(this,t,n):i.compile(t,n)},e.prototype.compileNode=function(t){return this.tab+("return"+[this.expression?" "+this.expression.compile(t,N):void 0]+";")},e}(r),t.Value=Y=function(t){function e(t,e,n){this.base=t,this.properties=e,this.properties||(this.properties=[]),"this"===n&&(this["this"]=!0)}return fe(e,t),e.wrap=function(t,n,i){return!n&&t instanceof e?t:new e(t,n,i)},e.prototype.children=["base","properties"],e.prototype.add=function(t){return this.properties=this.properties.concat(t),this},e.prototype.hasProperties=function(){return!!this.properties.length},e.prototype.isArray=function(){return!this.properties.length&&this.base instanceof n},e.prototype.isComplex=function(){return this.hasProperties()||this.base.isComplex()},e.prototype.isAssignable=function(){return this.hasProperties()||this.base.isAssignable()},e.prototype.isSimpleNumber=function(){return this.base instanceof x&&j.test(this.base.value)},e.prototype.isString=function(){return this.base instanceof x&&b.test(this.base.value)},e.prototype.isAtomic=function(){var t,e,n,i;for(i=this.properties.concat(this.base),e=0,n=i.length;n>e;e++)if(t=i[e],t.soak||t instanceof a)return!1;return!0},e.prototype.isStatement=function(t){return!this.properties.length&&this.base.isStatement(t)},e.prototype.assigns=function(t){return!this.properties.length&&this.base.assigns(t)},e.prototype.jumps=function(t){return!this.properties.length&&this.base.jumps(t)},e.prototype.isObject=function(t){return this.properties.length?!1:this.base instanceof R&&(!t||this.base.generated)},e.prototype.isSplice=function(){return ie(this.properties)instanceof V},e.prototype.unwrap=function(){return this.properties.length?this:this.base},e.prototype.cacheReference=function(t){var n,r,s,a;return s=ie(this.properties),2>this.properties.length&&!this.base.isComplex()&&!(null!=s?s.isComplex():void 0)?[this,this]:(n=e.wrap(this.base,this.properties.slice(0,-1)),n.isComplex()&&(r=new x(t.scope.freeVariable("base")),n=e.wrap(new $(new i(r,n)))),s?(s.isComplex()&&(a=new x(t.scope.freeVariable("name")),s=new g(new i(a,s.index)),a=new g(a)),[n.add(s),e.wrap(r||n.base,[a||s])]):[n,r])},e.prototype.compileNode=function(t){var e,n,i,r,s;for(this.base.front=this.front,i=this.properties,e=this.base.compile(t,i.length?w:null),(this.base instanceof $||i.length)&&j.test(e)&&(e=""+e+"."),r=0,s=i.length;s>r;r++)n=i[r],e+=n.compile(t);return e},e.prototype.unfoldSoak=function(t){var n,r=this;return null!=(n=this.unfoldedSoak)?n:this.unfoldedSoak=function(){var n,s,a,o,c,h,l,u,d,f;if(a=r.base.unfoldSoak(t))return(d=a.body.properties).push.apply(d,r.properties),a;for(f=r.properties,s=l=0,u=f.length;u>l;s=++l)if(o=f[s],o.soak)return o.soak=!1,n=e.wrap(r.base,r.properties.slice(0,s)),h=e.wrap(r.base,r.properties.slice(s)),n.isComplex()&&(c=new x(t.scope.freeVariable("ref")),n=new $(new i(c,n)),h.base=c),new y(new p(n),h,{soak:!0});return!1}()},e}(r),t.Comment=l=function(t){function e(t){this.comment=t}return fe(e,t),e.prototype.isStatement=z,e.prototype.makeReturn=q,e.prototype.compileNode=function(t,e){var n;return n="/*"+ae(this.comment,this.tab)+("\n"+this.tab+"*/\n"),(e||t.level)===T&&(n=t.indent+n),n},e}(r),t.Call=a=function(t){function n(t,e,n){this.args=null!=e?e:[],this.soak=n,this.isNew=!1,this.isSuper="super"===t,this.variable=this.isSuper?null:t}return fe(n,t),n.prototype.children=["variable","args"],n.prototype.newInstance=function(){var t,e;return t=(null!=(e=this.variable)?e.base:void 0)||this.variable,t instanceof n&&!t.isNew?t.newInstance():this.isNew=!0,this},n.prototype.superReference=function(t){var n,i,r;if(i=t.scope.namedMethod(),!i)throw SyntaxError("cannot call super outside of a function.");if(r=i.name,null==r)throw SyntaxError("cannot call super on an anonymous function.");return i.klass?(n=[new e(new x("__super__"))],i["static"]&&n.push(new e(new x("constructor"))),n.push(new e(new x(r))),Y.wrap(new x(i.klass),n).compile(t)):""+r+".__super__.constructor"},n.prototype.superThis=function(t){var e;return e=t.scope.method,e&&!e.klass&&e.context||"this"},n.prototype.unfoldSoak=function(t){var e,i,r,s,a,o,c,h,l;if(this.soak){if(this.variable){if(i=he(t,this,"variable"))return i;h=Y.wrap(this.variable).cacheReference(t),r=h[0],a=h[1]}else r=new x(this.superReference(t)),a=Y.wrap(r);return a=new n(a,this.args),a.isNew=this.isNew,r=new x("typeof "+r.compile(t)+' === "function"'),new y(r,Y.wrap(a),{soak:!0})}for(e=this,s=[];;)if(e.variable instanceof n)s.push(e),e=e.variable;else{if(!(e.variable instanceof Y))break;if(s.push(e),!((e=e.variable.base)instanceof n))break}for(l=s.reverse(),o=0,c=l.length;c>o;o++)e=l[o],i&&(e.variable instanceof n?e.variable=i:e.variable.base=i),i=he(t,e,"variable");return i},n.prototype.filterImplicitObjects=function(t){var e,n,r,s,a,o,c,h,p,u;for(n=[],o=0,h=t.length;h>o;o++)if(e=t[o],("function"==typeof e.isObject?e.isObject():void 0)&&e.base.generated)for(r=null,u=e.base.properties,c=0,p=u.length;p>c;c++)s=u[c],s instanceof i||s instanceof l?(r||n.push(r=new R(a=[],!0)),a.push(s)):(n.push(s),r=null);else n.push(e);return n},n.prototype.compileNode=function(t){var e,n,i,r;return null!=(r=this.variable)&&(r.front=this.front),(i=U.compileSplattedArray(t,this.args,!0))?this.compileSplat(t,i):(n=this.filterImplicitObjects(this.args),n=function(){var i,r,s;for(s=[],i=0,r=n.length;r>i;i++)e=n[i],s.push(e.compile(t,E));return s}().join(", "),this.isSuper?this.superReference(t)+(".call("+this.superThis(t)+(n&&", "+n)+")"):(this.isNew?"new ":"")+this.variable.compile(t,w)+("("+n+")"))},n.prototype.compileSplat=function(t,e){var n,i,r,s,a;return this.isSuper?""+this.superReference(t)+".apply("+this.superThis(t)+", "+e+")":this.isNew?(r=this.tab+H,"(function(func, args, ctor) {\n"+r+"ctor.prototype = func.prototype;\n"+r+"var child = new ctor, result = func.apply(child, args);\n"+r+"return Object(result) === result ? result : child;\n"+this.tab+"})("+this.variable.compile(t,E)+", "+e+", function(){})"):(n=Y.wrap(this.variable),(s=n.properties.pop())&&n.isComplex()?(a=t.scope.freeVariable("ref"),i="("+a+" = "+n.compile(t,E)+")"+s.compile(t)):(i=n.compile(t,w),j.test(i)&&(i="("+i+")"),s?(a=i,i+=s.compile(t)):a="null"),""+i+".apply("+a+", "+e+")")},n}(r),t.Extends=u=function(t){function e(t,e){this.child=t,this.parent=e}return fe(e,t),e.prototype.children=["child","parent"],e.prototype.compile=function(t){return new a(Y.wrap(new x(le("extends"))),[this.child,this.parent]).compile(t)},e}(r),t.Access=e=function(t){function e(t,e){this.name=t,this.name.asKey=!0,this.soak="soak"===e}return fe(e,t),e.prototype.children=["name"],e.prototype.compile=function(t){var e;return e=this.name.compile(t),f.test(e)?"."+e:"["+e+"]"},e.prototype.isComplex=F,e}(r),t.Index=g=function(t){function e(t){this.index=t}return fe(e,t),e.prototype.children=["index"],e.prototype.compile=function(t){return"["+this.index.compile(t,N)+"]"},e.prototype.isComplex=function(){return this.index.isComplex()},e}(r),t.Range=C=function(t){function e(t,e,n){this.from=t,this.to=e,this.exclusive="exclusive"===n,this.equals=this.exclusive?"":"="}return fe(e,t),e.prototype.children=["from","to"],e.prototype.compileVariables=function(t){var e,n,i,r,s;return t=se(t,{top:!0}),n=this.from.cache(t,E),this.fromC=n[0],this.fromVar=n[1],i=this.to.cache(t,E),this.toC=i[0],this.toVar=i[1],(e=Q(t,"step"))&&(r=e.cache(t,E),this.step=r[0],this.stepVar=r[1]),s=[this.fromVar.match(j),this.toVar.match(j)],this.fromNum=s[0],this.toNum=s[1],this.stepVar?this.stepNum=this.stepVar.match(j):void 0},e.prototype.compileNode=function(t){var e,n,i,r,s,a,o,c,h,l,p,u,d,f;return this.fromVar||this.compileVariables(t),t.index?(o=this.fromNum&&this.toNum,s=Q(t,"index"),a=Q(t,"name"),h=a&&a!==s,u=""+s+" = "+this.fromC,this.toC!==this.toVar&&(u+=", "+this.toC),this.step!==this.stepVar&&(u+=", "+this.step),d=[""+s+" <"+this.equals,""+s+" >"+this.equals],c=d[0],r=d[1],n=this.stepNum?+this.stepNum>0?""+c+" "+this.toVar:""+r+" "+this.toVar:o?(f=[+this.fromNum,+this.toNum],i=f[0],p=f[1],f,p>=i?""+c+" "+p:""+r+" "+p):(e=this.stepVar?""+this.stepVar+" > 0":""+this.fromVar+" <= "+this.toVar,""+e+" ? "+c+" "+this.toVar+" : "+r+" "+this.toVar),l=this.stepVar?""+s+" += "+this.stepVar:o?h?p>=i?"++"+s:"--"+s:p>=i?""+s+"++":""+s+"--":h?""+e+" ? ++"+s+" : --"+s:""+e+" ? "+s+"++ : "+s+"--",h&&(u=""+a+" = "+u),h&&(l=""+a+" = "+l),""+u+"; "+n+"; "+l):this.compileArray(t)},e.prototype.compileArray=function(t){var e,n,i,r,s,a,o,c,h,l,p,u,d;return this.fromNum&&this.toNum&&20>=Math.abs(this.fromNum-this.toNum)?(h=function(){d=[];for(var t=u=+this.fromNum,e=+this.toNum;e>=u?e>=t:t>=e;e>=u?t++:t--)d.push(t);return d}.apply(this),this.exclusive&&h.pop(),"["+h.join(", ")+"]"):(a=this.tab+H,s=t.scope.freeVariable("i"),l=t.scope.freeVariable("results"),c="\n"+a+l+" = [];",this.fromNum&&this.toNum?(t.index=s,n=this.compileNode(t)):(p=""+s+" = "+this.fromC+(this.toC!==this.toVar?", "+this.toC:""),i=""+this.fromVar+" <= "+this.toVar,n="var "+p+"; "+i+" ? "+s+" <"+this.equals+" "+this.toVar+" : "+s+" >"+this.equals+" "+this.toVar+"; "+i+" ? "+s+"++ : "+s+"--"),o="{ "+l+".push("+s+"); }\n"+a+"return "+l+";\n"+t.indent,r=function(t){return null!=t?t.contains(function(t){return t instanceof x&&"arguments"===t.value&&!t.asKey}):void 0},(r(this.from)||r(this.to))&&(e=", arguments"),"(function() {"+c+"\n"+a+"for ("+n+")"+o+"}).apply(this"+(null!=e?e:"")+")")},e}(r),t.Slice=V=function(t){function e(t){this.range=t,e.__super__.constructor.call(this)}return fe(e,t),e.prototype.children=["range"],e.prototype.compileNode=function(t){var e,n,i,r,s,a;return a=this.range,r=a.to,n=a.from,i=n&&n.compile(t,N)||"0",e=r&&r.compile(t,N),r&&(this.range.exclusive||-1!==+e)&&(s=", "+(this.range.exclusive?e:j.test(e)?""+(+e+1):(e=r.compile(t,w),"+"+e+" + 1 || 9e9"))),".slice("+i+(s||"")+")"},e}(r),t.Obj=R=function(t){function e(t,e){this.generated=null!=e?e:!1,this.objects=this.properties=t||[]}return fe(e,t),e.prototype.children=["properties"],e.prototype.compileNode=function(t){var e,n,r,s,a,o,c,h,p,u,d;if(p=this.properties,!p.length)return this.front?"({})":"{}";if(this.generated)for(u=0,d=p.length;d>u;u++)if(o=p[u],o instanceof Y)throw Error("cannot have an implicit value in an implicit object");return n=t.indent+=H,a=this.lastNonComment(this.properties),p=function(){var o,c,u;for(u=[],e=o=0,c=p.length;c>o;e=++o)h=p[e],s=e===p.length-1?"":h===a||h instanceof l?"\n":",\n",r=h instanceof l?"":n,h instanceof Y&&h["this"]&&(h=new i(h.properties[0].name,h,"object")),h instanceof l||(h instanceof i||(h=new i(h,h,"object")),(h.variable.base||h.variable).asKey=!0),u.push(r+h.compile(t,T)+s);return u}(),p=p.join(""),c="{"+(p&&"\n"+p+"\n"+this.tab)+"}",this.front?"("+c+")":c},e.prototype.assigns=function(t){var e,n,i,r;for(r=this.properties,n=0,i=r.length;i>n;n++)if(e=r[n],e.assigns(t))return!0;return!1},e}(r),t.Arr=n=function(t){function e(t){this.objects=t||[]}return fe(e,t),e.prototype.children=["objects"],e.prototype.filterImplicitObjects=a.prototype.filterImplicitObjects,e.prototype.compileNode=function(t){var e,n,i;return this.objects.length?(t.indent+=H,i=this.filterImplicitObjects(this.objects),(e=U.compileSplattedArray(t,i))?e:(e=function(){var e,r,s;for(s=[],e=0,r=i.length;r>e;e++)n=i[e],s.push(n.compile(t,E));return s}().join(", "),e.indexOf("\n")>=0?"[\n"+t.indent+e+"\n"+this.tab+"]":"["+e+"]")):"[]"},e.prototype.assigns=function(t){var e,n,i,r;for(r=this.objects,n=0,i=r.length;i>n;n++)if(e=r[n],e.assigns(t))return!0;return!1},e}(r),t.Class=o=function(t){function n(t,e,n){this.variable=t,this.parent=e,this.body=null!=n?n:new s,this.boundFuncs=[],this.body.classBody=!0}return fe(n,t),n.prototype.children=["variable","parent","body"],n.prototype.determineName=function(){var t,n;if(!this.variable)return null;if(t=(n=ie(this.variable.properties))?n instanceof e&&n.name.value:this.variable.base.value,me.call(M,t)>=0)throw SyntaxError("variable name may not be "+t);return t&&(t=f.test(t)&&t)},n.prototype.setContext=function(t){return this.body.traverseChildren(!1,function(e){return e.classBody?!1:e instanceof x&&"this"===e.value?e.value=t:e instanceof h&&(e.klass=t,e.bound)?e.context=t:void 0})},n.prototype.addBoundFunctions=function(t){var n,i,r,s,a;for(a=this.boundFuncs,r=0,s=a.length;s>r;r++)n=a[r],i=Y.wrap(new x("this"),[new e(n)]).compile(t),this.ctor.body.unshift(new x(""+i+" = "+le("bind")+"("+i+", this)"))},n.prototype.addProperties=function(t,n,r){var s,a,o,c,l;return l=t.base.properties.slice(0),o=function(){var t;for(t=[];s=l.shift();){if(s instanceof i)if(a=s.variable.base,delete s.context,c=s.value,"constructor"===a.value){if(this.ctor)throw Error("cannot define more than one constructor in a class");if(c.bound)throw Error("cannot define a constructor as a bound function");c instanceof h?s=this.ctor=c:(this.externalCtor=r.scope.freeVariable("class"),s=new i(new x(this.externalCtor),c))}else s.variable["this"]?(c["static"]=!0,c.bound&&(c.context=n)):(s.variable=Y.wrap(new x(n),[new e(new x("prototype")),new e(a)]),c instanceof h&&c.bound&&(this.boundFuncs.push(a),c.bound=!1));t.push(s)}return t}.call(this),Z(o)},n.prototype.walkBody=function(t,e){var i=this;return this.traverseChildren(!1,function(r){var a,o,c,h,l,p;if(r instanceof n)return!1;if(r instanceof s){for(p=a=r.expressions,o=h=0,l=p.length;l>h;o=++h)c=p[o],c instanceof Y&&c.isObject(!0)&&(a[o]=i.addProperties(c,t,e));return r.expressions=a=ne(a)}})},n.prototype.hoistDirectivePrologue=function(){var t,e,n;for(e=0,t=this.body.expressions;(n=t[e])&&n instanceof l||n instanceof Y&&n.isString();)++e;return this.directives=t.splice(0,e)},n.prototype.ensureConstructor=function(t,e){var n;if(this.ctor||(this.ctor=new h,this.parent&&this.ctor.body.push(new x(""+t+".__super__.constructor.apply(this, arguments)")),this.externalCtor&&this.ctor.body.push(new x(""+this.externalCtor+".apply(this, arguments)")),this.body.expressions.unshift(this.ctor)),this.ctor.ctor=this.ctor.name=t,this.ctor.klass=null,this.ctor.noReturn=!0,n=null,this.ctor.body.traverseChildren(!1,function(t){return t instanceof O&&(n=t.expression)?!1:void 0}),n)throw SyntaxError('cannot return a value from a constructor: "'+n.compileNode(e)+'" in class '+t)},n.prototype.compileNode=function(t){var e,n,r,s,a,o,l;return n=this.determineName(),a=n||"_Class",a.reserved&&(a="_"+a),s=new x(a),this.hoistDirectivePrologue(),this.setContext(a),this.walkBody(a,t),this.ensureConstructor(a,t),this.body.spaced=!0,this.ctor instanceof h||this.body.expressions.unshift(this.ctor),this.body.expressions.push(s),(l=this.body.expressions).unshift.apply(l,this.directives),this.addBoundFunctions(t),e=c.wrap(this.body),this.parent&&(this.superClass=new x(t.scope.freeVariable("super",!1)),this.body.expressions.unshift(new u(s,this.superClass)),e.args.push(this.parent),o=e.variable.params||e.variable.base.params,o.push(new A(this.superClass))),r=new $(e,!0),this.variable&&(r=new i(this.variable,r)),r.compile(t)},n}(r),t.Assign=i=function(t){function n(t,e,n,i){var r,s,a;if(this.variable=t,this.value=e,this.context=n,this.param=i&&i.param,this.subpattern=i&&i.subpattern,a=s=this.variable.unwrapAll().value,r=me.call(M,a)>=0,r&&"object"!==this.context)throw SyntaxError('variable name may not be "'+s+'"')}return fe(n,t),n.prototype.children=["variable","value"],n.prototype.isStatement=function(t){return(null!=t?t.level:void 0)===T&&null!=this.context&&me.call(this.context,"?")>=0},n.prototype.assigns=function(t){return this["object"===this.context?"value":"variable"].assigns(t)},n.prototype.unfoldSoak=function(t){return he(t,this,"variable")},n.prototype.compileNode=function(t){var e,n,i,r,s,a,o,c,l;if(e=this.variable instanceof Y){if(this.variable.isArray()||this.variable.isObject())return this.compilePatternMatch(t);if(this.variable.isSplice())return this.compileSplice(t);if("||="===(a=this.context)||"&&="===a||"?="===a)return this.compileConditional(t)}if(i=this.variable.compile(t,E),!this.context){if(!(s=this.variable.unwrapAll()).isAssignable())throw SyntaxError('"'+this.variable.compile(t)+'" cannot be assigned.');("function"==typeof s.hasProperties?s.hasProperties():void 0)||(this.param?t.scope.add(i,"var"):t.scope.find(i))}return this.value instanceof h&&(n=D.exec(i))&&(n[1]&&(this.value.klass=n[1]),this.value.name=null!=(o=null!=(c=null!=(l=n[2])?l:n[3])?c:n[4])?o:n[5]),r=this.value.compile(t,E),"object"===this.context?""+i+": "+r:(r=i+(" "+(this.context||"=")+" ")+r,E>=t.level?r:"("+r+")")},n.prototype.compilePatternMatch=function(t){var i,r,s,a,o,c,h,l,p,u,d,m,b,y,v,w,k,N,D,S,F,R,I,A,C,O;if(v=t.level===T,k=this.value,u=this.variable.base.objects,!(d=u.length))return s=k.compile(t),t.level>=L?"("+s+")":s;if(c=this.variable.isObject(),v&&1===d&&!((p=u[0])instanceof U)){if(p instanceof n?(F=p,R=F.variable,o=R.base,p=F.value):o=c?p["this"]?p.properties[0].name:p:new x(0),i=f.test(o.unwrap().value||0),k=Y.wrap(k),k.properties.push(new(i?e:g)(o)),I=p.unwrap().value,me.call(_,I)>=0)throw new SyntaxError("assignment to a reserved word: "+p.compile(t)+" = "+k.compile(t));return new n(p,k,null,{param:this.param}).compile(t,T)}for(N=k.compile(t,E),r=[],y=!1,(!f.test(N)||this.variable.assigns(N))&&(r.push(""+(m=t.scope.freeVariable("ref"))+" = "+N),N=m),a=D=0,S=u.length;S>D;a=++D){if(p=u[a],o=a,c&&(p instanceof n?(A=p,C=A.variable,o=C.base,p=A.value):p.base instanceof $?(O=Y.wrap(p.unwrapAll()).cacheReference(t),p=O[0],o=O[1]):o=p["this"]?p.properties[0].name:p),!y&&p instanceof U)l=p.name.unwrap().value,p=p.unwrap(),w=""+d+" <= "+N+".length ? "+le("slice")+".call("+N+", "+a,(b=d-a-1)?(h=t.scope.freeVariable("i"),w+=", "+h+" = "+N+".length - "+b+") : ("+h+" = "+a+", [])"):w+=") : []",w=new x(w),y=""+h+"++";else{if(l=p.unwrap().value,p instanceof U)throw p=p.name.compile(t),new SyntaxError("multiple splats are disallowed in an assignment: "+p+"...");"number"==typeof o?(o=new x(y||o),i=!1):i=c&&f.test(o.unwrap().value||0),w=Y.wrap(new x(N),[new(i?e:g)(o)])}if(null!=l&&me.call(_,l)>=0)throw new SyntaxError("assignment to a reserved word: "+p.compile(t)+" = "+w.compile(t));r.push(new n(p,w,null,{param:this.param,subpattern:!0}).compile(t,E))}return v||this.subpattern||r.push(N),s=r.join(", "),E>t.level?s:"("+s+")"},n.prototype.compileConditional=function(t){var e,i,r;if(r=this.variable.cacheReference(t),e=r[0],i=r[1],!e.properties.length&&e.base instanceof x&&"this"!==e.base.value&&!t.scope.check(e.base.value))throw Error('the variable "'+e.base.value+"\" can't be assigned with "+this.context+" because it has not been defined.");return me.call(this.context,"?")>=0&&(t.isExistentialEquals=!0),I.create(this.context.slice(0,-1),e,new n(i,this.value,"=")).compile(t)},n.prototype.compileSplice=function(t){var e,n,i,r,s,a,o,c,h,l,p,u;return l=this.variable.properties.pop().range,i=l.from,o=l.to,n=l.exclusive,a=this.variable.compile(t),p=(null!=i?i.cache(t,L):void 0)||["0","0"],r=p[0],s=p[1],o?(null!=i?i.isSimpleNumber():void 0)&&o.isSimpleNumber()?(o=+o.compile(t)-+s,n||(o+=1)):(o=o.compile(t,w)+" - "+s,n||(o+=" + 1")):o="9e9",u=this.value.cache(t,E),c=u[0],h=u[1],e="[].splice.apply("+a+", ["+r+", "+o+"].concat("+c+")), "+h,t.level>T?"("+e+")":e},n}(r),t.Code=h=function(t){function e(t,e,n){this.params=t||[],this.body=e||new s,this.bound="boundfunc"===n,this.bound&&(this.context="_this")}return fe(e,t),e.prototype.children=["params","body"],e.prototype.isStatement=function(){return!!this.ctor},e.prototype.jumps=F,e.prototype.compileNode=function(t){var e,r,s,a,o,c,h,l,p,u,d,f,m,b,v,g,k,E,L,N,T,D,S,F,R,A,$,_,C,O,j,M,V;for(t.scope=new P(t.scope,this.body,this),t.scope.shared=Q(t,"sharedScope"),t.indent+=H,delete t.bare,delete t.isExistentialEquals,p=[],r=[],$=this.paramNames(),v=0,L=$.length;L>v;v++)c=$[v],t.scope.check(c)||t.scope.parameter(c);for(_=this.params,g=0,N=_.length;N>g;g++)if(l=_[g],l.splat){for(C=this.params,k=0,T=C.length;T>k;k++)h=C[k].name,h["this"]&&(h=h.properties[0].name),h.value&&t.scope.add(h.value,"var",!0); +d=new i(Y.wrap(new n(function(){var e,n,i,r;for(i=this.params,r=[],e=0,n=i.length;n>e;e++)h=i[e],r.push(h.asReference(t));return r}.call(this))),Y.wrap(new x("arguments")));break}for(O=this.params,E=0,D=O.length;D>E;E++)l=O[E],l.isComplex()?(m=u=l.asReference(t),l.value&&(m=I.create("?",u,l.value)),r.push(new i(Y.wrap(l.name),m,"=",{param:!0}))):(u=l,l.value&&(o=new x(u.name.value+" == null"),m=new i(Y.wrap(l.name),l.value,"="),r.push(new y(o,m)))),d||p.push(u);for(b=this.body.isEmpty(),d&&r.unshift(d),r.length&&(j=this.body.expressions).unshift.apply(j,r),s=R=0,S=p.length;S>R;s=++R)h=p[s],t.scope.parameter(p[s]=h.compile(t));for(f=[],M=this.paramNames(),A=0,F=M.length;F>A;A++){if(c=M[A],me.call(f,c)>=0)throw SyntaxError("multiple parameters named '"+c+"'");f.push(c)}return b||this.noReturn||this.body.makeReturn(),this.bound&&((null!=(V=t.scope.parent.method)?V.bound:void 0)?this.bound=this.context=t.scope.parent.method.context:this["static"]||t.scope.parent.assign("_this","this")),a=t.indent,e="function",this.ctor&&(e+=" "+this.name),e+="("+p.join(", ")+") {",this.body.isEmpty()||(e+="\n"+this.body.compileWithDeclarations(t)+"\n"+this.tab),e+="}",this.ctor?this.tab+e:this.front||t.level>=w?"("+e+")":e},e.prototype.paramNames=function(){var t,e,n,i,r;for(t=[],r=this.params,n=0,i=r.length;i>n;n++)e=r[n],t.push.apply(t,e.names());return t},e.prototype.traverseChildren=function(t,n){return t?e.__super__.traverseChildren.call(this,t,n):void 0},e}(r),t.Param=A=function(t){function e(t,e,n){var i;if(this.name=t,this.value=e,this.splat=n,i=t=this.name.unwrapAll().value,me.call(M,i)>=0)throw SyntaxError('parameter name "'+t+'" is not allowed')}return fe(e,t),e.prototype.children=["name","value"],e.prototype.compile=function(t){return this.name.compile(t,E)},e.prototype.asReference=function(t){var e;return this.reference?this.reference:(e=this.name,e["this"]?(e=e.properties[0].name,e.value.reserved&&(e=new x(t.scope.freeVariable(e.value)))):e.isComplex()&&(e=new x(t.scope.freeVariable("arg"))),e=Y.wrap(e),this.splat&&(e=new U(e)),this.reference=e)},e.prototype.isComplex=function(){return this.name.isComplex()},e.prototype.names=function(t){var e,n,r,s,a,o;if(null==t&&(t=this.name),e=function(t){var e;return e=t.properties[0].name.value,e.reserved?[]:[e]},t instanceof x)return[t.value];if(t instanceof Y)return e(t);for(n=[],o=t.objects,s=0,a=o.length;a>s;s++)if(r=o[s],r instanceof i)n.push.apply(n,this.names(r.value.unwrap()));else if(r instanceof U)n.push(r.name.unwrap().value);else{if(!(r instanceof Y))throw SyntaxError("illegal parameter "+r.compile());r.isArray()||r.isObject()?n.push.apply(n,this.names(r.base)):r["this"]?n.push.apply(n,e(r)):n.push(r.base.value)}return n},e}(r),t.Splat=U=function(t){function e(t){this.name=t.compile?t:new x(t)}return fe(e,t),e.prototype.children=["name"],e.prototype.isAssignable=z,e.prototype.assigns=function(t){return this.name.assigns(t)},e.prototype.compile=function(t){return this.name.compile(t)},e.prototype.unwrap=function(){return this.name},e.compileSplattedArray=function(t,n,i){var r,s,a,o,c,h,l,p;for(c=-1;(h=n[++c])&&!(h instanceof e););if(c>=n.length)return"";if(1===n.length)return a=n[0].compile(t,E),i?a:""+le("slice")+".call("+a+")";for(r=n.slice(c),o=l=0,p=r.length;p>l;o=++l)h=r[o],a=h.compile(t,E),r[o]=h instanceof e?""+le("slice")+".call("+a+")":"["+a+"]";return 0===c?r[0]+(".concat("+r.slice(1).join(", ")+")"):(s=function(){var e,i,r,s;for(r=n.slice(0,c),s=[],e=0,i=r.length;i>e;e++)h=r[e],s.push(h.compile(t,E));return s}(),"["+s.join(", ")+"].concat("+r.join(", ")+")")},e}(r),t.While=K=function(t){function e(t,e){this.condition=(null!=e?e.invert:void 0)?t.invert():t,this.guard=null!=e?e.guard:void 0}return fe(e,t),e.prototype.children=["condition","guard","body"],e.prototype.isStatement=z,e.prototype.makeReturn=function(t){return t?e.__super__.makeReturn.apply(this,arguments):(this.returns=!this.jumps({loop:!0}),this)},e.prototype.addBody=function(t){return this.body=t,this},e.prototype.jumps=function(){var t,e,n,i;if(t=this.body.expressions,!t.length)return!1;for(n=0,i=t.length;i>n;n++)if(e=t[n],e.jumps({loop:!0}))return e;return!1},e.prototype.compileNode=function(t){var e,n,i,r;return t.indent+=H,r="",e=this.body,e.isEmpty()?e="":(this.returns&&(e.makeReturn(i=t.scope.freeVariable("results")),r=""+this.tab+i+" = [];\n"),this.guard&&(e.expressions.length>1?e.expressions.unshift(new y(new $(this.guard).invert(),new x("continue"))):this.guard&&(e=s.wrap([new y(this.guard,e)]))),e="\n"+e.compile(t,T)+"\n"+this.tab),n=r+this.tab+("while ("+this.condition.compile(t,N)+") {"+e+"}"),this.returns&&(n+="\n"+this.tab+"return "+i+";"),n},e}(r),t.Op=I=function(t){function e(t,e,i,r){this.first=e,this.second=i,this.operator=n[t]||t,this.flip=!!r}var n,r;return fe(e,t),e.create=function(t,n,i,r){if("in"===t)return new v(n,i);if("do"===t)return this.generateDo(n);if("new"===t){if(n instanceof a&&!n["do"]&&!n.isNew)return n.newInstance();(n instanceof h&&n.bound||n["do"])&&(n=new $(n))}return new e(t,n,i,r)},n={"==":"===","!=":"!==",of:"in"},r={"!==":"===","===":"!=="},e.prototype.children=["first","second"],e.prototype.isSimpleNumber=F,e.prototype.isUnary=function(){return!this.second},e.prototype.isComplex=function(){var t;return!(this.isUnary()&&("+"===(t=this.operator)||"-"===t))||this.first.isComplex()},e.prototype.isChainable=function(){var t;return"<"===(t=this.operator)||">"===t||">="===t||"<="===t||"==="===t||"!=="===t},e.prototype.invert=function(){var t,n,i,s,a;if(this.isChainable()&&this.first.isChainable()){for(t=!0,n=this;n&&n.operator;)t&&(t=n.operator in r),n=n.first;if(!t)return new $(this).invert();for(n=this;n&&n.operator;)n.invert=!n.invert,n.operator=r[n.operator],n=n.first;return this}return(s=r[this.operator])?(this.operator=s,this.first.unwrap()instanceof e&&this.first.invert(),this):this.second?new $(this).invert():"!"===this.operator&&(i=this.first.unwrap())instanceof e&&("!"===(a=i.operator)||"in"===a||"instanceof"===a)?i:e.create("!",this)},e.prototype.unfoldSoak=function(t){var e;return("++"===(e=this.operator)||"--"===e||"delete"===e)&&he(t,this,"first")},e.generateDo=function(t){var e,n,r,s,o,c,l,p;for(s=[],n=t instanceof i&&(o=t.value.unwrap())instanceof h?o:t,p=n.params||[],c=0,l=p.length;l>c;c++)r=p[c],r.value?(s.push(r.value),delete r.value):s.push(r);return e=new a(t,s),e["do"]=!0,e},e.prototype.compileNode=function(t){var e,n,i,r;if(n=this.isChainable()&&this.first.isChainable(),n||(this.first.front=this.front),"delete"===this.operator&&t.scope.check(this.first.unwrapAll().value))throw SyntaxError("delete operand may not be argument or var");if(("--"===(i=this.operator)||"++"===i)&&(r=this.first.unwrapAll().value,me.call(M,r)>=0))throw SyntaxError("prefix increment/decrement may not have eval or arguments operand");return this.isUnary()?this.compileUnary(t):n?this.compileChain(t):"?"===this.operator?this.compileExistence(t):(e=this.first.compile(t,L)+" "+this.operator+" "+this.second.compile(t,L),L>=t.level?e:"("+e+")")},e.prototype.compileChain=function(t){var e,n,i,r;return r=this.first.second.cache(t),this.first.second=r[0],i=r[1],n=this.first.compile(t,L),e=""+n+" "+(this.invert?"&&":"||")+" "+i.compile(t)+" "+this.operator+" "+this.second.compile(t,L),"("+e+")"},e.prototype.compileExistence=function(t){var e,n;return this.first.isComplex()?(n=new x(t.scope.freeVariable("ref")),e=new $(new i(n,this.first))):(e=this.first,n=e),new y(new p(e),n,{type:"if"}).addElse(this.second).compile(t)},e.prototype.compileUnary=function(t){var n,i,r;return i=[n=this.operator],"!"===n&&this.first instanceof p?(this.first.negated=!this.first.negated,this.first.compile(t)):t.level>=w?new $(this).compile(t):(r="+"===n||"-"===n,("new"===n||"typeof"===n||"delete"===n||r&&this.first instanceof e&&this.first.operator===n)&&i.push(" "),(r&&this.first instanceof e||"new"===n&&this.first.isStatement(t))&&(this.first=new $(this.first)),i.push(this.first.compile(t,L)),this.flip&&i.reverse(),i.join(""))},e.prototype.toString=function(t){return e.__super__.toString.call(this,t,this.constructor.name+" "+this.operator)},e}(r),t.In=v=function(t){function e(t,e){this.object=t,this.array=e}return fe(e,t),e.prototype.children=["object","array"],e.prototype.invert=S,e.prototype.compileNode=function(t){var e,n,i,r,s;if(this.array instanceof Y&&this.array.isArray()){for(s=this.array.base.objects,i=0,r=s.length;r>i;i++)if(n=s[i],n instanceof U){e=!0;break}if(!e)return this.compileOrTest(t)}return this.compileLoopTest(t)},e.prototype.compileOrTest=function(t){var e,n,i,r,s,a,o,c,h;return 0===this.array.base.objects.length?""+!!this.negated:(c=this.object.cache(t,L),a=c[0],s=c[1],h=this.negated?[" !== "," && "]:[" === "," || "],e=h[0],n=h[1],o=function(){var n,o,c,h;for(c=this.array.base.objects,h=[],i=n=0,o=c.length;o>n;i=++n)r=c[i],h.push((i?s:a)+e+r.compile(t,w));return h}.call(this),o=o.join(n),L>t.level?o:"("+o+")")},e.prototype.compileLoopTest=function(t){var e,n,i,r;return r=this.object.cache(t,E),i=r[0],n=r[1],e=le("indexOf")+(".call("+this.array.compile(t,E)+", "+n+") ")+(this.negated?"< 0":">= 0"),i===n?e:(e=i+", "+e,E>t.level?e:"("+e+")")},e.prototype.toString=function(t){return e.__super__.toString.call(this,t,this.constructor.name+(this.negated?"!":""))},e}(r),t.Try=W=function(t){function e(t,e,n,i){this.attempt=t,this.error=e,this.recovery=n,this.ensure=i}return fe(e,t),e.prototype.children=["attempt","recovery","ensure"],e.prototype.isStatement=z,e.prototype.jumps=function(t){var e;return this.attempt.jumps(t)||(null!=(e=this.recovery)?e.jumps(t):void 0)},e.prototype.makeReturn=function(t){return this.attempt&&(this.attempt=this.attempt.makeReturn(t)),this.recovery&&(this.recovery=this.recovery.makeReturn(t)),this},e.prototype.compileNode=function(t){var e,n,r,s;return t.indent+=H,s=this.attempt.compile(t,T),e=function(){var e,n;if(this.recovery){if(("function"==typeof(e=this.error).isObject?e.isObject():void 0)&&(r=new x("_error"),this.recovery.unshift(new i(this.error,r)),this.error=r),n=this.error.value,me.call(M,n)>=0)throw SyntaxError('catch variable may not be "'+this.error.value+'"');return t.scope.check(this.error.value)||t.scope.add(this.error.value,"param")," catch ("+this.error.compile(t)+") {\n"+this.recovery.compile(t,T)+"\n"+this.tab+"}"}return this.ensure||this.recovery?void 0:" catch (_error) {}"}.call(this),n=this.ensure?" finally {\n"+this.ensure.compile(t,T)+"\n"+this.tab+"}":"",""+this.tab+"try {\n"+s+"\n"+this.tab+"}"+(e||"")+n},e}(r),t.Throw=G=function(t){function e(t){this.expression=t}return fe(e,t),e.prototype.children=["expression"],e.prototype.isStatement=z,e.prototype.jumps=F,e.prototype.makeReturn=q,e.prototype.compileNode=function(t){return this.tab+("throw "+this.expression.compile(t)+";")},e}(r),t.Existence=p=function(t){function e(t){this.expression=t}return fe(e,t),e.prototype.children=["expression"],e.prototype.invert=S,e.prototype.compileNode=function(t){var e,n,i,r;return this.expression.front=this.front,i=this.expression.compile(t,L),f.test(i)&&!t.scope.check(i)?(r=this.negated?["===","||"]:["!==","&&"],e=r[0],n=r[1],i="typeof "+i+" "+e+' "undefined" '+n+" "+i+" "+e+" null"):i=""+i+" "+(this.negated?"==":"!=")+" null",k>=t.level?i:"("+i+")"},e}(r),t.Parens=$=function(t){function e(t){this.body=t}return fe(e,t),e.prototype.children=["body"],e.prototype.unwrap=function(){return this.body},e.prototype.isComplex=function(){return this.body.isComplex()},e.prototype.compileNode=function(t){var e,n,i;return i=this.body.unwrap(),i instanceof Y&&i.isAtomic()?(i.front=this.front,i.compile(t)):(n=i.compile(t,N),e=L>t.level&&(i instanceof I||i instanceof a||i instanceof d&&i.returns),e?n:"("+n+")")},e}(r),t.For=d=function(t){function e(t,e){var n;if(this.source=e.source,this.guard=e.guard,this.step=e.step,this.name=e.name,this.index=e.index,this.body=s.wrap([t]),this.own=!!e.own,this.object=!!e.object,this.object&&(n=[this.index,this.name],this.name=n[0],this.index=n[1]),this.index instanceof Y)throw SyntaxError("index cannot be a pattern matching expression");if(this.range=this.source instanceof Y&&this.source.base instanceof C&&!this.source.properties.length,this.pattern=this.name instanceof Y,this.range&&this.index)throw SyntaxError("indexes do not apply to range loops");if(this.range&&this.pattern)throw SyntaxError("cannot pattern match over range loops");this.returns=!1}return fe(e,t),e.prototype.children=["body","source","guard","step"],e.prototype.compileNode=function(t){var e,n,r,a,o,c,h,l,p,u,d,m,b,v,g,w,k,L,N,D,S,F,R,I,A,_,C,M,P,V,U,B;return e=s.wrap([this.body]),w=null!=(U=ie(e.expressions))?U.jumps():void 0,w&&w instanceof O&&(this.returns=!1),A=this.range?this.source.base:this.source,I=t.scope,L=this.name&&this.name.compile(t,E),m=this.index&&this.index.compile(t,E),L&&!this.pattern&&I.find(L),m&&I.find(m),this.returns&&(R=I.freeVariable("results")),b=this.object&&m||I.freeVariable("i"),v=this.range&&L||m||b,g=v!==b?""+v+" = ":"",this.step&&!this.range&&(B=this.step.cache(t,E),_=B[0],M=B[1],C=M.match(j)),this.pattern&&(L=b),V="",p="",c="",u=this.tab+H,this.range?l=A.compile(se(t,{index:b,name:L,step:this.step})):(P=this.source.compile(t,E),!L&&!this.own||f.test(P)||(c+=""+this.tab+(D=I.freeVariable("ref"))+" = "+P+";\n",P=D),L&&!this.pattern&&(N=""+L+" = "+P+"["+v+"]"),this.object||(_!==M&&(c+=""+this.tab+_+";\n"),this.step&&C&&(h=0>+C)||(k=I.freeVariable("len")),a=""+g+b+" = 0, "+k+" = "+P+".length",o=""+g+b+" = "+P+".length - 1",n=""+b+" < "+k,r=""+b+" >= 0",this.step?(C?h&&(n=r,a=o):(n=""+M+" > 0 ? "+n+" : "+r,a="("+M+" > 0 ? ("+a+") : "+o+")"),d=""+b+" += "+M):d=""+(v!==b?"++"+b:""+b+"++"),l=""+a+"; "+n+"; "+g+d)),this.returns&&(S=""+this.tab+R+" = [];\n",F="\n"+this.tab+"return "+R+";",e.makeReturn(R)),this.guard&&(e.expressions.length>1?e.expressions.unshift(new y(new $(this.guard).invert(),new x("continue"))):this.guard&&(e=s.wrap([new y(this.guard,e)]))),this.pattern&&e.expressions.unshift(new i(this.name,new x(""+P+"["+v+"]"))),c+=this.pluckDirectCall(t,e),N&&(V="\n"+u+N+";"),this.object&&(l=""+v+" in "+P,this.own&&(p="\n"+u+"if (!"+le("hasProp")+".call("+P+", "+v+")) continue;")),e=e.compile(se(t,{indent:u}),T),e&&(e="\n"+e+"\n"),""+c+(S||"")+this.tab+"for ("+l+") {"+p+V+e+this.tab+"}"+(F||"")},e.prototype.pluckDirectCall=function(t,e){var n,r,s,o,c,l,p,u,d,f,m,b,y,v,g;for(r="",f=e.expressions,c=u=0,d=f.length;d>u;c=++u)s=f[c],s=s.unwrapAll(),s instanceof a&&(p=s.variable.unwrapAll(),(p instanceof h||p instanceof Y&&(null!=(m=p.base)?m.unwrapAll():void 0)instanceof h&&1===p.properties.length&&("call"===(b=null!=(y=p.properties[0].name)?y.value:void 0)||"apply"===b))&&(o=(null!=(v=p.base)?v.unwrapAll():void 0)||p,l=new x(t.scope.freeVariable("fn")),n=Y.wrap(l),p.base&&(g=[n,p],p.base=g[0],n=g[1]),e.expressions[c]=new a(n,s.args),r+=this.tab+new i(l,o).compile(t,T)+";\n"));return r},e}(K),t.Switch=B=function(t){function e(t,e,n){this.subject=t,this.cases=e,this.otherwise=n}return fe(e,t),e.prototype.children=["subject","cases","otherwise"],e.prototype.isStatement=z,e.prototype.jumps=function(t){var e,n,i,r,s,a,o;for(null==t&&(t={block:!0}),s=this.cases,i=0,r=s.length;r>i;i++)if(a=s[i],n=a[0],e=a[1],e.jumps(t))return e;return null!=(o=this.otherwise)?o.jumps(t):void 0},e.prototype.makeReturn=function(t){var e,n,i,r,a;for(r=this.cases,n=0,i=r.length;i>n;n++)e=r[n],e[1].makeReturn(t);return t&&(this.otherwise||(this.otherwise=new s([new x("void 0")]))),null!=(a=this.otherwise)&&a.makeReturn(t),this},e.prototype.compileNode=function(t){var e,n,i,r,s,a,o,c,h,l,p,u,d,f,m,b,y;for(c=t.indent+H,h=t.indent=c+H,i=this.tab+("switch ("+((null!=(f=this.subject)?f.compile(t,N):void 0)||!1)+") {\n"),m=this.cases,o=l=0,u=m.length;u>l;o=++l){for(b=m[o],s=b[0],e=b[1],y=ne([s]),p=0,d=y.length;d>p;p++)r=y[p],this.subject||(r=r.invert()),i+=c+("case "+r.compile(t,N)+":\n");if((n=e.compile(t,T))&&(i+=n+"\n"),o===this.cases.length-1&&!this.otherwise)break;a=this.lastNonComment(e.expressions),a instanceof O||a instanceof x&&a.jumps()&&"debugger"!==a.value||(i+=h+"break;\n")}return this.otherwise&&this.otherwise.expressions.length&&(i+=c+("default:\n"+this.otherwise.compile(t,T)+"\n")),i+this.tab+"}"},e}(r),t.If=y=function(t){function e(t,e,n){this.body=e,null==n&&(n={}),this.condition="unless"===n.type?t.invert():t,this.elseBody=null,this.isChain=!1,this.soak=n.soak}return fe(e,t),e.prototype.children=["condition","body","elseBody"],e.prototype.bodyNode=function(){var t;return null!=(t=this.body)?t.unwrap():void 0},e.prototype.elseBodyNode=function(){var t;return null!=(t=this.elseBody)?t.unwrap():void 0},e.prototype.addElse=function(t){return this.isChain?this.elseBodyNode().addElse(t):(this.isChain=t instanceof e,this.elseBody=this.ensureBlock(t)),this},e.prototype.isStatement=function(t){var e;return(null!=t?t.level:void 0)===T||this.bodyNode().isStatement(t)||(null!=(e=this.elseBodyNode())?e.isStatement(t):void 0)},e.prototype.jumps=function(t){var e;return this.body.jumps(t)||(null!=(e=this.elseBody)?e.jumps(t):void 0)},e.prototype.compileNode=function(t){return this.isStatement(t)?this.compileStatement(t):this.compileExpression(t)},e.prototype.makeReturn=function(t){return t&&(this.elseBody||(this.elseBody=new s([new x("void 0")]))),this.body&&(this.body=new s([this.body.makeReturn(t)])),this.elseBody&&(this.elseBody=new s([this.elseBody.makeReturn(t)])),this},e.prototype.ensureBlock=function(t){return t instanceof s?t:new s([t])},e.prototype.compileStatement=function(t){var n,i,r,s,a;return i=Q(t,"chainChild"),(s=Q(t,"isExistentialEquals"))?new e(this.condition.invert(),this.elseBodyNode(),{type:"if"}).compile(t):(r=this.condition.compile(t,N),t.indent+=H,n=this.ensureBlock(this.body),a="if ("+r+") {\n"+n.compile(t)+"\n"+this.tab+"}",i||(a=this.tab+a),this.elseBody?a+" else "+(this.isChain?(t.indent=this.tab,t.chainChild=!0,this.elseBody.unwrap().compile(t,T)):"{\n"+this.elseBody.compile(t,T)+"\n"+this.tab+"}"):a)},e.prototype.compileExpression=function(t){var e,n,i,r;return r=this.condition.compile(t,k),n=this.bodyNode().compile(t,E),e=this.elseBodyNode()?this.elseBodyNode().compile(t,E):"void 0",i=""+r+" ? "+n+" : "+e,t.level>=k?"("+i+")":i},e.prototype.unfoldSoak=function(){return this.soak&&this},e}(r),c={wrap:function(t,n,i){var r,o,c,l,p;if(t.jumps())return t;if(c=new h([],s.wrap([t])),r=[],(l=t.contains(this.literalArgs))||t.contains(this.literalThis)){if(l&&t.classBody)throw SyntaxError("Class bodies shouldn't reference arguments");p=new x(l?"apply":"call"),r=[new x("this")],l&&r.push(new x("arguments")),c=Y.wrap(c,[new e(p)])}return c.noReturn=i,o=new a(c,r),n?s.wrap([o]):o},literalArgs:function(t){return t instanceof x&&"arguments"===t.value&&!t.asKey},literalThis:function(t){return t instanceof x&&"this"===t.value&&!t.asKey||t instanceof h&&t.bound||t instanceof a&&t.isSuper}},he=function(t,e,n){var i;if(i=e[n].unfoldSoak(t))return e[n]=i.body,i.body=Y.wrap(e),i},X={"extends":function(){return"function(child, parent) { for (var key in parent) { if ("+le("hasProp")+".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }"},bind:function(){return"function(fn, me){ return function(){ return fn.apply(me, arguments); }; }"},indexOf:function(){return"[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }"},hasProp:function(){return"{}.hasOwnProperty"},slice:function(){return"[].slice"}},T=1,N=2,E=3,k=4,L=5,w=6,H=" ",m="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",f=RegExp("^"+m+"$"),j=/^[+-]?\d+$/,D=RegExp("^(?:("+m+")\\.prototype(?:\\.("+m+")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|("+m+")$"),b=/^['"]/,le=function(t){var e;return e="__"+t,P.root.assign(e,X[t]()),e},ae=function(t,e){return t=t.replace(/\n/g,"$&"+e),t.replace(/\s+$/,"")}}).call(this)},require["./coffee-script"]=new function(){var t=this;(function(){var e,n,i,r,s,a,o,c,h,l,p,u,d=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},f={}.hasOwnProperty;if(s=require("fs"),h=require("path"),e=require("./lexer").Lexer,c=require("./parser").parser,l=require("vm"),r=[".coffee",".litcoffee"],o=function(t,e){var i,r;return i=s.readFileSync(e,"utf8"),r=65279===i.charCodeAt(0)?i.substring(1):i,t._compile(n(r,{filename:e}),e)},require.extensions)for(p=0,u=r.length;u>p;p++)i=r[p],require.extensions[i]=o;t.VERSION="1.5.0",t.helpers=require("./helpers"),t.compile=n=function(e,n){var i,r,s;null==n&&(n={}),s=t.helpers.merge;try{if(r=c.parse(a.tokenize(e,n)).compile(n),!n.header)return r}catch(o){throw n.filename&&(o.message="In "+n.filename+", "+o.message),o}return i="Generated by CoffeeScript "+this.VERSION,"// "+i+"\n"+r},t.tokens=function(t,e){return a.tokenize(t,e)},t.nodes=function(t,e){return"string"==typeof t?c.parse(a.tokenize(t,e)):c.parse(t)},t.run=function(t,e){var i,a;return null==e&&(e={}),i=require.main,i.filename=process.argv[1]=e.filename?s.realpathSync(e.filename):".",i.moduleCache&&(i.moduleCache={}),i.paths=require("module")._nodeModulePaths(h.dirname(s.realpathSync(e.filename))),a=h.extname(i.filename),0>d.call(r,a)||require.extensions?i._compile(n(t,e),i.filename):i._compile(t,i.filename)},t.eval=function(t,e){var i,r,s,a,o,c,p,u,d,m,b,y,v,g;if(null==e&&(e={}),t=t.trim()){if(r=l.Script){if(null!=e.sandbox){if(e.sandbox instanceof r.createContext().constructor)p=e.sandbox;else{p=r.createContext(),y=e.sandbox;for(a in y)f.call(y,a)&&(u=y[a],p[a]=u)}p.global=p.root=p.GLOBAL=p}else p=global;if(p.__filename=e.filename||"eval",p.__dirname=h.dirname(p.__filename),p===global&&!p.module&&!p.require){for(i=require("module"),p.module=b=new i(e.modulename||"eval"),p.require=g=function(t){return i._load(t,b,!0)},b.filename=p.__filename,v=Object.getOwnPropertyNames(require),d=0,m=v.length;m>d;d++)c=v[d],"paths"!==c&&(g[c]=require[c]);g.paths=b.paths=i._nodeModulePaths(process.cwd()),g.resolve=function(t){return i._resolveFilename(t,b)}}}o={};for(a in e)f.call(e,a)&&(u=e[a],o[a]=u);return o.bare=!0,s=n(t,o),p===global?l.runInThisContext(s):l.runInContext(s,p)}},a=new e,c.lexer={lex:function(){var t,e;return e=this.tokens[this.pos++],e?(t=e[0],this.yytext=e[1],this.yylloc=e[2],this.yylineno=this.yylloc.first_line):t="",t},setInput:function(t){return this.tokens=t,this.pos=0},upcomingInput:function(){return""}},c.yy=require("./nodes")}).call(this)},require["./browser"]=new function(){var exports=this;(function(){var CoffeeScript,runScripts;CoffeeScript=require("./coffee-script"),CoffeeScript.require=require,CoffeeScript.eval=function(code,options){var _ref;return null==options&&(options={}),null==(_ref=options.bare)&&(options.bare=!0),eval(CoffeeScript.compile(code,options))},CoffeeScript.run=function(t,e){return null==e&&(e={}),e.bare=!0,Function(CoffeeScript.compile(t,e))()},"undefined"!=typeof window&&null!==window&&(CoffeeScript.load=function(t,e){var n;return n=window.ActiveXObject?new window.ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest,n.open("GET",t,!0),"overrideMimeType"in n&&n.overrideMimeType("text/plain"),n.onreadystatechange=function(){var i;if(4===n.readyState){if(0!==(i=n.status)&&200!==i)throw Error("Could not load "+t);if(CoffeeScript.run(n.responseText),e)return e()}},n.send(null)},runScripts=function(){var t,e,n,i,r,s;return s=document.getElementsByTagName("script"),t=function(){var t,e,n;for(n=[],t=0,e=s.length;e>t;t++)r=s[t],"text/coffeescript"===r.type&&n.push(r);return n}(),n=0,i=t.length,(e=function(){var i;return i=t[n++],"text/coffeescript"===(null!=i?i.type:void 0)?i.src?CoffeeScript.load(i.src,e):(CoffeeScript.run(i.innerHTML),e()):void 0})(),null},window.addEventListener?addEventListener("DOMContentLoaded",runScripts,!1):attachEvent("onload",runScripts))}).call(this)},require["./coffee-script"]}();"function"==typeof define&&define.amd?define(function(){return CoffeeScript}):root.CoffeeScript=CoffeeScript})(this); \ No newline at end of file diff --git a/index.html b/index.html index b656e85e..c9d54e2a 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,6 @@ + @@ -24,6 +25,7 @@ Overview Installation Usage + Literate CoffeeScript Language Reference Literals: Functions, Objects and Arrays Lexical Scoping and Variable Safety @@ -93,9 +95,9 @@

- CoffeeScript is a little language that compiles into JavaScript. Underneath - all those awkward braces and semicolons, JavaScript has always had - a gorgeous object model at its heart. CoffeeScript is an attempt to expose + CoffeeScript is a little language that compiles into JavaScript. + Underneath that awkward Java-esque patina, JavaScript has always had + a gorgeous heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.

@@ -112,7 +114,7 @@

Latest Version: - 1.4.0 + 1.5.0

@@ -410,8 +412,9 @@ Expressions

--nodejs The node executable has some useful options you can set, - such as
--debug, --debug-brk and --max-stack-size. Use this - flag to forward options directly to Node.js. + such as
--debug, --debug-brk, --max-stack-size, + and --expose-gc. Use this flag to forward options directly to Node.js. + To pass multiple flags, use --nodejs multiple times.
@@ -448,6 +451,33 @@ Expressions +

+ + Literate CoffeeScript +

+ +

+ Besides being used as an ordinary programming language, CoffeeScript may + also be written in "literate" mode. If you name your file with a + .litcoffee extension, you can write it as a Markdown document — + a document that also happens to be executable CoffeeScript code. +

+ +

+ Just for kicks, a little bit of the compiler is currently implemented in this fashion: + See it + as a document, + raw, + and properly highlighted in a text editor. +

+ +

+ I'm fairly excited about this direction for the language, and am looking + forward to writing (and more importantly, reading) more programs in this style. + As 1.5.0 is the first version of CoffeeScript that supports it, let us know + if you have any ideas for improving the feature. +

+

Language Reference @@ -1098,7 +1128,7 @@ numbers[3..6]
var numbers, _ref;
 
 numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
@@ -1235,7 +1265,7 @@ globals = ((function() {
     return "And the error is ... " + error;
   }
 })());
-
load
load
load
load
load
###
-CoffeeScript Compiler v1.4.0
+CoffeeScript Compiler v1.5.0
 Released under the MIT License
 ###
 
 
 
/*
-CoffeeScript Compiler v1.4.0
+CoffeeScript Compiler v1.5.0
 Released under the MIT License
 */
 
 
-
load

+
load

@@ -2138,7 +2168,7 @@ task('build:parserEloquent JavaScript, as if it had been written in CoffeeScript instead. Covers language features - as well a the functional and object oriented programming styles. By + as well as the functional and object oriented programming styles. By E. Hoigaard.

  • @@ -2148,6 +2178,17 @@ task('build:parserCoffeeScript Ristretto + is a deep dive into CoffeeScript's semantics from simple functions up through + closures, higher-order functions, objects, classes, combinators, and decorators. + By Reg Braithwaite. +
  • +
  • + Testing with CoffeeScript + is a succinct and freely downloadable guide to building testable + applications with CoffeeScript and Jasmine. +
  • @@ -2192,11 +2233,6 @@ task('build:parserPow, a zero-configuration Rack server, with comprehensive annotated source. -
  • - frank06's riak-js, a Node.js client for - Riak, with support for HTTP - and Protocol Buffers. -
  • technoweenie's Coffee-Resque, a port of Resque for Node.js. @@ -2285,6 +2321,34 @@ task('build:parser + 1.5.0 + Feb 25, 2013 + +
      +
    • + First release of Literate CoffeeScript. +
    • +
    • + The CoffeeScript REPL is now based on the Node.js REPL, and should work + better and more familiarly. +
    • +
    • + Returning explicit values from constructors is now forbidden. If you want + to return an arbitrary value, use a function, not a constructor. +
    • +
    • + You can now loop over an array backwards, without having to manually + deal with the indexes. +
    • +
    • + Source locations are now preserved in the CoffeeScript AST, although + source maps are not yet being emitted. +
    • +
    +

    +

    1.4.0 diff --git a/lib/coffee-script/browser.js b/lib/coffee-script/browser.js index a0bc7079..9623cedd 100644 --- a/lib/coffee-script/browser.js +++ b/lib/coffee-script/browser.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var CoffeeScript, runScripts; diff --git a/lib/coffee-script/cake.js b/lib/coffee-script/cake.js index b8238471..afa53ca3 100644 --- a/lib/coffee-script/cake.js +++ b/lib/coffee-script/cake.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var CoffeeScript, cakefileDirectory, existsSync, fatalError, fs, helpers, missingTask, oparse, options, optparse, path, printTasks, switches, tasks; diff --git a/lib/coffee-script/coffee-script.js b/lib/coffee-script/coffee-script.js index 11a66e55..64684dfd 100644 --- a/lib/coffee-script/coffee-script.js +++ b/lib/coffee-script/coffee-script.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var Lexer, compile, ext, extensions, fs, lexer, loadFile, parser, path, vm, _i, _len, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, @@ -32,7 +32,7 @@ } } - exports.VERSION = '1.5.0-pre'; + exports.VERSION = '1.5.0'; exports.helpers = require('./helpers'); diff --git a/lib/coffee-script/command.js b/lib/coffee-script/command.js index bce9540c..4941505b 100644 --- a/lib/coffee-script/command.js +++ b/lib/coffee-script/command.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var BANNER, CoffeeScript, EventEmitter, SWITCHES, coffee_exts, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, exists, forkNode, fs, helpers, hidden, joinTimeout, lint, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, version, wait, watch, watchDir, watchers, writeJs, _ref, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; diff --git a/lib/coffee-script/grammar.js b/lib/coffee-script/grammar.js index 4a297ae3..9af5890f 100644 --- a/lib/coffee-script/grammar.js +++ b/lib/coffee-script/grammar.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var Parser, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap; diff --git a/lib/coffee-script/helpers.js b/lib/coffee-script/helpers.js index 4ffb2fef..045c5b42 100644 --- a/lib/coffee-script/helpers.js +++ b/lib/coffee-script/helpers.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var buildLocationData, extend, flatten, _ref; diff --git a/lib/coffee-script/index.js b/lib/coffee-script/index.js index 250d547d..8f382c57 100644 --- a/lib/coffee-script/index.js +++ b/lib/coffee-script/index.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var key, val, _ref; diff --git a/lib/coffee-script/lexer.js b/lib/coffee-script/lexer.js index ff88d565..6a7b5430 100644 --- a/lib/coffee-script/lexer.js +++ b/lib/coffee-script/lexer.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LITERATE, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, key, last, locationDataToString, starts, _ref, _ref1, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; diff --git a/lib/coffee-script/nodes.js b/lib/coffee-script/nodes.js index 1cefcdf2..34576355 100644 --- a/lib/coffee-script/nodes.js +++ b/lib/coffee-script/nodes.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, Comment, Existence, Extends, For, IDENTIFIER, IDENTIFIER_STR, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, addLocationDataFn, compact, del, ends, extend, flatten, last, locationDataToString, merge, multident, some, starts, unfoldSoak, utility, _ref, _ref1, __hasProp = {}.hasOwnProperty, diff --git a/lib/coffee-script/optparse.js b/lib/coffee-script/optparse.js index 82210d99..a3390cc5 100644 --- a/lib/coffee-script/optparse.js +++ b/lib/coffee-script/optparse.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments; diff --git a/lib/coffee-script/repl.js b/lib/coffee-script/repl.js index 06f7f321..977f4d42 100644 --- a/lib/coffee-script/repl.js +++ b/lib/coffee-script/repl.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var CoffeeScript, addMultilineHandler, merge, nodeREPL, replDefaults, vm; diff --git a/lib/coffee-script/rewriter.js b/lib/coffee-script/rewriter.js index 7243d1ed..07ebcc82 100644 --- a/lib/coffee-script/rewriter.js +++ b/lib/coffee-script/rewriter.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_BLOCK, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, left, rite, _i, _len, _ref, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, diff --git a/lib/coffee-script/scope.js b/lib/coffee-script/scope.js index d2924ef6..b9b55572 100644 --- a/lib/coffee-script/scope.js +++ b/lib/coffee-script/scope.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.5.0-pre +// Generated by CoffeeScript 1.5.0 (function() { var Scope, extend, last, _ref; diff --git a/package.json b/package.json index 6980d159..4e9da41d 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "Unfancy JavaScript", "keywords": ["javascript", "language", "coffeescript", "compiler"], "author": "Jeremy Ashkenas", - "version": "1.5.0-pre", + "version": "1.5.0", "licenses": [{ "type": "MIT", "url": "https://raw.github.com/jashkenas/coffee-script/master/LICENSE" diff --git a/src/coffee-script.coffee b/src/coffee-script.coffee index 86b6fe26..b9ee1df2 100644 --- a/src/coffee-script.coffee +++ b/src/coffee-script.coffee @@ -26,7 +26,7 @@ if require.extensions require.extensions[ext] = loadFile # The current CoffeeScript version number. -exports.VERSION = '1.5.0-pre' +exports.VERSION = '1.5.0' # Expose helpers for testing. exports.helpers = require './helpers' diff --git a/test/repl.coffee b/test/repl.coffee index c08dc6c0..25877cee 100644 --- a/test/repl.coffee +++ b/test/repl.coffee @@ -1,3 +1,5 @@ +return if global.testingBrowser + # REPL # ---- Stream = require 'stream'